@epilot/spark-ui 0.16.0 → 0.17.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 (188) hide show
  1. package/dist/components/accordion.cjs +3 -6
  2. package/dist/components/accordion.cjs.map +1 -1
  3. package/dist/components/accordion.d.ts +1 -1
  4. package/dist/components/accordion.js +3 -6
  5. package/dist/components/accordion.js.map +1 -1
  6. package/dist/components/alert-dialog.cjs +4 -5
  7. package/dist/components/alert-dialog.cjs.map +1 -1
  8. package/dist/components/alert-dialog.js +4 -5
  9. package/dist/components/alert-dialog.js.map +1 -1
  10. package/dist/components/autocomplete.cjs +161 -0
  11. package/dist/components/autocomplete.cjs.map +1 -0
  12. package/dist/components/autocomplete.d.cts +76 -0
  13. package/dist/components/autocomplete.d.ts +76 -0
  14. package/dist/components/autocomplete.js +143 -0
  15. package/dist/components/autocomplete.js.map +1 -0
  16. package/dist/components/avatar.js +1 -1
  17. package/dist/components/badge.js +1 -1
  18. package/dist/components/bar-chart.js +1 -1
  19. package/dist/components/battery-progress-row.cjs +14 -11
  20. package/dist/components/battery-progress-row.cjs.map +1 -1
  21. package/dist/components/battery-progress-row.d.cts +2 -10
  22. package/dist/components/battery-progress-row.d.ts +2 -10
  23. package/dist/components/battery-progress-row.js +14 -11
  24. package/dist/components/battery-progress-row.js.map +1 -1
  25. package/dist/components/box.js +1 -1
  26. package/dist/components/bubble.d.cts +1 -1
  27. package/dist/components/bubble.d.ts +1 -1
  28. package/dist/components/button-group.js +1 -1
  29. package/dist/components/button.cjs +6 -6
  30. package/dist/components/button.cjs.map +1 -1
  31. package/dist/components/button.d.cts +2 -2
  32. package/dist/components/button.d.ts +2 -2
  33. package/dist/components/button.js +7 -7
  34. package/dist/components/button.js.map +1 -1
  35. package/dist/components/calendar.cjs +4 -5
  36. package/dist/components/calendar.cjs.map +1 -1
  37. package/dist/components/calendar.js +4 -5
  38. package/dist/components/calendar.js.map +1 -1
  39. package/dist/components/callout.cjs +18 -14
  40. package/dist/components/callout.cjs.map +1 -1
  41. package/dist/components/callout.d.cts +10 -4
  42. package/dist/components/callout.d.ts +10 -4
  43. package/dist/components/callout.js +18 -15
  44. package/dist/components/callout.js.map +1 -1
  45. package/dist/components/card.js +1 -1
  46. package/dist/components/checkbox.js +1 -1
  47. package/dist/components/device-card.cjs +2 -6
  48. package/dist/components/device-card.cjs.map +1 -1
  49. package/dist/components/device-card.d.cts +3 -3
  50. package/dist/components/device-card.d.ts +3 -3
  51. package/dist/components/device-card.js +2 -6
  52. package/dist/components/device-card.js.map +1 -1
  53. package/dist/components/dialog.cjs +2 -5
  54. package/dist/components/dialog.cjs.map +1 -1
  55. package/dist/components/dialog.js +2 -5
  56. package/dist/components/dialog.js.map +1 -1
  57. package/dist/components/dropdown-menu.cjs +4 -13
  58. package/dist/components/dropdown-menu.cjs.map +1 -1
  59. package/dist/components/dropdown-menu.js +4 -13
  60. package/dist/components/dropdown-menu.js.map +1 -1
  61. package/dist/components/empty-state.cjs +5 -5
  62. package/dist/components/empty-state.cjs.map +1 -1
  63. package/dist/components/empty-state.d.cts +3 -3
  64. package/dist/components/empty-state.d.ts +3 -3
  65. package/dist/components/empty-state.js +5 -5
  66. package/dist/components/empty-state.js.map +1 -1
  67. package/dist/components/icon.cjs +2 -3
  68. package/dist/components/icon.cjs.map +1 -1
  69. package/dist/components/icon.d.cts +0 -3
  70. package/dist/components/icon.d.ts +0 -3
  71. package/dist/components/icon.js +3 -4
  72. package/dist/components/icon.js.map +1 -1
  73. package/dist/components/info-block.d.cts +1 -1
  74. package/dist/components/info-block.d.ts +1 -1
  75. package/dist/components/input-otp.cjs +1 -1
  76. package/dist/components/input-otp.js +1 -1
  77. package/dist/components/input.cjs +1 -1
  78. package/dist/components/input.js +1 -1
  79. package/dist/components/line-chart.cjs +1 -1
  80. package/dist/components/line-chart.js +2 -2
  81. package/dist/components/list.cjs.map +1 -1
  82. package/dist/components/list.js.map +1 -1
  83. package/dist/components/marker.d.cts +1 -1
  84. package/dist/components/marker.d.ts +1 -1
  85. package/dist/components/message-scroller.cjs +3 -3
  86. package/dist/components/message-scroller.cjs.map +1 -1
  87. package/dist/components/message-scroller.js +4 -4
  88. package/dist/components/message-scroller.js.map +1 -1
  89. package/dist/components/metering-row.cjs +3 -3
  90. package/dist/components/metering-row.cjs.map +1 -1
  91. package/dist/components/metering-row.d.cts +3 -3
  92. package/dist/components/metering-row.d.ts +3 -3
  93. package/dist/components/metering-row.js +3 -3
  94. package/dist/components/metering-row.js.map +1 -1
  95. package/dist/components/money-saved-block.cjs +2 -5
  96. package/dist/components/money-saved-block.cjs.map +1 -1
  97. package/dist/components/money-saved-block.js +2 -5
  98. package/dist/components/money-saved-block.js.map +1 -1
  99. package/dist/components/on-off-button.cjs +2 -5
  100. package/dist/components/on-off-button.cjs.map +1 -1
  101. package/dist/components/on-off-button.js +2 -5
  102. package/dist/components/on-off-button.js.map +1 -1
  103. package/dist/components/page-header.cjs +2 -2
  104. package/dist/components/page-header.cjs.map +1 -1
  105. package/dist/components/page-header.d.cts +1 -1
  106. package/dist/components/page-header.d.ts +1 -1
  107. package/dist/components/page-header.js +2 -2
  108. package/dist/components/page-header.js.map +1 -1
  109. package/dist/components/period-tabs.cjs +3 -6
  110. package/dist/components/period-tabs.cjs.map +1 -1
  111. package/dist/components/period-tabs.js +3 -6
  112. package/dist/components/period-tabs.js.map +1 -1
  113. package/dist/components/pill.cjs +2 -5
  114. package/dist/components/pill.cjs.map +1 -1
  115. package/dist/components/pill.js +3 -6
  116. package/dist/components/pill.js.map +1 -1
  117. package/dist/components/power-history-chart.cjs +1 -1
  118. package/dist/components/power-history-chart.js +2 -2
  119. package/dist/components/power-history.cjs +1 -1
  120. package/dist/components/power-history.js +1 -1
  121. package/dist/components/power-network.cjs +3 -6
  122. package/dist/components/power-network.cjs.map +1 -1
  123. package/dist/components/power-network.js +4 -7
  124. package/dist/components/power-network.js.map +1 -1
  125. package/dist/components/radio.js +1 -1
  126. package/dist/components/sankey-chart.cjs +56 -71
  127. package/dist/components/sankey-chart.cjs.map +1 -1
  128. package/dist/components/sankey-chart.js +56 -71
  129. package/dist/components/sankey-chart.js.map +1 -1
  130. package/dist/components/schedule-list.cjs +3 -9
  131. package/dist/components/schedule-list.cjs.map +1 -1
  132. package/dist/components/schedule-list.js +3 -9
  133. package/dist/components/schedule-list.js.map +1 -1
  134. package/dist/components/select.cjs +6 -18
  135. package/dist/components/select.cjs.map +1 -1
  136. package/dist/components/select.js +6 -18
  137. package/dist/components/select.js.map +1 -1
  138. package/dist/components/sheet.cjs +2 -5
  139. package/dist/components/sheet.cjs.map +1 -1
  140. package/dist/components/sheet.js +2 -5
  141. package/dist/components/sheet.js.map +1 -1
  142. package/dist/components/slider.cjs +9 -3
  143. package/dist/components/slider.cjs.map +1 -1
  144. package/dist/components/slider.js +9 -3
  145. package/dist/components/slider.js.map +1 -1
  146. package/dist/components/smart-toggle-button.cjs +2 -5
  147. package/dist/components/smart-toggle-button.cjs.map +1 -1
  148. package/dist/components/smart-toggle-button.js +2 -5
  149. package/dist/components/smart-toggle-button.js.map +1 -1
  150. package/dist/components/solar-forecast-chart.cjs +8 -9
  151. package/dist/components/solar-forecast-chart.cjs.map +1 -1
  152. package/dist/components/solar-forecast-chart.d.cts +2 -2
  153. package/dist/components/solar-forecast-chart.d.ts +2 -2
  154. package/dist/components/solar-forecast-chart.js +8 -9
  155. package/dist/components/solar-forecast-chart.js.map +1 -1
  156. package/dist/components/stepper.cjs +3 -9
  157. package/dist/components/stepper.cjs.map +1 -1
  158. package/dist/components/stepper.js +3 -9
  159. package/dist/components/stepper.js.map +1 -1
  160. package/dist/components/switch.js +1 -1
  161. package/dist/components/tabs.cjs +2 -2
  162. package/dist/components/tabs.cjs.map +1 -1
  163. package/dist/components/tabs.js +2 -2
  164. package/dist/components/tabs.js.map +1 -1
  165. package/dist/components/textarea.cjs +1 -1
  166. package/dist/components/textarea.js +1 -1
  167. package/dist/components/theme.js +1 -1
  168. package/dist/components/toast.cjs +9 -12
  169. package/dist/components/toast.cjs.map +1 -1
  170. package/dist/components/toast.js +9 -12
  171. package/dist/components/toast.js.map +1 -1
  172. package/dist/components/tooltip.cjs +2 -5
  173. package/dist/components/tooltip.cjs.map +1 -1
  174. package/dist/components/tooltip.js +2 -5
  175. package/dist/components/tooltip.js.map +1 -1
  176. package/dist/styles/index.css +0 -2
  177. package/package.json +3 -10
  178. package/dist/icons/index.cjs +0 -7
  179. package/dist/icons/index.d.cts +0 -4
  180. package/dist/icons/index.d.ts +0 -4
  181. package/dist/icons/index.js +0 -3
  182. package/dist/icons/material-symbol.cjs +0 -106
  183. package/dist/icons/material-symbol.cjs.map +0 -1
  184. package/dist/icons/material-symbol.d.cts +0 -21
  185. package/dist/icons/material-symbol.d.ts +0 -21
  186. package/dist/icons/material-symbol.js +0 -102
  187. package/dist/icons/material-symbol.js.map +0 -1
  188. package/dist/styles/material-symbol.css +0 -25
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const require_chunk = require("../chunk-DY84GLCh.cjs");
4
- const require_icons_material_symbol = require("../icons/material-symbol.cjs");
5
- let _base_ui_react_accordion = require("@base-ui/react/accordion");
6
4
  let react = require("react");
7
5
  react = require_chunk.__toESM(react);
6
+ let _base_ui_react_accordion = require("@base-ui/react/accordion");
7
+ let _epilot_spark_icons = require("@epilot/spark-icons");
8
8
  let react_jsx_runtime = require("react/jsx-runtime");
9
9
  let cnfast = require("cnfast");
10
10
  //#region src/components/accordion.tsx
@@ -30,10 +30,7 @@ function AccordionTrigger({ className, children, ...props }) {
30
30
  "data-slot": "accordion-trigger",
31
31
  className: (0, cnfast.cn)("flex min-h-[2.75rem] flex-1 cursor-pointer items-center justify-between gap-4 py-3 text-left font-medium text-gray-12", "rounded-[inherit] focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden", "disabled:pointer-events-none disabled:opacity-50", "group-data-[variant=outline]/accordion:px-4 group-data-[variant=soft]/accordion:px-4 group-data-[variant=surface]/accordion:px-4", "[&[data-panel-open]>:last-child]:rotate-180", className),
32
32
  ...props,
33
- children: [children, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_material_symbol.MaterialSymbol, {
34
- className: "shrink-0 text-gray-11 transition-transform duration-200 motion-reduce:transition-none",
35
- name: "expand_more"
36
- })]
33
+ children: [children, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_epilot_spark_icons.KeyboardArrowDown, { className: "shrink-0 text-gray-11 transition-transform duration-200 motion-reduce:transition-none" })]
37
34
  })
