@epilot/spark-ui 0.10.1 → 0.11.1

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 (176) hide show
  1. package/README.md +9 -1
  2. package/dist/components/accordion.cjs +1 -1
  3. package/dist/components/accordion.d.ts +1 -1
  4. package/dist/components/accordion.js +1 -1
  5. package/dist/components/attachment.d.cts +1 -1
  6. package/dist/components/attachment.d.ts +1 -1
  7. package/dist/components/avatar.d.cts +1 -1
  8. package/dist/components/avatar.d.ts +1 -1
  9. package/dist/components/badge.cjs +1 -1
  10. package/dist/components/badge.cjs.map +1 -1
  11. package/dist/components/badge.d.cts +1 -1
  12. package/dist/components/badge.d.ts +1 -1
  13. package/dist/components/badge.js +1 -1
  14. package/dist/components/badge.js.map +1 -1
  15. package/dist/components/bar-chart.cjs +6 -8
  16. package/dist/components/bar-chart.cjs.map +1 -1
  17. package/dist/components/bar-chart.js +7 -9
  18. package/dist/components/bar-chart.js.map +1 -1
  19. package/dist/components/battery-progress-row.cjs +6 -7
  20. package/dist/components/battery-progress-row.cjs.map +1 -1
  21. package/dist/components/battery-progress-row.js +6 -7
  22. package/dist/components/battery-progress-row.js.map +1 -1
  23. package/dist/components/box.cjs +42 -0
  24. package/dist/components/box.cjs.map +1 -0
  25. package/dist/components/box.d.cts +35 -0
  26. package/dist/components/box.d.ts +35 -0
  27. package/dist/components/box.js +41 -0
  28. package/dist/components/box.js.map +1 -0
  29. package/dist/components/bubble.d.cts +1 -1
  30. package/dist/components/bubble.d.ts +1 -1
  31. package/dist/components/button-group.d.cts +1 -1
  32. package/dist/components/button-group.d.ts +1 -1
  33. package/dist/components/button.cjs +1 -1
  34. package/dist/components/button.cjs.map +1 -1
  35. package/dist/components/button.d.cts +3 -3
  36. package/dist/components/button.d.ts +3 -3
  37. package/dist/components/button.js +1 -1
  38. package/dist/components/button.js.map +1 -1
  39. package/dist/components/callout.d.cts +1 -1
  40. package/dist/components/callout.d.ts +1 -1
  41. package/dist/components/card.cjs +10 -14
  42. package/dist/components/card.cjs.map +1 -1
  43. package/dist/components/card.d.cts +6 -3
  44. package/dist/components/card.d.ts +6 -3
  45. package/dist/components/card.js +10 -14
  46. package/dist/components/card.js.map +1 -1
  47. package/dist/components/checkbox.d.cts +1 -1
  48. package/dist/components/checkbox.d.ts +1 -1
  49. package/dist/components/empty-state.cjs +4 -7
  50. package/dist/components/empty-state.cjs.map +1 -1
  51. package/dist/components/empty-state.js +4 -7
  52. package/dist/components/empty-state.js.map +1 -1
  53. package/dist/components/field.cjs +43 -10
  54. package/dist/components/field.cjs.map +1 -1
  55. package/dist/components/field.d.cts +19 -2
  56. package/dist/components/field.d.ts +19 -2
  57. package/dist/components/field.js +43 -11
  58. package/dist/components/field.js.map +1 -1
  59. package/dist/components/icon.cjs +12 -9
  60. package/dist/components/icon.cjs.map +1 -1
  61. package/dist/components/icon.d.cts +6 -2
  62. package/dist/components/icon.d.ts +6 -2
  63. package/dist/components/icon.js +12 -9
  64. package/dist/components/icon.js.map +1 -1
  65. package/dist/components/info-block.d.cts +1 -1
  66. package/dist/components/info-block.d.ts +1 -1
  67. package/dist/components/input-otp.cjs +1 -1
  68. package/dist/components/input-otp.js +1 -1
  69. package/dist/components/input.cjs +1 -1
  70. package/dist/components/input.d.cts +1 -1
  71. package/dist/components/input.d.ts +1 -1
  72. package/dist/components/input.js +1 -1
  73. package/dist/components/layout.cjs +6 -2
  74. package/dist/components/layout.cjs.map +1 -1
  75. package/dist/components/layout.d.cts +9 -2
  76. package/dist/components/layout.d.ts +8 -2
  77. package/dist/components/layout.js +6 -2
  78. package/dist/components/layout.js.map +1 -1
  79. package/dist/components/line-chart.cjs +2 -2
  80. package/dist/components/line-chart.js +3 -3
  81. package/dist/components/list.cjs +46 -14
  82. package/dist/components/list.cjs.map +1 -1
  83. package/dist/components/list.d.cts +27 -3
  84. package/dist/components/list.d.ts +27 -3
  85. package/dist/components/list.js +46 -14
  86. package/dist/components/list.js.map +1 -1
  87. package/dist/components/marker.d.cts +1 -1
  88. package/dist/components/marker.d.ts +1 -1
  89. package/dist/components/metering-row.cjs +28 -11
  90. package/dist/components/metering-row.cjs.map +1 -1
  91. package/dist/components/metering-row.js +28 -11
  92. package/dist/components/metering-row.js.map +1 -1
  93. package/dist/components/page-header.d.cts +1 -1
  94. package/dist/components/page-header.d.ts +1 -1
  95. package/dist/components/pill.cjs +2 -2
  96. package/dist/components/pill.cjs.map +1 -1
  97. package/dist/components/pill.d.cts +1 -1
  98. package/dist/components/pill.d.ts +1 -1
  99. package/dist/components/pill.js +2 -2
  100. package/dist/components/pill.js.map +1 -1
  101. package/dist/components/popover.cjs +16 -13
  102. package/dist/components/popover.cjs.map +1 -1
  103. package/dist/components/popover.d.cts +2 -1
  104. package/dist/components/popover.d.ts +2 -1
  105. package/dist/components/popover.js +16 -13
  106. package/dist/components/popover.js.map +1 -1
  107. package/dist/components/power-history-chart.cjs +2 -2
  108. package/dist/components/power-history-chart.js +3 -3
  109. package/dist/components/power-history.cjs +1 -1
  110. package/dist/components/power-history.js +1 -1
  111. package/dist/components/power-network.cjs +1 -1
  112. package/dist/components/power-network.js +1 -1
  113. package/dist/components/radio-card-group.cjs +6 -2
  114. package/dist/components/radio-card-group.cjs.map +1 -1
  115. package/dist/components/radio-card-group.d.cts +2 -0
  116. package/dist/components/radio-card-group.d.ts +2 -0
  117. package/dist/components/radio-card-group.js +6 -2
  118. package/dist/components/radio-card-group.js.map +1 -1
  119. package/dist/components/radio.cjs +6 -2
  120. package/dist/components/radio.cjs.map +1 -1
  121. package/dist/components/radio.d.cts +7 -3
  122. package/dist/components/radio.d.ts +7 -3
  123. package/dist/components/radio.js +6 -2
  124. package/dist/components/radio.js.map +1 -1
  125. package/dist/components/segmented-control.d.cts +1 -1
  126. package/dist/components/segmented-control.d.ts +1 -1
  127. package/dist/components/select.cjs +22 -19
  128. package/dist/components/select.cjs.map +1 -1
  129. package/dist/components/select.d.cts +3 -2
  130. package/dist/components/select.d.ts +3 -2
  131. package/dist/components/select.js +22 -19
  132. package/dist/components/select.js.map +1 -1
  133. package/dist/components/solar-forecast-chart.cjs +1 -1
  134. package/dist/components/solar-forecast-chart.js +2 -2
  135. package/dist/components/switch.d.cts +1 -1
  136. package/dist/components/switch.d.ts +1 -1
  137. package/dist/components/tabs.cjs +4 -3
  138. package/dist/components/tabs.cjs.map +1 -1
  139. package/dist/components/tabs.d.cts +9 -0
  140. package/dist/components/tabs.d.ts +9 -0
  141. package/dist/components/tabs.js +4 -3
  142. package/dist/components/tabs.js.map +1 -1
  143. package/dist/components/textarea.cjs +1 -1
  144. package/dist/components/textarea.d.cts +1 -1
  145. package/dist/components/textarea.d.ts +1 -1
  146. package/dist/components/textarea.js +1 -1
  147. package/dist/components/theme.cjs +35 -9
  148. package/dist/components/theme.cjs.map +1 -1
  149. package/dist/components/theme.d.cts +12 -1
  150. package/dist/components/theme.d.ts +12 -1
  151. package/dist/components/theme.js +36 -10
  152. package/dist/components/theme.js.map +1 -1
  153. package/dist/icons/material-symbol.cjs +1 -0
  154. package/dist/icons/material-symbol.cjs.map +1 -1
  155. package/dist/icons/material-symbol.js +1 -0
  156. package/dist/icons/material-symbol.js.map +1 -1
  157. package/dist/lib/accent-theme.cjs +102 -14
  158. package/dist/lib/accent-theme.cjs.map +1 -1
  159. package/dist/lib/accent-theme.d.cts +29 -4
  160. package/dist/lib/accent-theme.d.ts +29 -4
  161. package/dist/lib/accent-theme.js +100 -15
  162. package/dist/lib/accent-theme.js.map +1 -1
  163. package/dist/lib/container-chrome.cjs +53 -0
  164. package/dist/lib/container-chrome.cjs.map +1 -0
  165. package/dist/lib/container-chrome.d.cts +15 -0
  166. package/dist/lib/container-chrome.d.ts +15 -0
  167. package/dist/lib/container-chrome.js +48 -0
  168. package/dist/lib/container-chrome.js.map +1 -0
  169. package/dist/lib/input-box-variants.d.cts +1 -1
  170. package/dist/lib/input-box-variants.d.ts +1 -1
  171. package/dist/lib/theme-types.d.cts +1 -1
  172. package/dist/lib/theme-types.d.ts +1 -1
  173. package/dist/styles/spark-default.css +34 -8
  174. package/dist/{theme-types-8wjgiNA_.d.ts → theme-types-1yB0d8mp.d.cts} +6 -6
  175. package/dist/{theme-types-8wjgiNA_.d.cts → theme-types-1yB0d8mp.d.ts} +6 -6
  176. package/package.json +1 -1
