forked from Technigo/js-project-portfolio
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapi.ts
154 lines (135 loc) · 3.9 KB
/
api.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
import React, { StrictMode } from 'react';
import ReactDOM from 'react-dom';
import styled, { ThemeProvider, DefaultTheme } from 'styled-components';
declare module 'styled-components' {
export interface DefaultTheme {
color?: string;
bg?: string;
}
}
import { createRoot } from 'react-dom/client'
const Button = styled.button`
background: #BF4F74;
border-radius: 3px;
border: none;
color: white;
`
const TomatoButton = styled(Button)`
background: tomato;
`
const container1 = document.createElement('div');
document.body.appendChild(container1);
const root1 = createRoot(container1);
root1.render(
<React.StrictMode>
<>
<Button>I'm purple.</Button>
<br />
<TomatoButton>I'm red.</TomatoButton>
</>
</React.StrictMode>
);
// import styled from 'styled-components'
const padding = '3em'
const Section = styled.section<{ $background?: string; }>`
color: white;
/* Pass variables as inputs */
padding: ${padding};
background: ${(props) => props.$background || 'transparent'};
`;
const container2 = document.createElement('div');
document.body.appendChild(container2);
const root2 = createRoot(container2);
root2.render(
<React.Fragment>
<Section $background="royalblue">
<Component as="button" onClick={() => alert('It works!')}>
Click Me!
</Component>
<Component>
Hello Recruiter!
</Component>
<Comp draggableColor="red" draggable="true">
Drag me!
</Comp>
<Comp hidden>
Drag Me!
</Comp>
</Section>
</React.Fragment>
);
// import styled from 'styled-components'
const Input = styled.input.attrs<{ padding?: string | number; small?: boolean }>((props) => ({
small: props.small || false,
type: 'text',
size: props.small ? 5 : undefined,
}))<{ padding?: string | number; small?: boolean }>`
border-radius: 3px;
border: 1px solid #BF4F74;
display: block;
margin: 0 0 1em;
padding: ${(props) => (typeof props.padding === 'number' ? `${props.padding}em` : props.padding)};
::placeholder {
::placeholder {
color: #BF4F74;
}
`;
`;
// Ensure the target element exists in the HTML file
const rootElement = document.getElementById('root');
ReactDOM.render(
<React.Fragment>
<Input padding={1} small={true} placeholder="Small" />
<Input padding={1} small={true} placeholder="Another Small" />
</React.Fragment>,
rootElement
);
rootElement
// Removed extraneous closing brace
// import styled from "styled-components";
const Component = styled.div`
color: red;
`;
<Component
as="button"
onClick={() => alert('It works!')}
>
{/* Removed duplicate render call and fixed syntax */}
</Component>
{/* Removed duplicate render call and fixed syntax */}
</Component>
// Removed duplicate and incomplete render logic
// Removed duplicate render call
// Removed redundant line
// import styled, { ThemeProvider } from 'styled-components'
const Box1 = styled.div`
color: ${(props) => props.theme?.color || 'black'};
`;
const rootElement1 = document.getElementById('root');
if (rootElement1) {
const root1 = createRoot(rootElement1);
root1.render(
<ThemeProvider theme={{ color: 'mediumseagreen' }}>
<Box1>{"I'm mediumseagreen!"}</Box1>
</ThemeProvider>
);
// import styled, { ThemeProvider } from 'styled-components'
// Removed incomplete and unused statement
);
const Box2 = styled.div`
background: ${(props) => props.theme?.bg || 'transparent'};
`;
const rootElement = document.getElementById('root');
const rootElement2 = document.getElementById('root');
if (rootElement2) {
const root2 = createRoot(rootElement2);
root2.render(
<ThemeProvider theme={{ bg: 'white', color: 'mediumseagreen' }}>
<Box2>
{"I'm mediumseagreen with a white background!"}
</Box2>
</ThemeProvider>
);
</ThemeProvider>
);
}