@epilot/spark-ui 0.18.2 → 0.20.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.
Files changed (280) hide show
  1. package/dist/components/attachment.d.cts +1 -1
  2. package/dist/components/attachment.d.ts +1 -1
  3. package/dist/components/avatar.cjs +1 -1
  4. package/dist/components/avatar.cjs.map +1 -1
  5. package/dist/components/avatar.js +1 -1
  6. package/dist/components/avatar.js.map +1 -1
  7. package/dist/components/badge.cjs +1 -1
  8. package/dist/components/badge.cjs.map +1 -1
  9. package/dist/components/badge.d.cts +2 -1
  10. package/dist/components/badge.d.ts +2 -1
  11. package/dist/components/badge.js +1 -1
  12. package/dist/components/badge.js.map +1 -1
  13. package/dist/components/{energy-bar-chart.cjs → bar-chart-with-total.cjs} +4 -4
  14. package/dist/components/bar-chart-with-total.cjs.map +1 -0
  15. package/dist/components/bar-chart-with-total.d.cts +19 -0
  16. package/dist/components/bar-chart-with-total.d.ts +19 -0
  17. package/dist/components/{energy-bar-chart.js → bar-chart-with-total.js} +4 -4
  18. package/dist/components/bar-chart-with-total.js.map +1 -0
  19. package/dist/components/bar-chart.cjs +1 -1
  20. package/dist/components/bar-chart.js +2 -2
  21. package/dist/components/bubble.d.cts +1 -1
  22. package/dist/components/bubble.d.ts +1 -1
  23. package/dist/components/button-group.cjs +2 -2
  24. package/dist/components/button-group.cjs.map +1 -1
  25. package/dist/components/button-group.d.cts +1 -1
  26. package/dist/components/button-group.d.ts +1 -1
  27. package/dist/components/button-group.js +2 -2
  28. package/dist/components/button-group.js.map +1 -1
  29. package/dist/components/button.cjs +6 -4
  30. package/dist/components/button.cjs.map +1 -1
  31. package/dist/components/button.d.cts +6 -5
  32. package/dist/components/button.d.ts +6 -5
  33. package/dist/components/button.js +6 -4
  34. package/dist/components/button.js.map +1 -1
  35. package/dist/components/calendar.cjs +3 -3
  36. package/dist/components/calendar.cjs.map +1 -1
  37. package/dist/components/calendar.js +3 -3
  38. package/dist/components/calendar.js.map +1 -1
  39. package/dist/components/callout.cjs +10 -10
  40. package/dist/components/callout.cjs.map +1 -1
  41. package/dist/components/callout.d.cts +1 -1
  42. package/dist/components/callout.d.ts +1 -1
  43. package/dist/components/callout.js +10 -10
  44. package/dist/components/callout.js.map +1 -1
  45. package/dist/components/checkbox.cjs +1 -1
  46. package/dist/components/checkbox.cjs.map +1 -1
  47. package/dist/components/checkbox.js +1 -1
  48. package/dist/components/checkbox.js.map +1 -1
  49. package/dist/components/circular-gauge.cjs +7 -7
  50. package/dist/components/circular-gauge.cjs.map +1 -1
  51. package/dist/components/circular-gauge.js +7 -7
  52. package/dist/components/circular-gauge.js.map +1 -1
  53. package/dist/components/day-of-week-picker.cjs +21 -41
  54. package/dist/components/day-of-week-picker.cjs.map +1 -1
  55. package/dist/components/day-of-week-picker.d.cts +19 -23
  56. package/dist/components/day-of-week-picker.d.ts +19 -23
  57. package/dist/components/day-of-week-picker.js +21 -41
  58. package/dist/components/day-of-week-picker.js.map +1 -1
  59. package/dist/components/{device-card.cjs → entity-card.cjs} +31 -31
  60. package/dist/components/entity-card.cjs.map +1 -0
  61. package/dist/components/{device-card.d.cts → entity-card.d.cts} +15 -15
  62. package/dist/components/{device-card.d.ts → entity-card.d.ts} +15 -15
  63. package/dist/components/{device-card.js → entity-card.js} +20 -20
  64. package/dist/components/entity-card.js.map +1 -0
  65. package/dist/components/field.cjs +1 -1
  66. package/dist/components/field.cjs.map +1 -1
  67. package/dist/components/field.js +1 -1
  68. package/dist/components/field.js.map +1 -1
  69. package/dist/components/{feed-in-hero.cjs → hero-metric.cjs} +10 -15
  70. package/dist/components/hero-metric.cjs.map +1 -0
  71. package/dist/components/hero-metric.d.cts +27 -0
  72. package/dist/components/hero-metric.d.ts +27 -0
  73. package/dist/components/{feed-in-hero.js → hero-metric.js} +7 -12
  74. package/dist/components/hero-metric.js.map +1 -0
  75. package/dist/components/info-block.d.cts +1 -1
  76. package/dist/components/info-block.d.ts +1 -1
  77. package/dist/components/input-date.cjs +6 -6
  78. package/dist/components/input-date.cjs.map +1 -1
  79. package/dist/components/input-date.d.cts +2 -1
  80. package/dist/components/input-date.d.ts +2 -1
  81. package/dist/components/input-date.js +6 -6
  82. package/dist/components/input-date.js.map +1 -1
  83. package/dist/components/input-group.d.cts +1 -1
  84. package/dist/components/input-group.d.ts +1 -1
  85. package/dist/components/input-otp.cjs +1 -1
  86. package/dist/components/input-otp.cjs.map +1 -1
  87. package/dist/components/input-otp.js +1 -1
  88. package/dist/components/input-otp.js.map +1 -1
  89. package/dist/components/input.cjs +1 -1
  90. package/dist/components/input.cjs.map +1 -1
  91. package/dist/components/input.js +1 -1
  92. package/dist/components/input.js.map +1 -1
  93. package/dist/components/label.cjs +1 -1
  94. package/dist/components/label.cjs.map +1 -1
  95. package/dist/components/label.js +1 -1
  96. package/dist/components/label.js.map +1 -1
  97. package/dist/components/line-chart.cjs +2 -2
  98. package/dist/components/line-chart.js +3 -3
  99. package/dist/components/number-flow.d.cts +12 -2
  100. package/dist/components/number-flow.d.ts +12 -2
  101. package/dist/components/page-header.d.cts +1 -1
  102. package/dist/components/page-header.d.ts +1 -1
  103. package/dist/components/period-tabs.cjs +2 -22
  104. package/dist/components/period-tabs.cjs.map +1 -1
  105. package/dist/components/period-tabs.d.cts +5 -22
  106. package/dist/components/period-tabs.d.ts +5 -22
  107. package/dist/components/period-tabs.js +2 -22
  108. package/dist/components/period-tabs.js.map +1 -1
  109. package/dist/components/pill.cjs +2 -2
  110. package/dist/components/pill.cjs.map +1 -1
  111. package/dist/components/pill.js +2 -2
  112. package/dist/components/pill.js.map +1 -1
  113. package/dist/components/progress.cjs +1 -1
  114. package/dist/components/progress.cjs.map +1 -1
  115. package/dist/components/progress.js +1 -1
  116. package/dist/components/progress.js.map +1 -1
  117. package/dist/components/radio.cjs +1 -1
  118. package/dist/components/radio.cjs.map +1 -1
  119. package/dist/components/radio.js +1 -1
  120. package/dist/components/radio.js.map +1 -1
  121. package/dist/components/sankey-chart.cjs +1 -11
  122. package/dist/components/sankey-chart.cjs.map +1 -1
  123. package/dist/components/sankey-chart.d.cts +2 -3
  124. package/dist/components/sankey-chart.d.ts +2 -3
  125. package/dist/components/sankey-chart.js +2 -11
  126. package/dist/components/sankey-chart.js.map +1 -1
  127. package/dist/components/segmented-control.cjs +2 -2
  128. package/dist/components/segmented-control.cjs.map +1 -1
  129. package/dist/components/segmented-control.js +2 -2
  130. package/dist/components/segmented-control.js.map +1 -1
  131. package/dist/components/select.cjs +32 -2
  132. package/dist/components/select.cjs.map +1 -1
  133. package/dist/components/select.d.cts +11 -1
  134. package/dist/components/select.d.ts +11 -1
  135. package/dist/components/select.js +32 -4
  136. package/dist/components/select.js.map +1 -1
  137. package/dist/components/stepper.cjs +1 -1
  138. package/dist/components/stepper.cjs.map +1 -1
  139. package/dist/components/stepper.d.cts +4 -4
  140. package/dist/components/stepper.d.ts +4 -4
  141. package/dist/components/stepper.js +1 -1
  142. package/dist/components/stepper.js.map +1 -1
  143. package/dist/components/table.cjs +147 -0
  144. package/dist/components/table.cjs.map +1 -0
  145. package/dist/components/table.d.cts +75 -0
  146. package/dist/components/table.d.ts +75 -0
  147. package/dist/components/table.js +138 -0
  148. package/dist/components/table.js.map +1 -0
  149. package/dist/components/textarea.cjs +1 -1
  150. package/dist/components/textarea.cjs.map +1 -1
  151. package/dist/components/textarea.js +1 -1
  152. package/dist/components/textarea.js.map +1 -1
  153. package/dist/components/tooltip.cjs +1 -1
  154. package/dist/components/tooltip.cjs.map +1 -1
  155. package/dist/components/tooltip.js +1 -1
  156. package/dist/components/tooltip.js.map +1 -1
  157. package/dist/components/typography.cjs +1 -1
  158. package/dist/components/typography.cjs.map +1 -1
  159. package/dist/components/typography.d.cts +4 -1
  160. package/dist/components/typography.d.ts +4 -1
  161. package/dist/components/typography.js +1 -1
  162. package/dist/components/typography.js.map +1 -1
  163. package/dist/components/wizard-layout.cjs +57 -0
  164. package/dist/components/wizard-layout.cjs.map +1 -0
  165. package/dist/components/wizard-layout.d.cts +34 -0
  166. package/dist/components/wizard-layout.d.ts +34 -0
  167. package/dist/components/wizard-layout.js +50 -0
  168. package/dist/components/wizard-layout.js.map +1 -0
  169. package/dist/lib/accent-colors.cjs +4 -1
  170. package/dist/lib/accent-colors.cjs.map +1 -1
  171. package/dist/lib/accent-colors.d.cts +1 -1
  172. package/dist/lib/accent-colors.d.ts +1 -1
  173. package/dist/lib/accent-colors.js +4 -1
  174. package/dist/lib/accent-colors.js.map +1 -1
  175. package/dist/lib/accent-theme.cjs +144 -9
  176. package/dist/lib/accent-theme.cjs.map +1 -1
  177. package/dist/lib/accent-theme.d.cts +37 -1
  178. package/dist/lib/accent-theme.d.ts +37 -1
  179. package/dist/lib/accent-theme.js +140 -10
  180. package/dist/lib/accent-theme.js.map +1 -1
  181. package/dist/styles/index.css +10 -1
  182. package/dist/styles/spark-default.css +75 -321
  183. package/dist/styles/theme.css +54 -8
  184. package/dist/utils/format.cjs +0 -13
  185. package/dist/utils/format.cjs.map +1 -1
  186. package/dist/utils/format.d.cts +1 -7
  187. package/dist/utils/format.d.ts +1 -7
  188. package/dist/utils/format.js +1 -12
  189. package/dist/utils/format.js.map +1 -1
  190. package/package.json +1 -1
  191. package/dist/components/battery-progress-row.cjs +0 -135
  192. package/dist/components/battery-progress-row.cjs.map +0 -1
  193. package/dist/components/battery-progress-row.d.cts +0 -69
  194. package/dist/components/battery-progress-row.d.ts +0 -69
  195. package/dist/components/battery-progress-row.js +0 -125
  196. package/dist/components/battery-progress-row.js.map +0 -1
  197. package/dist/components/device-card.cjs.map +0 -1
  198. package/dist/components/device-card.js.map +0 -1
  199. package/dist/components/energy-bar-chart.cjs.map +0 -1
  200. package/dist/components/energy-bar-chart.d.cts +0 -43
  201. package/dist/components/energy-bar-chart.d.ts +0 -43
  202. package/dist/components/energy-bar-chart.js.map +0 -1
  203. package/dist/components/energy-breakdown.cjs +0 -80
  204. package/dist/components/energy-breakdown.cjs.map +0 -1
  205. package/dist/components/energy-breakdown.d.cts +0 -24
  206. package/dist/components/energy-breakdown.d.ts +0 -24
  207. package/dist/components/energy-breakdown.js +0 -79
  208. package/dist/components/energy-breakdown.js.map +0 -1
  209. package/dist/components/energy-history-chart.cjs +0 -63
  210. package/dist/components/energy-history-chart.cjs.map +0 -1
  211. package/dist/components/energy-history-chart.d.cts +0 -64
  212. package/dist/components/energy-history-chart.d.ts +0 -64
  213. package/dist/components/energy-history-chart.js +0 -62
  214. package/dist/components/energy-history-chart.js.map +0 -1
  215. package/dist/components/feed-in-hero.cjs.map +0 -1
  216. package/dist/components/feed-in-hero.d.cts +0 -32
  217. package/dist/components/feed-in-hero.d.ts +0 -32
  218. package/dist/components/feed-in-hero.js.map +0 -1
  219. package/dist/components/metering-row.cjs +0 -59
  220. package/dist/components/metering-row.cjs.map +0 -1
  221. package/dist/components/metering-row.d.cts +0 -31
  222. package/dist/components/metering-row.d.ts +0 -31
  223. package/dist/components/metering-row.js +0 -55
  224. package/dist/components/metering-row.js.map +0 -1
  225. package/dist/components/money-saved-block.cjs +0 -83
  226. package/dist/components/money-saved-block.cjs.map +0 -1
  227. package/dist/components/money-saved-block.d.cts +0 -55
  228. package/dist/components/money-saved-block.d.ts +0 -55
  229. package/dist/components/money-saved-block.js +0 -76
  230. package/dist/components/money-saved-block.js.map +0 -1
  231. package/dist/components/on-off-button.cjs +0 -32
  232. package/dist/components/on-off-button.cjs.map +0 -1
  233. package/dist/components/on-off-button.d.cts +0 -18
  234. package/dist/components/on-off-button.d.ts +0 -18
  235. package/dist/components/on-off-button.js +0 -31
  236. package/dist/components/on-off-button.js.map +0 -1
  237. package/dist/components/onboarding-layout.cjs +0 -67
  238. package/dist/components/onboarding-layout.cjs.map +0 -1
  239. package/dist/components/onboarding-layout.d.cts +0 -44
  240. package/dist/components/onboarding-layout.d.ts +0 -44
  241. package/dist/components/onboarding-layout.js +0 -60
  242. package/dist/components/onboarding-layout.js.map +0 -1
  243. package/dist/components/power-history-chart.cjs +0 -498
  244. package/dist/components/power-history-chart.cjs.map +0 -1
  245. package/dist/components/power-history-chart.d.cts +0 -71
  246. package/dist/components/power-history-chart.d.ts +0 -71
  247. package/dist/components/power-history-chart.js +0 -496
  248. package/dist/components/power-history-chart.js.map +0 -1
  249. package/dist/components/power-history.cjs +0 -114
  250. package/dist/components/power-history.cjs.map +0 -1
  251. package/dist/components/power-history.d.cts +0 -40
  252. package/dist/components/power-history.d.ts +0 -41
  253. package/dist/components/power-history.js +0 -114
  254. package/dist/components/power-history.js.map +0 -1
  255. package/dist/components/power-network.cjs +0 -559
  256. package/dist/components/power-network.cjs.map +0 -1
  257. package/dist/components/power-network.d.cts +0 -80
  258. package/dist/components/power-network.d.ts +0 -80
  259. package/dist/components/power-network.js +0 -553
  260. package/dist/components/power-network.js.map +0 -1
  261. package/dist/components/smart-toggle-button.cjs +0 -24
  262. package/dist/components/smart-toggle-button.cjs.map +0 -1
  263. package/dist/components/smart-toggle-button.d.cts +0 -16
  264. package/dist/components/smart-toggle-button.d.ts +0 -16
  265. package/dist/components/smart-toggle-button.js +0 -23
  266. package/dist/components/smart-toggle-button.js.map +0 -1
  267. package/dist/components/solar-forecast-chart.cjs +0 -108
  268. package/dist/components/solar-forecast-chart.cjs.map +0 -1
  269. package/dist/components/solar-forecast-chart.d.cts +0 -77
  270. package/dist/components/solar-forecast-chart.d.ts +0 -77
  271. package/dist/components/solar-forecast-chart.js +0 -103
  272. package/dist/components/solar-forecast-chart.js.map +0 -1
  273. package/dist/number-flow-Bch81ixZ.d.cts +0 -14
  274. package/dist/number-flow-Bch81ixZ.d.ts +0 -14
  275. package/dist/utils/build-sankey-nodes.cjs +0 -72
  276. package/dist/utils/build-sankey-nodes.cjs.map +0 -1
  277. package/dist/utils/build-sankey-nodes.d.cts +0 -27
  278. package/dist/utils/build-sankey-nodes.d.ts +0 -27
  279. package/dist/utils/build-sankey-nodes.js +0 -71
  280. package/dist/utils/build-sankey-nodes.js.map +0 -1