@@ -0,0 +1,15 @@
1
+ "use client";
2
+
3
+ import { n as SparkCardVariant } from "../theme-types-1yB0d8mp.js";
4
+
5
+ //#region src/lib/container-chrome.d.ts
6
+ type ContainerVariant = SparkCardVariant | 'ambient';
7
+ type ContainerRadius = 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'full';
8
+ declare const radiusClasses: Record<ContainerRadius, string>;
9
+ declare const containerChrome: Record<ContainerVariant, string>;
10
+ declare const containerPaddingX: Record<ContainerVariant, string>;
11
+ declare const containerPaddingAll: Record<ContainerVariant, string>;
12
+ declare function containerInteractiveClasses(resolved: ContainerVariant): (string | false)[];
13
+ //#endregion
14
+ export { ContainerRadius, ContainerVariant, containerChrome, containerInteractiveClasses, containerPaddingAll, containerPaddingX, radiusClasses };
15
+ //# sourceMappingURL=container-chrome.d.ts.map
@@ -0,0 +1,48 @@
1
+ "use client";
2
+ //#region src/lib/container-chrome.ts
3
+ const radiusClasses = {
4
+ none: "rounded-none",
5
+ sm: "rounded-sm",
6
+ md: "rounded-md",
7
+ lg: "rounded-lg",
8
+ xl: "rounded-xl",
9
+ "2xl": "rounded-2xl",
10
+ "3xl": "rounded-3xl",
11
+ full: "rounded-full"
12
+ };
13
+ const containerChrome = {
14
+ ambient: "border-(length:--spark-card-border-width,0px) border-(--spark-card-border,transparent) bg-(--spark-card-bg,var(--neutral-a3))",
15
+ soft: "bg-(--spark-card-c-soft,var(--neutral-a3))",
16
+ surface: "border border-(--spark-card-c-border,var(--neutral-a6)) bg-(--spark-card-c-surface,var(--neutral-2))",
17
+ outline: "border border-(--spark-card-c-border,var(--neutral-a6))",
18
+ ghost: "",
19
+ solid: "bg-(--spark-card-c-solid,var(--neutral-1)) [--spark-card-fg-muted:var(--spark-card-c-contrast,var(--neutral-contrast))] [--spark-card-fg:var(--spark-card-c-contrast,var(--neutral-contrast))] [--spark-card-icon:var(--spark-card-c-contrast,var(--neutral-contrast))]"
20
+ };
21
+ const containerPaddingX = {
22
+ ambient: "px-(--spark-card-px,1rem)",
23
+ soft: "px-4",
24
+ surface: "px-4",
25
+ outline: "px-4",
26
+ ghost: "",
27
+ solid: "px-4"
28
+ };
29
+ const containerPaddingAll = {
30
+ ambient: "p-(--spark-card-px,1rem)",
31
+ soft: "p-4",
32
+ surface: "p-4",
33
+ outline: "p-4",
34
+ ghost: "",
35
+ solid: "p-4"
36
+ };
37
+ function containerInteractiveClasses(resolved) {
38
+ return [
39
+ "cursor-pointer text-left no-underline transition-colors motion-reduce:transition-none",
40
+ "focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden",
41
+ "disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50",
42
+ (resolved === "ambient" || resolved === "soft") && "hover:bg-(--spark-card-c-soft-hover,var(--neutral-a4))"
43
+ ];
44
+ }
45
+ //#endregion
46
+ export { containerChrome, containerInteractiveClasses, containerPaddingAll, containerPaddingX, radiusClasses };
47
+
48
+ //# sourceMappingURL=container-chrome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-chrome.js","names":[],"sources":["../../src/lib/container-chrome.ts"],"sourcesContent":["import type { SparkCardVariant } from './theme-types'\n\n// `ambient` is the internal cva key for an unset `variant` prop — not part of the public\n// SparkCardVariant union, which only lists variants a consumer can actually pass.\nexport type ContainerVariant = SparkCardVariant | 'ambient'\n\nexport type ContainerRadius =\n | 'none'\n | 'sm'\n | 'md'\n | 'lg'\n | 'xl'\n | '2xl'\n | '3xl'\n | 'full'\n\nexport const radiusClasses: Record<ContainerRadius, string> = {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n '3xl': 'rounded-3xl',\n full: 'rounded-full',\n}\n\n// Fill/border/token-overrides only. Padding is a separate axis (containerPaddingX/All below) —\n// Card insets horizontally and owns its own vertical rhythm; Box has no such assumption.\nexport const containerChrome: Record<ContainerVariant, string> = {\n ambient:\n 'border-(length:--spark-card-border-width,0px) border-(--spark-card-border,transparent) bg-(--spark-card-bg,var(--neutral-a3))',\n soft: 'bg-(--spark-card-c-soft,var(--neutral-a3))',\n surface:\n 'border border-(--spark-card-c-border,var(--neutral-a6)) bg-(--spark-card-c-surface,var(--neutral-2))',\n outline: 'border border-(--spark-card-c-border,var(--neutral-a6))',\n ghost: '',\n solid:\n 'bg-(--spark-card-c-solid,var(--neutral-1)) [--spark-card-fg-muted:var(--spark-card-c-contrast,var(--neutral-contrast))] [--spark-card-fg:var(--spark-card-c-contrast,var(--neutral-contrast))] [--spark-card-icon:var(--spark-card-c-contrast,var(--neutral-contrast))]',\n}\n\nexport const containerPaddingX: Record<ContainerVariant, string> = {\n ambient: 'px-(--spark-card-px,1rem)',\n soft: 'px-4',\n surface: 'px-4',\n outline: 'px-4',\n ghost: '',\n solid: 'px-4',\n}\n\nexport const containerPaddingAll: Record<ContainerVariant, string> = {\n ambient: 'p-(--spark-card-px,1rem)',\n soft: 'p-4',\n surface: 'p-4',\n outline: 'p-4',\n ghost: '',\n solid: 'p-4',\n}\n\nexport function containerInteractiveClasses(resolved: ContainerVariant) {\n return [\n 'cursor-pointer text-left no-underline transition-colors motion-reduce:transition-none',\n 'focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden',\n 'disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50',\n // hover deepens the fill one step; bordered/bare variants only ring\n (resolved === 'ambient' || resolved === 'soft') &&\n 'hover:bg-(--spark-card-c-soft-hover,var(--neutral-a4))',\n ]\n}\n"],"mappings":";;AAgBA,MAAa,gBAAiD;CAC5D,MAAM;CACN,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,OAAO;CACP,MAAM;AACR;AAIA,MAAa,kBAAoD;CAC/D,SACE;CACF,MAAM;CACN,SACE;CACF,SAAS;CACT,OAAO;CACP,OACE;AACJ;AAEA,MAAa,oBAAsD;CACjE,SAAS;CACT,MAAM;CACN,SAAS;CACT,SAAS;CACT,OAAO;CACP,OAAO;AACT;AAEA,MAAa,sBAAwD;CACnE,SAAS;CACT,MAAM;CACN,SAAS;CACT,SAAS;CACT,OAAO;CACP,OAAO;AACT;AAEA,SAAgB,4BAA4B,UAA4B;CACtE,OAAO;EACL;EACA;EACA;GAEC,aAAa,aAAa,aAAa,WACtC;CACJ;AACF"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { i as SparkInputStyle, r as SparkInputColor } from "../theme-types-8wjgiNA_.cjs";
3
+ import { i as SparkInputStyle, r as SparkInputColor } from "../theme-types-1yB0d8mp.cjs";
4
4
 
