@epilot/spark-ui 0.25.1 → 0.26.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/dist/components/accordion.cjs.map +1 -1
  2. package/dist/components/accordion.d.cts +1 -1
  3. package/dist/components/accordion.d.ts +1 -1
  4. package/dist/components/accordion.js.map +1 -1
  5. package/dist/components/alert-dialog.cjs +5 -3
  6. package/dist/components/alert-dialog.cjs.map +1 -1
  7. package/dist/components/alert-dialog.d.cts +4 -1
  8. package/dist/components/alert-dialog.d.ts +4 -1
  9. package/dist/components/alert-dialog.js +5 -3
  10. package/dist/components/alert-dialog.js.map +1 -1
  11. package/dist/components/autocomplete.cjs +3 -2
  12. package/dist/components/autocomplete.cjs.map +1 -1
  13. package/dist/components/autocomplete.js +3 -2
  14. package/dist/components/autocomplete.js.map +1 -1
  15. package/dist/components/avatar.js +1 -1
  16. package/dist/components/badge.js +1 -1
  17. package/dist/components/banner.cjs +74 -0
  18. package/dist/components/banner.cjs.map +1 -0
  19. package/dist/components/banner.d.cts +27 -0
  20. package/dist/components/banner.d.ts +27 -0
  21. package/dist/components/banner.js +72 -0
  22. package/dist/components/banner.js.map +1 -0
  23. package/dist/components/box.js +1 -1
  24. package/dist/components/bubble.d.cts +1 -1
  25. package/dist/components/bubble.d.ts +1 -1
  26. package/dist/components/button-group.js +1 -1
  27. package/dist/components/button.d.cts +2 -2
  28. package/dist/components/button.d.ts +2 -2
  29. package/dist/components/button.js +1 -1
  30. package/dist/components/callout.cjs +1 -1
  31. package/dist/components/callout.cjs.map +1 -1
  32. package/dist/components/callout.js +1 -1
  33. package/dist/components/callout.js.map +1 -1
  34. package/dist/components/card.js +1 -1
  35. package/dist/components/checkbox.js +1 -1
  36. package/dist/components/data-list.cjs +39 -0
  37. package/dist/components/data-list.cjs.map +1 -0
  38. package/dist/components/data-list.d.cts +33 -0
  39. package/dist/components/data-list.d.ts +33 -0
  40. package/dist/components/data-list.js +35 -0
  41. package/dist/components/data-list.js.map +1 -0
  42. package/dist/components/dialog.cjs +5 -3
  43. package/dist/components/dialog.cjs.map +1 -1
  44. package/dist/components/dialog.d.cts +4 -1
  45. package/dist/components/dialog.d.ts +4 -1
  46. package/dist/components/dialog.js +5 -3
  47. package/dist/components/dialog.js.map +1 -1
  48. package/dist/components/drawer.cjs +13 -3
  49. package/dist/components/drawer.cjs.map +1 -1
  50. package/dist/components/drawer.d.cts +4 -1
  51. package/dist/components/drawer.d.ts +4 -1
  52. package/dist/components/drawer.js +14 -4
  53. package/dist/components/drawer.js.map +1 -1
  54. package/dist/components/dropdown-menu.cjs +5 -3
  55. package/dist/components/dropdown-menu.cjs.map +1 -1
  56. package/dist/components/dropdown-menu.d.cts +1 -0
  57. package/dist/components/dropdown-menu.d.ts +1 -0
  58. package/dist/components/dropdown-menu.js +5 -3
  59. package/dist/components/dropdown-menu.js.map +1 -1
  60. package/dist/components/empty-state.cjs +97 -25
  61. package/dist/components/empty-state.cjs.map +1 -1
  62. package/dist/components/empty-state.d.cts +28 -11
  63. package/dist/components/empty-state.d.ts +28 -11
  64. package/dist/components/empty-state.js +94 -26
  65. package/dist/components/empty-state.js.map +1 -1
  66. package/dist/components/energy-breakdown.cjs +1 -1
  67. package/dist/components/energy-breakdown.cjs.map +1 -1
  68. package/dist/components/energy-breakdown.js +1 -1
  69. package/dist/components/energy-breakdown.js.map +1 -1
  70. package/dist/components/entity-card.cjs +1 -1
  71. package/dist/components/entity-card.cjs.map +1 -1
  72. package/dist/components/entity-card.js +1 -1
  73. package/dist/components/entity-card.js.map +1 -1
  74. package/dist/components/field.cjs +4 -4
  75. package/dist/components/field.cjs.map +1 -1
  76. package/dist/components/field.js +4 -4
  77. package/dist/components/field.js.map +1 -1
  78. package/dist/components/icon.js +1 -1
  79. package/dist/components/info-block.d.cts +1 -1
  80. package/dist/components/info-block.d.ts +1 -1
  81. package/dist/components/input-otp.cjs +1 -1
  82. package/dist/components/input-otp.js +1 -1
  83. package/dist/components/input.cjs +1 -1
  84. package/dist/components/input.js +1 -1
  85. package/dist/components/kbd.cjs +14 -0
  86. package/dist/components/kbd.cjs.map +1 -0
  87. package/dist/components/kbd.d.cts +13 -0
  88. package/dist/components/kbd.d.ts +13 -0
  89. package/dist/components/kbd.js +13 -0
  90. package/dist/components/kbd.js.map +1 -0
  91. package/dist/components/marker.d.cts +1 -1
  92. package/dist/components/marker.d.ts +1 -1
  93. package/dist/components/message-scroller.cjs +2 -2
  94. package/dist/components/message-scroller.cjs.map +1 -1
  95. package/dist/components/message-scroller.js +2 -2
  96. package/dist/components/message-scroller.js.map +1 -1
  97. package/dist/components/pill.js +1 -1
  98. package/dist/components/popover.cjs +3 -2
  99. package/dist/components/popover.cjs.map +1 -1
  100. package/dist/components/popover.js +3 -2
  101. package/dist/components/popover.js.map +1 -1
  102. package/dist/components/radio.js +1 -1
  103. package/dist/components/schedule-list.cjs +1 -1
  104. package/dist/components/schedule-list.cjs.map +1 -1
  105. package/dist/components/schedule-list.js +1 -1
  106. package/dist/components/schedule-list.js.map +1 -1
  107. package/dist/components/select.cjs +4 -3
  108. package/dist/components/select.cjs.map +1 -1
  109. package/dist/components/select.js +4 -3
  110. package/dist/components/select.js.map +1 -1
  111. package/dist/components/separator.cjs +35 -17
  112. package/dist/components/separator.cjs.map +1 -1
  113. package/dist/components/separator.d.cts +1 -0
  114. package/dist/components/separator.d.ts +1 -0
  115. package/dist/components/separator.js +35 -17
  116. package/dist/components/separator.js.map +1 -1
  117. package/dist/components/sheet.cjs +4 -2
  118. package/dist/components/sheet.cjs.map +1 -1
  119. package/dist/components/sheet.d.cts +4 -1
  120. package/dist/components/sheet.d.ts +4 -1
  121. package/dist/components/sheet.js +4 -2
  122. package/dist/components/sheet.js.map +1 -1
  123. package/dist/components/stat-card.cjs +1 -1
  124. package/dist/components/stat-card.cjs.map +1 -1
  125. package/dist/components/stat-card.js +1 -1
  126. package/dist/components/stat-card.js.map +1 -1
  127. package/dist/components/switch.js +1 -1
  128. package/dist/components/textarea.cjs +1 -1
  129. package/dist/components/textarea.js +1 -1
  130. package/dist/components/theme.cjs +118 -24
  131. package/dist/components/theme.cjs.map +1 -1
  132. package/dist/components/theme.d.cts +7 -1
  133. package/dist/components/theme.d.ts +7 -1
  134. package/dist/components/theme.js +120 -27
  135. package/dist/components/theme.js.map +1 -1
  136. package/dist/components/toast.cjs +4 -3
  137. package/dist/components/toast.cjs.map +1 -1
  138. package/dist/components/toast.js +4 -3
  139. package/dist/components/toast.js.map +1 -1
  140. package/dist/components/toggle-group.js +1 -1
  141. package/dist/components/toggle.cjs +1 -1
  142. package/dist/components/toggle.js +2 -2
  143. package/dist/components/tooltip.cjs +5 -3
  144. package/dist/components/tooltip.cjs.map +1 -1
  145. package/dist/components/tooltip.d.cts +1 -0
  146. package/dist/components/tooltip.d.ts +1 -0
  147. package/dist/components/tooltip.js +5 -3
  148. package/dist/components/tooltip.js.map +1 -1
  149. package/package.json +1 -1