38
35
  });
39
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.cjs","names":["AccordionPrimitive","MaterialSymbol"],"sources":["../../src/components/accordion.tsx"],"sourcesContent":["import { Accordion as AccordionPrimitive } from '@base-ui/react/accordion'\nimport * as React from 'react'\nimport { MaterialSymbol } from '../icons/material-symbol'\nimport { cn } from '../utils/cn'\n\ntype AccordionVariant = 'ghost' | 'soft' | 'surface' | 'outline'\n\ntype AccordionProps = React.ComponentProps<typeof AccordionPrimitive.Root> & {\n /**\n * Container chrome (neutral):\n * - `ghost` — no border/fill, just the trigger + spacing;\n * - `soft` (default) — separate soft-tinted rounded cards, 2px gap between them;\n * - `surface` — items glued into one bordered panel with an opaque fill;\n * - `outline` — the same glued bordered panel, but no fill (transparent).\n * A `variant` prop, NOT the ambient `data-style` knob — that would cascade into\n * the panel content. Spacing + scaling still come from the ambient knobs.\n */\n variant?: AccordionVariant\n}\n\nfunction Accordion({ className, variant = 'soft', ...props }: AccordionProps) {\n return (\n <AccordionPrimitive.Root\n data-slot=\"accordion\"\n // group/accordion + data-variant drive every item/trigger's per-variant\n // chrome; soft stacks its separate cards with a gap (below).\n data-variant={variant}\n className={cn(\n 'group/accordion',\n // soft = separate cards → stack them with a small (2px) gap. surface/outline\n // glue their items into one bordered panel (default block, no gap).\n 'data-[variant=soft]:flex data-[variant=soft]:flex-col data-[variant=soft]:gap-[calc(var(--spark-layout-gap)*0.5)]',\n className,\n )}\n {...props}\n />\n )\n}\n\ntype AccordionItemProps = React.ComponentProps<typeof AccordionPrimitive.Item>\n\nfunction AccordionItem({ className, ...props }: AccordionItemProps) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\n // NEUTRAL container chrome per the accordion variant (group/accordion) — mirrors\n // ListItem's group-data-[variant=X]/list: block (list.tsx); keep both in sync if\n // this pattern changes. ghost carries no chrome. Radius = rounded-lg (tracks the\n // radius knob but never goes fully round). No text underline / per-item separator\n // anymore.\n\n // soft (default): each item is its own borderless soft-tinted rounded card;\n // the root separates them with a 2px gap (the gap IS the separator).\n 'group-data-[variant=soft]/accordion:rounded-lg group-data-[variant=soft]/accordion:bg-gray-a2 dark:group-data-[variant=soft]/accordion:bg-gray-a3',\n // surface + outline share ONE glued-panel frame: full thin border around the\n // stack (sides on all, top on each as divider/frame, bottom on the last),\n // first/last round the outer corners. surface fills it (opaque bg); outline\n // leaves it transparent.\n 'group-data-[variant=surface]/accordion:bg-gray-2',\n 'group-data-[variant=surface]/accordion:border-x group-data-[variant=surface]/accordion:border-t group-data-[variant=surface]/accordion:border-gray-a6 group-data-[variant=surface]/accordion:first:rounded-t-lg group-data-[variant=surface]/accordion:last:rounded-b-lg group-data-[variant=surface]/accordion:last:border-b',\n 'group-data-[variant=outline]/accordion:border-x group-data-[variant=outline]/accordion:border-t group-data-[variant=outline]/accordion:border-gray-a6 group-data-[variant=outline]/accordion:first:rounded-t-lg group-data-[variant=outline]/accordion:last:rounded-b-lg group-data-[variant=outline]/accordion:last:border-b',\n className,\n )}\n {...props}\n />\n )\n}\n\ntype AccordionTriggerProps = React.ComponentProps<\n typeof AccordionPrimitive.Trigger\n>\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: AccordionTriggerProps) {\n return (\n <AccordionPrimitive.Header className=\"flex rounded-[inherit]\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n // WCAG 2.5.5: min 44px touch target — a HARD floor (min-h-[2.75rem], not\n // min-h-11, which scales below 44px under dense/scaled knobs). py/text still\n // scale with the spacing + scaling knobs, growing the target past 44px.\n // No text underline (was hover:underline).\n 'flex min-h-[2.75rem] flex-1 cursor-pointer items-center justify-between gap-4 py-3 text-left font-medium text-gray-12',\n // focus ring: rounded-[inherit] (relayed through Header, above) so it matches\n // the item's own corner — sits flush against it with zero inset, same idiom as\n // ListItem's full-bleed row (list.tsx).\n 'rounded-[inherit] focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden',\n 'disabled:pointer-events-none disabled:opacity-50',\n // horizontal padding sits INSIDE the chrome (soft/surface/outline); ghost\n // keeps the label flush (\"just plain text and spacing\").\n 'group-data-[variant=outline]/accordion:px-4 group-data-[variant=soft]/accordion:px-4 group-data-[variant=surface]/accordion:px-4',\n // chevron (last child) flips when open\n '[&[data-panel-open]>:last-child]:rotate-180',\n className,\n )}\n {...props}\n >\n {children}\n <MaterialSymbol\n className=\"shrink-0 text-gray-11 transition-transform duration-200 motion-reduce:transition-none\"\n name=\"expand_more\"\n />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\ntype AccordionContentProps = React.ComponentProps<\n typeof AccordionPrimitive.Panel\n>\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: AccordionContentProps) {\n return (\n <AccordionPrimitive.Panel\n data-slot=\"accordion-content\"\n // Base UI sets --accordion-panel-height + starting/ending styles on the\n // panel; the height transition replaces the radix keyframe animation.\n className=\"h-(--accordion-panel-height) overflow-hidden text-sm text-gray-11 transition-[height] duration-200 ease-out data-ending-style:h-0 data-starting-style:h-0 motion-reduce:transition-none\"\n {...props}\n >\n {/* padding aligns with the trigger: flush for ghost, inside the chrome otherwise */}\n <div\n className={cn(\n 'pb-4 group-data-[variant=outline]/accordion:px-4 group-data-[variant=soft]/accordion:px-4 group-data-[variant=surface]/accordion:px-4',\n className,\n )}\n >\n {children}\n </div>\n </AccordionPrimitive.Panel>\n )\n}\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger }\nexport type { AccordionProps, AccordionVariant }\n"],"mappings":";;;;;;;;;;AAoBA,SAAS,UAAU,EAAE,WAAW,UAAU,QAAQ,GAAG,SAAyB;CAC5E,OACE,iBAAA,GAAA,kBAAA,KAACA,yBAAAA,UAAmB,MAApB;EACE,aAAU;EAGV,gBAAc;EACd,YAAA,GAAA,OAAA,IACE,mBAGA,qHACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAIA,SAAS,cAAc,EAAE,WAAW,GAAG,SAA6B;CAClE,OACE,iBAAA,GAAA,kBAAA,KAACA,yBAAAA,UAAmB,MAApB;EACE,aAAU;EACV,YAAA,GAAA,OAAA,IASE,qJAKA,oDACA,iUACA,iUACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAMA,SAAS,iBAAiB,EACxB,WACA,UACA,GAAG,SACqB;CACxB,OACE,iBAAA,GAAA,kBAAA,KAACA,yBAAAA,UAAmB,QAApB;EAA2B,WAAU;YACnC,iBAAA,GAAA,kBAAA,MAACA,yBAAAA,UAAmB,SAApB;GACE,aAAU;GACV,YAAA,GAAA,OAAA,IAKE,yHAIA,mGACA,oDAGA,oIAEA,+CACA,SACF;GACA,GAAI;aApBN,CAsBG,UACD,iBAAA,GAAA,kBAAA,KAACC,8BAAAA,gBAAD;IACE,WAAU;IACV,MAAK;GACN,CAAA,CACyB;;CACH,CAAA;AAE/B;AAMA,SAAS,iBAAiB,EACxB,WACA,UACA,GAAG,SACqB;CACxB,OACE,iBAAA,GAAA,kBAAA,KAACD,yBAAAA,UAAmB,OAApB;EACE,aAAU;EAGV,WAAU;EACV,GAAI;YAGJ,iBAAA,GAAA,kBAAA,KAAC,OAAD;GACE,YAAA,GAAA,OAAA,IACE,yIACA,SACF;GAEC;EACE,CAAA;CACmB,CAAA;AAE9B"}
1
+ {"version":3,"file":"accordion.cjs","names":["AccordionPrimitive","KeyboardArrowDown"],"sources":["../../src/components/accordion.tsx"],"sourcesContent":["import { Accordion as AccordionPrimitive } from '@base-ui/react/accordion'\nimport { KeyboardArrowDown } from '@epilot/spark-icons'\nimport * as React from 'react'\nimport { cn } from '../utils/cn'\n\ntype AccordionVariant = 'ghost' | 'soft' | 'surface' | 'outline'\n\ntype AccordionProps = React.ComponentProps<typeof AccordionPrimitive.Root> & {\n /**\n * Container chrome (neutral):\n * - `ghost` — no border/fill, just the trigger + spacing;\n * - `soft` (default) — separate soft-tinted rounded cards, 2px gap between them;\n * - `surface` — items glued into one bordered panel with an opaque fill;\n * - `outline` — the same glued bordered panel, but no fill (transparent).\n * A `variant` prop, NOT the ambient `data-style` knob — that would cascade into\n * the panel content. Spacing + scaling still come from the ambient knobs.\n */\n variant?: AccordionVariant\n}\n\nfunction Accordion({ className, variant = 'soft', ...props }: AccordionProps) {\n return (\n <AccordionPrimitive.Root\n data-slot=\"accordion\"\n // group/accordion + data-variant drive every item/trigger's per-variant\n // chrome; soft stacks its separate cards with a gap (below).\n data-variant={variant}\n className={cn(\n 'group/accordion',\n // soft = separate cards → stack them with a small (2px) gap. surface/outline\n // glue their items into one bordered panel (default block, no gap).\n 'data-[variant=soft]:flex data-[variant=soft]:flex-col data-[variant=soft]:gap-[calc(var(--spark-layout-gap)*0.5)]',\n className,\n )}\n {...props}\n />\n )\n}\n\ntype AccordionItemProps = React.ComponentProps<typeof AccordionPrimitive.Item>\n\nfunction AccordionItem({ className, ...props }: AccordionItemProps) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\n // NEUTRAL container chrome per the accordion variant (group/accordion) — mirrors\n // ListItem's group-data-[variant=X]/list: block (list.tsx); keep both in sync if\n // this pattern changes. ghost carries no chrome. Radius = rounded-lg (tracks the\n // radius knob but never goes fully round). No text underline / per-item separator\n // anymore.\n\n // soft (default): each item is its own borderless soft-tinted rounded card;\n // the root separates them with a 2px gap (the gap IS the separator).\n 'group-data-[variant=soft]/accordion:rounded-lg group-data-[variant=soft]/accordion:bg-gray-a2 dark:group-data-[variant=soft]/accordion:bg-gray-a3',\n // surface + outline share ONE glued-panel frame: full thin border around the\n // stack (sides on all, top on each as divider/frame, bottom on the last),\n // first/last round the outer corners. surface fills it (opaque bg); outline\n // leaves it transparent.\n 'group-data-[variant=surface]/accordion:bg-gray-2',\n 'group-data-[variant=surface]/accordion:border-x group-data-[variant=surface]/accordion:border-t group-data-[variant=surface]/accordion:border-gray-a6 group-data-[variant=surface]/accordion:first:rounded-t-lg group-data-[variant=surface]/accordion:last:rounded-b-lg group-data-[variant=surface]/accordion:last:border-b',\n 'group-data-[variant=outline]/accordion:border-x group-data-[variant=outline]/accordion:border-t group-data-[variant=outline]/accordion:border-gray-a6 group-data-[variant=outline]/accordion:first:rounded-t-lg group-data-[variant=outline]/accordion:last:rounded-b-lg group-data-[variant=outline]/accordion:last:border-b',\n className,\n )}\n {...props}\n />\n )\n}\n\ntype AccordionTriggerProps = React.ComponentProps<\n typeof AccordionPrimitive.Trigger\n>\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: AccordionTriggerProps) {\n return (\n <AccordionPrimitive.Header className=\"flex rounded-[inherit]\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n // WCAG 2.5.5: min 44px touch target — a HARD floor (min-h-[2.75rem], not\n // min-h-11, which scales below 44px under dense/scaled knobs). py/text still\n // scale with the spacing + scaling knobs, growing the target past 44px.\n // No text underline (was hover:underline).\n 'flex min-h-[2.75rem] flex-1 cursor-pointer items-center justify-between gap-4 py-3 text-left font-medium text-gray-12',\n // focus ring: rounded-[inherit] (relayed through Header, above) so it matches\n // the item's own corner — sits flush against it with zero inset, same idiom as\n // ListItem's full-bleed row (list.tsx).\n 'rounded-[inherit] focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden',\n 'disabled:pointer-events-none disabled:opacity-50',\n // horizontal padding sits INSIDE the chrome (soft/surface/outline); ghost\n // keeps the label flush (\"just plain text and spacing\").\n 'group-data-[variant=outline]/accordion:px-4 group-data-[variant=soft]/accordion:px-4 group-data-[variant=surface]/accordion:px-4',\n // chevron (last child) flips when open\n '[&[data-panel-open]>:last-child]:rotate-180',\n className,\n )}\n {...props}\n >\n {children}\n <KeyboardArrowDown className=\"shrink-0 text-gray-11 transition-transform duration-200 motion-reduce:transition-none\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\ntype AccordionContentProps = React.ComponentProps<\n typeof AccordionPrimitive.Panel\n>\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: AccordionContentProps) {\n return (\n <AccordionPrimitive.Panel\n data-slot=\"accordion-content\"\n // Base UI sets --accordion-panel-height + starting/ending styles on the\n // panel; the height transition replaces the radix keyframe animation.\n className=\"h-(--accordion-panel-height) overflow-hidden text-sm text-gray-11 transition-[height] duration-200 ease-out data-ending-style:h-0 data-starting-style:h-0 motion-reduce:transition-none\"\n {...props}\n >\n {/* padding aligns with the trigger: flush for ghost, inside the chrome otherwise */}\n <div\n className={cn(\n 'pb-4 group-data-[variant=outline]/accordion:px-4 group-data-[variant=soft]/accordion:px-4 group-data-[variant=surface]/accordion:px-4',\n className,\n )}\n >\n {children}\n </div>\n </AccordionPrimitive.Panel>\n )\n}\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger }\nexport type { AccordionProps, AccordionVariant }\n"],"mappings":";;;;;;;;;;AAoBA,SAAS,UAAU,EAAE,WAAW,UAAU,QAAQ,GAAG,SAAyB;CAC5E,OACE,iBAAA,GAAA,kBAAA,KAACA,yBAAAA,UAAmB,MAApB;EACE,aAAU;EAGV,gBAAc;EACd,YAAA,GAAA,OAAA,IACE,mBAGA,qHACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAIA,SAAS,cAAc,EAAE,WAAW,GAAG,SAA6B;CAClE,OACE,iBAAA,GAAA,kBAAA,KAACA,yBAAAA,UAAmB,MAApB;EACE,aAAU;EACV,YAAA,GAAA,OAAA,IASE,qJAKA,oDACA,iUACA,iUACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAMA,SAAS,iBAAiB,EACxB,WACA,UACA,GAAG,SACqB;CACxB,OACE,iBAAA,GAAA,kBAAA,KAACA,yBAAAA,UAAmB,QAApB;EAA2B,WAAU;YACnC,iBAAA,GAAA,kBAAA,MAACA,yBAAAA,UAAmB,SAApB;GACE,aAAU;GACV,YAAA,GAAA,OAAA,IAKE,yHAIA,mGACA,oDAGA,oIAEA,+CACA,SACF;GACA,GAAI;aApBN,CAsBG,UACD,iBAAA,GAAA,kBAAA,KAACC,oBAAAA,mBAAD,EAAmB,WAAU,wFAAyF,CAAA,CAC5F;;CACH,CAAA;AAE/B;AAMA,SAAS,iBAAiB,EACxB,WACA,UACA,GAAG,SACqB;CACxB,OACE,iBAAA,GAAA,kBAAA,KAACD,yBAAAA,UAAmB,OAApB;EACE,aAAU;EAGV,WAAU;EACV,GAAI;YAGJ,iBAAA,GAAA,kBAAA,KAAC,OAAD;GACE,YAAA,GAAA,OAAA,IACE,yIACA,SACF;GAEC;EACE,CAAA;CACmB,CAAA;AAE9B"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
 
3
- import { Accordion as Accordion$1 } from "@base-ui/react/accordion";
4
3
  import * as React$1 from "react";
4
+ import { Accordion as Accordion$1 } from "@base-ui/react/accordion";
5
5
 
6
6
  //#region src/components/accordion.d.ts
7
7
  type AccordionVariant = 'ghost' | 'soft' | 'surface' | 'outline';
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { cn } from "../utils/cn.js";
3
- import { MaterialSymbol } from "../icons/material-symbol.js";
4
- import { Accordion as Accordion$1 } from "@base-ui/react/accordion";
5
3
  import "react";
4
+ import { Accordion as Accordion$1 } from "@base-ui/react/accordion";
5
+ import { KeyboardArrowDown } from "@epilot/spark-icons";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  //#region src/components/accordion.tsx
8
8
  function Accordion({ className, variant = "soft", ...props }) {
@@ -27,10 +27,7 @@ function AccordionTrigger({ className, children, ...props }) {
27
27
  "data-slot": "accordion-trigger",
28
28
  className: cn("flex min-h-[2.75rem] flex-1 cursor-pointer items-center justify-between gap-4 py-3 text-left font-medium text-gray-12", "rounded-[inherit] focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden", "disabled:pointer-events-none disabled:opacity-50", "group-data-[variant=outline]/accordion:px-4 group-data-[variant=soft]/accordion:px-4 group-data-[variant=surface]/accordion:px-4", "[&[data-panel-open]>:last-child]:rotate-180", className),
29
29
  ...props,
30
- children: [children, /* @__PURE__ */ jsx(MaterialSymbol, {
31
- className: "shrink-0 text-gray-11 transition-transform duration-200 motion-reduce:transition-none",
32
- name: "expand_more"
33
- })]
30
+ children: [children, /* @__PURE__ */ jsx(KeyboardArrowDown, { className: "shrink-0 text-gray-11 transition-transform duration-200 motion-reduce:transition-none" })]
34
31
  })
35
32
  });