@@ -0,0 +1,138 @@
1
+ "use client";
2
+ import { cn } from "../utils/cn.js";
3
+ import { Skeleton } from "./skeleton.js";
4
+ import { ArrowDownward, ArrowUpward, SwapVert } from "@epilot/spark-icons";
5
+ import * as React$1 from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ //#region src/components/table.tsx
8
+ const TableContext = React$1.createContext({
9
+ sort: null,
10
+ stickyHeader: false
11
+ });
12
+ const TableRowContext = React$1.createContext({ skeleton: false });
13
+ const rowHeight = "h-[calc(var(--spark-layout-gap)*10)]";
14
+ function nextSort(current, key) {
15
+ if (current?.key !== key) return {
16
+ key,
17
+ direction: "asc"
18
+ };
19
+ if (current.direction === "asc") return {
20
+ key,
21
+ direction: "desc"
22
+ };
23
+ return null;
24
+ }
25
+ function Table({ children, className, containerProps, onSortChange, sort = null, stickyHeader = false, ...props }) {
26
+ const { className: containerClassName, ...container } = containerProps ?? {};
27
+ const scrollRegion = container["aria-label"] != null;
28
+ const context = React$1.useMemo(() => ({
29
+ sort,
30
+ onSortChange,
31
+ stickyHeader
32
+ }), [
33
+ sort,
34
+ onSortChange,
35
+ stickyHeader
36
+ ]);
37
+ return /* @__PURE__ */ jsx("div", {
38
+ "data-slot": "table-container",
39
+ role: scrollRegion ? "region" : void 0,
40
+ tabIndex: scrollRegion ? 0 : void 0,
41
+ className: cn("relative w-full overflow-x-auto", scrollRegion && "focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-accent-focus", containerClassName),
42
+ ...container,
43
+ children: /* @__PURE__ */ jsx("table", {
44
+ "data-slot": "table",
45
+ className: cn("w-full border-separate border-spacing-0 text-sm text-gray-12", className),
46
+ ...props,
47
+ children: /* @__PURE__ */ jsx(TableContext.Provider, {
48
+ value: context,
49
+ children
50
+ })
51
+ })
52
+ });
53
+ }
54
+ function TableHeader(props) {
55
+ return /* @__PURE__ */ jsx("thead", {
56
+ "data-slot": "table-header",
57
+ ...props
58
+ });
59
+ }
60
+ function TableBody(props) {
61
+ return /* @__PURE__ */ jsx("tbody", {
62
+ "data-slot": "table-body",
63
+ ...props
64
+ });
65
+ }
66
+ function TableRow({ className, onClick, onKeyDown, selected, skeleton, ...props }) {
67
+ const interactive = !skeleton && onClick != null;
68
+ const rowContext = React$1.useMemo(() => ({ skeleton: skeleton ?? false }), [skeleton]);
69
+ const handleKeyDown = (event) => {
70
+ onKeyDown?.(event);
71
+ if (event.target !== event.currentTarget) return;
72
+ if (!interactive || event.defaultPrevented) return;
73
+ if (event.key !== "Enter" && event.key !== " ") return;
74
+ if (event.key === " ") event.preventDefault();
75
+ event.currentTarget.click();
76
+ };
77
+ return /* @__PURE__ */ jsx(TableRowContext.Provider, {
78
+ value: rowContext,
79
+ children: /* @__PURE__ */ jsx("tr", {
80
+ "data-slot": "table-row",
81
+ "data-selected": selected ? "" : void 0,
82
+ "aria-hidden": skeleton ? true : void 0,
83
+ tabIndex: interactive ? 0 : void 0,
84
+ onClick: interactive ? onClick : void 0,
85
+ onKeyDown: handleKeyDown,
86
+ className: cn("[&:last-child>td]:border-b-0", selected && !skeleton && "bg-spark-a3", interactive && [
87
+ "cursor-pointer transition-colors duration-150 touch-target-table-row motion-reduce:transition-none",
88
+ "hover:bg-spark-a3 focus-visible:bg-spark-a3",
89
+ "focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-accent-focus"
90
+ ], className),
91
+ ...props
92
+ })
93
+ });
94
+ }
95
+ function TableHead({ align = "start", children, className, sortKey, ...props }) {
96
+ const { onSortChange, sort, stickyHeader } = React$1.useContext(TableContext);
97
+ const direction = sortKey != null && sort?.key === sortKey ? sort.direction : void 0;
98
+ const Indicator = !direction ? SwapVert : direction === "asc" ? ArrowUpward : ArrowDownward;
99
+ return /* @__PURE__ */ jsx("th", {
100
+ "data-slot": "table-head",
101
+ "aria-sort": sortKey == null ? void 0 : direction === "asc" ? "ascending" : direction === "desc" ? "descending" : "none",
102
+ className: cn("border-b border-gray-a6 px-3 text-left align-middle text-xs font-medium text-gray-11", rowHeight, align === "end" && "text-right", stickyHeader && "sticky top-0 z-10 bg-gray-2", className),
103
+ ...props,
104
+ children: sortKey == null ? children : /* @__PURE__ */ jsxs("button", {
105
+ type: "button",
106
+ "data-slot": "table-head-sort",
107
+ onClick: () => onSortChange?.(nextSort(sort, sortKey)),
108
+ className: cn("touch-target -mx-1 inline-flex min-h-[1.5rem] cursor-pointer items-center gap-1 rounded-sm px-1 py-0.5 text-left transition-colors [--spark-icon-size:1rem] hover:text-gray-12 motion-reduce:transition-none", "focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-accent-focus", align === "end" && "flex-row-reverse"),
109
+ children: [children, /* @__PURE__ */ jsx(Indicator, { className: cn(!direction && "text-gray-a9") })]
110
+ })
111
+ });
112
+ }
113
+ function TableCell({ align = "start", children, className, ...props }) {
114
+ const { skeleton } = React$1.useContext(TableRowContext);
115
+ return /* @__PURE__ */ jsx("td", {
116
+ "data-slot": "table-cell",
117
+ className: cn("border-b border-gray-a6 px-3 align-middle", rowHeight, align === "end" && "text-right tabular-nums", className),
118
+ ...props,
119
+ children: skeleton ? /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-2/3" }) : children
120
+ });
121
+ }
122
+ function TableStatus({ children, className, colSpan, ...props }) {
123
+ return /* @__PURE__ */ jsx("tr", {
124
+ "data-slot": "table-status",
125
+ className,
126
+ ...props,
127
+ children: /* @__PURE__ */ jsx("td", {
128
+ "data-slot": "table-status-cell",
129
+ colSpan,
130
+ className: "px-3 py-3 [&:not(:has(>*))]:py-6 [&:not(:has(>*))]:text-center",
131
+ children
132
+ })
133
+ });
134
+ }
135
+ //#endregion
136
+ export { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, TableStatus };
137
+
138
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","names":["React"],"sources":["../../src/components/table.tsx"],"sourcesContent":["import { ArrowDownward, ArrowUpward, SwapVert } from '@epilot/spark-icons'\nimport * as React from 'react'\nimport { cn } from '../utils/cn'\nimport { Skeleton } from './skeleton'\n\ntype SortDirection = 'asc' | 'desc'\n\ninterface TableSort {\n key: string\n direction: SortDirection\n}\n\ninterface TableContextValue {\n sort: TableSort | null\n onSortChange?: (sort: TableSort | null) => void\n stickyHeader: boolean\n}\n\nconst TableContext = React.createContext<TableContextValue>({\n sort: null,\n stickyHeader: false,\n})\n\nconst TableRowContext = React.createContext<{ skeleton: boolean }>({\n skeleton: false,\n})\n\n// Reads --spark-layout-gap like the collection primitives, so a nested <Theme spacing>\n// re-resolves it against the nearest <Theme> scope (an [[data-spacing=…]_&] variant would\n// match any ancestor, not the nearest). height, not min-height, which is inert on table boxes.\nconst rowHeight = 'h-[calc(var(--spark-layout-gap)*10)]'\n\n// A column the table isn't sorted by starts at asc; the sorted one steps asc → desc → off.\nfunction nextSort(current: TableSort | null, key: string): TableSort | null {\n if (current?.key !== key) return { key, direction: 'asc' }\n if (current.direction === 'asc') return { key, direction: 'desc' }\n return null\n}\n\ninterface TableProps extends React.ComponentProps<'table'> {\n stickyHeader?: boolean\n /** Controlled only — the table never reorders rows; sort app-side and pass the result back. */\n sort?: TableSort | null\n onSortChange?: (sort: TableSort | null) => void\n /** Spread onto the scroll wrapper; an `aria-label` here also makes it a focusable region. */\n containerProps?: React.ComponentProps<'div'>\n}\n\nfunction Table({\n children,\n className,\n containerProps,\n onSortChange,\n sort = null,\n stickyHeader = false,\n ...props\n}: TableProps) {\n const { className: containerClassName, ...container } = containerProps ?? {}\n // A scrolling box only reaches the keyboard once it is focusable, and a focusable box\n // has to say what it holds (WCAG 2.1.1 / 4.1.2) — so the label is what turns it on.\n const scrollRegion = container['aria-label'] != null\n\n const context = React.useMemo(\n () => ({ sort, onSortChange, stickyHeader }),\n [sort, onSortChange, stickyHeader],\n )\n\n return (\n <div\n data-slot=\"table-container\"\n role={scrollRegion ? 'region' : undefined}\n tabIndex={scrollRegion ? 0 : undefined}\n className={cn(\n 'relative w-full overflow-x-auto',\n // inset outline, not a ring: ring-offset paints outside the box and this box clips.\n scrollRegion &&\n 'focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-accent-focus',\n containerClassName,\n )}\n {...container}\n >\n <table\n data-slot=\"table\"\n className={cn(\n // border-separate, not collapse: under collapse Chromium drops the border of a\n // sticky <th>, so every rule lives on the cells instead.\n 'w-full border-separate border-spacing-0 text-sm text-gray-12',\n className,\n )}\n {...props}\n >\n <TableContext.Provider value={context}>\n {children}\n </TableContext.Provider>\n </table>\n </div>\n )\n}\n\nfunction TableHeader(props: React.ComponentProps<'thead'>) {\n return <thead data-slot=\"table-header\" {...props} />\n}\n\nfunction TableBody(props: React.ComponentProps<'tbody'>) {\n return <tbody data-slot=\"table-body\" {...props} />\n}\n\ninterface TableRowProps extends React.ComponentProps<'tr'> {\n selected?: boolean\n skeleton?: boolean\n}\n\nfunction TableRow({\n className,\n onClick,\n onKeyDown,\n selected,\n skeleton,\n ...props\n}: TableRowProps) {\n // A skeleton row is a decorative placeholder: never focusable, never clickable, even if\n // the caller passes a handler while the data loads (ListItem precedent).\n const interactive = !skeleton && onClick != null\n\n const rowContext = React.useMemo(\n () => ({ skeleton: skeleton ?? false }),\n [skeleton],\n )\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLTableRowElement>) => {\n onKeyDown?.(event)\n // a key pressed inside a nested button, link or input belongs to that control\n if (event.target !== event.currentTarget) return\n if (!interactive || event.defaultPrevented) return\n if (event.key !== 'Enter' && event.key !== ' ') return\n // Space would scroll the page.\n if (event.key === ' ') event.preventDefault()\n event.currentTarget.click()\n }\n\n return (\n <TableRowContext.Provider value={rowContext}>\n <tr\n data-slot=\"table-row\"\n data-selected={selected ? '' : undefined}\n aria-hidden={skeleton ? true : undefined}\n tabIndex={interactive ? 0 : undefined}\n onClick={interactive ? onClick : undefined}\n onKeyDown={handleKeyDown}\n className={cn(\n '[&:last-child>td]:border-b-0',\n selected && !skeleton && 'bg-spark-a3',\n interactive && [\n 'cursor-pointer transition-colors duration-150 touch-target-table-row motion-reduce:transition-none',\n 'hover:bg-spark-a3 focus-visible:bg-spark-a3',\n // the inset recipe: a ring-offset would be clipped by the scroll container.\n 'focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-accent-focus',\n ],\n className,\n )}\n {...props}\n />\n </TableRowContext.Provider>\n )\n}\n\n// `align` shadows the deprecated presentational HTML attribute of the same name, which\n// is why the native one is omitted rather than widened.\ninterface TableHeadProps extends Omit<React.ComponentProps<'th'>, 'align'> {\n /** Pair with the matching `TableCell align` so the column lines up. */\n align?: 'start' | 'end'\n /** Presence turns the header into a sort button with an indicator and `aria-sort`. */\n sortKey?: string\n}\n\nfunction TableHead({\n align = 'start',\n children,\n className,\n sortKey,\n ...props\n}: TableHeadProps) {\n const { onSortChange, sort, stickyHeader } = React.useContext(TableContext)\n const active = sortKey != null && sort?.key === sortKey\n const direction = active ? sort.direction : undefined\n const Indicator = !direction\n ? SwapVert\n : direction === 'asc'\n ? ArrowUpward\n : ArrowDownward\n\n return (\n <th\n data-slot=\"table-head\"\n aria-sort={\n sortKey == null\n ? undefined\n : direction === 'asc'\n ? 'ascending'\n : direction === 'desc'\n ? 'descending'\n : 'none'\n }\n className={cn(\n 'border-b border-gray-a6 px-3 text-left align-middle text-xs font-medium text-gray-11',\n rowHeight,\n align === 'end' && 'text-right',\n // opaque fill, so rows scrolling under a sticky header stay hidden; override via\n // className when the table sits on a non-default surface.\n stickyHeader && 'sticky top-0 z-10 bg-gray-2',\n className,\n )}\n {...props}\n >\n {sortKey == null ? (\n children\n ) : (\n // min-h is a HARD 24px floor (WCAG 2.5.8): unlike h-*, it must not shrink\n // with the scaling knob.\n <button\n type=\"button\"\n data-slot=\"table-head-sort\"\n onClick={() => onSortChange?.(nextSort(sort, sortKey))}\n className={cn(\n 'touch-target -mx-1 inline-flex min-h-[1.5rem] cursor-pointer items-center gap-1 rounded-sm px-1 py-0.5 text-left transition-colors [--spark-icon-size:1rem] hover:text-gray-12 motion-reduce:transition-none',\n // the inset recipe again: the first and the sticky header sit on the edge\n // the scroll container clips.\n 'focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-accent-focus',\n // indicator inboard, so the digits keep a clean alignment edge\n align === 'end' && 'flex-row-reverse',\n )}\n >\n {children}\n <Indicator className={cn(!direction && 'text-gray-a9')} />\n </button>\n )}\n </th>\n )\n}\n\n// `align` shadows the deprecated presentational HTML attribute of the same name, which\n// is why the native one is omitted rather than widened.\ninterface TableCellProps extends Omit<React.ComponentProps<'td'>, 'align'> {\n align?: 'start' | 'end'\n}\n\nfunction TableCell({\n align = 'start',\n children,\n className,\n ...props\n}: TableCellProps) {\n const { skeleton } = React.useContext(TableRowContext)\n\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n 'border-b border-gray-a6 px-3 align-middle',\n rowHeight,\n align === 'end' && 'text-right tabular-nums',\n className,\n )}\n {...props}\n >\n {skeleton ? <Skeleton className=\"h-4 w-2/3\" /> : children}\n </td>\n )\n}\n\ninterface TableStatusProps extends React.ComponentProps<'tr'> {\n colSpan: number\n}\n\nfunction TableStatus({\n children,\n className,\n colSpan,\n ...props\n}: TableStatusProps) {\n return (\n <tr data-slot=\"table-status\" className={className} {...props}>\n <td\n data-slot=\"table-status-cell\"\n colSpan={colSpan}\n // an element child (EmptyState, Callout) owns its own alignment and most of its\n // vertical rhythm; the cell only keeps it off the header rule. Bare text takes both.\n className=\"px-3 py-3 [&:not(:has(>*))]:py-6 [&:not(:has(>*))]:text-center\"\n >\n {children}\n </td>\n </tr>\n )\n}\n\nexport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n TableStatus,\n}\nexport type {\n SortDirection,\n TableCellProps,\n TableHeadProps,\n TableProps,\n TableRowProps,\n TableSort,\n TableStatusProps,\n}\n"],"mappings":";;;;;;;AAkBA,MAAM,eAAeA,QAAM,cAAiC;CAC1D,MAAM;CACN,cAAc;AAChB,CAAC;AAED,MAAM,kBAAkBA,QAAM,cAAqC,EACjE,UAAU,MACZ,CAAC;AAKD,MAAM,YAAY;AAGlB,SAAS,SAAS,SAA2B,KAA+B;CAC1E,IAAI,SAAS,QAAQ,KAAK,OAAO;EAAE;EAAK,WAAW;CAAM;CACzD,IAAI,QAAQ,cAAc,OAAO,OAAO;EAAE;EAAK,WAAW;CAAO;CACjE,OAAO;AACT;AAWA,SAAS,MAAM,EACb,UACA,WACA,gBACA,cACA,OAAO,MACP,eAAe,OACf,GAAG,SACU;CACb,MAAM,EAAE,WAAW,oBAAoB,GAAG,cAAc,kBAAkB,CAAC;CAG3E,MAAM,eAAe,UAAU,iBAAiB;CAEhD,MAAM,UAAUA,QAAM,eACb;EAAE;EAAM;EAAc;CAAa,IAC1C;EAAC;EAAM;EAAc;CAAY,CACnC;CAEA,OACE,oBAAC,OAAD;EACE,aAAU;EACV,MAAM,eAAe,WAAW,KAAA;EAChC,UAAU,eAAe,IAAI,KAAA;EAC7B,WAAW,GACT,mCAEA,gBACE,8FACF,kBACF;EACA,GAAI;YAEJ,oBAAC,SAAD;GACE,aAAU;GACV,WAAW,GAGT,gEACA,SACF;GACA,GAAI;aAEJ,oBAAC,aAAa,UAAd;IAAuB,OAAO;IAC3B;GACoB,CAAA;EAClB,CAAA;CACJ,CAAA;AAET;AAEA,SAAS,YAAY,OAAsC;CACzD,OAAO,oBAAC,SAAD;EAAO,aAAU;EAAe,GAAI;CAAQ,CAAA;AACrD;AAEA,SAAS,UAAU,OAAsC;CACvD,OAAO,oBAAC,SAAD;EAAO,aAAU;EAAa,GAAI;CAAQ,CAAA;AACnD;AAOA,SAAS,SAAS,EAChB,WACA,SACA,WACA,UACA,UACA,GAAG,SACa;CAGhB,MAAM,cAAc,CAAC,YAAY,WAAW;CAE5C,MAAM,aAAaA,QAAM,eAChB,EAAE,UAAU,YAAY,MAAM,IACrC,CAAC,QAAQ,CACX;CAEA,MAAM,iBAAiB,UAAoD;EACzE,YAAY,KAAK;EAEjB,IAAI,MAAM,WAAW,MAAM,eAAe;EAC1C,IAAI,CAAC,eAAe,MAAM,kBAAkB;EAC5C,IAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;EAEhD,IAAI,MAAM,QAAQ,KAAK,MAAM,eAAe;EAC5C,MAAM,cAAc,MAAM;CAC5B;CAEA,OACE,oBAAC,gBAAgB,UAAjB;EAA0B,OAAO;YAC/B,oBAAC,MAAD;GACE,aAAU;GACV,iBAAe,WAAW,KAAK,KAAA;GAC/B,eAAa,WAAW,OAAO,KAAA;GAC/B,UAAU,cAAc,IAAI,KAAA;GAC5B,SAAS,cAAc,UAAU,KAAA;GACjC,WAAW;GACX,WAAW,GACT,gCACA,YAAY,CAAC,YAAY,eACzB,eAAe;IACb;IACA;IAEA;GACF,GACA,SACF;GACA,GAAI;EACL,CAAA;CACuB,CAAA;AAE9B;AAWA,SAAS,UAAU,EACjB,QAAQ,SACR,UACA,WACA,SACA,GAAG,SACc;CACjB,MAAM,EAAE,cAAc,MAAM,iBAAiBA,QAAM,WAAW,YAAY;CAE1E,MAAM,YADS,WAAW,QAAQ,MAAM,QAAQ,UACrB,KAAK,YAAY,KAAA;CAC5C,MAAM,YAAY,CAAC,YACf,WACA,cAAc,QACZ,cACA;CAEN,OACE,oBAAC,MAAD;EACE,aAAU;EACV,aACE,WAAW,OACP,KAAA,IACA,cAAc,QACZ,cACA,cAAc,SACZ,eACA;EAEV,WAAW,GACT,wFACA,WACA,UAAU,SAAS,cAGnB,gBAAgB,+BAChB,SACF;EACA,GAAI;YAEH,WAAW,OACV,WAIA,qBAAC,UAAD;GACE,MAAK;GACL,aAAU;GACV,eAAe,eAAe,SAAS,MAAM,OAAO,CAAC;GACrD,WAAW,GACT,gNAGA,8FAEA,UAAU,SAAS,kBACrB;aAXF,CAaG,UACD,oBAAC,WAAD,EAAW,WAAW,GAAG,CAAC,aAAa,cAAc,EAAI,CAAA,CACnD;;CAER,CAAA;AAER;AAQA,SAAS,UAAU,EACjB,QAAQ,SACR,UACA,WACA,GAAG,SACc;CACjB,MAAM,EAAE,aAAaA,QAAM,WAAW,eAAe;CAErD,OACE,oBAAC,MAAD;EACE,aAAU;EACV,WAAW,GACT,6CACA,WACA,UAAU,SAAS,2BACnB,SACF;EACA,GAAI;YAEH,WAAW,oBAAC,UAAD,EAAU,WAAU,YAAa,CAAA,IAAI;CAC/C,CAAA;AAER;AAMA,SAAS,YAAY,EACnB,UACA,WACA,SACA,GAAG,SACgB;CACnB,OACE,oBAAC,MAAD;EAAI,aAAU;EAA0B;EAAW,GAAI;YACrD,oBAAC,MAAD;GACE,aAAU;GACD;GAGT,WAAU;GAET;EACC,CAAA;CACF,CAAA;AAER"}
@@ -9,7 +9,7 @@ let react_jsx_runtime = require("react/jsx-runtime");
9
9
  let class_variance_authority = require("class-variance-authority");
