@zeturn/watercolor-core 1.2.6 → 1.2.8

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.
package/dist/core.es.js CHANGED
@@ -297,6 +297,49 @@ async function x(e, t = {}) {
297
297
  };
298
298
  }
299
299
  }
300
+ async function S(e, t = {}) {
301
+ let n = t.isCurrent ?? (() => !0);
302
+ if (typeof e != "string" || !e.trim() || typeof fetch > "u") return {
303
+ ok: !1,
304
+ url: e,
305
+ errors: [{
306
+ path: "$",
307
+ message: "Theme config URL or fetch is unavailable."
308
+ }],
309
+ warnings: []
310
+ };
311
+ try {
312
+ let r = await fetch(e, {
313
+ cache: "no-store",
314
+ signal: t.signal
315
+ });
316
+ if (!n()) return null;
317
+ if (!r.ok) return {
318
+ ok: !1,
319
+ url: e,
320
+ errors: [{
321
+ path: "$",
322
+ message: `Theme request failed with ${r.status}.`
323
+ }],
324
+ warnings: []
325
+ };
326
+ let i = await r.json();
327
+ return n() ? {
328
+ ...b(i, { target: t.target }),
329
+ url: e
330
+ } : null;
331
+ } catch (t) {
332
+ return n() ? {
333
+ ok: !1,
334
+ url: e,
335
+ errors: [{
336
+ path: "$",
337
+ message: t instanceof Error ? t.message : "Theme request failed."
338
+ }],
339
+ warnings: []
340
+ } : null;
341
+ }
342
+ }
300
343
  function te(e) {
301
344
  let t = g(e);
302
345
  if (!t.ok) return t;
@@ -310,29 +353,29 @@ function te(e) {
310
353
  }
311
354
  //#endregion
312
355
  //#region src/theme/controller.ts
313
- var S = [
356
+ var C = [
314
357
  "light",
315
358
  "dark",
316
359
  "system"
317
- ], C = "wc-mode", w = "wc-scheme", T = (e) => typeof e == "string" && S.includes(e), E = (e, t = !1) => e === "system" ? t ? "dark" : "light" : e;
318
- function D(e, t, n) {
360
+ ], w = "wc-mode", T = "wc-scheme", E = (e) => typeof e == "string" && C.includes(e), D = (e, t = !1) => e === "system" ? t ? "dark" : "light" : e;
361
+ function O(e, t, n) {
319
362
  e.dataset.theme = t, e.dataset.resolvedTheme = n, e.classList.toggle("dark", n === "dark"), e.classList.toggle("light", n === "light"), e.style.colorScheme = n;
320
363
  }
321
- function O(e = {}) {
322
- let t = T(e.initialMode) ? e.initialMode : "system", n = e.initialResolvedMode === "dark", r = !1, i = null, a = null, o = null, s = null, c = typeof e.storageKey == "string" && e.storageKey.trim() ? e.storageKey : C, l = /* @__PURE__ */ new Set(), u = () => E(t, n), d = () => ({
364
+ function ne(e = {}) {
365
+ let t = E(e.initialMode) ? e.initialMode : "system", n = e.initialResolvedMode === "dark", r = !1, i = null, a = null, o = null, s = null, c = typeof e.storageKey == "string" && e.storageKey.trim() ? e.storageKey : w, l = /* @__PURE__ */ new Set(), u = () => D(t, n), d = () => ({
323
366
  mode: t,
324
367
  resolvedMode: u(),
325
368
  dark: u() === "dark"
326
369
  }), f = () => l.forEach((e) => e(d())), p = (e = !0) => {
327
370
  let n = d();
328
- if (i && D(i, n.mode, n.resolvedMode), e) try {
371
+ if (i && O(i, n.mode, n.resolvedMode), e) try {
329
372
  o?.setItem(c, t);
330
373
  } catch {}
331
374
  f();
332
375
  }, m = (e) => {
333
376
  n = e.matches, t === "system" && p(!1);
334
377
  }, h = (e) => {
335
- e.key !== c || !T(e.newValue) || e.newValue === t || (t = e.newValue, p(!1));
378
+ e.key !== c || !E(e.newValue) || e.newValue === t || (t = e.newValue, p(!1));
336
379
  };
337
380
  return {
338
381
  get mode() {
@@ -361,14 +404,14 @@ function O(e = {}) {
361
404
  }
362
405
  else o = e.storage;
363
406
  if (s = typeof globalThis.matchMedia == "function" ? globalThis.matchMedia("(prefers-color-scheme: dark)") : null, n = s?.matches ?? n, e.readStorage !== !1) try {
364
- let n = o?.getItem(c), r = e.storageKey === void 0 ? o?.getItem(w) : null;
365
- T(n) ? t = n : (r === "light" || r === "dark") && (t = r, o?.setItem(c, r));
407
+ let n = o?.getItem(c), r = e.storageKey === void 0 ? o?.getItem(T) : null;
408
+ E(n) ? t = n : (r === "light" || r === "dark") && (t = r, o?.setItem(c, r));
366
409
  } catch {}
367
410
  s?.addEventListener?.("change", m), s?.addEventListener || s?.addListener?.(m), window.addEventListener("storage", h), p(!1);
368
411
  }
369
412
  },
370
413
  setMode(e) {
371
- !T(e) || e === t || (t = e, p(r));
414
+ !E(e) || e === t || (t = e, p(r));
372
415
  },
373
416
  toggleMode() {
374
417
  t = u() === "dark" ? "light" : "dark", p(r);
@@ -383,13 +426,13 @@ function O(e = {}) {
383
426
  }
384
427
  //#endregion
385
428
  //#region src/theme/ssr.ts
386
- function ne(e = {}) {
387
- let t = T(e.defaultMode) ? e.defaultMode : "system", n = typeof e.storageKey == "string" && e.storageKey.trim() ? e.storageKey : C;
429
+ function re(e = {}) {
430
+ let t = E(e.defaultMode) ? e.defaultMode : "system", n = typeof e.storageKey == "string" && e.storageKey.trim() ? e.storageKey : w;
388
431
  return `(()=>{const d=document.documentElement;let m=${JSON.stringify(t)};try{const s=localStorage.getItem(${JSON.stringify(n).replace(/</g, "\\u003c")});if(s==='light'||s==='dark'||s==='system')m=s}catch{}const r=m==='system'&&matchMedia('(prefers-color-scheme: dark)').matches?'dark':m==='system'?'light':m;d.dataset.theme=m;d.dataset.resolvedTheme=r;d.classList.toggle('dark',r==='dark');d.classList.toggle('light',r==='light');d.style.colorScheme=r})()`;
389
432
  }
390
433
  //#endregion
391
434
  //#region src/composition/index.ts
392
- var re = [
435
+ var k = [
393
436
  "none",
394
437
  "2xs",
395
438
  "xs",
@@ -399,40 +442,40 @@ var re = [
399
442
  "xl",
400
443
  "2xl",
401
444
  "3xl"
402
- ], ie = [
445
+ ], A = [
403
446
  "stretch",
404
447
  "start",
405
448
  "center",
406
449
  "end"
407
- ], k = [
450
+ ], j = [
408
451
  "sm",
409
452
  "md",
410
453
  "lg",
411
454
  "xl",
412
455
  "full"
413
- ], A = [
456
+ ], M = [
414
457
  "none",
415
458
  "sm",
416
459
  "md",
417
460
  "lg"
418
- ], j = [
461
+ ], N = [
419
462
  "start",
420
463
  "center",
421
464
  "end",
422
465
  "between",
423
466
  "around"
424
- ], M = [
467
+ ], ie = [
425
468
  "equal",
426
469
  "sidebar",
427
470
  "sidebar-end",
428
471
  "wide-start",
429
472
  "wide-end"
430
- ], N = [
473
+ ], ae = [
431
474
  "none",
432
475
  "sm",
433
476
  "md",
434
477
  "lg"
435
- ], P = 1e3, ae = 10, oe = 1, F = [], I = /* @__PURE__ */ new WeakMap(), se = () => typeof document < "u", L = (e) => {
478
+ ], P = 1e3, oe = 10, se = 1, F = [], I = /* @__PURE__ */ new WeakMap(), ce = () => typeof document < "u", L = (e) => {
436
479
  let t = [
437
480
  "a[href]",
438
481
  "area[href]",
@@ -505,8 +548,8 @@ var re = [
505
548
  }, Y = (e) => {
506
549
  let t = U(q(e));
507
550
  !t || t.closeOnPointerDownOutside === !1 || H(t, e.target) || t.onPointerDownOutside?.(e);
508
- }, ce = (e) => {
509
- if (!se()) return {
551
+ }, le = (e) => {
552
+ if (!ce()) return {
510
553
  id: 0,
511
554
  zIndex: e.zIndex ?? P,
512
555
  update: () => {},
@@ -514,9 +557,9 @@ var re = [
514
557
  };
515
558
  let t = e.element.ownerDocument;
516
559
  G(t);
517
- let n = e.zIndex ?? P + F.length * ae, r = {
560
+ let n = e.zIndex ?? P + F.length * oe, r = {
518
561
  ...e,
519
- id: oe++,
562
+ id: se++,
520
563
  zIndex: n,
521
564
  ownerDocument: t,
522
565
  previousActiveElement: t.activeElement
@@ -538,7 +581,7 @@ var re = [
538
581
  side: t,
539
582
  alignment: n ?? "center"
540
583
  };
541
- }, Z = (e, t) => t === "center" ? e : `${e}-${t}`, le = (e) => {
584
+ }, Z = (e, t) => t === "center" ? e : `${e}-${t}`, ue = (e) => {
542
585
  let { side: t, alignment: n } = X(e);
543
586
  switch (t) {
544
587
  case "top": return Z("bottom", n);
@@ -557,7 +600,7 @@ var re = [
557
600
  }, $ = (e, t, n = {}) => {
558
601
  let r = n.placement ?? "bottom", i = n.offset ?? 8, a = n.boundaryPadding ?? 8, o = e.getBoundingClientRect(), s = t.getBoundingClientRect(), c = e.ownerDocument.defaultView?.innerWidth ?? 0, l = e.ownerDocument.defaultView?.innerHeight ?? 0, u = r;
559
602
  if (!Q(o, s, r, i, a, c, l)) {
560
- let e = le(r);
603
+ let e = ue(r);
561
604
  Q(o, s, e, i, a, c, l) && (u = e);
562
605
  }
563
606
  let d = 0, f = 0, { side: p, alignment: m } = X(u);
@@ -581,9 +624,9 @@ var re = [
581
624
  left: Math.min(Math.max(f, a), h),
582
625
  top: Math.min(Math.max(d, a), g)
583
626
  };
584
- }, ue = (e, t, n = {}) => {
627
+ }, de = (e, t, n = {}) => {
585
628
  let r = $(e, t, n);
586
629
  return t.style.position = "fixed", t.style.top = `${r.top}px`, t.style.left = `${r.left}px`, t.dataset.placement = r.placement, r;
587
630
  };
588
631
  //#endregion
589
- export { ie as COMPOSITION_ALIGNS, re as COMPOSITION_GAPS, j as INLINE_JUSTIFY, w as LEGACY_THEME_STORAGE_KEY, A as PAGE_GUTTERS, k as PAGE_SIZES, N as SPLIT_COLLAPSE, M as SPLIT_RATIOS, e as THEME_CONFIG_VERSION, S as THEME_MODES, C as THEME_STORAGE_KEY, ue as applyFloatingPosition, b as applyThemeConfig, D as applyThemeMode, $ as computeFloatingPosition, B as createFocusTrap, ce as createOverlayLayer, O as createThemeController, ne as createThemeInitScript, R as focusFirstElement, L as getFocusableElements, T as isThemeMode, x as loadThemeConfig, V as lockDocumentScroll, y as resetThemeConfig, E as resolveThemeMode, z as restoreFocus, te as serializeThemeConfig, g as validateThemeConfig };
632
+ export { A as COMPOSITION_ALIGNS, k as COMPOSITION_GAPS, N as INLINE_JUSTIFY, T as LEGACY_THEME_STORAGE_KEY, M as PAGE_GUTTERS, j as PAGE_SIZES, ae as SPLIT_COLLAPSE, ie as SPLIT_RATIOS, e as THEME_CONFIG_VERSION, C as THEME_MODES, w as THEME_STORAGE_KEY, de as applyFloatingPosition, b as applyThemeConfig, O as applyThemeMode, $ as computeFloatingPosition, B as createFocusTrap, le as createOverlayLayer, ne as createThemeController, re as createThemeInitScript, R as focusFirstElement, L as getFocusableElements, E as isThemeMode, S as loadProviderThemeConfig, x as loadThemeConfig, V as lockDocumentScroll, y as resetThemeConfig, D as resolveThemeMode, z as restoreFocus, te as serializeThemeConfig, g as validateThemeConfig };
@@ -64,10 +64,14 @@ export interface ThemeApplyOptions {
64
64
  export interface ThemeLoadOptions extends ThemeApplyOptions {
65
65
  signal?: AbortSignal;
66
66
  }
67
+ export interface ThemeProviderLoadOptions extends ThemeLoadOptions {
68
+ isCurrent?: () => boolean;
69
+ }
67
70
  export declare function validateThemeConfig(input: unknown): ThemeValidationResult;
68
71
  export declare function resetThemeConfig(target?: HTMLElement | null): void;
69
72
  export declare function applyThemeConfig(input: unknown, options?: ThemeApplyOptions): ThemeApplyResult;
70
73
  export declare function loadThemeConfig(url: string, options?: ThemeLoadOptions): Promise<ThemeLoadResult>;
74
+ export declare function loadProviderThemeConfig(url: string, options?: ThemeProviderLoadOptions): Promise<ThemeLoadResult | null>;
71
75
  export declare function serializeThemeConfig(input: unknown): ThemeApplyResult & {
72
76
  css?: string;
73
77
  };
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/theme/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/theme/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,EAAG,CAAU,CAAA;AAE9C,QAAA,MAAM,YAAY,2IAGR,CAAA;AACV,QAAA,MAAM,aAAa,oGAAqG,CAAA;AACxH,QAAA,MAAM,WAAW,uEAAwE,CAAA;AACzF,QAAA,MAAM,cAAc,0dASV,CAAA;AAEV,MAAM,MAAM,WAAW,GAAG,OAAO,YAAY,CAAC,MAAM,CAAC,CAAA;AACrD,MAAM,MAAM,YAAY,GAAG,OAAO,aAAa,CAAC,MAAM,CAAC,CAAA;AACvD,MAAM,MAAM,kBAAkB,GAAG,OAAO,cAAc,CAAC,MAAM,CAAC,CAAA;AAC9D,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAA;AAEzE,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5E,KAAK,CAAC,EAAE,eAAe,CAAA;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;IAC5D,MAAM,CAAC,EAAE,iBAAiB,CAAA;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,OAAO,oBAAoB,CAAA;IACpC,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,KAAK,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,eAAe,CAAA;QACvB,IAAI,CAAC,EAAE,eAAe,CAAA;KACvB,CAAA;CACF;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,qBAAqB,CAAC;IAAC,QAAQ,EAAE,oBAAoB,EAAE,CAAA;CAAE,GAC7E;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAAC,QAAQ,EAAE,oBAAoB,EAAE,CAAA;CAAE,CAAA;AAEnF,MAAM,MAAM,gBAAgB,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,oBAAoB,EAAE,CAAA;CAAE,GACxE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAAC,QAAQ,EAAE,oBAAoB,EAAE,CAAA;CAAE,CAAA;AAEnF,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhE,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;CAC5B;AAED,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,wBAAyB,SAAQ,gBAAgB;IAChE,SAAS,CAAC,EAAE,MAAM,OAAO,CAAA;CAC1B;AAgFD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,qBAAqB,CAkGzE;AAoCD,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAQlE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,iBAAsB,GAAG,gBAAgB,CAalG;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAY3G;AAED,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,wBAA6B,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAiBlI;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,GAAG;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAMxF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeturn/watercolor-core",
3
- "version": "1.2.6",
3
+ "version": "1.2.8",
4
4
  "type": "module",
5
5
  "license": "ISC",
6
6
  "main": "dist/core.es.js",
@@ -0,0 +1,152 @@
1
+ /** Component state contract.
2
+ * These tokens are intentionally semantic, not component-specific. They define
3
+ * how quiet Watercolor components reveal affordance across React and Vue.
4
+ */
5
+ :root {
6
+ --wc-state-default-bg: transparent;
7
+ --wc-state-default-fg: var(--wc-text-primary);
8
+ --wc-state-muted-fg: var(--wc-text-secondary);
9
+ --wc-state-hover-bg: var(--wc-action-hover);
10
+ --wc-state-active-bg: var(--wc-action-active);
11
+ --wc-state-selected-bg: var(--wc-action-selected);
12
+ --wc-state-selected-hover-bg: var(--wc-action-selected-hover);
13
+ --wc-state-disabled-bg: var(--wc-action-disabled);
14
+ --wc-state-disabled-fg: var(--wc-text-disabled);
15
+ --wc-state-error-bg: var(--wc-danger-subtle);
16
+ --wc-state-error-fg: var(--wc-danger);
17
+ --wc-state-error-ring: var(--wc-danger);
18
+ --wc-state-open-bg: var(--wc-surface-overlay);
19
+ --wc-state-open-shadow: var(--wc-shadow-lg);
20
+ --wc-state-empty-fg: var(--wc-text-tertiary);
21
+ --wc-state-focus-ring: var(--wc-focus-ring);
22
+ --wc-state-focus-width: 2px;
23
+ --wc-state-focus-offset: 2px;
24
+ --wc-state-min-touch-target: 44px;
25
+ --wc-state-control-sm: 32px;
26
+ --wc-state-control-md: 40px;
27
+ --wc-state-control-lg: 48px;
28
+ --wc-state-row-compact: 36px;
29
+ --wc-state-row-default: 44px;
30
+ --wc-state-row-comfortable: 52px;
31
+ --wc-state-field-radius: var(--wc-radius-xl);
32
+ --wc-state-item-radius: var(--wc-radius-lg);
33
+ --wc-state-overlay-radius: var(--wc-radius-xl);
34
+ }
35
+
36
+ .wc-state-layer {
37
+ background: var(--wc-state-default-bg);
38
+ color: var(--wc-state-default-fg);
39
+ transition:
40
+ background-color var(--wc-motion-fast) var(--wc-ease-standard),
41
+ color var(--wc-motion-fast) var(--wc-ease-standard),
42
+ opacity var(--wc-motion-fast) var(--wc-ease-standard);
43
+ }
44
+
45
+ .wc-state-layer:hover,
46
+ .wc-state-layer[data-state='hover'] {
47
+ background: var(--wc-state-hover-bg);
48
+ }
49
+
50
+ .wc-state-layer:active,
51
+ .wc-state-layer[data-state='active'] {
52
+ background: var(--wc-state-active-bg);
53
+ }
54
+
55
+ .wc-state-layer:focus-visible,
56
+ .wc-state-layer[data-state='focus'] {
57
+ outline: var(--wc-state-focus-width) solid var(--wc-state-focus-ring);
58
+ outline-offset: var(--wc-state-focus-offset);
59
+ }
60
+
61
+ .wc-state-layer[aria-selected='true'],
62
+ .wc-state-layer[data-selected='true'],
63
+ .wc-state-layer[data-state='selected'] {
64
+ background: var(--wc-state-selected-bg);
65
+ color: var(--wc-text-primary);
66
+ }
67
+
68
+ .wc-state-layer[aria-selected='true']:hover,
69
+ .wc-state-layer[data-selected='true']:hover {
70
+ background: var(--wc-state-selected-hover-bg);
71
+ }
72
+
73
+ .wc-state-layer:disabled,
74
+ .wc-state-layer[aria-disabled='true'],
75
+ .wc-state-layer[data-disabled='true'],
76
+ .wc-state-layer[data-state='disabled'] {
77
+ background: transparent;
78
+ color: var(--wc-state-disabled-fg);
79
+ cursor: not-allowed;
80
+ opacity: 1;
81
+ pointer-events: none;
82
+ }
83
+
84
+ .wc-state-layer[aria-busy='true'],
85
+ .wc-state-layer[data-loading='true'],
86
+ .wc-state-layer[data-state='loading'] {
87
+ cursor: wait;
88
+ }
89
+
90
+ .wc-state-layer[aria-invalid='true'],
91
+ .wc-state-layer[data-invalid='true'],
92
+ .wc-state-layer[data-state='error'] {
93
+ color: var(--wc-state-error-fg);
94
+ }
95
+
96
+ .wc-state-field {
97
+ min-height: var(--wc-state-control-md);
98
+ border: 0;
99
+ border-radius: var(--wc-state-field-radius);
100
+ background: var(--wc-surface-subtle);
101
+ color: var(--wc-text-primary);
102
+ }
103
+
104
+ .wc-state-field:hover:not(:disabled):not([aria-disabled='true']) {
105
+ background: var(--wc-state-hover-bg);
106
+ }
107
+
108
+ .wc-state-field:focus-visible,
109
+ .wc-state-field[data-state='focus'] {
110
+ outline: var(--wc-state-focus-width) solid var(--wc-state-focus-ring);
111
+ outline-offset: 0;
112
+ }
113
+
114
+ .wc-state-field[aria-invalid='true'],
115
+ .wc-state-field[data-invalid='true'],
116
+ .wc-state-field[data-state='error'] {
117
+ outline: var(--wc-state-focus-width) solid var(--wc-state-error-ring);
118
+ outline-offset: 0;
119
+ }
120
+
121
+ .wc-state-field:disabled,
122
+ .wc-state-field[aria-disabled='true'],
123
+ .wc-state-field[data-disabled='true'] {
124
+ background: var(--wc-state-disabled-bg);
125
+ color: var(--wc-state-disabled-fg);
126
+ cursor: not-allowed;
127
+ }
128
+
129
+ .wc-state-overlay {
130
+ border: 0;
131
+ border-radius: var(--wc-state-overlay-radius);
132
+ background: var(--wc-state-open-bg);
133
+ box-shadow: var(--wc-state-open-shadow);
134
+ }
135
+
136
+ .wc-state-empty {
137
+ color: var(--wc-state-empty-fg);
138
+ text-align: center;
139
+ }
140
+
141
+ @media (pointer: coarse) {
142
+ :root {
143
+ --wc-state-control-sm: var(--wc-state-min-touch-target);
144
+ --wc-state-row-compact: var(--wc-state-min-touch-target);
145
+ }
146
+ }
147
+
148
+ @media (prefers-reduced-motion: reduce) {
149
+ .wc-state-layer {
150
+ transition: none;
151
+ }
152
+ }
@@ -2,4 +2,5 @@
2
2
  @import './semantic.css';
3
3
  @import './modes.css';
4
4
  @import './layout.css';
5
+ @import './component-states.css';
5
6
  @import './base.css';