36
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.js","names":["AccordionPrimitive"],"sources":["../../src/components/accordion.tsx"],"sourcesContent":["import { Accordion as AccordionPrimitive } from '@base-ui/react/accordion'\nimport * as React from 'react'\nimport { MaterialSymbol } from '../icons/material-symbol'\nimport { cn } from '../utils/cn'\n\ntype AccordionVariant = 'ghost' | 'soft' | 'surface' | 'outline'\n\ntype AccordionProps = React.ComponentProps<typeof AccordionPrimitive.Root> & {\n /**\n * Container chrome (neutral):\n * - `ghost` — no border/fill, just the trigger + spacing;\n * - `soft` (default) — separate soft-tinted rounded cards, 2px gap between them;\n * - `surface` — items glued into one bordered panel with an opaque fill;\n * - `outline` — the same glued bordered panel, but no fill (transparent).\n * A `variant` prop, NOT the ambient `data-style` knob — that would cascade into\n * the panel content. Spacing + scaling still come from the ambient knobs.\n */\n variant?: AccordionVariant\n}\n\nfunction Accordion({ className, variant = 'soft', ...props }: AccordionProps) {\n return (\n <AccordionPrimitive.Root\n data-slot=\"accordion\"\n // group/accordion + data-variant drive every item/trigger's per-variant\n // chrome; soft stacks its separate cards with a gap (below).\n data-variant={variant}\n className={cn(\n 'group/accordion',\n // soft = separate cards → stack them with a small (2px) gap. surface/outline\n // glue their items into one bordered panel (default block, no gap).\n 'data-[variant=soft]:flex data-[variant=soft]:flex-col data-[variant=soft]:gap-[calc(var(--spark-layout-gap)*0.5)]',\n className,\n )}\n {...props}\n />\n )\n}\n\ntype AccordionItemProps = React.ComponentProps<typeof AccordionPrimitive.Item>\n\nfunction AccordionItem({ className, ...props }: AccordionItemProps) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\n // NEUTRAL container chrome per the accordion variant (group/accordion) — mirrors\n // ListItem's group-data-[variant=X]/list: block (list.tsx); keep both in sync if\n // this pattern changes. ghost carries no chrome. Radius = rounded-lg (tracks the\n // radius knob but never goes fully round). No text underline / per-item separator\n // anymore.\n\n // soft (default): each item is its own borderless soft-tinted rounded card;\n // the root separates them with a 2px gap (the gap IS the separator).\n 'group-data-[variant=soft]/accordion:rounded-lg group-data-[variant=soft]/accordion:bg-gray-a2 dark:group-data-[variant=soft]/accordion:bg-gray-a3',\n // surface + outline share ONE glued-panel frame: full thin border around the\n // stack (sides on all, top on each as divider/frame, bottom on the last),\n // first/last round the outer corners. surface fills it (opaque bg); outline\n // leaves it transparent.\n 'group-data-[variant=surface]/accordion:bg-gray-2',\n 'group-data-[variant=surface]/accordion:border-x group-data-[variant=surface]/accordion:border-t group-data-[variant=surface]/accordion:border-gray-a6 group-data-[variant=surface]/accordion:first:rounded-t-lg group-data-[variant=surface]/accordion:last:rounded-b-lg group-data-[variant=surface]/accordion:last:border-b',\n 'group-data-[variant=outline]/accordion:border-x group-data-[variant=outline]/accordion:border-t group-data-[variant=outline]/accordion:border-gray-a6 group-data-[variant=outline]/accordion:first:rounded-t-lg group-data-[variant=outline]/accordion:last:rounded-b-lg group-data-[variant=outline]/accordion:last:border-b',\n className,\n )}\n {...props}\n />\n )\n}\n\ntype AccordionTriggerProps = React.ComponentProps<\n typeof AccordionPrimitive.Trigger\n>\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: AccordionTriggerProps) {\n return (\n <AccordionPrimitive.Header className=\"flex rounded-[inherit]\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n // WCAG 2.5.5: min 44px touch target — a HARD floor (min-h-[2.75rem], not\n // min-h-11, which scales below 44px under dense/scaled knobs). py/text still\n // scale with the spacing + scaling knobs, growing the target past 44px.\n // No text underline (was hover:underline).\n 'flex min-h-[2.75rem] flex-1 cursor-pointer items-center justify-between gap-4 py-3 text-left font-medium text-gray-12',\n // focus ring: rounded-[inherit] (relayed through Header, above) so it matches\n // the item's own corner — sits flush against it with zero inset, same idiom as\n // ListItem's full-bleed row (list.tsx).\n 'rounded-[inherit] focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden',\n 'disabled:pointer-events-none disabled:opacity-50',\n // horizontal padding sits INSIDE the chrome (soft/surface/outline); ghost\n // keeps the label flush (\"just plain text and spacing\").\n 'group-data-[variant=outline]/accordion:px-4 group-data-[variant=soft]/accordion:px-4 group-data-[variant=surface]/accordion:px-4',\n // chevron (last child) flips when open\n '[&[data-panel-open]>:last-child]:rotate-180',\n className,\n )}\n {...props}\n >\n {children}\n <MaterialSymbol\n className=\"shrink-0 text-gray-11 transition-transform duration-200 motion-reduce:transition-none\"\n name=\"expand_more\"\n />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\ntype AccordionContentProps = React.ComponentProps<\n typeof AccordionPrimitive.Panel\n>\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: AccordionContentProps) {\n return (\n <AccordionPrimitive.Panel\n data-slot=\"accordion-content\"\n // Base UI sets --accordion-panel-height + starting/ending styles on the\n // panel; the height transition replaces the radix keyframe animation.\n className=\"h-(--accordion-panel-height) overflow-hidden text-sm text-gray-11 transition-[height] duration-200 ease-out data-ending-style:h-0 data-starting-style:h-0 motion-reduce:transition-none\"\n {...props}\n >\n {/* padding aligns with the trigger: flush for ghost, inside the chrome otherwise */}\n <div\n className={cn(\n 'pb-4 group-data-[variant=outline]/accordion:px-4 group-data-[variant=soft]/accordion:px-4 group-data-[variant=surface]/accordion:px-4',\n className,\n )}\n >\n {children}\n </div>\n </AccordionPrimitive.Panel>\n )\n}\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger }\nexport type { AccordionProps, AccordionVariant }\n"],"mappings":";;;;;;;AAoBA,SAAS,UAAU,EAAE,WAAW,UAAU,QAAQ,GAAG,SAAyB;CAC5E,OACE,oBAACA,YAAmB,MAApB;EACE,aAAU;EAGV,gBAAc;EACd,WAAW,GACT,mBAGA,qHACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAIA,SAAS,cAAc,EAAE,WAAW,GAAG,SAA6B;CAClE,OACE,oBAACA,YAAmB,MAApB;EACE,aAAU;EACV,WAAW,GAST,qJAKA,oDACA,iUACA,iUACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAMA,SAAS,iBAAiB,EACxB,WACA,UACA,GAAG,SACqB;CACxB,OACE,oBAACA,YAAmB,QAApB;EAA2B,WAAU;YACnC,qBAACA,YAAmB,SAApB;GACE,aAAU;GACV,WAAW,GAKT,yHAIA,mGACA,oDAGA,oIAEA,+CACA,SACF;GACA,GAAI;aApBN,CAsBG,UACD,oBAAC,gBAAD;IACE,WAAU;IACV,MAAK;GACN,CAAA,CACyB;;CACH,CAAA;AAE/B;AAMA,SAAS,iBAAiB,EACxB,WACA,UACA,GAAG,SACqB;CACxB,OACE,oBAACA,YAAmB,OAApB;EACE,aAAU;EAGV,WAAU;EACV,GAAI;YAGJ,oBAAC,OAAD;GACE,WAAW,GACT,yIACA,SACF;GAEC;EACE,CAAA;CACmB,CAAA;AAE9B"}
1
+ {"version":3,"file":"accordion.js","names":["AccordionPrimitive"],"sources":["../../src/components/accordion.tsx"],"sourcesContent":["import { Accordion as AccordionPrimitive } from '@base-ui/react/accordion'\nimport { KeyboardArrowDown } from '@epilot/spark-icons'\nimport * as React from 'react'\nimport { cn } from '../utils/cn'\n\ntype AccordionVariant = 'ghost' | 'soft' | 'surface' | 'outline'\n\ntype AccordionProps = React.ComponentProps<typeof AccordionPrimitive.Root> & {\n /**\n * Container chrome (neutral):\n * - `ghost` — no border/fill, just the trigger + spacing;\n * - `soft` (default) — separate soft-tinted rounded cards, 2px gap between them;\n * - `surface` — items glued into one bordered panel with an opaque fill;\n * - `outline` — the same glued bordered panel, but no fill (transparent).\n * A `variant` prop, NOT the ambient `data-style` knob — that would cascade into\n * the panel content. Spacing + scaling still come from the ambient knobs.\n */\n variant?: AccordionVariant\n}\n\nfunction Accordion({ className, variant = 'soft', ...props }: AccordionProps) {\n return (\n <AccordionPrimitive.Root\n data-slot=\"accordion\"\n // group/accordion + data-variant drive every item/trigger's per-variant\n // chrome; soft stacks its separate cards with a gap (below).\n data-variant={variant}\n className={cn(\n 'group/accordion',\n // soft = separate cards → stack them with a small (2px) gap. surface/outline\n // glue their items into one bordered panel (default block, no gap).\n 'data-[variant=soft]:flex data-[variant=soft]:flex-col data-[variant=soft]:gap-[calc(var(--spark-layout-gap)*0.5)]',\n className,\n )}\n {...props}\n />\n )\n}\n\ntype AccordionItemProps = React.ComponentProps<typeof AccordionPrimitive.Item>\n\nfunction AccordionItem({ className, ...props }: AccordionItemProps) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\n // NEUTRAL container chrome per the accordion variant (group/accordion) — mirrors\n // ListItem's group-data-[variant=X]/list: block (list.tsx); keep both in sync if\n // this pattern changes. ghost carries no chrome. Radius = rounded-lg (tracks the\n // radius knob but never goes fully round). No text underline / per-item separator\n // anymore.\n\n // soft (default): each item is its own borderless soft-tinted rounded card;\n // the root separates them with a 2px gap (the gap IS the separator).\n 'group-data-[variant=soft]/accordion:rounded-lg group-data-[variant=soft]/accordion:bg-gray-a2 dark:group-data-[variant=soft]/accordion:bg-gray-a3',\n // surface + outline share ONE glued-panel frame: full thin border around the\n // stack (sides on all, top on each as divider/frame, bottom on the last),\n // first/last round the outer corners. surface fills it (opaque bg); outline\n // leaves it transparent.\n 'group-data-[variant=surface]/accordion:bg-gray-2',\n 'group-data-[variant=surface]/accordion:border-x group-data-[variant=surface]/accordion:border-t group-data-[variant=surface]/accordion:border-gray-a6 group-data-[variant=surface]/accordion:first:rounded-t-lg group-data-[variant=surface]/accordion:last:rounded-b-lg group-data-[variant=surface]/accordion:last:border-b',\n 'group-data-[variant=outline]/accordion:border-x group-data-[variant=outline]/accordion:border-t group-data-[variant=outline]/accordion:border-gray-a6 group-data-[variant=outline]/accordion:first:rounded-t-lg group-data-[variant=outline]/accordion:last:rounded-b-lg group-data-[variant=outline]/accordion:last:border-b',\n className,\n )}\n {...props}\n />\n )\n}\n\ntype AccordionTriggerProps = React.ComponentProps<\n typeof AccordionPrimitive.Trigger\n>\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: AccordionTriggerProps) {\n return (\n <AccordionPrimitive.Header className=\"flex rounded-[inherit]\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n // WCAG 2.5.5: min 44px touch target — a HARD floor (min-h-[2.75rem], not\n // min-h-11, which scales below 44px under dense/scaled knobs). py/text still\n // scale with the spacing + scaling knobs, growing the target past 44px.\n // No text underline (was hover:underline).\n 'flex min-h-[2.75rem] flex-1 cursor-pointer items-center justify-between gap-4 py-3 text-left font-medium text-gray-12',\n // focus ring: rounded-[inherit] (relayed through Header, above) so it matches\n // the item's own corner — sits flush against it with zero inset, same idiom as\n // ListItem's full-bleed row (list.tsx).\n 'rounded-[inherit] focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden',\n 'disabled:pointer-events-none disabled:opacity-50',\n // horizontal padding sits INSIDE the chrome (soft/surface/outline); ghost\n // keeps the label flush (\"just plain text and spacing\").\n 'group-data-[variant=outline]/accordion:px-4 group-data-[variant=soft]/accordion:px-4 group-data-[variant=surface]/accordion:px-4',\n // chevron (last child) flips when open\n '[&[data-panel-open]>:last-child]:rotate-180',\n className,\n )}\n {...props}\n >\n {children}\n <KeyboardArrowDown className=\"shrink-0 text-gray-11 transition-transform duration-200 motion-reduce:transition-none\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\ntype AccordionContentProps = React.ComponentProps<\n typeof AccordionPrimitive.Panel\n>\n\nfunction AccordionContent({\n className,\n children,\n ...props\n}: AccordionContentProps) {\n return (\n <AccordionPrimitive.Panel\n data-slot=\"accordion-content\"\n // Base UI sets --accordion-panel-height + starting/ending styles on the\n // panel; the height transition replaces the radix keyframe animation.\n className=\"h-(--accordion-panel-height) overflow-hidden text-sm text-gray-11 transition-[height] duration-200 ease-out data-ending-style:h-0 data-starting-style:h-0 motion-reduce:transition-none\"\n {...props}\n >\n {/* padding aligns with the trigger: flush for ghost, inside the chrome otherwise */}\n <div\n className={cn(\n 'pb-4 group-data-[variant=outline]/accordion:px-4 group-data-[variant=soft]/accordion:px-4 group-data-[variant=surface]/accordion:px-4',\n className,\n )}\n >\n {children}\n </div>\n </AccordionPrimitive.Panel>\n )\n}\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger }\nexport type { AccordionProps, AccordionVariant }\n"],"mappings":";;;;;;;AAoBA,SAAS,UAAU,EAAE,WAAW,UAAU,QAAQ,GAAG,SAAyB;CAC5E,OACE,oBAACA,YAAmB,MAApB;EACE,aAAU;EAGV,gBAAc;EACd,WAAW,GACT,mBAGA,qHACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAIA,SAAS,cAAc,EAAE,WAAW,GAAG,SAA6B;CAClE,OACE,oBAACA,YAAmB,MAApB;EACE,aAAU;EACV,WAAW,GAST,qJAKA,oDACA,iUACA,iUACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAMA,SAAS,iBAAiB,EACxB,WACA,UACA,GAAG,SACqB;CACxB,OACE,oBAACA,YAAmB,QAApB;EAA2B,WAAU;YACnC,qBAACA,YAAmB,SAApB;GACE,aAAU;GACV,WAAW,GAKT,yHAIA,mGACA,oDAGA,oIAEA,+CACA,SACF;GACA,GAAI;aApBN,CAsBG,UACD,oBAAC,mBAAD,EAAmB,WAAU,wFAAyF,CAAA,CAC5F;;CACH,CAAA;AAE/B;AAMA,SAAS,iBAAiB,EACxB,WACA,UACA,GAAG,SACqB;CACxB,OACE,oBAACA,YAAmB,OAApB;EACE,aAAU;EAGV,WAAU;EACV,GAAI;YAGJ,oBAAC,OAAD;GACE,WAAW,GACT,yIACA,SACF;GAEC;EACE,CAAA;CACmB,CAAA;AAE9B"}
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const require_chunk = require("../chunk-DY84GLCh.cjs");
4
- const require_icons_material_symbol = require("../icons/material-symbol.cjs");
5
4
  const require_components_button = require("./button.cjs");