10
10
  let cnfast = require("cnfast");
11
11
  //#region src/components/textarea.tsx
12
- const textareaVariants = (0, class_variance_authority.cva)("flex w-full min-w-0 bg-transparent text-gray outline-hidden transition-all group-data-[invalid=true]/field:text-error placeholder:text-gray-disabled disabled:cursor-not-allowed disabled:text-gray-disabled aria-invalid:text-error motion-reduce:transition-none", {
12
+ const textareaVariants = (0, class_variance_authority.cva)("flex w-full min-w-0 bg-transparent text-gray outline-hidden transition-all group-data-[invalid=true]/field:text-error placeholder:text-gray-placeholder disabled:cursor-not-allowed disabled:text-gray-disabled disabled:placeholder:text-gray-disabled aria-invalid:text-error motion-reduce:transition-none", {
13
13
  variants: {
14
14
  chrome: {
15
15
  none: "border-0 px-0",
@@ -1 +1 @@
1
- {"version":3,"file":"textarea.cjs","names":["GHOST_UNDERLINE","boxChrome","React","useFieldControl"],"sources":["../../src/components/textarea.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority'\nimport * as React from 'react'\nimport { boxChrome, GHOST_UNDERLINE } from '../lib/input-box-variants'\nimport type { SparkInputStyle } from '../lib/theme-types'\nimport { cn } from '../utils/cn'\nimport { useFieldControl } from './field'\n\ntype TextareaVariant = SparkInputStyle | 'none'\n\nconst textareaVariants = cva(\n 'flex w-full min-w-0 bg-transparent text-gray outline-hidden transition-all group-data-[invalid=true]/field:text-error placeholder:text-gray-disabled disabled:cursor-not-allowed disabled:text-gray-disabled aria-invalid:text-error motion-reduce:transition-none',\n {\n variants: {\n chrome: {\n none: 'border-0 px-0',\n inset: GHOST_UNDERLINE,\n box: 'min-h-11 rounded-md px-3 py-2 text-base transition-all motion-reduce:transition-none',\n },\n inputStyle: { soft: '', surface: '', outlined: '', ghost: '' },\n inputColor: { brand: '', gray: '' },\n autoResize: {\n true: 'field-sizing-content resize-none',\n false: 'resize-y',\n },\n },\n compoundVariants: [\n {\n chrome: 'box',\n inputStyle: 'soft',\n inputColor: 'brand',\n class: boxChrome.soft.brand,\n },\n {\n chrome: 'box',\n inputStyle: 'soft',\n inputColor: 'gray',\n class: boxChrome.soft.gray,\n },\n {\n chrome: 'box',\n inputStyle: 'surface',\n inputColor: 'brand',\n class: boxChrome.surface.brand,\n },\n {\n chrome: 'box',\n inputStyle: 'surface',\n inputColor: 'gray',\n class: boxChrome.surface.gray,\n },\n {\n chrome: 'box',\n inputStyle: 'outlined',\n inputColor: 'brand',\n class: boxChrome.outlined.brand,\n },\n {\n chrome: 'box',\n inputStyle: 'outlined',\n inputColor: 'gray',\n class: boxChrome.outlined.gray,\n },\n {\n chrome: 'box',\n inputStyle: 'ghost',\n inputColor: 'brand',\n class: boxChrome.ghost.brand,\n },\n {\n chrome: 'box',\n inputStyle: 'ghost',\n inputColor: 'gray',\n class: boxChrome.ghost.gray,\n },\n { chrome: 'inset', inputColor: 'brand', class: 'border-b-input' },\n { chrome: 'inset', inputColor: 'gray', class: 'border-b-input-gray' },\n // GHOST_UNDERLINE and boxChrome.ghost.* hardcode h-10; un-clamp for\n // textarea's min-height model — must come after those compounds above\n { chrome: 'inset', class: 'h-auto min-h-10' },\n { chrome: 'box', inputStyle: 'ghost', class: 'h-auto' },\n ],\n },\n)\n\ninterface TextareaProps extends React.ComponentProps<'textarea'> {\n variant?: TextareaVariant\n autoResize?: boolean\n}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n function Textarea(\n {\n variant,\n autoResize = false,\n rows = 3,\n className,\n id: idProp,\n 'aria-describedby': ariaDescribedByProp,\n ...props\n },\n ref,\n ) {\n const { field, id, ariaDescribedBy, ariaInvalid, inputStyle, inputColor } =\n useFieldControl({\n id: idProp,\n ariaDescribedBy: ariaDescribedByProp,\n variant: variant !== 'none' ? variant : undefined,\n })\n // an explicit variant prop keeps the box even inside an inset field\n const chrome =\n variant === 'none'\n ? 'none'\n : !variant && field?.labelPosition === 'inset'\n ? 'inset'\n : 'box'\n\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n textareaVariants({ chrome, inputStyle, inputColor, autoResize }),\n className,\n )}\n id={id}\n rows={rows}\n ref={ref}\n aria-invalid={ariaInvalid}\n {...props}\n aria-describedby={ariaDescribedBy}\n />\n )\n },\n)\n\nexport { Textarea }\nexport type { TextareaProps, TextareaVariant }\n"],"mappings":";;;;;;;;;;;AASA,MAAM,oBAAA,GAAA,yBAAA,KACJ,sQACA;CACE,UAAU;EACR,QAAQ;GACN,MAAM;GACN,OAAOA,+BAAAA;GACP,KAAK;EACP;EACA,YAAY;GAAE,MAAM;GAAI,SAAS;GAAI,UAAU;GAAI,OAAO;EAAG;EAC7D,YAAY;GAAE,OAAO;GAAI,MAAM;EAAG;EAClC,YAAY;GACV,MAAM;GACN,OAAO;EACT;CACF;CACA,kBAAkB;EAChB;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAOC,+BAAAA,UAAU,KAAK;EACxB;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAOA,+BAAAA,UAAU,KAAK;EACxB;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAOA,+BAAAA,UAAU,QAAQ;EAC3B;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAOA,+BAAAA,UAAU,QAAQ;EAC3B;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAOA,+BAAAA,UAAU,SAAS;EAC5B;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAOA,+BAAAA,UAAU,SAAS;EAC5B;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAOA,+BAAAA,UAAU,MAAM;EACzB;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAOA,+BAAAA,UAAU,MAAM;EACzB;EACA;GAAE,QAAQ;GAAS,YAAY;GAAS,OAAO;EAAiB;EAChE;GAAE,QAAQ;GAAS,YAAY;GAAQ,OAAO;EAAsB;EAGpE;GAAE,QAAQ;GAAS,OAAO;EAAkB;EAC5C;GAAE,QAAQ;GAAO,YAAY;GAAS,OAAO;EAAS;CACxD;AACF,CACF;AAOA,MAAM,WAAWC,MAAM,WACrB,SAAS,SACP,EACE,SACA,aAAa,OACb,OAAO,GACP,WACA,IAAI,QACJ,oBAAoB,qBACpB,GAAG,SAEL,KACA;CACA,MAAM,EAAE,OAAO,IAAI,iBAAiB,aAAa,YAAY,eAC3DC,yBAAAA,gBAAgB;EACd,IAAI;EACJ,iBAAiB;EACjB,SAAS,YAAY,SAAS,UAAU,KAAA;CAC1C,CAAC;CASH,OACE,iBAAA,GAAA,kBAAA,KAAC,YAAD;EACE,aAAU;EACV,YAAA,GAAA,OAAA,IACE,iBAAiB;GAAE,QAVvB,YAAY,SACR,SACA,CAAC,WAAW,OAAO,kBAAkB,UACnC,UACA;GAMyB;GAAY;GAAY;EAAW,CAAC,GAC/D,SACF;EACI;EACE;EACD;EACL,gBAAc;EACd,GAAI;EACJ,oBAAkB;CACnB,CAAA;AAEL,CACF"}
1
+ {"version":3,"file":"textarea.cjs","names":["GHOST_UNDERLINE","boxChrome","React","useFieldControl"],"sources":["../../src/components/textarea.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority'\nimport * as React from 'react'\nimport { boxChrome, GHOST_UNDERLINE } from '../lib/input-box-variants'\nimport type { SparkInputStyle } from '../lib/theme-types'\nimport { cn } from '../utils/cn'\nimport { useFieldControl } from './field'\n\ntype TextareaVariant = SparkInputStyle | 'none'\n\nconst textareaVariants = cva(\n 'flex w-full min-w-0 bg-transparent text-gray outline-hidden transition-all group-data-[invalid=true]/field:text-error placeholder:text-gray-placeholder disabled:cursor-not-allowed disabled:text-gray-disabled disabled:placeholder:text-gray-disabled aria-invalid:text-error motion-reduce:transition-none',\n {\n variants: {\n chrome: {\n none: 'border-0 px-0',\n inset: GHOST_UNDERLINE,\n box: 'min-h-11 rounded-md px-3 py-2 text-base transition-all motion-reduce:transition-none',\n },\n inputStyle: { soft: '', surface: '', outlined: '', ghost: '' },\n inputColor: { brand: '', gray: '' },\n autoResize: {\n true: 'field-sizing-content resize-none',\n false: 'resize-y',\n },\n },\n compoundVariants: [\n {\n chrome: 'box',\n inputStyle: 'soft',\n inputColor: 'brand',\n class: boxChrome.soft.brand,\n },\n {\n chrome: 'box',\n inputStyle: 'soft',\n inputColor: 'gray',\n class: boxChrome.soft.gray,\n },\n {\n chrome: 'box',\n inputStyle: 'surface',\n inputColor: 'brand',\n class: boxChrome.surface.brand,\n },\n {\n chrome: 'box',\n inputStyle: 'surface',\n inputColor: 'gray',\n class: boxChrome.surface.gray,\n },\n {\n chrome: 'box',\n inputStyle: 'outlined',\n inputColor: 'brand',\n class: boxChrome.outlined.brand,\n },\n {\n chrome: 'box',\n inputStyle: 'outlined',\n inputColor: 'gray',\n class: boxChrome.outlined.gray,\n },\n {\n chrome: 'box',\n inputStyle: 'ghost',\n inputColor: 'brand',\n class: boxChrome.ghost.brand,\n },\n {\n chrome: 'box',\n inputStyle: 'ghost',\n inputColor: 'gray',\n class: boxChrome.ghost.gray,\n },\n { chrome: 'inset', inputColor: 'brand', class: 'border-b-input' },\n { chrome: 'inset', inputColor: 'gray', class: 'border-b-input-gray' },\n // GHOST_UNDERLINE and boxChrome.ghost.* hardcode h-10; un-clamp for\n // textarea's min-height model — must come after those compounds above\n { chrome: 'inset', class: 'h-auto min-h-10' },\n { chrome: 'box', inputStyle: 'ghost', class: 'h-auto' },\n ],\n },\n)\n\ninterface TextareaProps extends React.ComponentProps<'textarea'> {\n variant?: TextareaVariant\n autoResize?: boolean\n}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n function Textarea(\n {\n variant,\n autoResize = false,\n rows = 3,\n className,\n id: idProp,\n 'aria-describedby': ariaDescribedByProp,\n ...props\n },\n ref,\n ) {\n const { field, id, ariaDescribedBy, ariaInvalid, inputStyle, inputColor } =\n useFieldControl({\n id: idProp,\n ariaDescribedBy: ariaDescribedByProp,\n variant: variant !== 'none' ? variant : undefined,\n })\n // an explicit variant prop keeps the box even inside an inset field\n const chrome =\n variant === 'none'\n ? 'none'\n : !variant && field?.labelPosition === 'inset'\n ? 'inset'\n : 'box'\n\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n textareaVariants({ chrome, inputStyle, inputColor, autoResize }),\n className,\n )}\n id={id}\n rows={rows}\n ref={ref}\n aria-invalid={ariaInvalid}\n {...props}\n aria-describedby={ariaDescribedBy}\n />\n )\n },\n)\n\nexport { Textarea }\nexport type { TextareaProps, TextareaVariant }\n"],"mappings":";;;;;;;;;;;AASA,MAAM,oBAAA,GAAA,yBAAA,KACJ,iTACA;CACE,UAAU;EACR,QAAQ;GACN,MAAM;GACN,OAAOA,+BAAAA;GACP,KAAK;EACP;EACA,YAAY;GAAE,MAAM;GAAI,SAAS;GAAI,UAAU;GAAI,OAAO;EAAG;EAC7D,YAAY;GAAE,OAAO;GAAI,MAAM;EAAG;EAClC,YAAY;GACV,MAAM;GACN,OAAO;EACT;CACF;CACA,kBAAkB;EAChB;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAOC,+BAAAA,UAAU,KAAK;EACxB;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAOA,+BAAAA,UAAU,KAAK;EACxB;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAOA,+BAAAA,UAAU,QAAQ;EAC3B;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAOA,+BAAAA,UAAU,QAAQ;EAC3B;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAOA,+BAAAA,UAAU,SAAS;EAC5B;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAOA,+BAAAA,UAAU,SAAS;EAC5B;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAOA,+BAAAA,UAAU,MAAM;EACzB;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAOA,+BAAAA,UAAU,MAAM;EACzB;EACA;GAAE,QAAQ;GAAS,YAAY;GAAS,OAAO;EAAiB;EAChE;GAAE,QAAQ;GAAS,YAAY;GAAQ,OAAO;EAAsB;EAGpE;GAAE,QAAQ;GAAS,OAAO;EAAkB;EAC5C;GAAE,QAAQ;GAAO,YAAY;GAAS,OAAO;EAAS;CACxD;AACF,CACF;AAOA,MAAM,WAAWC,MAAM,WACrB,SAAS,SACP,EACE,SACA,aAAa,OACb,OAAO,GACP,WACA,IAAI,QACJ,oBAAoB,qBACpB,GAAG,SAEL,KACA;CACA,MAAM,EAAE,OAAO,IAAI,iBAAiB,aAAa,YAAY,eAC3DC,yBAAAA,gBAAgB;EACd,IAAI;EACJ,iBAAiB;EACjB,SAAS,YAAY,SAAS,UAAU,KAAA;CAC1C,CAAC;CASH,OACE,iBAAA,GAAA,kBAAA,KAAC,YAAD;EACE,aAAU;EACV,YAAA,GAAA,OAAA,IACE,iBAAiB;GAAE,QAVvB,YAAY,SACR,SACA,CAAC,WAAW,OAAO,kBAAkB,UACnC,UACA;GAMyB;GAAY;GAAY;EAAW,CAAC,GAC/D,SACF;EACI;EACE;EACD;EACL,gBAAc;EACd,GAAI;EACJ,oBAAkB;CACnB,CAAA;AAEL,CACF"}
@@ -6,7 +6,7 @@ import * as React$1 from "react";
6
6
  import { jsx } from "react/jsx-runtime";
7
7
  import { cva } from "class-variance-authority";
8
8
  //#region src/components/textarea.tsx
9
- const textareaVariants = cva("flex w-full min-w-0 bg-transparent text-gray outline-hidden transition-all group-data-[invalid=true]/field:text-error placeholder:text-gray-disabled disabled:cursor-not-allowed disabled:text-gray-disabled aria-invalid:text-error motion-reduce:transition-none", {
9
+ const textareaVariants = cva("flex w-full min-w-0 bg-transparent text-gray outline-hidden transition-all group-data-[invalid=true]/field:text-error placeholder:text-gray-placeholder disabled:cursor-not-allowed disabled:text-gray-disabled disabled:placeholder:text-gray-disabled aria-invalid:text-error motion-reduce:transition-none", {
10
10
  variants: {
11
11
  chrome: {
12
12
  none: "border-0 px-0",
@@ -1 +1 @@
1
- {"version":3,"file":"textarea.js","names":["React"],"sources":["../../src/components/textarea.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority'\nimport * as React from 'react'\nimport { boxChrome, GHOST_UNDERLINE } from '../lib/input-box-variants'\nimport type { SparkInputStyle } from '../lib/theme-types'\nimport { cn } from '../utils/cn'\nimport { useFieldControl } from './field'\n\ntype TextareaVariant = SparkInputStyle | 'none'\n\nconst textareaVariants = cva(\n 'flex w-full min-w-0 bg-transparent text-gray outline-hidden transition-all group-data-[invalid=true]/field:text-error placeholder:text-gray-disabled disabled:cursor-not-allowed disabled:text-gray-disabled aria-invalid:text-error motion-reduce:transition-none',\n {\n variants: {\n chrome: {\n none: 'border-0 px-0',\n inset: GHOST_UNDERLINE,\n box: 'min-h-11 rounded-md px-3 py-2 text-base transition-all motion-reduce:transition-none',\n },\n inputStyle: { soft: '', surface: '', outlined: '', ghost: '' },\n inputColor: { brand: '', gray: '' },\n autoResize: {\n true: 'field-sizing-content resize-none',\n false: 'resize-y',\n },\n },\n compoundVariants: [\n {\n chrome: 'box',\n inputStyle: 'soft',\n inputColor: 'brand',\n class: boxChrome.soft.brand,\n },\n {\n chrome: 'box',\n inputStyle: 'soft',\n inputColor: 'gray',\n class: boxChrome.soft.gray,\n },\n {\n chrome: 'box',\n inputStyle: 'surface',\n inputColor: 'brand',\n class: boxChrome.surface.brand,\n },\n {\n chrome: 'box',\n inputStyle: 'surface',\n inputColor: 'gray',\n class: boxChrome.surface.gray,\n },\n {\n chrome: 'box',\n inputStyle: 'outlined',\n inputColor: 'brand',\n class: boxChrome.outlined.brand,\n },\n {\n chrome: 'box',\n inputStyle: 'outlined',\n inputColor: 'gray',\n class: boxChrome.outlined.gray,\n },\n {\n chrome: 'box',\n inputStyle: 'ghost',\n inputColor: 'brand',\n class: boxChrome.ghost.brand,\n },\n {\n chrome: 'box',\n inputStyle: 'ghost',\n inputColor: 'gray',\n class: boxChrome.ghost.gray,\n },\n { chrome: 'inset', inputColor: 'brand', class: 'border-b-input' },\n { chrome: 'inset', inputColor: 'gray', class: 'border-b-input-gray' },\n // GHOST_UNDERLINE and boxChrome.ghost.* hardcode h-10; un-clamp for\n // textarea's min-height model — must come after those compounds above\n { chrome: 'inset', class: 'h-auto min-h-10' },\n { chrome: 'box', inputStyle: 'ghost', class: 'h-auto' },\n ],\n },\n)\n\ninterface TextareaProps extends React.ComponentProps<'textarea'> {\n variant?: TextareaVariant\n autoResize?: boolean\n}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n function Textarea(\n {\n variant,\n autoResize = false,\n rows = 3,\n className,\n id: idProp,\n 'aria-describedby': ariaDescribedByProp,\n ...props\n },\n ref,\n ) {\n const { field, id, ariaDescribedBy, ariaInvalid, inputStyle, inputColor } =\n useFieldControl({\n id: idProp,\n ariaDescribedBy: ariaDescribedByProp,\n variant: variant !== 'none' ? variant : undefined,\n })\n // an explicit variant prop keeps the box even inside an inset field\n const chrome =\n variant === 'none'\n ? 'none'\n : !variant && field?.labelPosition === 'inset'\n ? 'inset'\n : 'box'\n\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n textareaVariants({ chrome, inputStyle, inputColor, autoResize }),\n className,\n )}\n id={id}\n rows={rows}\n ref={ref}\n aria-invalid={ariaInvalid}\n {...props}\n aria-describedby={ariaDescribedBy}\n />\n )\n },\n)\n\nexport { Textarea }\nexport type { TextareaProps, TextareaVariant }\n"],"mappings":";;;;;;;;AASA,MAAM,mBAAmB,IACvB,sQACA;CACE,UAAU;EACR,QAAQ;GACN,MAAM;GACN,OAAO;GACP,KAAK;EACP;EACA,YAAY;GAAE,MAAM;GAAI,SAAS;GAAI,UAAU;GAAI,OAAO;EAAG;EAC7D,YAAY;GAAE,OAAO;GAAI,MAAM;EAAG;EAClC,YAAY;GACV,MAAM;GACN,OAAO;EACT;CACF;CACA,kBAAkB;EAChB;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAO,UAAU,KAAK;EACxB;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAO,UAAU,KAAK;EACxB;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAO,UAAU,QAAQ;EAC3B;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAO,UAAU,QAAQ;EAC3B;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAO,UAAU,SAAS;EAC5B;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAO,UAAU,SAAS;EAC5B;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAO,UAAU,MAAM;EACzB;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAO,UAAU,MAAM;EACzB;EACA;GAAE,QAAQ;GAAS,YAAY;GAAS,OAAO;EAAiB;EAChE;GAAE,QAAQ;GAAS,YAAY;GAAQ,OAAO;EAAsB;EAGpE;GAAE,QAAQ;GAAS,OAAO;EAAkB;EAC5C;GAAE,QAAQ;GAAO,YAAY;GAAS,OAAO;EAAS;CACxD;AACF,CACF;AAOA,MAAM,WAAWA,QAAM,WACrB,SAAS,SACP,EACE,SACA,aAAa,OACb,OAAO,GACP,WACA,IAAI,QACJ,oBAAoB,qBACpB,GAAG,SAEL,KACA;CACA,MAAM,EAAE,OAAO,IAAI,iBAAiB,aAAa,YAAY,eAC3D,gBAAgB;EACd,IAAI;EACJ,iBAAiB;EACjB,SAAS,YAAY,SAAS,UAAU,KAAA;CAC1C,CAAC;CASH,OACE,oBAAC,YAAD;EACE,aAAU;EACV,WAAW,GACT,iBAAiB;GAAE,QAVvB,YAAY,SACR,SACA,CAAC,WAAW,OAAO,kBAAkB,UACnC,UACA;GAMyB;GAAY;GAAY;EAAW,CAAC,GAC/D,SACF;EACI;EACE;EACD;EACL,gBAAc;EACd,GAAI;EACJ,oBAAkB;CACnB,CAAA;AAEL,CACF"}
1
+ {"version":3,"file":"textarea.js","names":["React"],"sources":["../../src/components/textarea.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority'\nimport * as React from 'react'\nimport { boxChrome, GHOST_UNDERLINE } from '../lib/input-box-variants'\nimport type { SparkInputStyle } from '../lib/theme-types'\nimport { cn } from '../utils/cn'\nimport { useFieldControl } from './field'\n\ntype TextareaVariant = SparkInputStyle | 'none'\n\nconst textareaVariants = cva(\n 'flex w-full min-w-0 bg-transparent text-gray outline-hidden transition-all group-data-[invalid=true]/field:text-error placeholder:text-gray-placeholder disabled:cursor-not-allowed disabled:text-gray-disabled disabled:placeholder:text-gray-disabled aria-invalid:text-error motion-reduce:transition-none',\n {\n variants: {\n chrome: {\n none: 'border-0 px-0',\n inset: GHOST_UNDERLINE,\n box: 'min-h-11 rounded-md px-3 py-2 text-base transition-all motion-reduce:transition-none',\n },\n inputStyle: { soft: '', surface: '', outlined: '', ghost: '' },\n inputColor: { brand: '', gray: '' },\n autoResize: {\n true: 'field-sizing-content resize-none',\n false: 'resize-y',\n },\n },\n compoundVariants: [\n {\n chrome: 'box',\n inputStyle: 'soft',\n inputColor: 'brand',\n class: boxChrome.soft.brand,\n },\n {\n chrome: 'box',\n inputStyle: 'soft',\n inputColor: 'gray',\n class: boxChrome.soft.gray,\n },\n {\n chrome: 'box',\n inputStyle: 'surface',\n inputColor: 'brand',\n class: boxChrome.surface.brand,\n },\n {\n chrome: 'box',\n inputStyle: 'surface',\n inputColor: 'gray',\n class: boxChrome.surface.gray,\n },\n {\n chrome: 'box',\n inputStyle: 'outlined',\n inputColor: 'brand',\n class: boxChrome.outlined.brand,\n },\n {\n chrome: 'box',\n inputStyle: 'outlined',\n inputColor: 'gray',\n class: boxChrome.outlined.gray,\n },\n {\n chrome: 'box',\n inputStyle: 'ghost',\n inputColor: 'brand',\n class: boxChrome.ghost.brand,\n },\n {\n chrome: 'box',\n inputStyle: 'ghost',\n inputColor: 'gray',\n class: boxChrome.ghost.gray,\n },\n { chrome: 'inset', inputColor: 'brand', class: 'border-b-input' },\n { chrome: 'inset', inputColor: 'gray', class: 'border-b-input-gray' },\n // GHOST_UNDERLINE and boxChrome.ghost.* hardcode h-10; un-clamp for\n // textarea's min-height model — must come after those compounds above\n { chrome: 'inset', class: 'h-auto min-h-10' },\n { chrome: 'box', inputStyle: 'ghost', class: 'h-auto' },\n ],\n },\n)\n\ninterface TextareaProps extends React.ComponentProps<'textarea'> {\n variant?: TextareaVariant\n autoResize?: boolean\n}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n function Textarea(\n {\n variant,\n autoResize = false,\n rows = 3,\n className,\n id: idProp,\n 'aria-describedby': ariaDescribedByProp,\n ...props\n },\n ref,\n ) {\n const { field, id, ariaDescribedBy, ariaInvalid, inputStyle, inputColor } =\n useFieldControl({\n id: idProp,\n ariaDescribedBy: ariaDescribedByProp,\n variant: variant !== 'none' ? variant : undefined,\n })\n // an explicit variant prop keeps the box even inside an inset field\n const chrome =\n variant === 'none'\n ? 'none'\n : !variant && field?.labelPosition === 'inset'\n ? 'inset'\n : 'box'\n\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n textareaVariants({ chrome, inputStyle, inputColor, autoResize }),\n className,\n )}\n id={id}\n rows={rows}\n ref={ref}\n aria-invalid={ariaInvalid}\n {...props}\n aria-describedby={ariaDescribedBy}\n />\n )\n },\n)\n\nexport { Textarea }\nexport type { TextareaProps, TextareaVariant }\n"],"mappings":";;;;;;;;AASA,MAAM,mBAAmB,IACvB,iTACA;CACE,UAAU;EACR,QAAQ;GACN,MAAM;GACN,OAAO;GACP,KAAK;EACP;EACA,YAAY;GAAE,MAAM;GAAI,SAAS;GAAI,UAAU;GAAI,OAAO;EAAG;EAC7D,YAAY;GAAE,OAAO;GAAI,MAAM;EAAG;EAClC,YAAY;GACV,MAAM;GACN,OAAO;EACT;CACF;CACA,kBAAkB;EAChB;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAO,UAAU,KAAK;EACxB;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAO,UAAU,KAAK;EACxB;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAO,UAAU,QAAQ;EAC3B;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAO,UAAU,QAAQ;EAC3B;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAO,UAAU,SAAS;EAC5B;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAO,UAAU,SAAS;EAC5B;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAO,UAAU,MAAM;EACzB;EACA;GACE,QAAQ;GACR,YAAY;GACZ,YAAY;GACZ,OAAO,UAAU,MAAM;EACzB;EACA;GAAE,QAAQ;GAAS,YAAY;GAAS,OAAO;EAAiB;EAChE;GAAE,QAAQ;GAAS,YAAY;GAAQ,OAAO;EAAsB;EAGpE;GAAE,QAAQ;GAAS,OAAO;EAAkB;EAC5C;GAAE,QAAQ;GAAO,YAAY;GAAS,OAAO;EAAS;CACxD;AACF,CACF;AAOA,MAAM,WAAWA,QAAM,WACrB,SAAS,SACP,EACE,SACA,aAAa,OACb,OAAO,GACP,WACA,IAAI,QACJ,oBAAoB,qBACpB,GAAG,SAEL,KACA;CACA,MAAM,EAAE,OAAO,IAAI,iBAAiB,aAAa,YAAY,eAC3D,gBAAgB;EACd,IAAI;EACJ,iBAAiB;EACjB,SAAS,YAAY,SAAS,UAAU,KAAA;CAC1C,CAAC;CASH,OACE,oBAAC,YAAD;EACE,aAAU;EACV,WAAW,GACT,iBAAiB;GAAE,QAVvB,YAAY,SACR,SACA,CAAC,WAAW,OAAO,kBAAkB,UACnC,UACA;GAMyB;GAAY;GAAY;EAAW,CAAC,GAC/D,SACF;EACI;EACE;EACD;EACL,gBAAc;EACd,GAAI;EACJ,oBAAkB;CACnB,CAAA;AAEL,CACF"}
@@ -62,7 +62,7 @@ const InfoTooltip = ({ content, label, "aria-label": ariaLabel }) => {
62
62
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Tooltip, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(TooltipTrigger, {
63
63
  render: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
64
64
  "aria-label": ariaLabel ?? label,
65
- className: "focus-visible:ring-primary touch-target inline-flex size-6 min-h-[24px] min-w-[24px] shrink-0 cursor-help items-center justify-center rounded-full p-0 text-gray-light transition-colors hover:text-gray focus-visible:ring-2 focus-visible:outline-none",
65
+ className: "touch-target inline-flex size-6 min-h-[24px] min-w-[24px] shrink-0 cursor-help items-center justify-center rounded-full p-0 text-gray-light transition-colors hover:text-gray focus-visible:ring-2 focus-visible:ring-primary focus-visible:outline-none",
66
66
  type: "button"
67
67
  }),
68
68
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_epilot_spark_icons.Info, { className: "text-sm!" })
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip.cjs","names":["TooltipPrimitive","Info"],"sources":["../../src/components/tooltip.tsx"],"sourcesContent":["import { Tooltip as TooltipPrimitive } from '@base-ui/react/tooltip'\nimport { Info } from '@epilot/spark-icons'\nimport * as React from 'react'\nimport { cn } from '../utils/cn'\n\nconst TooltipProvider = ({\n delay = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) => {\n return <TooltipPrimitive.Provider delay={delay} {...props} />\n}\n\nconst TooltipPortal = ({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Portal>) => {\n return <TooltipPrimitive.Portal data-slot=\"tooltip-portal\" {...props} />\n}\n\ntype TooltipProps = React.ComponentProps<typeof TooltipPrimitive.Root>\n\nconst Tooltip = ({ ...props }: TooltipProps) => {\n return <TooltipPrimitive.Root {...props} />\n}\n\nconst TooltipTrigger = ({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) => {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\ntype TooltipContentProps = React.ComponentProps<typeof TooltipPrimitive.Popup> &\n Pick<\n TooltipPrimitive.Positioner.Props,\n 'align' | 'alignOffset' | 'side' | 'sideOffset'\n > & {\n hideArrow?: boolean\n variant?: 'default' | 'destructive'\n }\n\nconst TooltipContent = ({\n className,\n hideArrow = false,\n variant = 'default',\n children,\n align,\n alignOffset,\n side,\n sideOffset = 4,\n ...props\n}: TooltipContentProps) => {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n className=\"isolate z-50\"\n side={side}\n sideOffset={sideOffset}\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n data-variant={variant}\n className={cn(\n 'z-50 w-fit origin-(--transform-origin) rounded-lg p-2 text-xs leading-none transition-[opacity,scale,translate] duration-150',\n // enter: fade + zoom + a slight per-side slide (was animate-in)\n 'data-starting-style:scale-95 data-starting-style:opacity-0',\n 'data-[side=bottom]:data-starting-style:-translate-y-1 data-[side=left]:data-starting-style:translate-x-1 data-[side=right]:data-starting-style:-translate-x-1 data-[side=top]:data-starting-style:translate-y-1',\n // exit: instant (was data-[state=closed]:duration-0)\n 'data-ending-style:opacity-0 data-ending-style:duration-0',\n 'data-[variant=default]:bg-gray-12 data-[variant=default]:text-gray-1',\n 'data-[variant=destructive]:bg-red-12 data-[variant=destructive]:text-red-1',\n className,\n )}\n {...props}\n >\n {children}\n {!hideArrow && (\n <TooltipPrimitive.Arrow\n data-variant={variant}\n className={cn(\n 'z-50',\n // svg tip points up; rotate per side, overlap 2px for a seamless join\n 'data-[side=bottom]:top-[-8px]',\n 'data-[side=top]:bottom-[-8px] data-[side=top]:rotate-180',\n 'data-[side=left]:right-[-13px] data-[side=left]:rotate-90',\n 'data-[side=right]:left-[-13px] data-[side=right]:-rotate-90',\n 'data-[variant=default]:text-gray-12',\n 'data-[variant=destructive]:text-red-12',\n )}\n >\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 20 10\" width=\"20\">\n <path\n d=\"M9.66437 2.60207L4.80758 6.97318C4.07308 7.63423 3.11989 8 2.13172 8H0V10H20V8H18.5349C17.5468 8 16.5936 7.63423 15.8591 6.97318L11.0023 2.60207C10.622 2.2598 10.0447 2.25979 9.66437 2.60207Z\"\n fill=\"currentColor\"\n />\n </svg>\n </TooltipPrimitive.Arrow>\n )}\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n )\n}\n\ninterface InfoTooltipProps {\n content: string\n label: string\n 'aria-label'?: string\n}\n\nconst InfoTooltip = ({\n content,\n label,\n 'aria-label': ariaLabel,\n}: InfoTooltipProps) => {\n return (\n <Tooltip>\n <TooltipTrigger\n render={\n <button\n aria-label={ariaLabel ?? label}\n className=\"focus-visible:ring-primary touch-target inline-flex size-6 min-h-[24px] min-w-[24px] shrink-0 cursor-help items-center justify-center rounded-full p-0 text-gray-light transition-colors hover:text-gray focus-visible:ring-2 focus-visible:outline-none\"\n type=\"button\"\n />\n }\n >\n <Info className=\"text-sm!\" />\n </TooltipTrigger>\n <TooltipContent className=\"max-w-xs whitespace-pre-line\">\n {content}\n </TooltipContent>\n </Tooltip>\n )\n}\n\nexport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n TooltipPortal,\n InfoTooltip,\n}\n"],"mappings":";;;;;;;;;;AAKA,MAAM,mBAAmB,EACvB,QAAQ,GACR,GAAG,YACyD;CAC5D,OAAO,iBAAA,GAAA,kBAAA,KAACA,uBAAAA,QAAiB,UAAlB;EAAkC;EAAO,GAAI;CAAQ,CAAA;AAC9D;AAEA,MAAM,iBAAiB,EACrB,GAAG,YACuD;CAC1D,OAAO,iBAAA,GAAA,kBAAA,KAACA,uBAAAA,QAAiB,QAAlB;EAAyB,aAAU;EAAiB,GAAI;CAAQ,CAAA;AACzE;AAIA,MAAM,WAAW,EAAE,GAAG,YAA0B;CAC9C,OAAO,iBAAA,GAAA,kBAAA,KAACA,uBAAAA,QAAiB,MAAlB,EAAuB,GAAI,MAAQ,CAAA;AAC5C;AAEA,MAAM,kBAAkB,EACtB,GAAG,YACwD;CAC3D,OAAO,iBAAA,GAAA,kBAAA,KAACA,uBAAAA,QAAiB,SAAlB;EAA0B,aAAU;EAAkB,GAAI;CAAQ,CAAA;AAC3E;AAWA,MAAM,kBAAkB,EACtB,WACA,YAAY,OACZ,UAAU,WACV,UACA,OACA,aACA,MACA,aAAa,GACb,GAAG,YACsB;CACzB,OACE,iBAAA,GAAA,kBAAA,KAACA,uBAAAA,QAAiB,QAAlB,EAAA,UACE,iBAAA,GAAA,kBAAA,KAACA,uBAAAA,QAAiB,YAAlB;EACS;EACM;EACb,WAAU;EACJ;EACM;YAEZ,iBAAA,GAAA,kBAAA,MAACA,uBAAAA,QAAiB,OAAlB;GACE,aAAU;GACV,gBAAc;GACd,YAAA,GAAA,OAAA,IACE,gIAEA,8DACA,mNAEA,4DACA,wEACA,8EACA,SACF;GACA,GAAI;aAdN,CAgBG,UACA,CAAC,aACA,iBAAA,GAAA,kBAAA,KAACA,uBAAAA,QAAiB,OAAlB;IACE,gBAAc;IACd,YAAA,GAAA,OAAA,IACE,QAEA,iCACA,4DACA,6DACA,+DACA,uCACA,wCACF;cAEA,iBAAA,GAAA,kBAAA,KAAC,OAAD;KAAK,MAAK;KAAO,QAAO;KAAK,SAAQ;KAAY,OAAM;eACrD,iBAAA,GAAA,kBAAA,KAAC,QAAD;MACE,GAAE;MACF,MAAK;KACN,CAAA;IACE,CAAA;GACiB,CAAA,CAEJ;;CACG,CAAA,EACN,CAAA;AAE7B;AAQA,MAAM,eAAe,EACnB,SACA,OACA,cAAc,gBACQ;CACtB,OACE,iBAAA,GAAA,kBAAA,MAAC,SAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAC,gBAAD;EACE,QACE,iBAAA,GAAA,kBAAA,KAAC,UAAD;GACE,cAAY,aAAa;GACzB,WAAU;GACV,MAAK;EACN,CAAA;YAGH,iBAAA,GAAA,kBAAA,KAACC,oBAAAA,MAAD,EAAM,WAAU,WAAY,CAAA;CACd,CAAA,GAChB,iBAAA,GAAA,kBAAA,KAAC,gBAAD;EAAgB,WAAU;YACvB;CACa,CAAA,CACT,EAAA,CAAA;AAEb"}
1
+ {"version":3,"file":"tooltip.cjs","names":["TooltipPrimitive","Info"],"sources":["../../src/components/tooltip.tsx"],"sourcesContent":["import { Tooltip as TooltipPrimitive } from '@base-ui/react/tooltip'\nimport { Info } from '@epilot/spark-icons'\nimport * as React from 'react'\nimport { cn } from '../utils/cn'\n\nconst TooltipProvider = ({\n delay = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) => {\n return <TooltipPrimitive.Provider delay={delay} {...props} />\n}\n\nconst TooltipPortal = ({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Portal>) => {\n return <TooltipPrimitive.Portal data-slot=\"tooltip-portal\" {...props} />\n}\n\ntype TooltipProps = React.ComponentProps<typeof TooltipPrimitive.Root>\n\nconst Tooltip = ({ ...props }: TooltipProps) => {\n return <TooltipPrimitive.Root {...props} />\n}\n\nconst TooltipTrigger = ({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) => {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\ntype TooltipContentProps = React.ComponentProps<typeof TooltipPrimitive.Popup> &\n Pick<\n TooltipPrimitive.Positioner.Props,\n 'align' | 'alignOffset' | 'side' | 'sideOffset'\n > & {\n hideArrow?: boolean\n variant?: 'default' | 'destructive'\n }\n\nconst TooltipContent = ({\n className,\n hideArrow = false,\n variant = 'default',\n children,\n align,\n alignOffset,\n side,\n sideOffset = 4,\n ...props\n}: TooltipContentProps) => {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n className=\"isolate z-50\"\n side={side}\n sideOffset={sideOffset}\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n data-variant={variant}\n className={cn(\n 'z-50 w-fit origin-(--transform-origin) rounded-lg p-2 text-xs leading-none transition-[opacity,scale,translate] duration-150',\n // enter: fade + zoom + a slight per-side slide (was animate-in)\n 'data-starting-style:scale-95 data-starting-style:opacity-0',\n 'data-[side=bottom]:data-starting-style:-translate-y-1 data-[side=left]:data-starting-style:translate-x-1 data-[side=right]:data-starting-style:-translate-x-1 data-[side=top]:data-starting-style:translate-y-1',\n // exit: instant (was data-[state=closed]:duration-0)\n 'data-ending-style:opacity-0 data-ending-style:duration-0',\n 'data-[variant=default]:bg-gray-12 data-[variant=default]:text-gray-1',\n 'data-[variant=destructive]:bg-red-12 data-[variant=destructive]:text-red-1',\n className,\n )}\n {...props}\n >\n {children}\n {!hideArrow && (\n <TooltipPrimitive.Arrow\n data-variant={variant}\n className={cn(\n 'z-50',\n // svg tip points up; rotate per side, overlap 2px for a seamless join\n 'data-[side=bottom]:top-[-8px]',\n 'data-[side=top]:bottom-[-8px] data-[side=top]:rotate-180',\n 'data-[side=left]:right-[-13px] data-[side=left]:rotate-90',\n 'data-[side=right]:left-[-13px] data-[side=right]:-rotate-90',\n 'data-[variant=default]:text-gray-12',\n 'data-[variant=destructive]:text-red-12',\n )}\n >\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 20 10\" width=\"20\">\n <path\n d=\"M9.66437 2.60207L4.80758 6.97318C4.07308 7.63423 3.11989 8 2.13172 8H0V10H20V8H18.5349C17.5468 8 16.5936 7.63423 15.8591 6.97318L11.0023 2.60207C10.622 2.2598 10.0447 2.25979 9.66437 2.60207Z\"\n fill=\"currentColor\"\n />\n </svg>\n </TooltipPrimitive.Arrow>\n )}\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n )\n}\n\ninterface InfoTooltipProps {\n content: string\n label: string\n 'aria-label'?: string\n}\n\nconst InfoTooltip = ({\n content,\n label,\n 'aria-label': ariaLabel,\n}: InfoTooltipProps) => {\n return (\n <Tooltip>\n <TooltipTrigger\n render={\n <button\n aria-label={ariaLabel ?? label}\n className=\"touch-target inline-flex size-6 min-h-[24px] min-w-[24px] shrink-0 cursor-help items-center justify-center rounded-full p-0 text-gray-light transition-colors hover:text-gray focus-visible:ring-2 focus-visible:ring-primary focus-visible:outline-none\"\n type=\"button\"\n />\n }\n >\n <Info className=\"text-sm!\" />\n </TooltipTrigger>\n <TooltipContent className=\"max-w-xs whitespace-pre-line\">\n {content}\n </TooltipContent>\n </Tooltip>\n )\n}\n\nexport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n TooltipPortal,\n InfoTooltip,\n}\n"],"mappings":";;;;;;;;;;AAKA,MAAM,mBAAmB,EACvB,QAAQ,GACR,GAAG,YACyD;CAC5D,OAAO,iBAAA,GAAA,kBAAA,KAACA,uBAAAA,QAAiB,UAAlB;EAAkC;EAAO,GAAI;CAAQ,CAAA;AAC9D;AAEA,MAAM,iBAAiB,EACrB,GAAG,YACuD;CAC1D,OAAO,iBAAA,GAAA,kBAAA,KAACA,uBAAAA,QAAiB,QAAlB;EAAyB,aAAU;EAAiB,GAAI;CAAQ,CAAA;AACzE;AAIA,MAAM,WAAW,EAAE,GAAG,YAA0B;CAC9C,OAAO,iBAAA,GAAA,kBAAA,KAACA,uBAAAA,QAAiB,MAAlB,EAAuB,GAAI,MAAQ,CAAA;AAC5C;AAEA,MAAM,kBAAkB,EACtB,GAAG,YACwD;CAC3D,OAAO,iBAAA,GAAA,kBAAA,KAACA,uBAAAA,QAAiB,SAAlB;EAA0B,aAAU;EAAkB,GAAI;CAAQ,CAAA;AAC3E;AAWA,MAAM,kBAAkB,EACtB,WACA,YAAY,OACZ,UAAU,WACV,UACA,OACA,aACA,MACA,aAAa,GACb,GAAG,YACsB;CACzB,OACE,iBAAA,GAAA,kBAAA,KAACA,uBAAAA,QAAiB,QAAlB,EAAA,UACE,iBAAA,GAAA,kBAAA,KAACA,uBAAAA,QAAiB,YAAlB;EACS;EACM;EACb,WAAU;EACJ;EACM;YAEZ,iBAAA,GAAA,kBAAA,MAACA,uBAAAA,QAAiB,OAAlB;GACE,aAAU;GACV,gBAAc;GACd,YAAA,GAAA,OAAA,IACE,gIAEA,8DACA,mNAEA,4DACA,wEACA,8EACA,SACF;GACA,GAAI;aAdN,CAgBG,UACA,CAAC,aACA,iBAAA,GAAA,kBAAA,KAACA,uBAAAA,QAAiB,OAAlB;IACE,gBAAc;IACd,YAAA,GAAA,OAAA,IACE,QAEA,iCACA,4DACA,6DACA,+DACA,uCACA,wCACF;cAEA,iBAAA,GAAA,kBAAA,KAAC,OAAD;KAAK,MAAK;KAAO,QAAO;KAAK,SAAQ;KAAY,OAAM;eACrD,iBAAA,GAAA,kBAAA,KAAC,QAAD;MACE,GAAE;MACF,MAAK;KACN,CAAA;IACE,CAAA;GACiB,CAAA,CAEJ;;CACG,CAAA,EACN,CAAA;AAE7B;AAQA,MAAM,eAAe,EACnB,SACA,OACA,cAAc,gBACQ;CACtB,OACE,iBAAA,GAAA,kBAAA,MAAC,SAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAC,gBAAD;EACE,QACE,iBAAA,GAAA,kBAAA,KAAC,UAAD;GACE,cAAY,aAAa;GACzB,WAAU;GACV,MAAK;EACN,CAAA;YAGH,iBAAA,GAAA,kBAAA,KAACC,oBAAAA,MAAD,EAAM,WAAU,WAAY,CAAA;CACd,CAAA,GAChB,iBAAA,GAAA,kBAAA,KAAC,gBAAD;EAAgB,WAAU;YACvB;CACa,CAAA,CACT,EAAA,CAAA;AAEb"}
@@ -59,7 +59,7 @@ const InfoTooltip = ({ content, label, "aria-label": ariaLabel }) => {
59
59
  return /* @__PURE__ */ jsxs(Tooltip, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
60
60
  render: /* @__PURE__ */ jsx("button", {
61
61
  "aria-label": ariaLabel ?? label,
62
- className: "focus-visible:ring-primary touch-target inline-flex size-6 min-h-[24px] min-w-[24px] shrink-0 cursor-help items-center justify-center rounded-full p-0 text-gray-light transition-colors hover:text-gray focus-visible:ring-2 focus-visible:outline-none",
62
+ className: "touch-target inline-flex size-6 min-h-[24px] min-w-[24px] shrink-0 cursor-help items-center justify-center rounded-full p-0 text-gray-light transition-colors hover:text-gray focus-visible:ring-2 focus-visible:ring-primary focus-visible:outline-none",
63
63
  type: "button"
64
64
  }),
65
65
  children: /* @__PURE__ */ jsx(Info, { className: "text-sm!" })
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip.js","names":["TooltipPrimitive"],"sources":["../../src/components/tooltip.tsx"],"sourcesContent":["import { Tooltip as TooltipPrimitive } from '@base-ui/react/tooltip'\nimport { Info } from '@epilot/spark-icons'\nimport * as React from 'react'\nimport { cn } from '../utils/cn'\n\nconst TooltipProvider = ({\n delay = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) => {\n return <TooltipPrimitive.Provider delay={delay} {...props} />\n}\n\nconst TooltipPortal = ({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Portal>) => {\n return <TooltipPrimitive.Portal data-slot=\"tooltip-portal\" {...props} />\n}\n\ntype TooltipProps = React.ComponentProps<typeof TooltipPrimitive.Root>\n\nconst Tooltip = ({ ...props }: TooltipProps) => {\n return <TooltipPrimitive.Root {...props} />\n}\n\nconst TooltipTrigger = ({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) => {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\ntype TooltipContentProps = React.ComponentProps<typeof TooltipPrimitive.Popup> &\n Pick<\n TooltipPrimitive.Positioner.Props,\n 'align' | 'alignOffset' | 'side' | 'sideOffset'\n > & {\n hideArrow?: boolean\n variant?: 'default' | 'destructive'\n }\n\nconst TooltipContent = ({\n className,\n hideArrow = false,\n variant = 'default',\n children,\n align,\n alignOffset,\n side,\n sideOffset = 4,\n ...props\n}: TooltipContentProps) => {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n className=\"isolate z-50\"\n side={side}\n sideOffset={sideOffset}\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n data-variant={variant}\n className={cn(\n 'z-50 w-fit origin-(--transform-origin) rounded-lg p-2 text-xs leading-none transition-[opacity,scale,translate] duration-150',\n // enter: fade + zoom + a slight per-side slide (was animate-in)\n 'data-starting-style:scale-95 data-starting-style:opacity-0',\n 'data-[side=bottom]:data-starting-style:-translate-y-1 data-[side=left]:data-starting-style:translate-x-1 data-[side=right]:data-starting-style:-translate-x-1 data-[side=top]:data-starting-style:translate-y-1',\n // exit: instant (was data-[state=closed]:duration-0)\n 'data-ending-style:opacity-0 data-ending-style:duration-0',\n 'data-[variant=default]:bg-gray-12 data-[variant=default]:text-gray-1',\n 'data-[variant=destructive]:bg-red-12 data-[variant=destructive]:text-red-1',\n className,\n )}\n {...props}\n >\n {children}\n {!hideArrow && (\n <TooltipPrimitive.Arrow\n data-variant={variant}\n className={cn(\n 'z-50',\n // svg tip points up; rotate per side, overlap 2px for a seamless join\n 'data-[side=bottom]:top-[-8px]',\n 'data-[side=top]:bottom-[-8px] data-[side=top]:rotate-180',\n 'data-[side=left]:right-[-13px] data-[side=left]:rotate-90',\n 'data-[side=right]:left-[-13px] data-[side=right]:-rotate-90',\n 'data-[variant=default]:text-gray-12',\n 'data-[variant=destructive]:text-red-12',\n )}\n >\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 20 10\" width=\"20\">\n <path\n d=\"M9.66437 2.60207L4.80758 6.97318C4.07308 7.63423 3.11989 8 2.13172 8H0V10H20V8H18.5349C17.5468 8 16.5936 7.63423 15.8591 6.97318L11.0023 2.60207C10.622 2.2598 10.0447 2.25979 9.66437 2.60207Z\"\n fill=\"currentColor\"\n />\n </svg>\n </TooltipPrimitive.Arrow>\n )}\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n )\n}\n\ninterface InfoTooltipProps {\n content: string\n label: string\n 'aria-label'?: string\n}\n\nconst InfoTooltip = ({\n content,\n label,\n 'aria-label': ariaLabel,\n}: InfoTooltipProps) => {\n return (\n <Tooltip>\n <TooltipTrigger\n render={\n <button\n aria-label={ariaLabel ?? label}\n className=\"focus-visible:ring-primary touch-target inline-flex size-6 min-h-[24px] min-w-[24px] shrink-0 cursor-help items-center justify-center rounded-full p-0 text-gray-light transition-colors hover:text-gray focus-visible:ring-2 focus-visible:outline-none\"\n type=\"button\"\n />\n }\n >\n <Info className=\"text-sm!\" />\n </TooltipTrigger>\n <TooltipContent className=\"max-w-xs whitespace-pre-line\">\n {content}\n </TooltipContent>\n </Tooltip>\n )\n}\n\nexport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n TooltipPortal,\n InfoTooltip,\n}\n"],"mappings":";;;;;;;AAKA,MAAM,mBAAmB,EACvB,QAAQ,GACR,GAAG,YACyD;CAC5D,OAAO,oBAACA,UAAiB,UAAlB;EAAkC;EAAO,GAAI;CAAQ,CAAA;AAC9D;AAEA,MAAM,iBAAiB,EACrB,GAAG,YACuD;CAC1D,OAAO,oBAACA,UAAiB,QAAlB;EAAyB,aAAU;EAAiB,GAAI;CAAQ,CAAA;AACzE;AAIA,MAAM,WAAW,EAAE,GAAG,YAA0B;CAC9C,OAAO,oBAACA,UAAiB,MAAlB,EAAuB,GAAI,MAAQ,CAAA;AAC5C;AAEA,MAAM,kBAAkB,EACtB,GAAG,YACwD;CAC3D,OAAO,oBAACA,UAAiB,SAAlB;EAA0B,aAAU;EAAkB,GAAI;CAAQ,CAAA;AAC3E;AAWA,MAAM,kBAAkB,EACtB,WACA,YAAY,OACZ,UAAU,WACV,UACA,OACA,aACA,MACA,aAAa,GACb,GAAG,YACsB;CACzB,OACE,oBAACA,UAAiB,QAAlB,EAAA,UACE,oBAACA,UAAiB,YAAlB;EACS;EACM;EACb,WAAU;EACJ;EACM;YAEZ,qBAACA,UAAiB,OAAlB;GACE,aAAU;GACV,gBAAc;GACd,WAAW,GACT,gIAEA,8DACA,mNAEA,4DACA,wEACA,8EACA,SACF;GACA,GAAI;aAdN,CAgBG,UACA,CAAC,aACA,oBAACA,UAAiB,OAAlB;IACE,gBAAc;IACd,WAAW,GACT,QAEA,iCACA,4DACA,6DACA,+DACA,uCACA,wCACF;cAEA,oBAAC,OAAD;KAAK,MAAK;KAAO,QAAO;KAAK,SAAQ;KAAY,OAAM;eACrD,oBAAC,QAAD;MACE,GAAE;MACF,MAAK;KACN,CAAA;IACE,CAAA;GACiB,CAAA,CAEJ;;CACG,CAAA,EACN,CAAA;AAE7B;AAQA,MAAM,eAAe,EACnB,SACA,OACA,cAAc,gBACQ;CACtB,OACE,qBAAC,SAAD,EAAA,UAAA,CACE,oBAAC,gBAAD;EACE,QACE,oBAAC,UAAD;GACE,cAAY,aAAa;GACzB,WAAU;GACV,MAAK;EACN,CAAA;YAGH,oBAAC,MAAD,EAAM,WAAU,WAAY,CAAA;CACd,CAAA,GAChB,oBAAC,gBAAD;EAAgB,WAAU;YACvB;CACa,CAAA,CACT,EAAA,CAAA;AAEb"}
1
+ {"version":3,"file":"tooltip.js","names":["TooltipPrimitive"],"sources":["../../src/components/tooltip.tsx"],"sourcesContent":["import { Tooltip as TooltipPrimitive } from '@base-ui/react/tooltip'\nimport { Info } from '@epilot/spark-icons'\nimport * as React from 'react'\nimport { cn } from '../utils/cn'\n\nconst TooltipProvider = ({\n delay = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) => {\n return <TooltipPrimitive.Provider delay={delay} {...props} />\n}\n\nconst TooltipPortal = ({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Portal>) => {\n return <TooltipPrimitive.Portal data-slot=\"tooltip-portal\" {...props} />\n}\n\ntype TooltipProps = React.ComponentProps<typeof TooltipPrimitive.Root>\n\nconst Tooltip = ({ ...props }: TooltipProps) => {\n return <TooltipPrimitive.Root {...props} />\n}\n\nconst TooltipTrigger = ({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) => {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />\n}\n\ntype TooltipContentProps = React.ComponentProps<typeof TooltipPrimitive.Popup> &\n Pick<\n TooltipPrimitive.Positioner.Props,\n 'align' | 'alignOffset' | 'side' | 'sideOffset'\n > & {\n hideArrow?: boolean\n variant?: 'default' | 'destructive'\n }\n\nconst TooltipContent = ({\n className,\n hideArrow = false,\n variant = 'default',\n children,\n align,\n alignOffset,\n side,\n sideOffset = 4,\n ...props\n}: TooltipContentProps) => {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n className=\"isolate z-50\"\n side={side}\n sideOffset={sideOffset}\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n data-variant={variant}\n className={cn(\n 'z-50 w-fit origin-(--transform-origin) rounded-lg p-2 text-xs leading-none transition-[opacity,scale,translate] duration-150',\n // enter: fade + zoom + a slight per-side slide (was animate-in)\n 'data-starting-style:scale-95 data-starting-style:opacity-0',\n 'data-[side=bottom]:data-starting-style:-translate-y-1 data-[side=left]:data-starting-style:translate-x-1 data-[side=right]:data-starting-style:-translate-x-1 data-[side=top]:data-starting-style:translate-y-1',\n // exit: instant (was data-[state=closed]:duration-0)\n 'data-ending-style:opacity-0 data-ending-style:duration-0',\n 'data-[variant=default]:bg-gray-12 data-[variant=default]:text-gray-1',\n 'data-[variant=destructive]:bg-red-12 data-[variant=destructive]:text-red-1',\n className,\n )}\n {...props}\n >\n {children}\n {!hideArrow && (\n <TooltipPrimitive.Arrow\n data-variant={variant}\n className={cn(\n 'z-50',\n // svg tip points up; rotate per side, overlap 2px for a seamless join\n 'data-[side=bottom]:top-[-8px]',\n 'data-[side=top]:bottom-[-8px] data-[side=top]:rotate-180',\n 'data-[side=left]:right-[-13px] data-[side=left]:rotate-90',\n 'data-[side=right]:left-[-13px] data-[side=right]:-rotate-90',\n 'data-[variant=default]:text-gray-12',\n 'data-[variant=destructive]:text-red-12',\n )}\n >\n <svg fill=\"none\" height=\"10\" viewBox=\"0 0 20 10\" width=\"20\">\n <path\n d=\"M9.66437 2.60207L4.80758 6.97318C4.07308 7.63423 3.11989 8 2.13172 8H0V10H20V8H18.5349C17.5468 8 16.5936 7.63423 15.8591 6.97318L11.0023 2.60207C10.622 2.2598 10.0447 2.25979 9.66437 2.60207Z\"\n fill=\"currentColor\"\n />\n </svg>\n </TooltipPrimitive.Arrow>\n )}\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n )\n}\n\ninterface InfoTooltipProps {\n content: string\n label: string\n 'aria-label'?: string\n}\n\nconst InfoTooltip = ({\n content,\n label,\n 'aria-label': ariaLabel,\n}: InfoTooltipProps) => {\n return (\n <Tooltip>\n <TooltipTrigger\n render={\n <button\n aria-label={ariaLabel ?? label}\n className=\"touch-target inline-flex size-6 min-h-[24px] min-w-[24px] shrink-0 cursor-help items-center justify-center rounded-full p-0 text-gray-light transition-colors hover:text-gray focus-visible:ring-2 focus-visible:ring-primary focus-visible:outline-none\"\n type=\"button\"\n />\n }\n >\n <Info className=\"text-sm!\" />\n </TooltipTrigger>\n <TooltipContent className=\"max-w-xs whitespace-pre-line\">\n {content}\n </TooltipContent>\n </Tooltip>\n )\n}\n\nexport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n TooltipPortal,\n InfoTooltip,\n}\n"],"mappings":";;;;;;;AAKA,MAAM,mBAAmB,EACvB,QAAQ,GACR,GAAG,YACyD;CAC5D,OAAO,oBAACA,UAAiB,UAAlB;EAAkC;EAAO,GAAI;CAAQ,CAAA;AAC9D;AAEA,MAAM,iBAAiB,EACrB,GAAG,YACuD;CAC1D,OAAO,oBAACA,UAAiB,QAAlB;EAAyB,aAAU;EAAiB,GAAI;CAAQ,CAAA;AACzE;AAIA,MAAM,WAAW,EAAE,GAAG,YAA0B;CAC9C,OAAO,oBAACA,UAAiB,MAAlB,EAAuB,GAAI,MAAQ,CAAA;AAC5C;AAEA,MAAM,kBAAkB,EACtB,GAAG,YACwD;CAC3D,OAAO,oBAACA,UAAiB,SAAlB;EAA0B,aAAU;EAAkB,GAAI;CAAQ,CAAA;AAC3E;AAWA,MAAM,kBAAkB,EACtB,WACA,YAAY,OACZ,UAAU,WACV,UACA,OACA,aACA,MACA,aAAa,GACb,GAAG,YACsB;CACzB,OACE,oBAACA,UAAiB,QAAlB,EAAA,UACE,oBAACA,UAAiB,YAAlB;EACS;EACM;EACb,WAAU;EACJ;EACM;YAEZ,qBAACA,UAAiB,OAAlB;GACE,aAAU;GACV,gBAAc;GACd,WAAW,GACT,gIAEA,8DACA,mNAEA,4DACA,wEACA,8EACA,SACF;GACA,GAAI;aAdN,CAgBG,UACA,CAAC,aACA,oBAACA,UAAiB,OAAlB;IACE,gBAAc;IACd,WAAW,GACT,QAEA,iCACA,4DACA,6DACA,+DACA,uCACA,wCACF;cAEA,oBAAC,OAAD;KAAK,MAAK;KAAO,QAAO;KAAK,SAAQ;KAAY,OAAM;eACrD,oBAAC,QAAD;MACE,GAAE;MACF,MAAK;KACN,CAAA;IACE,CAAA;GACiB,CAAA,CAEJ;;CACG,CAAA,EACN,CAAA;AAE7B;AAQA,MAAM,eAAe,EACnB,SACA,OACA,cAAc,gBACQ;CACtB,OACE,qBAAC,SAAD,EAAA,UAAA,CACE,oBAAC,gBAAD;EACE,QACE,oBAAC,UAAD;GACE,cAAY,aAAa;GACzB,WAAU;GACV,MAAK;EACN,CAAA;YAGH,oBAAC,MAAD,EAAM,WAAU,WAAY,CAAA;CACd,CAAA,GAChB,oBAAC,gBAAD;EAAgB,WAAU;YACvB;CACa,CAAA,CACT,EAAA,CAAA;AAEb"}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  let react_jsx_runtime = require("react/jsx-runtime");
4
4
  let cnfast = require("cnfast");
5
5
  //#region src/components/typography.tsx
6
- const PowerValue = ({ "aria-label": ariaLabel = "Live power draw reported by the device", ...props }) => {
6
+ const PowerValue = ({ "aria-label": ariaLabel, ...props }) => {
7
7
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
8
8
  className: "text-3xl font-bold text-gray tabular-nums",
9
9
  "aria-label": ariaLabel,
@@ -1 +1 @@
1
- {"version":3,"file":"typography.cjs","names":[],"sources":["../../src/components/typography.tsx"],"sourcesContent":["import { cn } from '../utils/cn'\n\nconst PowerValue = ({\n 'aria-label': ariaLabel = 'Live power draw reported by the device',\n ...props\n}: React.ComponentProps<'h2'>) => {\n return (\n <h2\n className=\"text-3xl font-bold text-gray tabular-nums\"\n aria-label={ariaLabel}\n {...props}\n />\n )\n}\n\nconst PageTitle = ({ className, ...props }: React.ComponentProps<'h2'>) => {\n return (\n <h2\n className={cn('text-xl font-bold wrap-break-word', className)}\n {...props}\n />\n )\n}\n\nconst SectionTitle = ({ className, ...props }: React.ComponentProps<'h2'>) => {\n return (\n <h3 className={cn('text-base font-bold text-gray', className)} {...props} />\n )\n}\n\nconst SectionDescription = ({\n className,\n ...props\n}: React.ComponentProps<'p'>) => {\n return <p className={cn('text-sm text-gray-light', className)} {...props} />\n}\n\nconst SectionSubtitle = ({\n className,\n ...props\n}: React.ComponentProps<'h3'>) => {\n return (\n <h4\n className={cn(\n 'text-sm font-bold tracking-wider text-gray-light uppercase',\n className,\n )}\n {...props}\n />\n )\n}\n\nconst StateValue = ({ className, ...props }: React.ComponentProps<'span'>) => {\n return (\n <span\n className={cn('text-xl font-black tabular-nums', className)}\n {...props}\n />\n )\n}\n\nexport {\n PowerValue,\n PageTitle,\n SectionTitle,\n SectionDescription,\n SectionSubtitle,\n StateValue,\n}\n"],"mappings":";;;;;AAEA,MAAM,cAAc,EAClB,cAAc,YAAY,0CAC1B,GAAG,YAC6B;CAChC,OACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;EACE,WAAU;EACV,cAAY;EACZ,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,aAAa,EAAE,WAAW,GAAG,YAAwC;CACzE,OACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;EACE,YAAA,GAAA,OAAA,IAAc,qCAAqC,SAAS;EAC5D,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,gBAAgB,EAAE,WAAW,GAAG,YAAwC;CAC5E,OACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;EAAI,YAAA,GAAA,OAAA,IAAc,iCAAiC,SAAS;EAAG,GAAI;CAAQ,CAAA;AAE/E;AAEA,MAAM,sBAAsB,EAC1B,WACA,GAAG,YAC4B;CAC/B,OAAO,iBAAA,GAAA,kBAAA,KAAC,KAAD;EAAG,YAAA,GAAA,OAAA,IAAc,2BAA2B,SAAS;EAAG,GAAI;CAAQ,CAAA;AAC7E;AAEA,MAAM,mBAAmB,EACvB,WACA,GAAG,YAC6B;CAChC,OACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;EACE,YAAA,GAAA,OAAA,IACE,8DACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,cAAc,EAAE,WAAW,GAAG,YAA0C;CAC5E,OACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;EACE,YAAA,GAAA,OAAA,IAAc,mCAAmC,SAAS;EAC1D,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"typography.cjs","names":[],"sources":["../../src/components/typography.tsx"],"sourcesContent":["import { cn } from '../utils/cn'\n\ntype PowerValueProps = Omit<React.ComponentProps<'h2'>, 'aria-label'> & {\n 'aria-label': string\n}\n\nconst PowerValue = ({ 'aria-label': ariaLabel, ...props }: PowerValueProps) => {\n return (\n <h2\n className=\"text-3xl font-bold text-gray tabular-nums\"\n aria-label={ariaLabel}\n {...props}\n />\n )\n}\n\nconst PageTitle = ({ className, ...props }: React.ComponentProps<'h2'>) => {\n return (\n <h2\n className={cn('text-xl font-bold wrap-break-word', className)}\n {...props}\n />\n )\n}\n\nconst SectionTitle = ({ className, ...props }: React.ComponentProps<'h2'>) => {\n return (\n <h3 className={cn('text-base font-bold text-gray', className)} {...props} />\n )\n}\n\nconst SectionDescription = ({\n className,\n ...props\n}: React.ComponentProps<'p'>) => {\n return <p className={cn('text-sm text-gray-light', className)} {...props} />\n}\n\nconst SectionSubtitle = ({\n className,\n ...props\n}: React.ComponentProps<'h3'>) => {\n return (\n <h4\n className={cn(\n 'text-sm font-bold tracking-wider text-gray-light uppercase',\n className,\n )}\n {...props}\n />\n )\n}\n\nconst StateValue = ({ className, ...props }: React.ComponentProps<'span'>) => {\n return (\n <span\n className={cn('text-xl font-black tabular-nums', className)}\n {...props}\n />\n )\n}\n\nexport {\n PowerValue,\n PageTitle,\n SectionTitle,\n SectionDescription,\n SectionSubtitle,\n StateValue,\n}\n"],"mappings":";;;;;AAMA,MAAM,cAAc,EAAE,cAAc,WAAW,GAAG,YAA6B;CAC7E,OACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;EACE,WAAU;EACV,cAAY;EACZ,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,aAAa,EAAE,WAAW,GAAG,YAAwC;CACzE,OACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;EACE,YAAA,GAAA,OAAA,IAAc,qCAAqC,SAAS;EAC5D,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,gBAAgB,EAAE,WAAW,GAAG,YAAwC;CAC5E,OACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;EAAI,YAAA,GAAA,OAAA,IAAc,iCAAiC,SAAS;EAAG,GAAI;CAAQ,CAAA;AAE/E;AAEA,MAAM,sBAAsB,EAC1B,WACA,GAAG,YAC4B;CAC/B,OAAO,iBAAA,GAAA,kBAAA,KAAC,KAAD;EAAG,YAAA,GAAA,OAAA,IAAc,2BAA2B,SAAS;EAAG,GAAI;CAAQ,CAAA;AAC7E;AAEA,MAAM,mBAAmB,EACvB,WACA,GAAG,YAC6B;CAChC,OACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;EACE,YAAA,GAAA,OAAA,IACE,8DACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,cAAc,EAAE,WAAW,GAAG,YAA0C;CAC5E,OACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;EACE,YAAA,GAAA,OAAA,IAAc,mCAAmC,SAAS;EAC1D,GAAI;CACL,CAAA;AAEL"}
@@ -1,10 +1,13 @@
1
1
  "use client";
2
2
 
3
3
  //#region src/components/typography.d.ts
4
+ type PowerValueProps = Omit<React.ComponentProps<'h2'>, 'aria-label'> & {
5
+ 'aria-label': string;
6
+ };
4
7
  declare const PowerValue: ({
5
8
  "aria-label": ariaLabel,
6
9
  ...props
7
- }: React.ComponentProps<"h2">) => import("react/jsx-runtime").JSX.Element;
10
+ }: PowerValueProps) => import("react/jsx-runtime").JSX.Element;
8
11
  declare const PageTitle: ({
9
12
  className,
10
13
  ...props
@@ -1,10 +1,13 @@
1
1
  "use client";
2
2
 
3
3
  //#region src/components/typography.d.ts
4
+ type PowerValueProps = Omit<React.ComponentProps<'h2'>, 'aria-label'> & {
5
+ 'aria-label': string;
6
+ };
4
7
  declare const PowerValue: ({
5
8
  "aria-label": ariaLabel,
6
9
  ...props
7
- }: React.ComponentProps<"h2">) => import("react/jsx-runtime").JSX.Element;
10
+ }: PowerValueProps) => import("react/jsx-runtime").JSX.Element;
8
11
  declare const PageTitle: ({
9
12
  className,
10
13
  ...props
@@ -2,7 +2,7 @@
2
2
  import { cn } from "../utils/cn.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  //#region src/components/typography.tsx
5
- const PowerValue = ({ "aria-label": ariaLabel = "Live power draw reported by the device", ...props }) => {
5
+ const PowerValue = ({ "aria-label": ariaLabel, ...props }) => {
6
6
  return /* @__PURE__ */ jsx("h2", {
7
7
  className: "text-3xl font-bold text-gray tabular-nums",
8
8
  "aria-label": ariaLabel,
@@ -1 +1 @@
1
- {"version":3,"file":"typography.js","names":[],"sources":["../../src/components/typography.tsx"],"sourcesContent":["import { cn } from '../utils/cn'\n\nconst PowerValue = ({\n 'aria-label': ariaLabel = 'Live power draw reported by the device',\n ...props\n}: React.ComponentProps<'h2'>) => {\n return (\n <h2\n className=\"text-3xl font-bold text-gray tabular-nums\"\n aria-label={ariaLabel}\n {...props}\n />\n )\n}\n\nconst PageTitle = ({ className, ...props }: React.ComponentProps<'h2'>) => {\n return (\n <h2\n className={cn('text-xl font-bold wrap-break-word', className)}\n {...props}\n />\n )\n}\n\nconst SectionTitle = ({ className, ...props }: React.ComponentProps<'h2'>) => {\n return (\n <h3 className={cn('text-base font-bold text-gray', className)} {...props} />\n )\n}\n\nconst SectionDescription = ({\n className,\n ...props\n}: React.ComponentProps<'p'>) => {\n return <p className={cn('text-sm text-gray-light', className)} {...props} />\n}\n\nconst SectionSubtitle = ({\n className,\n ...props\n}: React.ComponentProps<'h3'>) => {\n return (\n <h4\n className={cn(\n 'text-sm font-bold tracking-wider text-gray-light uppercase',\n className,\n )}\n {...props}\n />\n )\n}\n\nconst StateValue = ({ className, ...props }: React.ComponentProps<'span'>) => {\n return (\n <span\n className={cn('text-xl font-black tabular-nums', className)}\n {...props}\n />\n )\n}\n\nexport {\n PowerValue,\n PageTitle,\n SectionTitle,\n SectionDescription,\n SectionSubtitle,\n StateValue,\n}\n"],"mappings":";;;;AAEA,MAAM,cAAc,EAClB,cAAc,YAAY,0CAC1B,GAAG,YAC6B;CAChC,OACE,oBAAC,MAAD;EACE,WAAU;EACV,cAAY;EACZ,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,aAAa,EAAE,WAAW,GAAG,YAAwC;CACzE,OACE,oBAAC,MAAD;EACE,WAAW,GAAG,qCAAqC,SAAS;EAC5D,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,gBAAgB,EAAE,WAAW,GAAG,YAAwC;CAC5E,OACE,oBAAC,MAAD;EAAI,WAAW,GAAG,iCAAiC,SAAS;EAAG,GAAI;CAAQ,CAAA;AAE/E;AAEA,MAAM,sBAAsB,EAC1B,WACA,GAAG,YAC4B;CAC/B,OAAO,oBAAC,KAAD;EAAG,WAAW,GAAG,2BAA2B,SAAS;EAAG,GAAI;CAAQ,CAAA;AAC7E;AAEA,MAAM,mBAAmB,EACvB,WACA,GAAG,YAC6B;CAChC,OACE,oBAAC,MAAD;EACE,WAAW,GACT,8DACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,cAAc,EAAE,WAAW,GAAG,YAA0C;CAC5E,OACE,oBAAC,QAAD;EACE,WAAW,GAAG,mCAAmC,SAAS;EAC1D,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"typography.js","names":[],"sources":["../../src/components/typography.tsx"],"sourcesContent":["import { cn } from '../utils/cn'\n\ntype PowerValueProps = Omit<React.ComponentProps<'h2'>, 'aria-label'> & {\n 'aria-label': string\n}\n\nconst PowerValue = ({ 'aria-label': ariaLabel, ...props }: PowerValueProps) => {\n return (\n <h2\n className=\"text-3xl font-bold text-gray tabular-nums\"\n aria-label={ariaLabel}\n {...props}\n />\n )\n}\n\nconst PageTitle = ({ className, ...props }: React.ComponentProps<'h2'>) => {\n return (\n <h2\n className={cn('text-xl font-bold wrap-break-word', className)}\n {...props}\n />\n )\n}\n\nconst SectionTitle = ({ className, ...props }: React.ComponentProps<'h2'>) => {\n return (\n <h3 className={cn('text-base font-bold text-gray', className)} {...props} />\n )\n}\n\nconst SectionDescription = ({\n className,\n ...props\n}: React.ComponentProps<'p'>) => {\n return <p className={cn('text-sm text-gray-light', className)} {...props} />\n}\n\nconst SectionSubtitle = ({\n className,\n ...props\n}: React.ComponentProps<'h3'>) => {\n return (\n <h4\n className={cn(\n 'text-sm font-bold tracking-wider text-gray-light uppercase',\n className,\n )}\n {...props}\n />\n )\n}\n\nconst StateValue = ({ className, ...props }: React.ComponentProps<'span'>) => {\n return (\n <span\n className={cn('text-xl font-black tabular-nums', className)}\n {...props}\n />\n )\n}\n\nexport {\n PowerValue,\n PageTitle,\n SectionTitle,\n SectionDescription,\n SectionSubtitle,\n StateValue,\n}\n"],"mappings":";;;;AAMA,MAAM,cAAc,EAAE,cAAc,WAAW,GAAG,YAA6B;CAC7E,OACE,oBAAC,MAAD;EACE,WAAU;EACV,cAAY;EACZ,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,aAAa,EAAE,WAAW,GAAG,YAAwC;CACzE,OACE,oBAAC,MAAD;EACE,WAAW,GAAG,qCAAqC,SAAS;EAC5D,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,gBAAgB,EAAE,WAAW,GAAG,YAAwC;CAC5E,OACE,oBAAC,MAAD;EAAI,WAAW,GAAG,iCAAiC,SAAS;EAAG,GAAI;CAAQ,CAAA;AAE/E;AAEA,MAAM,sBAAsB,EAC1B,WACA,GAAG,YAC4B;CAC/B,OAAO,oBAAC,KAAD;EAAG,WAAW,GAAG,2BAA2B,SAAS;EAAG,GAAI;CAAQ,CAAA;AAC7E;AAEA,MAAM,mBAAmB,EACvB,WACA,GAAG,YAC6B;CAChC,OACE,oBAAC,MAAD;EACE,WAAW,GACT,8DACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,cAAc,EAAE,WAAW,GAAG,YAA0C;CAC5E,OACE,oBAAC,QAAD;EACE,WAAW,GAAG,mCAAmC,SAAS;EAC1D,GAAI;CACL,CAAA;AAEL"}
@@ -0,0 +1,57 @@
1
+ "use client";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ let react_jsx_runtime = require("react/jsx-runtime");
4
+ let cnfast = require("cnfast");
5
+ //#region src/components/wizard-layout.tsx
6
+ const WizardLayout = ({ className, ...rest }) => {
7
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
8
+ className: (0, cnfast.cn)("flex flex-col gap-[calc(var(--spark-layout-gap)*6)]", className),
9
+ ...rest
10
+ });
11
+ };
12
+ const WizardLayoutHeader = ({ className, ...rest }) => {
13
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
14
+ className: (0, cnfast.cn)("flex flex-col gap-[calc(var(--spark-layout-gap)*3)] pt-4", className),
15
+ ...rest
16
+ });
17
+ };
18
+ const WizardLayoutHeading = ({ className, ...rest }) => {
19
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
20
+ className: (0, cnfast.cn)("flex flex-col gap-[calc(var(--spark-layout-gap)*1)]", className),
21
+ ...rest
22
+ });
23
+ };
24
+ const WizardLayoutTitleRow = ({ className, ...rest }) => {
25
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
26
+ className: (0, cnfast.cn)("flex items-center justify-between", className),
27
+ ...rest
28
+ });
29
+ };
30
+ const WizardLayoutTitle = ({ className, ...rest }) => {
31
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
32
+ className: (0, cnfast.cn)("text-lg font-bold text-gray", className),
33
+ ...rest
34
+ });
35
+ };
36
+ const WizardLayoutDescription = ({ className, ...rest }) => {
37
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
38
+ className: (0, cnfast.cn)("text-sm text-gray-light", className),
39
+ ...rest
40
+ });
41
+ };
42
+ const WizardLayoutFooter = ({ className, ...rest }) => {
43
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
44
+ className: (0, cnfast.cn)("flex items-center justify-between", className),
45
+ ...rest
46
+ });
47
+ };
48
+ //#endregion
49
+ exports.WizardLayout = WizardLayout;
50
+ exports.WizardLayoutDescription = WizardLayoutDescription;
51
+ exports.WizardLayoutFooter = WizardLayoutFooter;
52
+ exports.WizardLayoutHeader = WizardLayoutHeader;
53
+ exports.WizardLayoutHeading = WizardLayoutHeading;
54
+ exports.WizardLayoutTitle = WizardLayoutTitle;
55
+ exports.WizardLayoutTitleRow = WizardLayoutTitleRow;
56
+
57
+ //# sourceMappingURL=wizard-layout.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard-layout.cjs","names":[],"sources":["../../src/components/wizard-layout.tsx"],"sourcesContent":["import { cn } from '../utils/cn'\n\nconst WizardLayout = ({ className, ...rest }: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn(\n 'flex flex-col gap-[calc(var(--spark-layout-gap)*6)]',\n className,\n )}\n {...rest}\n />\n )\n}\n\nconst WizardLayoutHeader = ({\n className,\n ...rest\n}: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn(\n 'flex flex-col gap-[calc(var(--spark-layout-gap)*3)] pt-4',\n className,\n )}\n {...rest}\n />\n )\n}\n\nconst WizardLayoutHeading = ({\n className,\n ...rest\n}: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn(\n 'flex flex-col gap-[calc(var(--spark-layout-gap)*1)]',\n className,\n )}\n {...rest}\n />\n )\n}\n\nconst WizardLayoutTitleRow = ({\n className,\n ...rest\n}: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn('flex items-center justify-between', className)}\n {...rest}\n />\n )\n}\n\nconst WizardLayoutTitle = ({\n className,\n ...rest\n}: React.ComponentProps<'h2'>) => {\n return (\n <h2 className={cn('text-lg font-bold text-gray', className)} {...rest} />\n )\n}\n\nconst WizardLayoutDescription = ({\n className,\n ...rest\n}: React.ComponentProps<'p'>) => {\n return <p className={cn('text-sm text-gray-light', className)} {...rest} />\n}\n\nconst WizardLayoutFooter = ({\n className,\n ...rest\n}: React.ComponentProps<'div'>) => {\n return (\n <div\n className={cn('flex items-center justify-between', className)}\n {...rest}\n />\n )\n}\n\nexport {\n WizardLayout,\n WizardLayoutHeader,\n WizardLayoutHeading,\n WizardLayoutTitleRow,\n WizardLayoutTitle,\n WizardLayoutDescription,\n WizardLayoutFooter,\n}\n"],"mappings":";;;;;AAEA,MAAM,gBAAgB,EAAE,WAAW,GAAG,WAAwC;CAC5E,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,YAAA,GAAA,OAAA,IACE,uDACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,sBAAsB,EAC1B,WACA,GAAG,WAC8B;CACjC,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,YAAA,GAAA,OAAA,IACE,4DACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,uBAAuB,EAC3B,WACA,GAAG,WAC8B;CACjC,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,YAAA,GAAA,OAAA,IACE,uDACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,wBAAwB,EAC5B,WACA,GAAG,WAC8B;CACjC,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,YAAA,GAAA,OAAA,IAAc,qCAAqC,SAAS;EAC5D,GAAI;CACL,CAAA;AAEL;AAEA,MAAM,qBAAqB,EACzB,WACA,GAAG,WAC6B;CAChC,OACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;EAAI,YAAA,GAAA,OAAA,IAAc,+BAA+B,SAAS;EAAG,GAAI;CAAO,CAAA;AAE5E;AAEA,MAAM,2BAA2B,EAC/B,WACA,GAAG,WAC4B;CAC/B,OAAO,iBAAA,GAAA,kBAAA,KAAC,KAAD;EAAG,YAAA,GAAA,OAAA,IAAc,2BAA2B,SAAS;EAAG,GAAI;CAAO,CAAA;AAC5E;AAEA,MAAM,sBAAsB,EAC1B,WACA,GAAG,WAC8B;CACjC,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,YAAA,GAAA,OAAA,IAAc,qCAAqC,SAAS;EAC5D,GAAI;CACL,CAAA;AAEL"}
@@ -0,0 +1,34 @@
1
+ "use client";
2
+
3
+ //#region src/components/wizard-layout.d.ts
4
+ declare const WizardLayout: ({
5
+ className,
6
+ ...rest
7
+ }: React.ComponentProps<"div">) => import("react/jsx-runtime").JSX.Element;
8
+ declare const WizardLayoutHeader: ({
9
+ className,
10
+ ...rest
11
+ }: React.ComponentProps<"div">) => import("react/jsx-runtime").JSX.Element;
12
+ declare const WizardLayoutHeading: ({
13
+ className,
14
+ ...rest
15
+ }: React.ComponentProps<"div">) => import("react/jsx-runtime").JSX.Element;
16
+ declare const WizardLayoutTitleRow: ({
17
+ className,
18
+ ...rest
19
+ }: React.ComponentProps<"div">) => import("react/jsx-runtime").JSX.Element;
20
+ declare const WizardLayoutTitle: ({
21
+ className,
22
+ ...rest
23
+ }: React.ComponentProps<"h2">) => import("react/jsx-runtime").JSX.Element;
24
+ declare const WizardLayoutDescription: ({
25
+ className,
26
+ ...rest
27
+ }: React.ComponentProps<"p">) => import("react/jsx-runtime").JSX.Element;
28
+ declare const WizardLayoutFooter: ({
29
+ className,
30
+ ...rest
31
+ }: React.ComponentProps<"div">) => import("react/jsx-runtime").JSX.Element;
32
+ //#endregion
33
+ export { WizardLayout, WizardLayoutDescription, WizardLayoutFooter, WizardLayoutHeader, WizardLayoutHeading, WizardLayoutTitle, WizardLayoutTitleRow };
34
+ //# sourceMappingURL=wizard-layout.d.cts.map
@@ -0,0 +1,34 @@
1
+ "use client";
2
+
3
+ //#region src/components/wizard-layout.d.ts
4
+ declare const WizardLayout: ({
5
+ className,
6
+ ...rest
7
+ }: React.ComponentProps<"div">) => import("react/jsx-runtime").JSX.Element;
8
+ declare const WizardLayoutHeader: ({
9
+ className,
10
+ ...rest
11
+ }: React.ComponentProps<"div">) => import("react/jsx-runtime").JSX.Element;
12
+ declare const WizardLayoutHeading: ({
13
+ className,
14
+ ...rest
15
+ }: React.ComponentProps<"div">) => import("react/jsx-runtime").JSX.Element;
16
+ declare const WizardLayoutTitleRow: ({
17
+ className,
18
+ ...rest
19
+ }: React.ComponentProps<"div">) => import("react/jsx-runtime").JSX.Element;
20
+ declare const WizardLayoutTitle: ({
21
+ className,
22
+ ...rest
23
+ }: React.ComponentProps<"h2">) => import("react/jsx-runtime").JSX.Element;
24
+ declare const WizardLayoutDescription: ({
25
+ className,
26
+ ...rest
27
+ }: React.ComponentProps<"p">) => import("react/jsx-runtime").JSX.Element;
28
+ declare const WizardLayoutFooter: ({
29
+ className,
30
+ ...rest
31
+ }: React.ComponentProps<"div">) => import("react/jsx-runtime").JSX.Element;
32
+ //#endregion
33
+ export { WizardLayout, WizardLayoutDescription, WizardLayoutFooter, WizardLayoutHeader, WizardLayoutHeading, WizardLayoutTitle, WizardLayoutTitleRow };
34
+ //# sourceMappingURL=wizard-layout.d.ts.map