5
5
  //#region src/lib/input-box-variants.d.ts
6
6
  declare const GHOST_UNDERLINE = "h-10 rounded-none border-0 border-b-2 px-0 py-2 text-base focus:border-b-input-active focus-visible:border-b-input-active user-valid:border-b-input-active user-invalid:border-b-input-invalid user-invalid:text-error user-invalid:focus:border-b-red-a8! user-invalid:focus-visible:border-b-red-a8! aria-invalid:border-b-input-invalid aria-invalid:text-error aria-invalid:focus:border-b-red-a8! aria-invalid:focus-visible:border-b-red-a8! group-data-[invalid=true]/field:border-b-input-invalid! group-data-[invalid=true]/field:text-error group-data-[invalid=true]/field:focus:border-b-red-a8! group-data-[invalid=true]/field:focus-visible:border-b-red-a8! disabled:border-b-input-disabled";
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- import { i as SparkInputStyle, r as SparkInputColor } from "../theme-types-8wjgiNA_.js";
3
+ import { i as SparkInputStyle, r as SparkInputColor } from "../theme-types-1yB0d8mp.js";
4
4
 
5
5
  //#region src/lib/input-box-variants.d.ts
6
6
  declare const GHOST_UNDERLINE = "h-10 rounded-none border-0 border-b-2 px-0 py-2 text-base focus:border-b-input-active focus-visible:border-b-input-active user-valid:border-b-input-active user-invalid:border-b-input-invalid user-invalid:text-error user-invalid:focus:border-b-red-a8! user-invalid:focus-visible:border-b-red-a8! aria-invalid:border-b-input-invalid aria-invalid:text-error aria-invalid:focus:border-b-red-a8! aria-invalid:focus-visible:border-b-red-a8! group-data-[invalid=true]/field:border-b-input-invalid! group-data-[invalid=true]/field:text-error group-data-[invalid=true]/field:focus:border-b-red-a8! group-data-[invalid=true]/field:focus-visible:border-b-red-a8! disabled:border-b-input-disabled";
