@luokuiai/lumen-theme-prism 1.0.0-alpha.2

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.
Files changed (3) hide show
  1. package/README.md +18 -0
  2. package/package.json +22 -0
  3. package/prism.css +426 -0
package/README.md ADDED
@@ -0,0 +1,18 @@
1
+ # Prism Theme
2
+
3
+ A colorful Material 3-inspired theme for Lumen UI. Prism combines primary,
4
+ secondary, and tertiary tonal roles with layered surface containers, filled and
5
+ outlined controls, state feedback, and emphasized motion.
6
+
7
+ ```ts
8
+ import '@luokuiai/lumen-ui/styles.css';
9
+ import '@luokuiai/lumen-theme-prism';
10
+ ```
11
+
12
+ Apply the theme and choose a color scheme on an application root:
13
+
14
+ ```html
15
+ <div data-lumen-theme="prism" data-color-scheme="light"></div>
16
+ ```
17
+
18
+ Both `light` and `dark` color schemes are included.
package/package.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "@luokuiai/lumen-theme-prism",
3
+ "version": "1.0.0-alpha.2",
4
+ "description": "Colorful expressive theme for Lumen UI",
5
+ "type": "module",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/luokuiai/lumen-design.git"
9
+ },
10
+ "publishConfig": {
11
+ "access": "public"
12
+ },
13
+ "sideEffects": true,
14
+ "files": ["prism.css", "README.md"],
15
+ "exports": {
16
+ ".": "./prism.css",
17
+ "./prism.css": "./prism.css"
18
+ },
19
+ "peerDependencies": {
20
+ "@luokuiai/lumen-ui": "^1.0.0-alpha.2"
21
+ }
22
+ }
package/prism.css ADDED
@@ -0,0 +1,426 @@
1
+ [data-lumen-theme='prism'] {
2
+ color-scheme: light;
3
+ font-variant-numeric: tabular-nums;
4
+ letter-spacing: 0;
5
+ --lumen-font-family: Inter, Geist, 'SF Pro Text', 'PingFang SC', 'Microsoft YaHei UI', sans-serif;
6
+ --lumen-font-weight-normal: 400;
7
+ --lumen-font-weight-medium: 500;
8
+ --lumen-font-weight-strong: 600;
9
+ --lumen-color-primary: #5a54d6;
10
+ --lumen-color-primary-hover: #4944bd;
11
+ --lumen-color-primary-active: #39359c;
12
+ --lumen-color-primary-soft: #e6e1ff;
13
+ --lumen-color-primary-soft-hover: #dcd5ff;
14
+ --lumen-color-on-primary: #ffffff;
15
+ --lumen-color-text-strong: #1d1b20;
16
+ --lumen-color-text: #2b292f;
17
+ --lumen-color-text-secondary: #49454f;
18
+ --lumen-color-text-muted: #67616d;
19
+ --lumen-color-text-placeholder: #938f99;
20
+ --lumen-color-surface: #fffbfe;
21
+ --lumen-color-surface-muted: #f3edf7;
22
+ --lumen-color-surface-subtle: #f9f5fa;
23
+ --lumen-color-surface-hover: #ece6f0;
24
+ --lumen-color-surface-glass: rgba(255, 251, 254, 0.92);
25
+ --lumen-color-overlay: rgba(29, 27, 32, 0.42);
26
+ --lumen-color-border: #cac4d0;
27
+ --lumen-color-border-strong: #79747e;
28
+ --lumen-color-border-hover: #625f68;
29
+ --lumen-color-focus-ring: rgba(90, 84, 214, 0.24);
30
+ --lumen-color-danger: #ba1a1a;
31
+ --lumen-color-danger-hover: #93000a;
32
+ --lumen-color-danger-soft: #ffdad6;
33
+ --lumen-color-danger-border: #ffb4ab;
34
+ --lumen-color-danger-text: #93000a;
35
+ --lumen-color-success: #146c2e;
36
+ --lumen-color-success-soft: #c1f2cb;
37
+ --lumen-color-success-border: #7bd793;
38
+ --lumen-color-success-text: #0b5722;
39
+ --lumen-color-warning: #8a5a00;
40
+ --lumen-color-warning-soft: #ffdea6;
41
+ --lumen-color-warning-border: #e9bd64;
42
+ --lumen-color-warning-text: #684200;
43
+ --lumen-color-info: #00639b;
44
+ --lumen-color-info-soft: #cce5ff;
45
+ --lumen-color-info-border: #8bc9f4;
46
+ --lumen-color-info-text: #004b76;
47
+ --lumen-color-tooltip: #313033;
48
+ --lumen-color-tooltip-text: #f4eff4;
49
+ --lumen-color-shadow: rgba(29, 27, 32, 0.14);
50
+ --lumen-radius-tag: 6px;
51
+ --lumen-radius-control: 8px;
52
+ --lumen-radius-icon: 8px;
53
+ --lumen-radius-card: 12px;
54
+ --lumen-radius-modal: 20px;
55
+ --lumen-radius-pill: 9999px;
56
+ --lumen-shadow-control: 0 1px 2px rgba(29, 27, 32, 0.18);
57
+ --lumen-shadow-card: 0 1px 3px rgba(29, 27, 32, 0.16), 0 1px 2px rgba(29, 27, 32, 0.1);
58
+ --lumen-shadow-dropdown: 0 8px 20px rgba(29, 27, 32, 0.18), 0 3px 6px rgba(29, 27, 32, 0.12);
59
+ --lumen-shadow-modal: 0 24px 56px rgba(29, 27, 32, 0.26), 0 8px 18px rgba(29, 27, 32, 0.16);
60
+ --lumen-control-height-sm: 32px;
61
+ --lumen-control-height-md: 40px;
62
+ --lumen-control-height-lg: 48px;
63
+ --lumen-motion-duration-fast: 150ms;
64
+ --lumen-motion-duration-normal: 250ms;
65
+ --lumen-motion-ease-standard: cubic-bezier(0.2, 0, 0, 1);
66
+ --lumen-motion-ease-enter: cubic-bezier(0.05, 0.7, 0.1, 1);
67
+ --lumen-motion-ease-exit: cubic-bezier(0.3, 0, 0.8, 0.15);
68
+ --prism-on-primary-container: #20105f;
69
+ --prism-secondary: #006a6a;
70
+ --prism-on-secondary: #ffffff;
71
+ --prism-secondary-container: #9cf1f0;
72
+ --prism-on-secondary-container: #002020;
73
+ --prism-tertiary: #a33f68;
74
+ --prism-on-tertiary: #ffffff;
75
+ --prism-tertiary-container: #ffd9e3;
76
+ --prism-on-tertiary-container: #3e0021;
77
+ --prism-surface-lowest: #ffffff;
78
+ --prism-surface-low: #f7f2fa;
79
+ --prism-surface-container: #f3edf7;
80
+ --prism-surface-high: #ece6f0;
81
+ --prism-surface-highest: #e6e0e9;
82
+ }
83
+
84
+ [data-lumen-theme='prism'][data-color-scheme='dark'] {
85
+ color-scheme: dark;
86
+ --lumen-color-primary: #c3bfff;
87
+ --lumen-color-primary-hover: #d8d4ff;
88
+ --lumen-color-primary-active: #a8a2ff;
89
+ --lumen-color-primary-soft: #36315f;
90
+ --lumen-color-primary-soft-hover: #454073;
91
+ --lumen-color-on-primary: #282365;
92
+ --lumen-color-text-strong: #e6e0e9;
93
+ --lumen-color-text: #ded8e1;
94
+ --lumen-color-text-secondary: #cac4d0;
95
+ --lumen-color-text-muted: #aea9b4;
96
+ --lumen-color-text-placeholder: #938f99;
97
+ --lumen-color-surface: #141218;
98
+ --lumen-color-surface-muted: #211f26;
99
+ --lumen-color-surface-subtle: #1d1b20;
100
+ --lumen-color-surface-hover: #2b2930;
101
+ --lumen-color-surface-glass: rgba(20, 18, 24, 0.92);
102
+ --lumen-color-overlay: rgba(0, 0, 0, 0.72);
103
+ --lumen-color-border: #49454f;
104
+ --lumen-color-border-strong: #938f99;
105
+ --lumen-color-border-hover: #aea9b4;
106
+ --lumen-color-focus-ring: rgba(195, 191, 255, 0.3);
107
+ --lumen-color-danger: #ffb4ab;
108
+ --lumen-color-danger-hover: #ffdad6;
109
+ --lumen-color-danger-soft: #5c1a1a;
110
+ --lumen-color-danger-border: #8c3430;
111
+ --lumen-color-danger-text: #ffb4ab;
112
+ --lumen-color-success: #7bda93;
113
+ --lumen-color-success-soft: #123d20;
114
+ --lumen-color-success-border: #2c6b40;
115
+ --lumen-color-success-text: #9ef2b1;
116
+ --lumen-color-warning: #f1bf68;
117
+ --lumen-color-warning-soft: #493000;
118
+ --lumen-color-warning-border: #795510;
119
+ --lumen-color-warning-text: #ffdea6;
120
+ --lumen-color-info: #93ccf5;
121
+ --lumen-color-info-soft: #153850;
122
+ --lumen-color-info-border: #2d6385;
123
+ --lumen-color-info-text: #cce5ff;
124
+ --lumen-color-tooltip: #e6e0e9;
125
+ --lumen-color-tooltip-text: #313033;
126
+ --lumen-color-shadow: rgba(0, 0, 0, 0.42);
127
+ --lumen-shadow-control: 0 1px 2px rgba(0, 0, 0, 0.38);
128
+ --lumen-shadow-card: 0 1px 3px rgba(0, 0, 0, 0.42), 0 1px 2px rgba(0, 0, 0, 0.32);
129
+ --lumen-shadow-dropdown: 0 8px 24px rgba(0, 0, 0, 0.52), 0 3px 7px rgba(0, 0, 0, 0.38);
130
+ --lumen-shadow-modal: 0 24px 60px rgba(0, 0, 0, 0.66), 0 8px 20px rgba(0, 0, 0, 0.48);
131
+ --prism-on-primary-container: #e4dfff;
132
+ --prism-secondary: #80d5d4;
133
+ --prism-on-secondary: #003737;
134
+ --prism-secondary-container: #004f50;
135
+ --prism-on-secondary-container: #9cf1f0;
136
+ --prism-tertiary: #ffb0c8;
137
+ --prism-on-tertiary: #650036;
138
+ --prism-tertiary-container: #84254f;
139
+ --prism-on-tertiary-container: #ffd9e3;
140
+ --prism-surface-lowest: #0f0d13;
141
+ --prism-surface-low: #1d1b20;
142
+ --prism-surface-container: #211f26;
143
+ --prism-surface-high: #2b2930;
144
+ --prism-surface-highest: #36343b;
145
+ }
146
+
147
+ [data-lumen-theme='prism'] [data-ui='button'] {
148
+ border-radius: var(--lumen-radius-control);
149
+ transition-duration: var(--lumen-motion-duration-fast);
150
+ transition-timing-function: var(--lumen-motion-ease-standard);
151
+ }
152
+
153
+ [data-lumen-theme='prism'] [data-ui='button'][data-variant='primary'] {
154
+ border-color: transparent;
155
+ background: var(--lumen-color-primary);
156
+ color: var(--lumen-color-on-primary);
157
+ box-shadow: var(--lumen-shadow-control);
158
+ }
159
+
160
+ [data-lumen-theme='prism'] [data-ui='button'][data-variant='primary']:not(:disabled):hover {
161
+ background: color-mix(in srgb, var(--lumen-color-primary) 92%, var(--lumen-color-on-primary));
162
+ box-shadow: var(--lumen-shadow-card);
163
+ }
164
+
165
+ [data-lumen-theme='prism'] [data-ui='button'][data-variant='secondary'] {
166
+ border-color: transparent;
167
+ background: var(--lumen-color-primary-soft);
168
+ color: var(--prism-on-primary-container);
169
+ box-shadow: none;
170
+ }
171
+
172
+ [data-lumen-theme='prism'] [data-ui='button'][data-variant='secondary']:not(:disabled):hover {
173
+ background: color-mix(in srgb, var(--lumen-color-primary-soft) 88%, var(--prism-on-primary-container));
174
+ }
175
+
176
+ [data-lumen-theme='prism'] [data-ui='button'][data-variant='accent'] {
177
+ border-color: transparent;
178
+ background: var(--prism-secondary-container);
179
+ color: var(--prism-on-secondary-container);
180
+ box-shadow: none;
181
+ }
182
+
183
+ [data-lumen-theme='prism'] [data-ui='button'][data-variant='accent']:not(:disabled):hover {
184
+ background: color-mix(in srgb, var(--prism-secondary-container) 88%, var(--prism-on-secondary-container));
185
+ }
186
+
187
+ [data-lumen-theme='prism'] [data-ui='button'][data-variant='outline'] {
188
+ border-color: var(--lumen-color-border-strong);
189
+ background: transparent;
190
+ color: var(--lumen-color-primary);
191
+ box-shadow: none;
192
+ }
193
+
194
+ [data-lumen-theme='prism'] [data-ui='button'][data-variant='outline']:not(:disabled):hover,
195
+ [data-lumen-theme='prism'] [data-ui='button'][data-variant='ghost']:not(:disabled):hover {
196
+ background: color-mix(in srgb, var(--lumen-color-primary) 8%, transparent);
197
+ }
198
+
199
+ [data-lumen-theme='prism'] [data-ui='button'][data-variant='destructive'] {
200
+ border-color: transparent;
201
+ background: var(--lumen-color-danger);
202
+ color: #ffffff;
203
+ box-shadow: var(--lumen-shadow-control);
204
+ }
205
+
206
+ [data-lumen-theme='prism'] [data-ui='button']:not(:disabled):active {
207
+ transform: scale(0.98);
208
+ }
209
+
210
+ [data-lumen-theme='prism'] [data-ui='card'] {
211
+ border-radius: var(--lumen-radius-card);
212
+ transition: box-shadow var(--lumen-motion-duration-normal) var(--lumen-motion-ease-standard),
213
+ background var(--lumen-motion-duration-normal) var(--lumen-motion-ease-standard);
214
+ }
215
+
216
+ [data-lumen-theme='prism'] [data-ui='card'][data-variant='elevated'] {
217
+ border-color: transparent;
218
+ background: var(--prism-surface-low);
219
+ box-shadow: var(--lumen-shadow-card);
220
+ }
221
+
222
+ [data-lumen-theme='prism'] [data-ui='card'][data-variant='filled'] {
223
+ border-color: transparent;
224
+ background: var(--prism-surface-highest);
225
+ box-shadow: none;
226
+ }
227
+
228
+ [data-lumen-theme='prism'] [data-ui='card'][data-variant='outlined'] {
229
+ border-color: var(--lumen-color-border);
230
+ background: var(--prism-surface-lowest);
231
+ box-shadow: none;
232
+ }
233
+
234
+ [data-lumen-theme='prism'] [data-ui='card-header'] {
235
+ border-bottom: 0;
236
+ background: transparent;
237
+ }
238
+
239
+ [data-lumen-theme='prism'] [data-ui='tabs-surface'] {
240
+ border: 0;
241
+ border-radius: var(--lumen-radius-card);
242
+ background: var(--prism-surface-low);
243
+ padding: 6px;
244
+ box-shadow: none;
245
+ }
246
+
247
+ [data-lumen-theme='prism'] [data-ui='tabs-surface'] [role='tab'] {
248
+ min-height: 40px;
249
+ border: 0;
250
+ border-radius: var(--lumen-radius-pill);
251
+ padding: 8px 16px;
252
+ transition: background var(--lumen-motion-duration-fast) var(--lumen-motion-ease-standard),
253
+ color var(--lumen-motion-duration-fast) var(--lumen-motion-ease-standard);
254
+ }
255
+
256
+ [data-lumen-theme='prism'] [data-ui='tabs-surface'] [role='tab']::after {
257
+ display: none;
258
+ }
259
+
260
+ [data-lumen-theme='prism'] [data-ui='tabs-surface'] [role='tab'][aria-selected='true'] {
261
+ background: var(--lumen-color-primary-soft);
262
+ color: var(--prism-on-primary-container);
263
+ box-shadow: none;
264
+ transform: none;
265
+ }
266
+
267
+ [data-lumen-theme='prism'] [data-ui='segmented-control'] {
268
+ border-color: transparent;
269
+ border-radius: var(--lumen-radius-pill);
270
+ background: var(--prism-surface-high);
271
+ padding: 4px;
272
+ box-shadow: inset 0 0 0 1px var(--lumen-color-border);
273
+ }
274
+
275
+ [data-lumen-theme='prism'] [data-ui='segmented-control'] > button {
276
+ border-radius: var(--lumen-radius-pill);
277
+ }
278
+
279
+ [data-lumen-theme='prism'] [data-ui='segmented-control'] > button[aria-pressed='true'] {
280
+ background: var(--lumen-color-primary-soft);
281
+ color: var(--prism-on-primary-container);
282
+ box-shadow: 0 1px 2px var(--lumen-color-shadow);
283
+ }
284
+
285
+ [data-lumen-theme='prism'] [data-ui='side-nav'] [data-side-nav-item] {
286
+ border-radius: var(--lumen-radius-pill);
287
+ transition: background var(--lumen-motion-duration-fast) var(--lumen-motion-ease-standard),
288
+ color var(--lumen-motion-duration-fast) var(--lumen-motion-ease-standard);
289
+ }
290
+
291
+ [data-lumen-theme='prism'] [data-ui='side-nav'] [data-side-nav-item][aria-current='page'] {
292
+ background: var(--lumen-color-primary-soft);
293
+ color: var(--prism-on-primary-container);
294
+ box-shadow: none;
295
+ }
296
+
297
+ [data-lumen-theme='prism'] [data-ui='side-nav'] [data-side-nav-item][aria-current='page']::before {
298
+ display: none;
299
+ }
300
+
301
+ [data-lumen-theme='prism'] [data-ui='chip'] {
302
+ border: 1px solid var(--lumen-color-border);
303
+ border-radius: var(--lumen-radius-tag);
304
+ box-shadow: none;
305
+ }
306
+
307
+ [data-lumen-theme='prism'] [data-ui='chip'][data-selected='true'] {
308
+ border-color: var(--lumen-color-primary);
309
+ background: var(--lumen-color-primary-soft);
310
+ color: var(--prism-on-primary-container);
311
+ box-shadow: none;
312
+ }
313
+
314
+ [data-lumen-theme='prism'] [data-ui='alert'] {
315
+ border: 0;
316
+ border-radius: var(--lumen-radius-control);
317
+ box-shadow: none;
318
+ }
319
+
320
+ [data-lumen-theme='prism'] [data-ui='data-table'] {
321
+ border-color: var(--lumen-color-border);
322
+ background: var(--prism-surface-lowest);
323
+ box-shadow: none;
324
+ }
325
+
326
+ [data-lumen-theme='prism'] [data-ui='data-table']:not(.rounded-none) {
327
+ border-radius: var(--lumen-radius-card);
328
+ }
329
+
330
+ [data-lumen-theme='prism'] [data-ui='data-table'] thead {
331
+ background: var(--prism-surface-container);
332
+ }
333
+
334
+ [data-lumen-theme='prism'] [data-ui='data-table'] tbody tr[data-selected='true'] {
335
+ background: var(--lumen-color-primary-soft);
336
+ box-shadow: inset 3px 0 0 var(--lumen-color-primary);
337
+ }
338
+
339
+ [data-lumen-theme='prism'] [data-ui='progress'][data-type='line'] > div:last-child {
340
+ border: 0;
341
+ border-radius: var(--lumen-radius-pill);
342
+ background: var(--prism-surface-highest);
343
+ }
344
+
345
+ [data-lumen-theme='prism'] [data-ui='progress'][data-type='line'] > div:last-child > div {
346
+ border-radius: var(--lumen-radius-pill);
347
+ }
348
+
349
+ [data-lumen-theme='prism'] [data-switch-track] > span:first-of-type {
350
+ border: 2px solid var(--lumen-color-border-strong);
351
+ background: var(--prism-surface-highest);
352
+ }
353
+
354
+ [data-lumen-theme='prism'] [data-switch-track][data-checked='true'] > span:first-of-type {
355
+ border-color: var(--lumen-color-primary);
356
+ background: var(--lumen-color-primary);
357
+ }
358
+
359
+ [data-lumen-theme='prism'] [data-ui='input'],
360
+ [data-lumen-theme='prism'] [data-ui='textarea'],
361
+ [data-lumen-theme='prism'] [data-ui='select-trigger'] {
362
+ border-width: 1px;
363
+ border-color: var(--lumen-color-border-strong);
364
+ border-radius: var(--lumen-radius-control);
365
+ background: var(--prism-surface-lowest);
366
+ box-shadow: none;
367
+ transition: border-color var(--lumen-motion-duration-fast) var(--lumen-motion-ease-standard),
368
+ box-shadow var(--lumen-motion-duration-fast) var(--lumen-motion-ease-standard),
369
+ background var(--lumen-motion-duration-fast) var(--lumen-motion-ease-standard);
370
+ }
371
+
372
+ [data-lumen-theme='prism'] [data-ui='input']:not([data-disabled='true']):hover,
373
+ [data-lumen-theme='prism'] [data-ui='textarea']:not(:disabled):hover,
374
+ [data-lumen-theme='prism'] [data-ui='select-trigger']:not(:disabled):hover {
375
+ border-color: var(--lumen-color-text-secondary);
376
+ }
377
+
378
+ [data-lumen-theme='prism'] [data-ui='input']:focus,
379
+ [data-lumen-theme='prism'] [data-ui='input']:focus-within,
380
+ [data-lumen-theme='prism'] [data-ui='textarea']:focus,
381
+ [data-lumen-theme='prism'] [data-ui='select-trigger'][aria-expanded='true'] {
382
+ border-color: var(--lumen-color-primary);
383
+ background: var(--prism-surface-lowest);
384
+ box-shadow: 0 0 0 1px var(--lumen-color-primary);
385
+ outline: none;
386
+ }
387
+
388
+ [data-lumen-theme='prism'] [data-ui='input'][data-invalid='true'],
389
+ [data-lumen-theme='prism'] [data-ui='textarea'][data-invalid='true'] {
390
+ border-color: var(--lumen-color-danger);
391
+ box-shadow: 0 0 0 1px var(--lumen-color-danger);
392
+ }
393
+
394
+ [data-lumen-theme='prism'] [data-ui='select-dropdown'],
395
+ [data-lumen-theme='prism'] [data-ui='popover'] {
396
+ border-color: transparent;
397
+ border-radius: var(--lumen-radius-card);
398
+ background: var(--prism-surface-high);
399
+ box-shadow: var(--lumen-shadow-dropdown);
400
+ }
401
+
402
+ [data-lumen-theme='prism'] [data-ui='select-option'][data-selected='true'] {
403
+ background: var(--lumen-color-primary-soft);
404
+ color: var(--prism-on-primary-container);
405
+ }
406
+
407
+ [data-lumen-theme='prism'] .lumen-modal-panel,
408
+ [data-lumen-theme='prism'] .lumen-drawer-panel {
409
+ background: var(--prism-surface-high);
410
+ box-shadow: var(--lumen-shadow-modal);
411
+ }
412
+
413
+ [data-lumen-theme='prism'] [data-lumen-motion] {
414
+ animation-timing-function: var(--lumen-motion-ease-enter);
415
+ }
416
+
417
+ @media (prefers-reduced-motion: reduce) {
418
+ [data-lumen-theme='prism'] *,
419
+ [data-lumen-theme='prism'] *::before,
420
+ [data-lumen-theme='prism'] *::after {
421
+ scroll-behavior: auto !important;
422
+ transition-duration: 0.01ms !important;
423
+ animation-duration: 0.01ms !important;
424
+ animation-iteration-count: 1 !important;
425
+ }
426
+ }