6
5
  let react = require("react");
7
6
  react = require_chunk.__toESM(react);
7
+ let _epilot_spark_icons = require("@epilot/spark-icons");
8
8
  let react_jsx_runtime = require("react/jsx-runtime");
9
9
  let _base_ui_react_alert_dialog = require("@base-ui/react/alert-dialog");
10
10
  let cnfast = require("cnfast");
@@ -77,6 +77,7 @@ function AlertDialogDescription({ className, ...props }) {
77
77
  }
78
78
  function AlertDialogAction({ className, size = "default", styleVariant, color, ...props }) {
79
79
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_button.Button, {
80
+ nativeButton: true,
80
81
  size,
81
82
  styleVariant,
82
83
  color,
@@ -91,6 +92,7 @@ function AlertDialogCancel({ className, size = "default", styleVariant, color, c
91
92
  if (children) {
92
93
  const hasLook = styleVariant !== void 0 || color !== void 0;
93
94
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_button.Button, {
95
+ nativeButton: true,
94
96
  size,
95
97
  styleVariant: hasLook ? styleVariant : "surface",
96
98
  color: hasLook ? color : "neutral",
@@ -114,10 +116,7 @@ function AlertDialogCancel({ className, size = "default", styleVariant, color, c
114
116
  variant: "tertiary"
115
117
  }), "absolute top-2.5 right-2 rounded-full", className),
116
118
  ...props,
117
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons_material_symbol.MaterialSymbol, {
118
- className: "[--spark-icon-size:calc(20px*var(--spark-scaling,1))]",
119
- name: "close"
120
- })
119
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_epilot_spark_icons.Close, { className: "[--spark-icon-size:calc(20px*var(--spark-scaling,1))]" })
121
120
  });
122
121
  }