@@ -1,4 +1,4 @@
1
1
  "use client";
2
2
 
3
- import { a as SparkLabelPosition, c as SparkScaling, i as SparkInputStyle, l as SparkSpacing, n as SparkCardVariant, o as SparkNeutral, r as SparkInputColor, s as SparkRadius, t as SparkCardColor, u as SparkStyle } from "../theme-types-8wjgiNA_.cjs";
3
+ import { a as SparkLabelPosition, c as SparkScaling, i as SparkInputStyle, l as SparkSpacing, n as SparkCardVariant, o as SparkNeutral, r as SparkInputColor, s as SparkRadius, t as SparkCardColor, u as SparkStyle } from "../theme-types-1yB0d8mp.cjs";
4
4
  export { SparkCardColor, SparkCardVariant, SparkInputColor, SparkInputStyle, SparkLabelPosition, SparkNeutral, SparkRadius, SparkScaling, SparkSpacing, SparkStyle };
@@ -1,4 +1,4 @@
1
1
  "use client";
2
2
 
3
- import { a as SparkLabelPosition, c as SparkScaling, i as SparkInputStyle, l as SparkSpacing, n as SparkCardVariant, o as SparkNeutral, r as SparkInputColor, s as SparkRadius, t as SparkCardColor, u as SparkStyle } from "../theme-types-8wjgiNA_.js";
3
+ import { a as SparkLabelPosition, c as SparkScaling, i as SparkInputStyle, l as SparkSpacing, n as SparkCardVariant, o as SparkNeutral, r as SparkInputColor, s as SparkRadius, t as SparkCardColor, u as SparkStyle } from "../theme-types-1yB0d8mp.js";
4
4
  export { SparkCardColor, SparkCardVariant, SparkInputColor, SparkInputStyle, SparkLabelPosition, SparkNeutral, SparkRadius, SparkScaling, SparkSpacing, SparkStyle };