@@ -1 +1 @@
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,GAAA,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,GAAA,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,GAAA,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,GAAA,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, layout gap × 0.5 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 layout gap × 0.5. 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 layout gap × 0.5 (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,GAAA,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,GAAA,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,GAAA,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,GAAA,IACE,yIACA,SACF;GAEC;EACE,CAAA;CACmB,CAAA;AAE9B"}
@@ -9,7 +9,7 @@ type AccordionProps = React$1.ComponentProps<typeof Accordion$1.Root> & {
9
9
  /**
10
10
  * Container chrome (neutral):
11
11
  * - `ghost` — no border/fill, just the trigger + spacing;
12
- * - `soft` (default) — separate soft-tinted rounded cards, 2px gap between them;
12
+ * - `soft` (default) — separate soft-tinted rounded cards, layout gap × 0.5 between them;
13
13
  * - `surface` — items glued into one bordered panel with an opaque fill;
14
14
  * - `outline` — the same glued bordered panel, but no fill (transparent).
15
15
  * A `variant` prop, NOT the ambient `data-style` knob — that would cascade into
@@ -9,7 +9,7 @@ type AccordionProps = React$1.ComponentProps<typeof Accordion$1.Root> & {
9
9
  /**
10
10
  * Container chrome (neutral):
11
11
  * - `ghost` — no border/fill, just the trigger + spacing;
12
- * - `soft` (default) — separate soft-tinted rounded cards, 2px gap between them;
12
+ * - `soft` (default) — separate soft-tinted rounded cards, layout gap × 0.5 between them;
13
13
  * - `surface` — items glued into one bordered panel with an opaque fill;
14
14
  * - `outline` — the same glued bordered panel, but no fill (transparent).
15
15
  * A `variant` prop, NOT the ambient `data-style` knob — that would cascade into
@@ -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 { 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
+ {"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, layout gap × 0.5 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 layout gap × 0.5. 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 layout gap × 0.5 (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"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const require_chunk = require("../chunk-DY84GLCh.cjs");
4
4
  const require_components_button = require("./button.cjs");
5
+ const require_components_theme = require("./theme.cjs");
5
6
  let react = require("react");
6
7
  react = require_chunk.__toESM(react);
7
8
  let _epilot_spark_icons = require("@epilot/spark-icons");
@@ -18,10 +19,11 @@ function AlertDialogTrigger(props) {
18
19
  ...props
19
20
  });
20
21
  }
21
- function AlertDialogPortal(props) {
22
+ function AlertDialogPortal({ children, ...props }) {
22
23
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_alert_dialog.AlertDialog.Portal, {
23
24
  "data-slot": "alert-dialog-portal",
24
- ...props
25
+ ...props,
26
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_theme.PortalTheme, { children })
25
27
  });
26
28
  }
27
29
  function AlertDialogOverlay({ className, ...props }) {
@@ -43,7 +45,7 @@ function AlertDialogContent({ className, size = "default", ...props }) {
43
45
  function AlertDialogHeader({ className, ...props }) {
44
46
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
45
47
  "data-slot": "alert-dialog-header",
46
- className: (0, cn.cn)("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]", className),
48
+ className: (0, cn.cn)("grid grid-rows-[auto_1fr] place-items-center gap-y-2 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]", className),
47
49
  ...props
48
50
  });
49
51
  }
@@ -1 +1 @@
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
+ {"version":3,"file":"alert-dialog.cjs","names":["AlertDialogPrimitive","PortalTheme","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'\nimport { PortalTheme } from './theme'\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 children,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props}>\n <PortalTheme>{children}</PortalTheme>\n </AlertDialogPrimitive.Portal>\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-y-2 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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"}
@@ -7,7 +7,10 @@ import { AlertDialog as AlertDialog$1 } from "@base-ui/react/alert-dialog";
7
7
  //#region src/components/alert-dialog.d.ts
8
8
  declare function AlertDialog(props: React$1.ComponentProps<typeof AlertDialog$1.Root>): import("react/jsx-runtime").JSX.Element;
9
9
  declare function AlertDialogTrigger(props: React$1.ComponentProps<typeof AlertDialog$1.Trigger>): import("react/jsx-runtime").JSX.Element;
10
- declare function AlertDialogPortal(props: React$1.ComponentProps<typeof AlertDialog$1.Portal>): import("react/jsx-runtime").JSX.Element;
10
+ declare function AlertDialogPortal({
11
+ children,
12
+ ...props
13
+ }: React$1.ComponentProps<typeof AlertDialog$1.Portal>): import("react/jsx-runtime").JSX.Element;
11
14
  declare function AlertDialogOverlay({
12
15
  className,
13
16
  ...props
@@ -7,7 +7,10 @@ import { AlertDialog as AlertDialog$1 } from "@base-ui/react/alert-dialog";
7
7
  //#region src/components/alert-dialog.d.ts
8
8
  declare function AlertDialog(props: React$1.ComponentProps<typeof AlertDialog$1.Root>): import("react/jsx-runtime").JSX.Element;
9
9
  declare function AlertDialogTrigger(props: React$1.ComponentProps<typeof AlertDialog$1.Trigger>): import("react/jsx-runtime").JSX.Element;
10
- declare function AlertDialogPortal(props: React$1.ComponentProps<typeof AlertDialog$1.Portal>): import("react/jsx-runtime").JSX.Element;
10
+ declare function AlertDialogPortal({
11
+ children,
12
+ ...props
13
+ }: React$1.ComponentProps<typeof AlertDialog$1.Portal>): import("react/jsx-runtime").JSX.Element;
11
14
  declare function AlertDialogOverlay({
12
15
  className,
13
16
  ...props
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
  import { cn } from "../utils/cn.js";
3
3
  import { Button, buttonVariants } from "./button.js";
4
+ import { PortalTheme } from "./theme.js";
4
5
  import "react";
5
6
  import { Close } from "@epilot/spark-icons";
6
7
  import { jsx } from "react/jsx-runtime";
@@ -15,10 +16,11 @@ function AlertDialogTrigger(props) {
15
16
  ...props
16
17
  });
17
18
  }
18
- function AlertDialogPortal(props) {
19
+ function AlertDialogPortal({ children, ...props }) {
19
20
  return /* @__PURE__ */ jsx(AlertDialog$1.Portal, {
20
21
  "data-slot": "alert-dialog-portal",
21
- ...props
22
+ ...props,
23
+ children: /* @__PURE__ */ jsx(PortalTheme, { children })
22
24
  });
23
25
  }
24
26
  function AlertDialogOverlay({ className, ...props }) {
@@ -40,7 +42,7 @@ function AlertDialogContent({ className, size = "default", ...props }) {
40
42
  function AlertDialogHeader({ className, ...props }) {
41
43
  return /* @__PURE__ */ jsx("div", {
42
44
  "data-slot": "alert-dialog-header",
43
- className: cn("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]", className),
45
+ className: cn("grid grid-rows-[auto_1fr] place-items-center gap-y-2 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]", className),
44
46
  ...props
45
47
  });
46
48
  }
@@ -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 { 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"}
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'\nimport { PortalTheme } from './theme'\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 children,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props}>\n <PortalTheme>{children}</PortalTheme>\n </AlertDialogPrimitive.Portal>\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-y-2 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":";;;;;;;;;AAQA,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,kBAAkB,EACzB,UACA,GAAG,SACwD;CAC3D,OACE,oBAACA,cAAqB,QAAtB;EAA6B,aAAU;EAAsB,GAAI;YAC/D,oBAAC,aAAD,EAAc,SAAsB,CAAA;CACT,CAAA;AAEjC;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,sZACA,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"}
@@ -2,6 +2,7 @@
2
2
  "use client";
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
4
  const require_chunk = require("../chunk-DY84GLCh.cjs");
5
+ const require_components_theme = require("./theme.cjs");
5
6
  const require_components_field = require("./field.cjs");
6
7
  const require_components_input = require("./input.cjs");
7
8
  const require_components_input_group = require("./input-group.cjs");
@@ -75,7 +76,7 @@ function AutocompleteTrigger({ className, children, ...props }) {
75
76
  function AutocompleteContent({ className, children, align = "start", alignOffset, side, sideOffset = 4, container, ...props }) {
76
77
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_autocomplete.Autocomplete.Portal, {
77
78
  container,
78
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_autocomplete.Autocomplete.Positioner, {
79
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_theme.PortalTheme, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_autocomplete.Autocomplete.Positioner, {
79
80
  align,
80
81
  alignOffset,
81
82
  side,
@@ -86,7 +87,7 @@ function AutocompleteContent({ className, children, align = "start", alignOffset
86
87
  ...props,
87
88
  children
88
89
  })
89
- })
90
+ }) })
90
91
  });
91
92
  }