123
122
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"alert-dialog.cjs","names":["AlertDialogPrimitive","Button","buttonVariants","MaterialSymbol"],"sources":["../../src/components/alert-dialog.tsx"],"sourcesContent":["import { AlertDialog as AlertDialogPrimitive } from '@base-ui/react/alert-dialog'\nimport * as React from 'react'\nimport { MaterialSymbol } from '../icons/material-symbol'\nimport { cn } from '../utils/cn'\nimport { Button, type ButtonProps } from './button'\nimport { buttonVariants } from './button'\n\nfunction AlertDialog(\n props: React.ComponentProps<typeof AlertDialogPrimitive.Root>,\n) {\n return <AlertDialogPrimitive.Root {...props} />\n}\n\nfunction AlertDialogTrigger(\n props: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>,\n) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal(\n props: React.ComponentProps<typeof AlertDialogPrimitive.Portal>,\n) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Backdrop>) {\n return (\n <AlertDialogPrimitive.Backdrop\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n 'fixed top-(--spark-viewport-top,0) right-0 left-0 z-50 h-(--spark-viewport-height,100%) bg-(--color-overlay) transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 motion-reduce:transition-none',\n className,\n )}\n data-overlay=\"true\"\n {...props}\n />\n )\n}\n\ninterface AlertDialogContentProps extends React.ComponentProps<\n typeof AlertDialogPrimitive.Popup\n> {\n size?: 'default' | 'sm'\n}\n\nfunction AlertDialogContent({\n className,\n size = 'default',\n ...props\n}: AlertDialogContentProps) {\n return (\n <AlertDialogPrimitive.Popup\n data-slot=\"alert-dialog-content\"\n data-size={size}\n className={cn(\n 'group/alert-dialog-content fixed top-(--spark-viewport-center-y,50%) left-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-6 rounded-lg bg-gray-2 p-4 text-gray shadow-lg transition-[top,opacity,translate,scale] duration-200 data-[size=default]:max-w-lg data-[size=sm]:max-w-64 motion-reduce:transition-none data-[size=default]:sm:max-w-lg',\n // enter/exit: fade + zoom + a slight upward offset (was animate-in/out)\n 'data-starting-style:translate-y-[-52%] data-starting-style:scale-95 data-starting-style:opacity-0',\n 'data-ending-style:translate-y-[-52%] data-ending-style:scale-95 data-ending-style:opacity-0',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n 'grid grid-rows-[auto_1fr] place-items-center gap-1 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n 'flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogMedia({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n 'inline-flex size-4 h-7 items-center justify-center rounded-md sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*=size-])]:size-4',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\n 'text-lg font-bold text-gray sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn('text-sm text-balance text-gray-light', className)}\n {...props}\n />\n )\n}\n\ninterface AlertDialogActionProps\n extends\n React.ComponentProps<typeof AlertDialogPrimitive.Close>,\n Pick<ButtonProps, 'size' | 'styleVariant' | 'color'> {}\n\n// Base UI has no Action primitive; the confirm button composes Close (radix\n// Action also closed on click) — run the action in onClick. A prop-less Button\n// is the primary look (solid accent), so the confirm just forwards style/color.\nfunction AlertDialogAction({\n className,\n size = 'default',\n styleVariant,\n color,\n ...props\n}: AlertDialogActionProps) {\n return (\n <Button\n size={size}\n styleVariant={styleVariant}\n color={color}\n render={\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-action\"\n className={className}\n {...props}\n />\n }\n />\n )\n}\n\ninterface AlertDialogCancelProps\n extends\n React.ComponentProps<typeof AlertDialogPrimitive.Close>,\n Pick<ButtonProps, 'size' | 'styleVariant' | 'color'> {}\n\n// No children = the ready-made corner X (label is the consumer's, via aria-label);\n// with children it renders as a Button (default surface/neutral, the old secondary\n// look); with a render prop it stays the bare primitive (the consumer supplies the button)\nfunction AlertDialogCancel({\n className,\n size = 'default',\n styleVariant,\n color,\n children,\n ...props\n}: AlertDialogCancelProps) {\n if (children) {\n // Default to the surface/neutral (secondary) look unless the caller pins a\n // style/color of its own.\n const hasLook = styleVariant !== undefined || color !== undefined\n return (\n <Button\n size={size}\n styleVariant={hasLook ? styleVariant : 'surface'}\n color={hasLook ? color : 'neutral'}\n render={\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-cancel\"\n className={className}\n {...props}\n >\n {children}\n </AlertDialogPrimitive.Close>\n }\n />\n )\n }\n\n if (props.render) {\n return (\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-cancel\"\n className={className}\n {...props}\n />\n )\n }\n\n return (\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-cancel\"\n className={cn(\n buttonVariants({ size: 'icon', variant: 'tertiary' }),\n 'absolute top-2.5 right-2 rounded-full',\n className,\n )}\n {...props}\n >\n <MaterialSymbol\n className=\"[--spark-icon-size:calc(20px*var(--spark-scaling,1))]\"\n name=\"close\"\n />\n </AlertDialogPrimitive.Close>\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\nexport type { AlertDialogContentProps }\n"],"mappings":"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"}
1
+ {"version":3,"file":"alert-dialog.cjs","names":["AlertDialogPrimitive","Button","buttonVariants","Close"],"sources":["../../src/components/alert-dialog.tsx"],"sourcesContent":["import { AlertDialog as AlertDialogPrimitive } from '@base-ui/react/alert-dialog'\nimport { Close } from '@epilot/spark-icons'\nimport * as React from 'react'\nimport { cn } from '../utils/cn'\nimport { Button, type ButtonProps } from './button'\nimport { buttonVariants } from './button'\n\nfunction AlertDialog(\n props: React.ComponentProps<typeof AlertDialogPrimitive.Root>,\n) {\n return <AlertDialogPrimitive.Root {...props} />\n}\n\nfunction AlertDialogTrigger(\n props: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>,\n) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal(\n props: React.ComponentProps<typeof AlertDialogPrimitive.Portal>,\n) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Backdrop>) {\n return (\n <AlertDialogPrimitive.Backdrop\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n 'fixed top-(--spark-viewport-top,0) right-0 left-0 z-50 h-(--spark-viewport-height,100%) bg-(--color-overlay) transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 motion-reduce:transition-none',\n className,\n )}\n data-overlay=\"true\"\n {...props}\n />\n )\n}\n\ninterface AlertDialogContentProps extends React.ComponentProps<\n typeof AlertDialogPrimitive.Popup\n> {\n size?: 'default' | 'sm'\n}\n\nfunction AlertDialogContent({\n className,\n size = 'default',\n ...props\n}: AlertDialogContentProps) {\n return (\n <AlertDialogPrimitive.Popup\n data-slot=\"alert-dialog-content\"\n data-size={size}\n className={cn(\n 'group/alert-dialog-content fixed top-(--spark-viewport-center-y,50%) left-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-6 rounded-lg bg-gray-2 p-4 text-gray shadow-lg transition-[top,opacity,translate,scale] duration-200 data-[size=default]:max-w-lg data-[size=sm]:max-w-64 motion-reduce:transition-none data-[size=default]:sm:max-w-lg',\n // enter/exit: fade + zoom + a slight upward offset (was animate-in/out)\n 'data-starting-style:translate-y-[-52%] data-starting-style:scale-95 data-starting-style:opacity-0',\n 'data-ending-style:translate-y-[-52%] data-ending-style:scale-95 data-ending-style:opacity-0',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n 'grid grid-rows-[auto_1fr] place-items-center gap-1 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n 'flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogMedia({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n 'inline-flex size-4 h-7 items-center justify-center rounded-md sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*=size-])]:size-4',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\n 'text-lg font-bold text-gray sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn('text-sm text-balance text-gray-light', className)}\n {...props}\n />\n )\n}\n\ninterface AlertDialogActionProps\n extends\n React.ComponentProps<typeof AlertDialogPrimitive.Close>,\n Pick<ButtonProps, 'size' | 'styleVariant' | 'color'> {}\n\n// Base UI has no Action primitive; the confirm button composes Close (radix\n// Action also closed on click) — run the action in onClick. A prop-less Button\n// is the primary look (solid accent), so the confirm just forwards style/color.\nfunction AlertDialogAction({\n className,\n size = 'default',\n styleVariant,\n color,\n ...props\n}: AlertDialogActionProps) {\n return (\n <Button\n nativeButton\n size={size}\n styleVariant={styleVariant}\n color={color}\n render={\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-action\"\n className={className}\n {...props}\n />\n }\n />\n )\n}\n\ninterface AlertDialogCancelProps\n extends\n React.ComponentProps<typeof AlertDialogPrimitive.Close>,\n Pick<ButtonProps, 'size' | 'styleVariant' | 'color'> {}\n\n// No children = the ready-made corner X (label is the consumer's, via aria-label);\n// with children it renders as a Button (default surface/neutral, the old secondary\n// look); with a render prop it stays the bare primitive (the consumer supplies the button)\nfunction AlertDialogCancel({\n className,\n size = 'default',\n styleVariant,\n color,\n children,\n ...props\n}: AlertDialogCancelProps) {\n if (children) {\n // Default to the surface/neutral (secondary) look unless the caller pins a\n // style/color of its own.\n const hasLook = styleVariant !== undefined || color !== undefined\n return (\n <Button\n nativeButton\n size={size}\n styleVariant={hasLook ? styleVariant : 'surface'}\n color={hasLook ? color : 'neutral'}\n render={\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-cancel\"\n className={className}\n {...props}\n >\n {children}\n </AlertDialogPrimitive.Close>\n }\n />\n )\n }\n\n if (props.render) {\n return (\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-cancel\"\n className={className}\n {...props}\n />\n )\n }\n\n return (\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-cancel\"\n className={cn(\n buttonVariants({ size: 'icon', variant: 'tertiary' }),\n 'absolute top-2.5 right-2 rounded-full',\n className,\n )}\n {...props}\n >\n <Close className=\"[--spark-icon-size:calc(20px*var(--spark-scaling,1))]\" />\n </AlertDialogPrimitive.Close>\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\nexport type { AlertDialogContentProps }\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { cn } from "../utils/cn.js";
3
- import { MaterialSymbol } from "../icons/material-symbol.js";
4
3
  import { Button, buttonVariants } from "./button.js";
5
4
  import "react";
5
+ import { Close } from "@epilot/spark-icons";
6
6
  import { jsx } from "react/jsx-runtime";
7
7
  import { AlertDialog as AlertDialog$1 } from "@base-ui/react/alert-dialog";
8
8
  //#region src/components/alert-dialog.tsx
@@ -74,6 +74,7 @@ function AlertDialogDescription({ className, ...props }) {
74
74
  }
75
75
  function AlertDialogAction({ className, size = "default", styleVariant, color, ...props }) {
76
76
  return /* @__PURE__ */ jsx(Button, {
77
+ nativeButton: true,
77
78
  size,
78
79
  styleVariant,
79
80
  color,
@@ -88,6 +89,7 @@ function AlertDialogCancel({ className, size = "default", styleVariant, color, c
88
89
  if (children) {
89
90
  const hasLook = styleVariant !== void 0 || color !== void 0;
90
91
  return /* @__PURE__ */ jsx(Button, {
92
+ nativeButton: true,
91
93
  size,
92
94
  styleVariant: hasLook ? styleVariant : "surface",
93
95
  color: hasLook ? color : "neutral",
@@ -111,10 +113,7 @@ function AlertDialogCancel({ className, size = "default", styleVariant, color, c
111
113
  variant: "tertiary"
112
114
  }), "absolute top-2.5 right-2 rounded-full", className),
113
115
  ...props,
114
- children: /* @__PURE__ */ jsx(MaterialSymbol, {
115
- className: "[--spark-icon-size:calc(20px*var(--spark-scaling,1))]",
116
- name: "close"
117
- })
116
+ children: /* @__PURE__ */ jsx(Close, { className: "[--spark-icon-size:calc(20px*var(--spark-scaling,1))]" })
118
117
  });
119
118
  }
120
119
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"alert-dialog.js","names":["AlertDialogPrimitive"],"sources":["../../src/components/alert-dialog.tsx"],"sourcesContent":["import { AlertDialog as AlertDialogPrimitive } from '@base-ui/react/alert-dialog'\nimport * as React from 'react'\nimport { MaterialSymbol } from '../icons/material-symbol'\nimport { cn } from '../utils/cn'\nimport { Button, type ButtonProps } from './button'\nimport { buttonVariants } from './button'\n\nfunction AlertDialog(\n props: React.ComponentProps<typeof AlertDialogPrimitive.Root>,\n) {\n return <AlertDialogPrimitive.Root {...props} />\n}\n\nfunction AlertDialogTrigger(\n props: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>,\n) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal(\n props: React.ComponentProps<typeof AlertDialogPrimitive.Portal>,\n) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Backdrop>) {\n return (\n <AlertDialogPrimitive.Backdrop\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n 'fixed top-(--spark-viewport-top,0) right-0 left-0 z-50 h-(--spark-viewport-height,100%) bg-(--color-overlay) transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 motion-reduce:transition-none',\n className,\n )}\n data-overlay=\"true\"\n {...props}\n />\n )\n}\n\ninterface AlertDialogContentProps extends React.ComponentProps<\n typeof AlertDialogPrimitive.Popup\n> {\n size?: 'default' | 'sm'\n}\n\nfunction AlertDialogContent({\n className,\n size = 'default',\n ...props\n}: AlertDialogContentProps) {\n return (\n <AlertDialogPrimitive.Popup\n data-slot=\"alert-dialog-content\"\n data-size={size}\n className={cn(\n 'group/alert-dialog-content fixed top-(--spark-viewport-center-y,50%) left-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-6 rounded-lg bg-gray-2 p-4 text-gray shadow-lg transition-[top,opacity,translate,scale] duration-200 data-[size=default]:max-w-lg data-[size=sm]:max-w-64 motion-reduce:transition-none data-[size=default]:sm:max-w-lg',\n // enter/exit: fade + zoom + a slight upward offset (was animate-in/out)\n 'data-starting-style:translate-y-[-52%] data-starting-style:scale-95 data-starting-style:opacity-0',\n 'data-ending-style:translate-y-[-52%] data-ending-style:scale-95 data-ending-style:opacity-0',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n 'grid grid-rows-[auto_1fr] place-items-center gap-1 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n 'flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogMedia({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n 'inline-flex size-4 h-7 items-center justify-center rounded-md sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*=size-])]:size-4',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\n 'text-lg font-bold text-gray sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn('text-sm text-balance text-gray-light', className)}\n {...props}\n />\n )\n}\n\ninterface AlertDialogActionProps\n extends\n React.ComponentProps<typeof AlertDialogPrimitive.Close>,\n Pick<ButtonProps, 'size' | 'styleVariant' | 'color'> {}\n\n// Base UI has no Action primitive; the confirm button composes Close (radix\n// Action also closed on click) — run the action in onClick. A prop-less Button\n// is the primary look (solid accent), so the confirm just forwards style/color.\nfunction AlertDialogAction({\n className,\n size = 'default',\n styleVariant,\n color,\n ...props\n}: AlertDialogActionProps) {\n return (\n <Button\n size={size}\n styleVariant={styleVariant}\n color={color}\n render={\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-action\"\n className={className}\n {...props}\n />\n }\n />\n )\n}\n\ninterface AlertDialogCancelProps\n extends\n React.ComponentProps<typeof AlertDialogPrimitive.Close>,\n Pick<ButtonProps, 'size' | 'styleVariant' | 'color'> {}\n\n// No children = the ready-made corner X (label is the consumer's, via aria-label);\n// with children it renders as a Button (default surface/neutral, the old secondary\n// look); with a render prop it stays the bare primitive (the consumer supplies the button)\nfunction AlertDialogCancel({\n className,\n size = 'default',\n styleVariant,\n color,\n children,\n ...props\n}: AlertDialogCancelProps) {\n if (children) {\n // Default to the surface/neutral (secondary) look unless the caller pins a\n // style/color of its own.\n const hasLook = styleVariant !== undefined || color !== undefined\n return (\n <Button\n size={size}\n styleVariant={hasLook ? styleVariant : 'surface'}\n color={hasLook ? color : 'neutral'}\n render={\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-cancel\"\n className={className}\n {...props}\n >\n {children}\n </AlertDialogPrimitive.Close>\n }\n />\n )\n }\n\n if (props.render) {\n return (\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-cancel\"\n className={className}\n {...props}\n />\n )\n }\n\n return (\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-cancel\"\n className={cn(\n buttonVariants({ size: 'icon', variant: 'tertiary' }),\n 'absolute top-2.5 right-2 rounded-full',\n className,\n )}\n {...props}\n >\n <MaterialSymbol\n className=\"[--spark-icon-size:calc(20px*var(--spark-scaling,1))]\"\n name=\"close\"\n />\n </AlertDialogPrimitive.Close>\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\nexport type { AlertDialogContentProps }\n"],"mappings":";;;;;;;;AAOA,SAAS,YACP,OACA;CACA,OAAO,oBAACA,cAAqB,MAAtB,EAA2B,GAAI,MAAQ,CAAA;AAChD;AAEA,SAAS,mBACP,OACA;CACA,OACE,oBAACA,cAAqB,SAAtB;EAA8B,aAAU;EAAuB,GAAI;CAAQ,CAAA;AAE/E;AAEA,SAAS,kBACP,OACA;CACA,OACE,oBAACA,cAAqB,QAAtB;EAA6B,aAAU;EAAsB,GAAI;CAAQ,CAAA;AAE7E;AAEA,SAAS,mBAAmB,EAC1B,WACA,GAAG,SAC0D;CAC7D,OACE,oBAACA,cAAqB,UAAtB;EACE,aAAU;EACV,WAAW,GACT,wOACA,SACF;EACA,gBAAa;EACb,GAAI;CACL,CAAA;AAEL;AAQA,SAAS,mBAAmB,EAC1B,WACA,OAAO,WACP,GAAG,SACuB;CAC1B,OACE,oBAACA,cAAqB,OAAtB;EACE,aAAU;EACV,aAAW;EACX,WAAW,GACT,sWAEA,qGACA,+FACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,kBAAkB,EACzB,WACA,GAAG,SAC2B;CAC9B,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,oZACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,kBAAkB,EACzB,WACA,GAAG,SAC2B;CAC9B,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,+JACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,iBAAiB,EACxB,WACA,GAAG,SAC2B;CAC9B,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,iKACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,iBAAiB,EACxB,WACA,GAAG,SACuD;CAC1D,OACE,oBAACA,cAAqB,OAAtB;EACE,aAAU;EACV,WAAW,GACT,2JACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,uBAAuB,EAC9B,WACA,GAAG,SAC6D;CAChE,OACE,oBAACA,cAAqB,aAAtB;EACE,aAAU;EACV,WAAW,GAAG,wCAAwC,SAAS;EAC/D,GAAI;CACL,CAAA;AAEL;AAUA,SAAS,kBAAkB,EACzB,WACA,OAAO,WACP,cACA,OACA,GAAG,SACsB;CACzB,OACE,oBAAC,QAAD;EACQ;EACQ;EACP;EACP,QACE,oBAACA,cAAqB,OAAtB;GACE,aAAU;GACC;GACX,GAAI;EACL,CAAA;CAEJ,CAAA;AAEL;AAUA,SAAS,kBAAkB,EACzB,WACA,OAAO,WACP,cACA,OACA,UACA,GAAG,SACsB;CACzB,IAAI,UAAU;EAGZ,MAAM,UAAU,iBAAiB,KAAA,KAAa,UAAU,KAAA;EACxD,OACE,oBAAC,QAAD;GACQ;GACN,cAAc,UAAU,eAAe;GACvC,OAAO,UAAU,QAAQ;GACzB,QACE,oBAACA,cAAqB,OAAtB;IACE,aAAU;IACC;IACX,GAAI;IAEH;GACyB,CAAA;EAE/B,CAAA;CAEL;CAEA,IAAI,MAAM,QACR,OACE,oBAACA,cAAqB,OAAtB;EACE,aAAU;EACC;EACX,GAAI;CACL,CAAA;CAIL,OACE,oBAACA,cAAqB,OAAtB;EACE,aAAU;EACV,WAAW,GACT,eAAe;GAAE,MAAM;GAAQ,SAAS;EAAW,CAAC,GACpD,yCACA,SACF;EACA,GAAI;YAEJ,oBAAC,gBAAD;GACE,WAAU;GACV,MAAK;EACN,CAAA;CACyB,CAAA;AAEhC"}
1
+ {"version":3,"file":"alert-dialog.js","names":["AlertDialogPrimitive"],"sources":["../../src/components/alert-dialog.tsx"],"sourcesContent":["import { AlertDialog as AlertDialogPrimitive } from '@base-ui/react/alert-dialog'\nimport { Close } from '@epilot/spark-icons'\nimport * as React from 'react'\nimport { cn } from '../utils/cn'\nimport { Button, type ButtonProps } from './button'\nimport { buttonVariants } from './button'\n\nfunction AlertDialog(\n props: React.ComponentProps<typeof AlertDialogPrimitive.Root>,\n) {\n return <AlertDialogPrimitive.Root {...props} />\n}\n\nfunction AlertDialogTrigger(\n props: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>,\n) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal(\n props: React.ComponentProps<typeof AlertDialogPrimitive.Portal>,\n) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Backdrop>) {\n return (\n <AlertDialogPrimitive.Backdrop\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n 'fixed top-(--spark-viewport-top,0) right-0 left-0 z-50 h-(--spark-viewport-height,100%) bg-(--color-overlay) transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 motion-reduce:transition-none',\n className,\n )}\n data-overlay=\"true\"\n {...props}\n />\n )\n}\n\ninterface AlertDialogContentProps extends React.ComponentProps<\n typeof AlertDialogPrimitive.Popup\n> {\n size?: 'default' | 'sm'\n}\n\nfunction AlertDialogContent({\n className,\n size = 'default',\n ...props\n}: AlertDialogContentProps) {\n return (\n <AlertDialogPrimitive.Popup\n data-slot=\"alert-dialog-content\"\n data-size={size}\n className={cn(\n 'group/alert-dialog-content fixed top-(--spark-viewport-center-y,50%) left-[50%] z-50 grid w-full translate-x-[-50%] translate-y-[-50%] gap-6 rounded-lg bg-gray-2 p-4 text-gray shadow-lg transition-[top,opacity,translate,scale] duration-200 data-[size=default]:max-w-lg data-[size=sm]:max-w-64 motion-reduce:transition-none data-[size=default]:sm:max-w-lg',\n // enter/exit: fade + zoom + a slight upward offset (was animate-in/out)\n 'data-starting-style:translate-y-[-52%] data-starting-style:scale-95 data-starting-style:opacity-0',\n 'data-ending-style:translate-y-[-52%] data-ending-style:scale-95 data-ending-style:opacity-0',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n 'grid grid-rows-[auto_1fr] place-items-center gap-1 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n 'flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogMedia({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n 'inline-flex size-4 h-7 items-center justify-center rounded-md sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*=size-])]:size-4',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\n 'text-lg font-bold text-gray sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn('text-sm text-balance text-gray-light', className)}\n {...props}\n />\n )\n}\n\ninterface AlertDialogActionProps\n extends\n React.ComponentProps<typeof AlertDialogPrimitive.Close>,\n Pick<ButtonProps, 'size' | 'styleVariant' | 'color'> {}\n\n// Base UI has no Action primitive; the confirm button composes Close (radix\n// Action also closed on click) — run the action in onClick. A prop-less Button\n// is the primary look (solid accent), so the confirm just forwards style/color.\nfunction AlertDialogAction({\n className,\n size = 'default',\n styleVariant,\n color,\n ...props\n}: AlertDialogActionProps) {\n return (\n <Button\n nativeButton\n size={size}\n styleVariant={styleVariant}\n color={color}\n render={\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-action\"\n className={className}\n {...props}\n />\n }\n />\n )\n}\n\ninterface AlertDialogCancelProps\n extends\n React.ComponentProps<typeof AlertDialogPrimitive.Close>,\n Pick<ButtonProps, 'size' | 'styleVariant' | 'color'> {}\n\n// No children = the ready-made corner X (label is the consumer's, via aria-label);\n// with children it renders as a Button (default surface/neutral, the old secondary\n// look); with a render prop it stays the bare primitive (the consumer supplies the button)\nfunction AlertDialogCancel({\n className,\n size = 'default',\n styleVariant,\n color,\n children,\n ...props\n}: AlertDialogCancelProps) {\n if (children) {\n // Default to the surface/neutral (secondary) look unless the caller pins a\n // style/color of its own.\n const hasLook = styleVariant !== undefined || color !== undefined\n return (\n <Button\n nativeButton\n size={size}\n styleVariant={hasLook ? styleVariant : 'surface'}\n color={hasLook ? color : 'neutral'}\n render={\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-cancel\"\n className={className}\n {...props}\n >\n {children}\n </AlertDialogPrimitive.Close>\n }\n />\n )\n }\n\n if (props.render) {\n return (\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-cancel\"\n className={className}\n {...props}\n />\n )\n }\n\n return (\n <AlertDialogPrimitive.Close\n data-slot=\"alert-dialog-cancel\"\n className={cn(\n buttonVariants({ size: 'icon', variant: 'tertiary' }),\n 'absolute top-2.5 right-2 rounded-full',\n className,\n )}\n {...props}\n >\n <Close className=\"[--spark-icon-size:calc(20px*var(--spark-scaling,1))]\" />\n </AlertDialogPrimitive.Close>\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\nexport type { AlertDialogContentProps }\n"],"mappings":";;;;;;;;AAOA,SAAS,YACP,OACA;CACA,OAAO,oBAACA,cAAqB,MAAtB,EAA2B,GAAI,MAAQ,CAAA;AAChD;AAEA,SAAS,mBACP,OACA;CACA,OACE,oBAACA,cAAqB,SAAtB;EAA8B,aAAU;EAAuB,GAAI;CAAQ,CAAA;AAE/E;AAEA,SAAS,kBACP,OACA;CACA,OACE,oBAACA,cAAqB,QAAtB;EAA6B,aAAU;EAAsB,GAAI;CAAQ,CAAA;AAE7E;AAEA,SAAS,mBAAmB,EAC1B,WACA,GAAG,SAC0D;CAC7D,OACE,oBAACA,cAAqB,UAAtB;EACE,aAAU;EACV,WAAW,GACT,wOACA,SACF;EACA,gBAAa;EACb,GAAI;CACL,CAAA;AAEL;AAQA,SAAS,mBAAmB,EAC1B,WACA,OAAO,WACP,GAAG,SACuB;CAC1B,OACE,oBAACA,cAAqB,OAAtB;EACE,aAAU;EACV,aAAW;EACX,WAAW,GACT,sWAEA,qGACA,+FACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,kBAAkB,EACzB,WACA,GAAG,SAC2B;CAC9B,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,oZACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,kBAAkB,EACzB,WACA,GAAG,SAC2B;CAC9B,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,+JACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,iBAAiB,EACxB,WACA,GAAG,SAC2B;CAC9B,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,iKACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,iBAAiB,EACxB,WACA,GAAG,SACuD;CAC1D,OACE,oBAACA,cAAqB,OAAtB;EACE,aAAU;EACV,WAAW,GACT,2JACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,uBAAuB,EAC9B,WACA,GAAG,SAC6D;CAChE,OACE,oBAACA,cAAqB,aAAtB;EACE,aAAU;EACV,WAAW,GAAG,wCAAwC,SAAS;EAC/D,GAAI;CACL,CAAA;AAEL;AAUA,SAAS,kBAAkB,EACzB,WACA,OAAO,WACP,cACA,OACA,GAAG,SACsB;CACzB,OACE,oBAAC,QAAD;EACE,cAAA;EACM;EACQ;EACP;EACP,QACE,oBAACA,cAAqB,OAAtB;GACE,aAAU;GACC;GACX,GAAI;EACL,CAAA;CAEJ,CAAA;AAEL;AAUA,SAAS,kBAAkB,EACzB,WACA,OAAO,WACP,cACA,OACA,UACA,GAAG,SACsB;CACzB,IAAI,UAAU;EAGZ,MAAM,UAAU,iBAAiB,KAAA,KAAa,UAAU,KAAA;EACxD,OACE,oBAAC,QAAD;GACE,cAAA;GACM;GACN,cAAc,UAAU,eAAe;GACvC,OAAO,UAAU,QAAQ;GACzB,QACE,oBAACA,cAAqB,OAAtB;IACE,aAAU;IACC;IACX,GAAI;IAEH;GACyB,CAAA;EAE/B,CAAA;CAEL;CAEA,IAAI,MAAM,QACR,OACE,oBAACA,cAAqB,OAAtB;EACE,aAAU;EACC;EACX,GAAI;CACL,CAAA;CAIL,OACE,oBAACA,cAAqB,OAAtB;EACE,aAAU;EACV,WAAW,GACT,eAAe;GAAE,MAAM;GAAQ,SAAS;EAAW,CAAC,GACpD,yCACA,SACF;EACA,GAAI;YAEJ,oBAAC,OAAD,EAAO,WAAU,wDAAyD,CAAA;CAChD,CAAA;AAEhC"}
@@ -0,0 +1,161 @@
1
+ "use client";
2
+ "use client";
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
+ const require_chunk = require("../chunk-DY84GLCh.cjs");
5
+ const require_components_field = require("./field.cjs");
6
+ const require_components_input = require("./input.cjs");
7
+ const require_components_input_group = require("./input-group.cjs");
8
+ let react = require("react");
9
+ react = require_chunk.__toESM(react);
10
+ let _epilot_spark_icons = require("@epilot/spark-icons");
11
+ let react_jsx_runtime = require("react/jsx-runtime");
12
+ let _base_ui_react_autocomplete = require("@base-ui/react/autocomplete");
13
+ let cnfast = require("cnfast");
14
+ //#region src/components/autocomplete.tsx
15
+ const Autocomplete = _base_ui_react_autocomplete.Autocomplete.Root;
16
+ const AutocompleteCollection = _base_ui_react_autocomplete.Autocomplete.Collection;
17
+ const useAutocompleteFilter = _base_ui_react_autocomplete.Autocomplete.useFilter;
18
+ const useAutocompleteFilteredItems = _base_ui_react_autocomplete.Autocomplete.useFilteredItems;
19
+ const AutocompleteInputGroupContext = react.createContext(false);
20
+ const FOCUS_RING = "focus-visible:ring-2 focus-visible:ring-(--color-focus-root)! focus-visible:ring-offset-2 focus-visible:outline-hidden";
21
+ const FOCUS_WITHIN_RING = "focus-within:ring-2 focus-within:ring-(--color-focus-root)! focus-within:ring-offset-2";
22
+ function AutocompleteInput({ variant, id: idProp, className, "aria-describedby": ariaDescribedByProp, ...props }) {
23
+ const inGroup = react.useContext(AutocompleteInputGroupContext);
24
+ const resolvedVariant = variant ?? (inGroup ? "none" : void 0);
25
+ const { id, ariaDescribedBy, ariaInvalid } = require_components_field.useFieldControl({
26
+ id: typeof idProp === "string" ? idProp : void 0,
27
+ ariaDescribedBy: typeof ariaDescribedByProp === "string" ? ariaDescribedByProp : void 0,
28
+ variant: resolvedVariant !== "none" ? resolvedVariant : void 0
29
+ });
30
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_autocomplete.Autocomplete.Input, {
31
+ render: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_input.Input, {
32
+ id,
33
+ variant: resolvedVariant
34
+ }),
35
+ id,
36
+ "aria-invalid": ariaInvalid,
37
+ className: (0, cnfast.cn)(!inGroup && FOCUS_RING, className),
38
+ ...props,
39
+ "aria-describedby": ariaDescribedBy
40
+ });
41
+ }
42
+ function AutocompleteInputGroup({ className, ...props }) {
43
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AutocompleteInputGroupContext.Provider, {
44
+ value: true,
45
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_autocomplete.Autocomplete.InputGroup, {
46
+ "data-slot": "autocomplete-input-group",
47
+ render: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_input_group.InputGroup, {}),
48
+ className: (0, cnfast.cn)(FOCUS_WITHIN_RING, className),
49
+ ...props
50
+ })
51
+ });
52
+ }
53
+ const ICON_BUTTON = "relative inline-flex size-6 shrink-0 items-center justify-center rounded-sm p-0 text-gray-light outline-hidden transition-colors hover:text-gray focus-visible:ring-2 focus-visible:ring-(--color-focus-root)! focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50 motion-reduce:transition-none [&_svg]:pointer-events-none [&_svg]:shrink-0 before:absolute before:top-1/2 before:left-1/2 before:size-10 before:-translate-x-1/2 before:-translate-y-1/2 before:content-['']";
54
+ function AutocompleteClear({ className, children, ...props }) {
55
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_autocomplete.Autocomplete.Clear, {
56
+ "data-slot": "autocomplete-clear",
57
+ className: (0, cnfast.cn)(ICON_BUTTON, className),
58
+ ...props,
59
+ children: children ?? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_epilot_spark_icons.Close, {
60
+ "aria-hidden": true,
61
+ className: "[--spark-icon-size:14px]"
62
+ })
63
+ });
64
+ }
65
+ function AutocompleteTrigger({ className, children, ...props }) {
66
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_autocomplete.Autocomplete.Trigger, {
67
+ "data-slot": "autocomplete-trigger",
68
+ className: (0, cnfast.cn)(ICON_BUTTON, "[&_svg]:transition-transform data-popup-open:[&_svg]:rotate-180 motion-reduce:[&_svg]:transition-none", className),
69
+ ...props,
70
+ children: children ?? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_epilot_spark_icons.KeyboardArrowDown, {
71
+ "aria-hidden": true,
72
+ className: "[--spark-icon-size:14px]"
73
+ })
74
+ });
75
+ }
76
+ function AutocompleteContent({ className, children, align = "start", alignOffset, side, sideOffset = 4, container, ...props }) {
77
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_autocomplete.Autocomplete.Portal, {
78
+ container,
79
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_autocomplete.Autocomplete.Positioner, {
80
+ align,
81
+ alignOffset,
82
+ side,
83
+ sideOffset,
84
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_autocomplete.Autocomplete.Popup, {
85
+ "data-slot": "autocomplete-content",
86
+ className: (0, cnfast.cn)("relative isolate z-50 max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto overscroll-contain rounded-lg border border-gray-a1 bg-gray-1 p-1 text-gray-a12 shadow-lg", "transition-[opacity,scale,translate] duration-100 data-ending-style:scale-95 data-ending-style:opacity-0 data-starting-style:scale-95 data-starting-style:opacity-0 motion-reduce:transition-none", "data-[side=bottom]:data-starting-style:-translate-y-2 data-[side=left]:data-starting-style:translate-x-2 data-[side=right]:data-starting-style:-translate-x-2 data-[side=top]:data-starting-style:translate-y-2", className),
87
+ ...props,
88
+ children
89
+ })
90
+ })
91
+ });
92
+ }
93
+ function AutocompleteList({ className, ...props }) {
94
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_autocomplete.Autocomplete.List, {
95
+ "data-slot": "autocomplete-list",
96
+ className: (0, cnfast.cn)("outline-hidden data-empty:p-0", className),
97
+ ...props
98
+ });
99
+ }
100
+ function AutocompleteItem({ className, ...props }) {
101
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_autocomplete.Autocomplete.Item, {
102
+ "data-slot": "autocomplete-item",
103
+ className: (0, cnfast.cn)("relative flex w-full cursor-default items-center gap-1.5 rounded-sm px-1.5 py-1.5 text-sm text-gray outline-hidden transition-colors select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-highlighted:bg-gray-a3 motion-reduce:transition-none", className),
104
+ ...props
105
+ });
106
+ }
107
+ function AutocompleteEmpty({ className, ...props }) {
108
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_autocomplete.Autocomplete.Empty, {
109
+ "data-slot": "autocomplete-empty",
110
+ className: (0, cnfast.cn)("px-1.5 py-1.5 text-sm text-gray-light empty:p-0", className),
111
+ ...props
112
+ });
113
+ }
114
+ function AutocompleteStatus({ className, ...props }) {
115
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_autocomplete.Autocomplete.Status, {
116
+ "data-slot": "autocomplete-status",
117
+ className: (0, cnfast.cn)("px-1.5 py-1.5 text-sm text-gray-light empty:p-0", className),
118
+ ...props
119
+ });
120
+ }
121
+ function AutocompleteGroup({ className, ...props }) {
122
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_autocomplete.Autocomplete.Group, {
123
+ "data-slot": "autocomplete-group",
124
+ className: (0, cnfast.cn)("scroll-my-1", className),
125
+ ...props
126
+ });
127
+ }
128
+ function AutocompleteGroupLabel({ className, ...props }) {
129
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_autocomplete.Autocomplete.GroupLabel, {
130
+ "data-slot": "autocomplete-group-label",
131
+ className: (0, cnfast.cn)("px-1.5 py-1 text-xs text-gray-light", className),
132
+ ...props
133
+ });
134
+ }
135
+ function AutocompleteSeparator({ className, ...props }) {
136
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
137
+ "aria-hidden": "true",
138
+ "data-slot": "autocomplete-separator",
139
+ className: (0, cnfast.cn)("pointer-events-none -mx-1 my-1 h-px bg-gray-a3", className),
140
+ ...props
141
+ });
142
+ }
143
+ //#endregion
144
+ exports.Autocomplete = Autocomplete;
145
+ exports.AutocompleteClear = AutocompleteClear;
146
+ exports.AutocompleteCollection = AutocompleteCollection;
147
+ exports.AutocompleteContent = AutocompleteContent;
148
+ exports.AutocompleteEmpty = AutocompleteEmpty;
149
+ exports.AutocompleteGroup = AutocompleteGroup;
150
+ exports.AutocompleteGroupLabel = AutocompleteGroupLabel;
151
+ exports.AutocompleteInput = AutocompleteInput;
152
+ exports.AutocompleteInputGroup = AutocompleteInputGroup;
153
+ exports.AutocompleteItem = AutocompleteItem;
154
+ exports.AutocompleteList = AutocompleteList;
155
+ exports.AutocompleteSeparator = AutocompleteSeparator;
156
+ exports.AutocompleteStatus = AutocompleteStatus;
157
+ exports.AutocompleteTrigger = AutocompleteTrigger;
158
+ exports.useAutocompleteFilter = useAutocompleteFilter;
159
+ exports.useAutocompleteFilteredItems = useAutocompleteFilteredItems;
160
+
161
+ //# sourceMappingURL=autocomplete.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autocomplete.cjs","names":["AutocompletePrimitive","React","useFieldControl","Input","InputGroup","Close","KeyboardArrowDown"],"sources":["../../src/components/autocomplete.tsx"],"sourcesContent":["'use client'\n\nimport { Autocomplete as AutocompletePrimitive } from '@base-ui/react/autocomplete'\nimport { Close, KeyboardArrowDown } from '@epilot/spark-icons'\nimport * as React from 'react'\nimport { cn } from '../utils/cn'\nimport { useFieldControl } from './field'\nimport { Input, type InputVariant } from './input'\nimport { InputGroup } from './input-group'\n\nconst Autocomplete = AutocompletePrimitive.Root\nconst AutocompleteCollection = AutocompletePrimitive.Collection\nconst useAutocompleteFilter = AutocompletePrimitive.useFilter\nconst useAutocompleteFilteredItems = AutocompletePrimitive.useFilteredItems\n\nconst AutocompleteInputGroupContext = React.createContext(false)\n\nconst FOCUS_RING =\n 'focus-visible:ring-2 focus-visible:ring-(--color-focus-root)! focus-visible:ring-offset-2 focus-visible:outline-hidden'\n\nconst FOCUS_WITHIN_RING =\n 'focus-within:ring-2 focus-within:ring-(--color-focus-root)! focus-within:ring-offset-2'\n\nfunction AutocompleteInput({\n variant,\n id: idProp,\n className,\n 'aria-describedby': ariaDescribedByProp,\n ...props\n}: React.ComponentProps<typeof AutocompletePrimitive.Input> & {\n variant?: InputVariant\n}) {\n const inGroup = React.useContext(AutocompleteInputGroupContext)\n const resolvedVariant = variant ?? (inGroup ? 'none' : undefined)\n const { id, ariaDescribedBy, ariaInvalid } = useFieldControl({\n id: typeof idProp === 'string' ? idProp : undefined,\n ariaDescribedBy:\n typeof ariaDescribedByProp === 'string' ? ariaDescribedByProp : undefined,\n variant: resolvedVariant !== 'none' ? resolvedVariant : undefined,\n })\n return (\n <AutocompletePrimitive.Input\n render={<Input id={id} variant={resolvedVariant} />}\n id={id}\n aria-invalid={ariaInvalid}\n className={cn(!inGroup && FOCUS_RING, className)}\n {...props}\n aria-describedby={ariaDescribedBy}\n />\n )\n}\n\nfunction AutocompleteInputGroup({\n className,\n ...props\n}: React.ComponentProps<typeof AutocompletePrimitive.InputGroup>) {\n return (\n <AutocompleteInputGroupContext.Provider value={true}>\n <AutocompletePrimitive.InputGroup\n data-slot=\"autocomplete-input-group\"\n render={<InputGroup />}\n className={cn(FOCUS_WITHIN_RING, className)}\n {...props}\n />\n </AutocompleteInputGroupContext.Provider>\n )\n}\n\nconst ICON_BUTTON =\n \"relative inline-flex size-6 shrink-0 items-center justify-center rounded-sm p-0 text-gray-light outline-hidden transition-colors hover:text-gray focus-visible:ring-2 focus-visible:ring-(--color-focus-root)! focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50 motion-reduce:transition-none [&_svg]:pointer-events-none [&_svg]:shrink-0 before:absolute before:top-1/2 before:left-1/2 before:size-10 before:-translate-x-1/2 before:-translate-y-1/2 before:content-['']\"\n\nfunction AutocompleteClear({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AutocompletePrimitive.Clear>) {\n return (\n <AutocompletePrimitive.Clear\n data-slot=\"autocomplete-clear\"\n className={cn(ICON_BUTTON, className)}\n {...props}\n >\n {children ?? <Close aria-hidden className=\"[--spark-icon-size:14px]\" />}\n </AutocompletePrimitive.Clear>\n )\n}\n\nfunction AutocompleteTrigger({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof AutocompletePrimitive.Trigger>) {\n return (\n <AutocompletePrimitive.Trigger\n data-slot=\"autocomplete-trigger\"\n className={cn(\n ICON_BUTTON,\n '[&_svg]:transition-transform data-popup-open:[&_svg]:rotate-180 motion-reduce:[&_svg]:transition-none',\n className,\n )}\n {...props}\n >\n {children ?? (\n <KeyboardArrowDown aria-hidden className=\"[--spark-icon-size:14px]\" />\n )}\n </AutocompletePrimitive.Trigger>\n )\n}\n\ntype AutocompleteContentProps = React.ComponentProps<\n typeof AutocompletePrimitive.Popup\n> &\n Pick<\n AutocompletePrimitive.Positioner.Props,\n 'align' | 'alignOffset' | 'side' | 'sideOffset'\n > &\n Pick<AutocompletePrimitive.Portal.Props, 'container'>\n\nfunction AutocompleteContent({\n className,\n children,\n align = 'start',\n alignOffset,\n side,\n sideOffset = 4,\n container,\n ...props\n}: AutocompleteContentProps) {\n return (\n <AutocompletePrimitive.Portal container={container}>\n <AutocompletePrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n >\n <AutocompletePrimitive.Popup\n data-slot=\"autocomplete-content\"\n className={cn(\n 'relative isolate z-50 max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) origin-(--transform-origin) overflow-x-hidden overflow-y-auto overscroll-contain rounded-lg border border-gray-a1 bg-gray-1 p-1 text-gray-a12 shadow-lg',\n 'transition-[opacity,scale,translate] duration-100 data-ending-style:scale-95 data-ending-style:opacity-0 data-starting-style:scale-95 data-starting-style:opacity-0 motion-reduce:transition-none',\n 'data-[side=bottom]:data-starting-style:-translate-y-2 data-[side=left]:data-starting-style:translate-x-2 data-[side=right]:data-starting-style:-translate-x-2 data-[side=top]:data-starting-style:translate-y-2',\n className,\n )}\n {...props}\n >\n {children}\n </AutocompletePrimitive.Popup>\n </AutocompletePrimitive.Positioner>\n </AutocompletePrimitive.Portal>\n )\n}\n\nfunction AutocompleteList({\n className,\n ...props\n}: React.ComponentProps<typeof AutocompletePrimitive.List>) {\n return (\n <AutocompletePrimitive.List\n data-slot=\"autocomplete-list\"\n className={cn('outline-hidden data-empty:p-0', className)}\n {...props}\n />\n )\n}\n\nfunction AutocompleteItem({\n className,\n ...props\n}: React.ComponentProps<typeof AutocompletePrimitive.Item>) {\n return (\n <AutocompletePrimitive.Item\n data-slot=\"autocomplete-item\"\n className={cn(\n 'relative flex w-full cursor-default items-center gap-1.5 rounded-sm px-1.5 py-1.5 text-sm text-gray outline-hidden transition-colors select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-highlighted:bg-gray-a3 motion-reduce:transition-none',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AutocompleteEmpty({\n className,\n ...props\n}: React.ComponentProps<typeof AutocompletePrimitive.Empty>) {\n return (\n <AutocompletePrimitive.Empty\n data-slot=\"autocomplete-empty\"\n className={cn(\n 'px-1.5 py-1.5 text-sm text-gray-light empty:p-0',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AutocompleteStatus({\n className,\n ...props\n}: React.ComponentProps<typeof AutocompletePrimitive.Status>) {\n return (\n <AutocompletePrimitive.Status\n data-slot=\"autocomplete-status\"\n className={cn(\n 'px-1.5 py-1.5 text-sm text-gray-light empty:p-0',\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction AutocompleteGroup({\n className,\n ...props\n}: React.ComponentProps<typeof AutocompletePrimitive.Group>) {\n return (\n <AutocompletePrimitive.Group\n data-slot=\"autocomplete-group\"\n className={cn('scroll-my-1', className)}\n {...props}\n />\n )\n}\n\nfunction AutocompleteGroupLabel({\n className,\n ...props\n}: React.ComponentProps<typeof AutocompletePrimitive.GroupLabel>) {\n return (\n <AutocompletePrimitive.GroupLabel\n data-slot=\"autocomplete-group-label\"\n className={cn('px-1.5 py-1 text-xs text-gray-light', className)}\n {...props}\n />\n )\n}\n\nfunction AutocompleteSeparator({\n className,\n ...props\n}: React.ComponentProps<'div'>) {\n return (\n <div\n aria-hidden=\"true\"\n data-slot=\"autocomplete-separator\"\n className={cn(\n 'pointer-events-none -mx-1 my-1 h-px bg-gray-a3',\n className,\n )}\n {...props}\n />\n )\n}\n\nexport {\n Autocomplete,\n AutocompleteClear,\n AutocompleteCollection,\n AutocompleteContent,\n AutocompleteEmpty,\n AutocompleteGroup,\n AutocompleteGroupLabel,\n AutocompleteInput,\n AutocompleteInputGroup,\n AutocompleteItem,\n AutocompleteList,\n AutocompleteSeparator,\n AutocompleteStatus,\n AutocompleteTrigger,\n useAutocompleteFilter,\n useAutocompleteFilteredItems,\n}\n"],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ "use client";
2
+
3
+ import { InputVariant } from "./input.cjs";
4
+ import * as React$1 from "react";
5
+ import { Autocomplete as Autocomplete$1 } from "@base-ui/react/autocomplete";
6
+
7
+ //#region src/components/autocomplete.d.ts
8
+ declare const Autocomplete: typeof Autocomplete$1.Root;
9
+ declare const AutocompleteCollection: typeof Autocomplete$1.Collection;
10
+ declare const useAutocompleteFilter: typeof import("@base-ui/react/internals/filter").getFilter;
11
+ declare const useAutocompleteFilteredItems: typeof Autocomplete$1.useFilteredItems;
12
+ declare function AutocompleteInput({
13
+ variant,
14
+ id: idProp,
15
+ className,
16
+ 'aria-describedby': ariaDescribedByProp,
17
+ ...props
18
+ }: React$1.ComponentProps<typeof Autocomplete$1.Input> & {
19
+ variant?: InputVariant;
20
+ }): import("react/jsx-runtime").JSX.Element;
21
+ declare function AutocompleteInputGroup({
22
+ className,
23
+ ...props
24
+ }: React$1.ComponentProps<typeof Autocomplete$1.InputGroup>): import("react/jsx-runtime").JSX.Element;
25
+ declare function AutocompleteClear({
26
+ className,
27
+ children,
28
+ ...props
29
+ }: React$1.ComponentProps<typeof Autocomplete$1.Clear>): import("react/jsx-runtime").JSX.Element;
30
+ declare function AutocompleteTrigger({
31
+ className,
32
+ children,
33
+ ...props
34
+ }: React$1.ComponentProps<typeof Autocomplete$1.Trigger>): import("react/jsx-runtime").JSX.Element;
35
+ type AutocompleteContentProps = React$1.ComponentProps<typeof Autocomplete$1.Popup> & Pick<Autocomplete$1.Positioner.Props, 'align' | 'alignOffset' | 'side' | 'sideOffset'> & Pick<Autocomplete$1.Portal.Props, 'container'>;
36
+ declare function AutocompleteContent({
37
+ className,
38
+ children,
39
+ align,
40
+ alignOffset,
41
+ side,
42
+ sideOffset,
43
+ container,
44
+ ...props
45
+ }: AutocompleteContentProps): import("react/jsx-runtime").JSX.Element;
46
+ declare function AutocompleteList({
47
+ className,
48
+ ...props
49
+ }: React$1.ComponentProps<typeof Autocomplete$1.List>): import("react/jsx-runtime").JSX.Element;
50
+ declare function AutocompleteItem({
51
+ className,
52
+ ...props
53
+ }: React$1.ComponentProps<typeof Autocomplete$1.Item>): import("react/jsx-runtime").JSX.Element;
54
+ declare function AutocompleteEmpty({
55
+ className,
56
+ ...props
57
+ }: React$1.ComponentProps<typeof Autocomplete$1.Empty>): import("react/jsx-runtime").JSX.Element;
58
+ declare function AutocompleteStatus({
59
+ className,
60
+ ...props
61
+ }: React$1.ComponentProps<typeof Autocomplete$1.Status>): import("react/jsx-runtime").JSX.Element;
62
+ declare function AutocompleteGroup({
63
+ className,
64
+ ...props
65
+ }: React$1.ComponentProps<typeof Autocomplete$1.Group>): import("react/jsx-runtime").JSX.Element;
66
+ declare function AutocompleteGroupLabel({
67
+ className,
68
+ ...props
69
+ }: React$1.ComponentProps<typeof Autocomplete$1.GroupLabel>): import("react/jsx-runtime").JSX.Element;
70
+ declare function AutocompleteSeparator({
71
+ className,
72
+ ...props
73
+ }: React$1.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
74
+ //#endregion
75
+ export { Autocomplete, AutocompleteClear, AutocompleteCollection, AutocompleteContent, AutocompleteEmpty, AutocompleteGroup, AutocompleteGroupLabel, AutocompleteInput, AutocompleteInputGroup, AutocompleteItem, AutocompleteList, AutocompleteSeparator, AutocompleteStatus, AutocompleteTrigger, useAutocompleteFilter, useAutocompleteFilteredItems };
76
+ //# sourceMappingURL=autocomplete.d.cts.map