@ambientcss/components 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,273 @@
1
+ :root {
2
+ --ambx-grid: 4px;
3
+ --ambx-grid-half: calc(var(--ambx-grid) / 2);
4
+ --ambx-grid-quarter: calc(var(--ambx-grid) / 4);
5
+ --ambx-type-1-size: calc(var(--ambx-grid) * 8);
6
+ --ambx-type-1-line: calc(var(--ambx-grid) * 10);
7
+ --ambx-type-2-size: calc(var(--ambx-grid) * 6);
8
+ --ambx-type-2-line: calc(var(--ambx-grid) * 8);
9
+ --ambx-type-3-size: calc(var(--ambx-grid) * 3);
10
+ --ambx-type-3-line: calc(var(--ambx-grid) * 4);
11
+ --ambx-type-tracking: var(--ambx-grid-quarter);
12
+ --ambx-label-size: calc(var(--ambx-grid) * 2 + var(--ambx-grid-half));
13
+ --ambx-label-line: calc(var(--ambx-grid) * 3);
14
+ --ambx-control-label-gap: calc(var(--ambx-grid) * 2);
15
+ --ambx-knob-label-clearance: calc(var(--ambx-grid) * 2);
16
+ --ambx-slider-label-clearance: calc(var(--ambx-grid) * 2);
17
+ --ambx-fader-label-clearance: calc(var(--ambx-grid) * 4);
18
+ }
19
+
20
+ .amb-heading-1 {
21
+ font-size: var(--ambx-type-1-size);
22
+ line-height: var(--ambx-type-1-line);
23
+ letter-spacing: var(--ambx-type-tracking);
24
+ }
25
+
26
+ .amb-heading-2 {
27
+ font-size: var(--ambx-type-2-size);
28
+ line-height: var(--ambx-type-2-line);
29
+ letter-spacing: var(--ambx-type-tracking);
30
+ }
31
+
32
+ .amb-heading-3 {
33
+ font-size: var(--ambx-type-3-size);
34
+ line-height: var(--ambx-type-3-line);
35
+ letter-spacing: var(--ambx-type-tracking);
36
+ }
37
+
38
+ .amb-button {
39
+ cursor: pointer;
40
+ border: medium solid var(--amb-lume);
41
+ background-color: inherit;
42
+ padding: calc(var(--ambx-grid) * 2);
43
+ border-radius: calc(var(--ambx-grid) * 3);
44
+ text-transform: uppercase;
45
+ width: calc(var(--ambx-grid) * 16);
46
+ font-weight: 600;
47
+ color: var(--amb-lume);
48
+ }
49
+
50
+ .amb-button:focus {
51
+ outline-offset: var(--ambx-grid);
52
+ }
53
+
54
+ .amb-button:hover,
55
+ .amb-knob:hover {
56
+ border-color: var(--amb-highlight-color);
57
+ }
58
+
59
+ .amb-button:active {
60
+ --amb-elevation: 0;
61
+ }
62
+
63
+ .amb-knob {
64
+ border-radius: 50%;
65
+ height: calc(var(--ambx-grid) * 16);
66
+ width: calc(var(--ambx-grid) * 16);
67
+ border: medium solid var(--amb-lume);
68
+ }
69
+
70
+ .amb-knob-indicator {
71
+ position: absolute;
72
+ top: 6px;
73
+ left: 50%;
74
+ transform: translateX(-50%);
75
+ }
76
+
77
+ .amb-knob-grip {
78
+ display: flex;
79
+ flex-direction: column;
80
+ gap: 2px;
81
+ }
82
+
83
+ .amb-fader {
84
+ position: relative;
85
+ width: var(--ambx-grid);
86
+ height: calc(var(--ambx-grid) * 30);
87
+ border-radius: var(--ambx-grid);
88
+ background-color: var(--amb-lume);
89
+ }
90
+
91
+ .amb-fader-thumb {
92
+ position: absolute;
93
+ width: calc(var(--ambx-grid) * 6);
94
+ height: calc(var(--ambx-grid) * 9);
95
+ left: 50%;
96
+ top: 50%;
97
+ transform: translate(-50%, -50%);
98
+ border-radius: calc(var(--ambx-grid) * 3);
99
+ display: grid;
100
+ place-items: center;
101
+ }
102
+
103
+ .amb-fader-grip {
104
+ display: flex;
105
+ gap: 2px;
106
+ }
107
+
108
+ .amb-fader-dot {
109
+ width: 3px;
110
+ height: 3px;
111
+ border-radius: 50%;
112
+ background: radial-gradient(
113
+ circle at 30% 30%,
114
+ color-mix(in oklab, var(--amb-lume), white 30%) 0%,
115
+ var(--amb-lume) 55%,
116
+ color-mix(in oklab, var(--amb-lume), black 35%) 100%
117
+ );
118
+ }
119
+
120
+ .amb-slider {
121
+ position: relative;
122
+ height: var(--ambx-grid);
123
+ width: calc(var(--ambx-grid) * 30);
124
+ border-radius: var(--ambx-grid);
125
+ background-color: var(--amb-lume);
126
+ }
127
+
128
+ .amb-slider-thumb {
129
+ position: absolute;
130
+ width: calc(var(--ambx-grid) * 9);
131
+ height: calc(var(--ambx-grid) * 6);
132
+ top: 50%;
133
+ left: 50%;
134
+ transform: translate(-50%, -50%);
135
+ border-radius: calc(var(--ambx-grid) * 3);
136
+ display: grid;
137
+ place-items: center;
138
+ }
139
+
140
+ .amb-slider-grip {
141
+ display: flex;
142
+ flex-direction: column;
143
+ gap: 2px;
144
+ box-shadow:
145
+ inset 0 var(--ambx-grid-quarter) var(--ambx-grid-quarter) rgb(255 255 255 / 0.28),
146
+ inset 0 calc(var(--ambx-grid-quarter) * -1) var(--ambx-grid-quarter) rgb(0 0 0 / 0.22);
147
+ }
148
+
149
+ .amb-led {
150
+ width: calc(var(--ambx-grid) * 2);
151
+ height: calc(var(--ambx-grid) * 2);
152
+ border-radius: 50%;
153
+ background-color: var(--amb-led-color, #0f0);
154
+ box-shadow: 0 0 var(--ambx-grid-quarter) var(--amb-led-color, #0f0);
155
+ transition: background-color 150ms ease, box-shadow 150ms ease;
156
+ }
157
+
158
+ .amb-led-off {
159
+ background-color: hsl(
160
+ var(--amb-light-hue)
161
+ var(--amb-light-saturation)
162
+ calc(var(--amb-key-light-intensity) * 30%)
163
+ );
164
+ box-shadow: none;
165
+ }
166
+
167
+ .amb-switch {
168
+ position: relative;
169
+ width: calc(var(--ambx-grid) * 6);
170
+ height: calc(var(--ambx-grid) * 6);
171
+ border-radius: 50%;
172
+ cursor: pointer;
173
+ border: medium solid var(--amb-lume);
174
+ margin: 0;
175
+ }
176
+
177
+ .ambx-panel {
178
+ border-radius: calc(var(--ambx-grid) * 4);
179
+ padding: calc(var(--ambx-grid) * 4);
180
+ }
181
+
182
+ .ambx-button {
183
+ min-width: calc(var(--ambx-grid) * 18);
184
+ line-height: var(--ambx-type-3-line);
185
+ }
186
+
187
+ .ambx-switch {
188
+ --ambx-switch-size: calc(var(--ambx-grid) * 6);
189
+ width: var(--ambx-switch-size);
190
+ height: var(--ambx-switch-size);
191
+ display: inline-grid;
192
+ place-items: center;
193
+ padding: 0;
194
+ }
195
+
196
+ .ambx-switch-sm {
197
+ --ambx-switch-size: calc(var(--ambx-grid) * 5);
198
+ }
199
+
200
+ .ambx-switch-md {
201
+ --ambx-switch-size: calc(var(--ambx-grid) * 6);
202
+ }
203
+
204
+ .ambx-switch-lg {
205
+ --ambx-switch-size: calc(var(--ambx-grid) * 8);
206
+ }
207
+
208
+ .amb-switch-on {
209
+ box-shadow:
210
+ inset 0 0 0 var(--ambx-grid-quarter) rgb(255 255 255 / 0.25);
211
+ }
212
+
213
+ .ambx-stack {
214
+ display: inline-flex;
215
+ flex-direction: column;
216
+ align-items: center;
217
+ gap: var(--ambx-control-label-gap);
218
+ }
219
+
220
+ .ambx-label {
221
+ font-size: var(--ambx-label-size);
222
+ line-height: var(--ambx-label-line);
223
+ letter-spacing: var(--ambx-grid-quarter);
224
+ text-transform: uppercase;
225
+ color: var(--amb-label);
226
+ }
227
+
228
+ .ambx-slider + .ambx-label {
229
+ margin-top: var(--ambx-slider-label-clearance);
230
+ }
231
+
232
+ .ambx-fader + .ambx-label {
233
+ margin-top: var(--ambx-fader-label-clearance);
234
+ }
235
+
236
+ .ambx-knob + .ambx-label {
237
+ margin-top: var(--ambx-knob-label-clearance);
238
+ }
239
+
240
+ .ambx-knob {
241
+ position: relative;
242
+ display: grid;
243
+ place-items: center;
244
+ touch-action: none;
245
+ user-select: none;
246
+ }
247
+
248
+ .ambx-knob-rotation {
249
+ position: absolute;
250
+ inset: 0;
251
+ }
252
+
253
+ .ambx-fader {
254
+ width: calc(var(--ambx-grid) * 2);
255
+ border-radius: 999px;
256
+ touch-action: none;
257
+ user-select: none;
258
+ }
259
+
260
+ .ambx-fader-thumb {
261
+ transform: translate(-50%, -50%);
262
+ }
263
+
264
+ .ambx-slider {
265
+ height: calc(var(--ambx-grid) * 2);
266
+ border-radius: 999px;
267
+ touch-action: none;
268
+ user-select: none;
269
+ }
270
+
271
+ .ambx-slider-thumb {
272
+ transform: translate(-50%, -50%);
273
+ }
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@ambientcss/components",
3
+ "version": "1.0.0",
4
+ "description": "React skeuomorphic components powered by Ambient CSS",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/kikkupico/ambientcss.git",
9
+ "directory": "packages/ambient-components"
10
+ },
11
+ "homepage": "https://kikkupico.github.io/ambientcss/",
12
+ "bugs": {
13
+ "url": "https://github.com/kikkupico/ambientcss/issues"
14
+ },
15
+ "publishConfig": {
16
+ "access": "public",
17
+ "registry": "https://registry.npmjs.org/"
18
+ },
19
+ "type": "module",
20
+ "main": "./dist/index.cjs",
21
+ "module": "./dist/index.js",
22
+ "types": "./dist/index.d.ts",
23
+ "sideEffects": [
24
+ "*.css"
25
+ ],
26
+ "exports": {
27
+ ".": {
28
+ "development": "./src/index.ts",
29
+ "types": "./dist/index.d.ts",
30
+ "import": "./dist/index.js",
31
+ "require": "./dist/index.cjs"
32
+ },
33
+ "./styles.css": {
34
+ "development": "./src/styles.css",
35
+ "default": "./dist/styles.css"
36
+ }
37
+ },
38
+ "files": [
39
+ "dist"
40
+ ],
41
+ "peerDependencies": {
42
+ "react": "^18.3.0 || ^19.0.0",
43
+ "react-dom": "^18.3.0 || ^19.0.0"
44
+ },
45
+ "dependencies": {
46
+ "@ambientcss/css": "1.0.0"
47
+ },
48
+ "devDependencies": {
49
+ "@types/react": "^19.0.8",
50
+ "@types/react-dom": "^19.0.3",
51
+ "tsup": "^8.3.6",
52
+ "typescript": "^5.8.2"
53
+ },
54
+ "scripts": {
55
+ "build": "tsup && cp src/styles.css dist/styles.css",
56
+ "clean": "rm -rf dist",
57
+ "typecheck": "tsc --noEmit"
58
+ }
59
+ }