92
93
  function AutocompleteList({ className, ...props }) {
@@ -1 +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 OUTSET_FOCUS_RING =\n 'focus-visible:ring-2 focus-visible:ring-(--color-focus-root)! focus-visible:ring-offset-2 focus-visible:outline-hidden'\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 { field, 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 const outsetBox = !inGroup && field?.labelPosition === 'outset'\n return (\n <AutocompletePrimitive.Input\n render={<Input id={id} variant={resolvedVariant} />}\n id={id}\n aria-invalid={ariaInvalid}\n className={cn(\n outsetBox && OUTSET_FOCUS_RING,\n inGroup && 'flex-1',\n className,\n )}\n {...props}\n aria-describedby={ariaDescribedBy}\n />\n )\n}\n\nfunction AutocompleteInputGroup(\n props: React.ComponentProps<typeof AutocompletePrimitive.InputGroup>,\n) {\n return (\n <AutocompleteInputGroupContext.Provider value={true}>\n <AutocompletePrimitive.InputGroup\n data-slot=\"autocomplete-input-group\"\n render={<InputGroup />}\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 dark:bg-gray-3',\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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"}
1
+ {"version":3,"file":"autocomplete.cjs","names":["AutocompletePrimitive","React","useFieldControl","Input","InputGroup","Close","KeyboardArrowDown","PortalTheme"],"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'\nimport { PortalTheme } from './theme'\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 OUTSET_FOCUS_RING =\n 'focus-visible:ring-2 focus-visible:ring-(--color-focus-root)! focus-visible:ring-offset-2 focus-visible:outline-hidden'\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 { field, 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 const outsetBox = !inGroup && field?.labelPosition === 'outset'\n return (\n <AutocompletePrimitive.Input\n render={<Input id={id} variant={resolvedVariant} />}\n id={id}\n aria-invalid={ariaInvalid}\n className={cn(\n outsetBox && OUTSET_FOCUS_RING,\n inGroup && 'flex-1',\n className,\n )}\n {...props}\n aria-describedby={ariaDescribedBy}\n />\n )\n}\n\nfunction AutocompleteInputGroup(\n props: React.ComponentProps<typeof AutocompletePrimitive.InputGroup>,\n) {\n return (\n <AutocompleteInputGroupContext.Provider value={true}>\n <AutocompletePrimitive.InputGroup\n data-slot=\"autocomplete-input-group\"\n render={<InputGroup />}\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 <PortalTheme>\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 dark:bg-gray-3',\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 </PortalTheme>\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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"}
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
  "use client";
3
3
  import { cn } from "../utils/cn.js";
4
+ import { PortalTheme } from "./theme.js";
4
5
  import { useFieldControl } from "./field.js";
5
6
  import { Input } from "./input.js";
6
7
  import { InputGroup } from "./input-group.js";
@@ -72,7 +73,7 @@ function AutocompleteTrigger({ className, children, ...props }) {
72
73
  function AutocompleteContent({ className, children, align = "start", alignOffset, side, sideOffset = 4, container, ...props }) {
73
74
  return /* @__PURE__ */ jsx(Autocomplete$1.Portal, {
74
75
  container,
75
- children: /* @__PURE__ */ jsx(Autocomplete$1.Positioner, {
76
+ children: /* @__PURE__ */ jsx(PortalTheme, { children: /* @__PURE__ */ jsx(Autocomplete$1.Positioner, {
76
77
  align,
77
78
  alignOffset,
78
79
  side,
@@ -83,7 +84,7 @@ function AutocompleteContent({ className, children, align = "start", alignOffset
83
84
  ...props,
84
85
  children
85
86
  })
86
- })
87
+ }) })
87
88
  });
88
89
  }
89
90
  function AutocompleteList({ className, ...props }) {
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete.js","names":["AutocompletePrimitive","React"],"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 OUTSET_FOCUS_RING =\n 'focus-visible:ring-2 focus-visible:ring-(--color-focus-root)! focus-visible:ring-offset-2 focus-visible:outline-hidden'\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 { field, 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 const outsetBox = !inGroup && field?.labelPosition === 'outset'\n return (\n <AutocompletePrimitive.Input\n render={<Input id={id} variant={resolvedVariant} />}\n id={id}\n aria-invalid={ariaInvalid}\n className={cn(\n outsetBox && OUTSET_FOCUS_RING,\n inGroup && 'flex-1',\n className,\n )}\n {...props}\n aria-describedby={ariaDescribedBy}\n />\n )\n}\n\nfunction AutocompleteInputGroup(\n props: React.ComponentProps<typeof AutocompletePrimitive.InputGroup>,\n) {\n return (\n <AutocompleteInputGroupContext.Provider value={true}>\n <AutocompletePrimitive.InputGroup\n data-slot=\"autocomplete-input-group\"\n render={<InputGroup />}\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 dark:bg-gray-3',\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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"}
1
+ {"version":3,"file":"autocomplete.js","names":["AutocompletePrimitive","React"],"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'\nimport { PortalTheme } from './theme'\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 OUTSET_FOCUS_RING =\n 'focus-visible:ring-2 focus-visible:ring-(--color-focus-root)! focus-visible:ring-offset-2 focus-visible:outline-hidden'\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 { field, 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 const outsetBox = !inGroup && field?.labelPosition === 'outset'\n return (\n <AutocompletePrimitive.Input\n render={<Input id={id} variant={resolvedVariant} />}\n id={id}\n aria-invalid={ariaInvalid}\n className={cn(\n outsetBox && OUTSET_FOCUS_RING,\n inGroup && 'flex-1',\n className,\n )}\n {...props}\n aria-describedby={ariaDescribedBy}\n />\n )\n}\n\nfunction AutocompleteInputGroup(\n props: React.ComponentProps<typeof AutocompletePrimitive.InputGroup>,\n) {\n return (\n <AutocompleteInputGroupContext.Provider value={true}>\n <AutocompletePrimitive.InputGroup\n data-slot=\"autocomplete-input-group\"\n render={<InputGroup />}\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 <PortalTheme>\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 dark:bg-gray-3',\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 </PortalTheme>\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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"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { accentByColor } from "../lib/accent-colors.js";
3
2
  import { cn } from "../utils/cn.js";
3
+ import { accentByColor } from "../lib/accent-colors.js";
4
4
  import * as React$1 from "react";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  import { Avatar as Avatar$1 } from "@base-ui/react/avatar";
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { accentByColor } from "../lib/accent-colors.js";
3
2
  import { cn } from "../utils/cn.js";
3
+ import { accentByColor } from "../lib/accent-colors.js";
4
4
  import * as React$1 from "react";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  //#region src/components/badge.tsx
@@ -0,0 +1,74 @@
1
+ "use client";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const require_components_button = require("./button.cjs");
4
+ let _epilot_spark_icons = require("@epilot/spark-icons");
5
+ let react_jsx_runtime = require("react/jsx-runtime");
6
+ let class_variance_authority = require("class-variance-authority");
7
+ let cn = require("cn");
8
+ //#region src/components/banner.tsx
9
+ const bannerVariants = (0, class_variance_authority.cva)("flex w-full items-start gap-2 border-b px-4 py-3 text-sm", {
10
+ variants: { variant: {
11
+ error: "border-red-a6 bg-error-soft text-error-soft-foreground",
12
+ success: "border-green-a6 bg-success-soft text-success-soft-foreground",
13
+ warning: "border-orange-a6 bg-warning-soft text-warning-soft-foreground",
14
+ info: "border-blue-a6 bg-base-info-soft text-info",
15
+ neutral: "border-gray-a6 bg-base-gray-soft text-gray"
16
+ } },
17
+ defaultVariants: { variant: "info" }
18
+ });
19
+ const BANNER_ICONS = {
20
+ error: {
21
+ icon: _epilot_spark_icons.Cancel,
22
+ className: "text-error-soft-foreground"
23
+ },
24
+ success: {
25
+ icon: _epilot_spark_icons.CheckCircle,
26
+ className: "text-success-soft-foreground"
27
+ },
28
+ warning: {
29
+ icon: _epilot_spark_icons.Warning,
30
+ className: "text-warning-soft-foreground"
31
+ },
32
+ info: {
33
+ icon: _epilot_spark_icons.Info,
34
+ className: "text-info-light"
35
+ },
36
+ neutral: {
37
+ icon: _epilot_spark_icons.Info,
38
+ className: "text-gray-light"
39
+ }
40
+ };
41
+ const Banner = ({ variant = "info", onClose, closeLabel = "Close", className, children, ...props }) => {
42
+ const { icon: Glyph, className: iconClassName } = BANNER_ICONS[variant ?? "info"];
43
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
44
+ "data-slot": "banner",
45
+ className: (0, cn.cn)(bannerVariants({ variant }), className),
46
+ ...props,
47
+ children: [
48
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Glyph, { className: (0, cn.cn)("[--spark-icon-size:calc(20px*var(--spark-scaling,1))]", iconClassName) }),
49
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
50
+ className: "min-w-0 flex-1",
51
+ children
52
+ }),
53
+ onClose ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
54
+ "aria-label": closeLabel,
55
+ className: (0, cn.cn)(require_components_button.buttonVariants({
56
+ size: "icon-small",
57
+ variant: "tertiary"
58
+ }), "-my-1 -mr-1 size-7 shrink-0 self-center text-inherit"),
59
+ "data-slot": "banner-close",
60
+ onClick: onClose,
61
+ type: "button",
62
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_epilot_spark_icons.Close, {
63
+ "aria-hidden": "true",
64
+ className: "[--spark-icon-size:18px]"
65
+ })
66
+ }) : null
67
+ ]
68
+ });
69
+ };
70
+ //#endregion
71
+ exports.Banner = Banner;
72
+ exports.bannerVariants = bannerVariants;
73
+
74
+ //# sourceMappingURL=banner.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.cjs","names":["Cancel","CheckCircle","Warning","Info","buttonVariants","Close"],"sources":["../../src/components/banner.tsx"],"sourcesContent":["import {\n Cancel,\n CheckCircle,\n Close,\n Info,\n Warning,\n type SparkIcon,\n} from '@epilot/spark-icons'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport type * as React from 'react'\nimport { cn } from '../utils/cn'\nimport { buttonVariants } from './button'\n\ntype BannerVariant = 'error' | 'info' | 'neutral' | 'success' | 'warning'\n\nconst bannerVariants = cva(\n 'flex w-full items-start gap-2 border-b px-4 py-3 text-sm',\n {\n variants: {\n variant: {\n error: 'border-red-a6 bg-error-soft text-error-soft-foreground',\n success: 'border-green-a6 bg-success-soft text-success-soft-foreground',\n warning:\n 'border-orange-a6 bg-warning-soft text-warning-soft-foreground',\n info: 'border-blue-a6 bg-base-info-soft text-info',\n neutral: 'border-gray-a6 bg-base-gray-soft text-gray',\n },\n },\n defaultVariants: {\n variant: 'info',\n },\n },\n)\n\nconst BANNER_ICONS: Record<\n BannerVariant,\n { icon: SparkIcon; className: string }\n> = {\n error: { icon: Cancel, className: 'text-error-soft-foreground' },\n success: { icon: CheckCircle, className: 'text-success-soft-foreground' },\n warning: { icon: Warning, className: 'text-warning-soft-foreground' },\n info: { icon: Info, className: 'text-info-light' },\n neutral: { icon: Info, className: 'text-gray-light' },\n}\n\ninterface BannerProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof bannerVariants> {\n /** Renders a close button. The Banner stays visible: hide it in this handler. */\n onClose?: () => void\n /** Accessible name of the close button. */\n closeLabel?: string\n}\n\nconst Banner = ({\n variant = 'info',\n onClose,\n closeLabel = 'Close',\n className,\n children,\n ...props\n}: BannerProps) => {\n const { icon: Glyph, className: iconClassName } =\n BANNER_ICONS[variant ?? 'info']\n\n return (\n <div\n data-slot=\"banner\"\n className={cn(bannerVariants({ variant }), className)}\n {...props}\n >\n <Glyph\n className={cn(\n '[--spark-icon-size:calc(20px*var(--spark-scaling,1))]',\n iconClassName,\n )}\n />\n <div className=\"min-w-0 flex-1\">{children}</div>\n {onClose ? (\n <button\n aria-label={closeLabel}\n className={cn(\n buttonVariants({ size: 'icon-small', variant: 'tertiary' }),\n '-my-1 -mr-1 size-7 shrink-0 self-center text-inherit',\n )}\n data-slot=\"banner-close\"\n onClick={onClose}\n type=\"button\"\n >\n <Close aria-hidden=\"true\" className=\"[--spark-icon-size:18px]\" />\n </button>\n ) : null}\n </div>\n )\n}\n\nexport { Banner, bannerVariants }\nexport type { BannerProps, BannerVariant }\n"],"mappings":";;;;;;;;AAeA,MAAM,kBAAA,GAAA,yBAAA,KACJ,4DACA;CACE,UAAU,EACR,SAAS;EACP,OAAO;EACP,SAAS;EACT,SACE;EACF,MAAM;EACN,SAAS;CACX,EACF;CACA,iBAAiB,EACf,SAAS,OACX;AACF,CACF;AAEA,MAAM,eAGF;CACF,OAAO;EAAE,MAAMA,oBAAAA;EAAQ,WAAW;CAA6B;CAC/D,SAAS;EAAE,MAAMC,oBAAAA;EAAa,WAAW;CAA+B;CACxE,SAAS;EAAE,MAAMC,oBAAAA;EAAS,WAAW;CAA+B;CACpE,MAAM;EAAE,MAAMC,oBAAAA;EAAM,WAAW;CAAkB;CACjD,SAAS;EAAE,MAAMA,oBAAAA;EAAM,WAAW;CAAkB;AACtD;AAYA,MAAM,UAAU,EACd,UAAU,QACV,SACA,aAAa,SACb,WACA,UACA,GAAG,YACc;CACjB,MAAM,EAAE,MAAM,OAAO,WAAW,kBAC9B,aAAa,WAAW;CAE1B,OACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EACE,aAAU;EACV,YAAA,GAAA,GAAA,IAAc,eAAe,EAAE,QAAQ,CAAC,GAAG,SAAS;EACpD,GAAI;YAHN;GAKE,iBAAA,GAAA,kBAAA,KAAC,OAAD,EACE,YAAA,GAAA,GAAA,IACE,yDACA,aACF,EACD,CAAA;GACD,iBAAA,GAAA,kBAAA,KAAC,OAAD;IAAK,WAAU;IAAkB;GAAc,CAAA;GAC9C,UACC,iBAAA,GAAA,kBAAA,KAAC,UAAD;IACE,cAAY;IACZ,YAAA,GAAA,GAAA,IACEC,0BAAAA,eAAe;KAAE,MAAM;KAAc,SAAS;IAAW,CAAC,GAC1D,sDACF;IACA,aAAU;IACV,SAAS;IACT,MAAK;cAEL,iBAAA,GAAA,kBAAA,KAACC,oBAAAA,OAAD;KAAO,eAAY;KAAO,WAAU;IAA4B,CAAA;GAC1D,CAAA,IACN;EACD;;AAET"}