@@ -220,6 +220,25 @@
220
220
  --spark-rounded-3xl: calc(16px * var(--spark-rounded-factor));
221
221
  }
222
222
 
223
+ /*
224
+ * Typography (gap 5, library-gaps audit). `<Theme fontHeading fontBody>` writes
225
+ * the two vars as inline styles (same mechanism as `accentColor`) — free-form
226
+ * font stacks, not an enum, so there's no `[data-*]` preset to key off. Falling
227
+ * back to `inherit` keeps a `<Theme>` that sets neither exactly as before: no
228
+ * rule here ever changes what a component would otherwise inherit from outside
229
+ * spark, so this is purely additive. `.spark-theme` is the only selector needed
230
+ * (not `:root` + a `:where(… .spark-theme)` twin) because `font-family` is an
231
+ * ordinary inherited property with no `@theme inline` alias in the chain, so it
232
+ * cannot freeze the way gap 3c's `--color-gray-*` did.
233
+ */
234
+ .spark-theme {
235
+ font-family: var(--spark-font-body, inherit);
236
+ }
237
+
238
+ .spark-theme :is(h1, h2, h3, h4, h5, h6) {
239
+ font-family: var(--spark-font-heading, inherit);
240
+ }
241
+
223
242
  /*
224
243
  * Roundness presets. Sets the factor on the scoped element; descendants
225
244
  * inherit, so it cascades and is overridable at any level (global → block →
@@ -514,10 +533,17 @@
514
533
  :where([data-style='solid'] .spark-theme) {
515
534
  --spark-style-bg: var(--spark-9);
516
535
  --spark-style-bg-hover: var(--spark-10);
517
- /* fg intentionally unset: a solid foreground means different things per role, so
518
- each component falls back to the right contrast — Button *text* → --spark-contrast
519
- (AA-enforced 4.5:1), Checkbox *check glyph* → --spark-on-solid (native ~3:1, white
520
- on any accent). Baking one here would give one of them the wrong contrast. */
536
+ /* fg intentionally has no *value* here — a solid foreground means different things
537
+ per role, so each component should fall back to its own right contrast: Button
538
+ *text* → --spark-contrast (AA-enforced 4.5:1), Checkbox *check glyph* →
539
+ --spark-on-solid (native ~3:1, white on any accent). Baking one here would give one
540
+ of them the wrong contrast. But custom properties inherit, so simply never
541
+ declaring it let a solid element pick up whatever value an ancestor's own
542
+ [data-style] (or a differently accented ancestor <Theme>) left behind, instead of
543
+ reaching any fallback at all. `initial` resets it to the guaranteed-invalid value
544
+ right here, which is what actually makes every consumer's own var(…, fallback)
545
+ fire — and stops it propagating any further into solid's own descendants either. */
546
+ --spark-style-fg: initial;
521
547
  --spark-style-border: transparent;
522
548
  }
523
549
 
@@ -775,14 +801,14 @@
775
801
  --spark-card-icon: var(--spark-a11);
776
802
  }
777
803
 
778
- /* HIDDEN for now: `SparkCardVariant` omits `solid` (content-contrast story TBD),
779
- so the typed API never emits data-card-variant='solid'. Kept dormant + ready. */
780
804
  [data-card-variant='solid'],
781
805
  :where([data-card-variant='solid'] .spark-theme),
782
806
  :where([data-card-variant='solid'] [data-card-color]) {
783
- /* dark fill → light contrast ink on all slots (accent contrast is AA-enforced) */
807
+ /* neutral: --neutral-1/--neutral-12 fill/ink — Radix's own bg+text pair, so
808
+ contrast holds in both appearances with no fixed override needed. accent:
809
+ --spark-9/--spark-contrast (AA-enforced) instead, via the accent block above. */
784
810
  --spark-card-px: 1rem;
785
- --spark-card-bg: var(--spark-card-c-solid, var(--neutral-9));
811
+ --spark-card-bg: var(--spark-card-c-solid, var(--neutral-1));
786
812
  --spark-card-border: transparent;
787
813
  --spark-card-border-width: 0px;
788
814
  --spark-card-fg: var(--spark-card-c-contrast, var(--neutral-contrast));
@@ -7,12 +7,12 @@ type SparkScaling = '90%' | '95%' | '100%' | '105%' | '110%';
7
7
  type SparkSpacing = 'dense' | 'default' | 'roomy';
8
8
  type SparkStyle = 'solid' | 'soft' | 'surface' | 'ghost' | 'outline';
9
9
  /**
10
- * Card chrome variants. `solid` is intentionally hidden for now: a solid fill
11
- * needs a settled content-contrast story (readable text + nested controls on the
12
- * fill) that isn't decided yet. The recipe stays in the CSS/cva — just not offered —
13
- * so re-enabling is only widening this type back to `SparkStyle`.
10
+ * Card chrome variants. `solid` pairs the neutral scale's own background/text
11
+ * extremes (`--neutral-1` fill, `--neutral-12` ink) — the same pairing Radix
12
+ * guarantees stays AA-compliant in both light and dark, so it needs no fixed
13
+ * (non-appearance-tracking) override the way accent's solid ink does.
14
14
  */
15
- type SparkCardVariant = Exclude<SparkStyle, 'solid'>;
15
+ type SparkCardVariant = SparkStyle;
16
16
  /**
17
17
  * Card container chrome palette. `neutral` (default) paints through the app
18
18
  * theme's neutral scale, so a card inherits the configured neutral colour;
@@ -26,4 +26,4 @@ type SparkInputStyle = 'soft' | 'surface' | 'outlined' | 'ghost';
26
26
  type SparkInputColor = 'brand' | 'gray';
27
27
  //#endregion
28
28
  export { SparkLabelPosition as a, SparkScaling as c, SparkInputStyle as i, SparkSpacing as l, SparkCardVariant as n, SparkNeutral as o, SparkInputColor as r, SparkRadius as s, SparkCardColor as t, SparkStyle as u };
29
- //# sourceMappingURL=theme-types-8wjgiNA_.d.ts.map
29
+ //# sourceMappingURL=theme-types-1yB0d8mp.d.cts.map
@@ -7,12 +7,12 @@ type SparkScaling = '90%' | '95%' | '100%' | '105%' | '110%';
7
7
  type SparkSpacing = 'dense' | 'default' | 'roomy';
8
8
  type SparkStyle = 'solid' | 'soft' | 'surface' | 'ghost' | 'outline';
9
9
  /**
10
- * Card chrome variants. `solid` is intentionally hidden for now: a solid fill
11
- * needs a settled content-contrast story (readable text + nested controls on the
12
- * fill) that isn't decided yet. The recipe stays in the CSS/cva — just not offered —
13
- * so re-enabling is only widening this type back to `SparkStyle`.
10
+ * Card chrome variants. `solid` pairs the neutral scale's own background/text
11
+ * extremes (`--neutral-1` fill, `--neutral-12` ink) — the same pairing Radix
12
+ * guarantees stays AA-compliant in both light and dark, so it needs no fixed
13
+ * (non-appearance-tracking) override the way accent's solid ink does.
14
14
  */
15
- type SparkCardVariant = Exclude<SparkStyle, 'solid'>;
15
+ type SparkCardVariant = SparkStyle;
16
16
  /**
17
17
  * Card container chrome palette. `neutral` (default) paints through the app
18
18
  * theme's neutral scale, so a card inherits the configured neutral colour;
@@ -26,4 +26,4 @@ type SparkInputStyle = 'soft' | 'surface' | 'outlined' | 'ghost';
26
26
  type SparkInputColor = 'brand' | 'gray';
27
27
  //#endregion
28
28
  export { SparkLabelPosition as a, SparkScaling as c, SparkInputStyle as i, SparkSpacing as l, SparkCardVariant as n, SparkNeutral as o, SparkInputColor as r, SparkRadius as s, SparkCardColor as t, SparkStyle as u };
29
- //# sourceMappingURL=theme-types-8wjgiNA_.d.cts.map
29
+ //# sourceMappingURL=theme-types-1yB0d8mp.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@epilot/spark-ui",
3
- "version": "0.10.1",
3
+ "version": "0.11.1",
4
4
  "description": "React UI component library from Spark SDK",
5
5
  "homepage": "https://spark-ui.epilot.io/docs/ui",
6
6
  "license": "Apache-2.0",