@brijbyte/agentic-ui 0.0.3 → 0.0.4

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 (201) hide show
  1. package/README.md +132 -35
  2. package/dist/accordion/accordion.d.ts +14 -0
  3. package/dist/accordion/accordion.d.ts.map +1 -1
  4. package/dist/accordion/accordion.js +5 -0
  5. package/dist/accordion/accordion.js.map +1 -1
  6. package/dist/alert-dialog/alert-dialog.d.ts +11 -0
  7. package/dist/alert-dialog/alert-dialog.d.ts.map +1 -1
  8. package/dist/alert-dialog/alert-dialog.js +5 -0
  9. package/dist/alert-dialog/alert-dialog.js.map +1 -1
  10. package/dist/badge/badge.d.ts +6 -0
  11. package/dist/badge/badge.d.ts.map +1 -1
  12. package/dist/badge/badge.js +4 -0
  13. package/dist/badge/badge.js.map +1 -1
  14. package/dist/button/button.d.ts +12 -1
  15. package/dist/button/button.d.ts.map +1 -1
  16. package/dist/button/button.js +5 -0
  17. package/dist/button/button.js.map +1 -1
  18. package/dist/card/card.d.ts +10 -0
  19. package/dist/card/card.d.ts.map +1 -1
  20. package/dist/card/card.js +7 -0
  21. package/dist/card/card.js.map +1 -1
  22. package/dist/checkbox/checkbox.d.ts +13 -0
  23. package/dist/checkbox/checkbox.d.ts.map +1 -1
  24. package/dist/checkbox/checkbox.js +4 -0
  25. package/dist/checkbox/checkbox.js.map +1 -1
  26. package/dist/collapsible/collapsible.d.ts +11 -0
  27. package/dist/collapsible/collapsible.d.ts.map +1 -1
  28. package/dist/collapsible/collapsible.js +5 -0
  29. package/dist/collapsible/collapsible.js.map +1 -1
  30. package/dist/context-menu/context-menu.d.ts +5 -0
  31. package/dist/context-menu/context-menu.d.ts.map +1 -1
  32. package/dist/context-menu/context-menu.js +4 -0
  33. package/dist/context-menu/context-menu.js.map +1 -1
  34. package/dist/dialog/dialog.d.ts +13 -1
  35. package/dist/dialog/dialog.d.ts.map +1 -1
  36. package/dist/dialog/dialog.js +6 -0
  37. package/dist/dialog/dialog.js.map +1 -1
  38. package/dist/drawer/drawer.d.ts +11 -0
  39. package/dist/drawer/drawer.d.ts.map +1 -1
  40. package/dist/drawer/drawer.js +5 -0
  41. package/dist/drawer/drawer.js.map +1 -1
  42. package/dist/index.css +1681 -1251
  43. package/dist/index.d.ts +19 -10
  44. package/dist/index.js +14 -1
  45. package/dist/input/input.d.ts +8 -0
  46. package/dist/input/input.d.ts.map +1 -1
  47. package/dist/input/input.js +5 -0
  48. package/dist/input/input.js.map +1 -1
  49. package/dist/menu/menu.css +3 -8
  50. package/dist/menu/menu.d.ts +11 -4
  51. package/dist/menu/menu.d.ts.map +1 -1
  52. package/dist/menu/menu.js +10 -24
  53. package/dist/menu/menu.js.map +1 -1
  54. package/dist/menu/menu.module.js +1 -1
  55. package/dist/menu/menu.module.js.map +1 -1
  56. package/dist/meter/circular-meter.d.ts +48 -0
  57. package/dist/meter/circular-meter.d.ts.map +1 -0
  58. package/dist/meter/circular-meter.js +86 -0
  59. package/dist/meter/circular-meter.js.map +1 -0
  60. package/dist/meter/index.d.ts +4 -0
  61. package/dist/meter/index.js +5 -0
  62. package/dist/meter/meter.css +152 -0
  63. package/dist/meter/meter.d.ts +58 -0
  64. package/dist/meter/meter.d.ts.map +1 -0
  65. package/dist/meter/meter.js +50 -0
  66. package/dist/meter/meter.js.map +1 -0
  67. package/dist/meter/meter.module.css.d.ts +2 -0
  68. package/dist/meter/meter.module.js +27 -0
  69. package/dist/meter/meter.module.js.map +1 -0
  70. package/dist/meter/meterState.js +18 -0
  71. package/dist/meter/meterState.js.map +1 -0
  72. package/dist/meter/parts.d.ts +31 -0
  73. package/dist/meter/parts.d.ts.map +1 -0
  74. package/dist/meter/parts.js +56 -0
  75. package/dist/meter/parts.js.map +1 -0
  76. package/dist/number-field/number-field.d.ts +16 -0
  77. package/dist/number-field/number-field.d.ts.map +1 -1
  78. package/dist/number-field/number-field.js +4 -0
  79. package/dist/number-field/number-field.js.map +1 -1
  80. package/dist/popover/index.d.ts +3 -0
  81. package/dist/popover/index.js +4 -0
  82. package/dist/popover/parts.d.ts +43 -0
  83. package/dist/popover/parts.d.ts.map +1 -0
  84. package/dist/popover/parts.js +96 -0
  85. package/dist/popover/parts.js.map +1 -0
  86. package/dist/popover/popover.css +173 -0
  87. package/dist/popover/popover.d.ts +49 -0
  88. package/dist/popover/popover.d.ts.map +1 -0
  89. package/dist/popover/popover.js +68 -0
  90. package/dist/popover/popover.js.map +1 -0
  91. package/dist/popover/popover.module.css.d.ts +2 -0
  92. package/dist/popover/popover.module.js +16 -0
  93. package/dist/popover/popover.module.js.map +1 -0
  94. package/dist/progress/progress.d.ts +11 -0
  95. package/dist/progress/progress.d.ts.map +1 -1
  96. package/dist/progress/progress.js +5 -0
  97. package/dist/progress/progress.js.map +1 -1
  98. package/dist/radio/index.d.ts +3 -0
  99. package/dist/radio/index.js +4 -0
  100. package/dist/radio/parts.d.ts +18 -0
  101. package/dist/radio/parts.d.ts.map +1 -0
  102. package/dist/radio/parts.js +42 -0
  103. package/dist/radio/parts.js.map +1 -0
  104. package/dist/radio/radio.css +84 -0
  105. package/dist/radio/radio.d.ts +31 -0
  106. package/dist/radio/radio.d.ts.map +1 -0
  107. package/dist/radio/radio.js +33 -0
  108. package/dist/radio/radio.js.map +1 -0
  109. package/dist/radio/radio.module.css.d.ts +2 -0
  110. package/dist/radio/radio.module.js +11 -0
  111. package/dist/radio/radio.module.js.map +1 -0
  112. package/dist/radio-group/index.d.ts +3 -0
  113. package/dist/radio-group/index.js +4 -0
  114. package/dist/radio-group/parts.d.ts +13 -0
  115. package/dist/radio-group/parts.d.ts.map +1 -0
  116. package/dist/radio-group/parts.js +31 -0
  117. package/dist/radio-group/parts.js.map +1 -0
  118. package/dist/radio-group/radio-group.css +17 -0
  119. package/dist/radio-group/radio-group.d.ts +37 -0
  120. package/dist/radio-group/radio-group.d.ts.map +1 -0
  121. package/dist/radio-group/radio-group.js +28 -0
  122. package/dist/radio-group/radio-group.js.map +1 -0
  123. package/dist/radio-group/radio-group.module.css.d.ts +2 -0
  124. package/dist/radio-group/radio-group.module.js +9 -0
  125. package/dist/radio-group/radio-group.module.js.map +1 -0
  126. package/dist/select/select.d.ts +14 -1
  127. package/dist/select/select.d.ts.map +1 -1
  128. package/dist/select/select.js +4 -0
  129. package/dist/select/select.js.map +1 -1
  130. package/dist/separator/separator.d.ts +4 -0
  131. package/dist/separator/separator.d.ts.map +1 -1
  132. package/dist/separator/separator.js +4 -0
  133. package/dist/separator/separator.js.map +1 -1
  134. package/dist/shared/PopupArrow.js +22 -0
  135. package/dist/shared/PopupArrow.js.map +1 -0
  136. package/dist/slider/slider.d.ts +18 -0
  137. package/dist/slider/slider.d.ts.map +1 -1
  138. package/dist/slider/slider.js +6 -0
  139. package/dist/slider/slider.js.map +1 -1
  140. package/dist/switch/switch.css +11 -2
  141. package/dist/switch/switch.d.ts +12 -0
  142. package/dist/switch/switch.d.ts.map +1 -1
  143. package/dist/switch/switch.js +4 -0
  144. package/dist/switch/switch.js.map +1 -1
  145. package/dist/switch/switch.module.js.map +1 -1
  146. package/dist/tabs/tabs.d.ts +8 -1
  147. package/dist/tabs/tabs.d.ts.map +1 -1
  148. package/dist/tabs/tabs.js +4 -0
  149. package/dist/tabs/tabs.js.map +1 -1
  150. package/dist/toast/toast.d.ts +11 -0
  151. package/dist/toast/toast.d.ts.map +1 -1
  152. package/dist/toast/toast.js +8 -0
  153. package/dist/toast/toast.js.map +1 -1
  154. package/dist/tooltip/tooltip.d.ts +9 -0
  155. package/dist/tooltip/tooltip.d.ts.map +1 -1
  156. package/dist/tooltip/tooltip.js +4 -0
  157. package/dist/tooltip/tooltip.js.map +1 -1
  158. package/package.json +22 -2
  159. package/src/accordion/accordion.tsx +14 -0
  160. package/src/alert-dialog/alert-dialog.tsx +11 -0
  161. package/src/badge/badge.tsx +6 -0
  162. package/src/button/button.tsx +12 -1
  163. package/src/card/card.tsx +10 -0
  164. package/src/checkbox/checkbox.tsx +13 -0
  165. package/src/collapsible/collapsible.tsx +11 -0
  166. package/src/context-menu/context-menu.tsx +5 -0
  167. package/src/dialog/dialog.tsx +13 -1
  168. package/src/drawer/drawer.tsx +11 -0
  169. package/src/index.ts +4 -0
  170. package/src/input/input.tsx +8 -0
  171. package/src/menu/menu.module.css +3 -10
  172. package/src/menu/menu.tsx +13 -26
  173. package/src/meter/circular-meter.tsx +114 -0
  174. package/src/meter/index.ts +9 -0
  175. package/src/meter/meter.module.css +162 -0
  176. package/src/meter/meter.tsx +86 -0
  177. package/src/meter/meterState.ts +29 -0
  178. package/src/meter/parts.tsx +72 -0
  179. package/src/number-field/number-field.tsx +16 -0
  180. package/src/popover/index.ts +14 -0
  181. package/src/popover/parts.tsx +120 -0
  182. package/src/popover/popover.module.css +189 -0
  183. package/src/popover/popover.tsx +80 -0
  184. package/src/progress/progress.tsx +11 -0
  185. package/src/radio/index.ts +6 -0
  186. package/src/radio/parts.tsx +43 -0
  187. package/src/radio/radio.module.css +96 -0
  188. package/src/radio/radio.tsx +37 -0
  189. package/src/radio-group/index.ts +5 -0
  190. package/src/radio-group/parts.tsx +32 -0
  191. package/src/radio-group/radio-group.module.css +17 -0
  192. package/src/radio-group/radio-group.tsx +63 -0
  193. package/src/select/select.tsx +14 -1
  194. package/src/separator/separator.tsx +4 -0
  195. package/src/shared/PopupArrow.tsx +41 -0
  196. package/src/slider/slider.tsx +18 -0
  197. package/src/switch/switch.module.css +11 -2
  198. package/src/switch/switch.tsx +12 -0
  199. package/src/tabs/tabs.tsx +8 -1
  200. package/src/toast/toast.tsx +11 -0
  201. package/src/tooltip/tooltip.tsx +9 -0
@@ -4,19 +4,32 @@ import styles from "./checkbox.module.css";
4
4
 
5
5
  //#region src/checkbox/checkbox.d.ts
6
6
  interface CheckboxProps {
7
+ /** Controlled checked state. */
7
8
  checked?: boolean;
9
+ /** Initial checked state (uncontrolled). */
8
10
  defaultChecked?: boolean;
11
+ /** Display a horizontal dash instead of a checkmark. */
9
12
  indeterminate?: boolean;
13
+ /** Prevent interaction and dim the checkbox. */
10
14
  disabled?: boolean;
15
+ /** Mark the field as required for form validation. */
11
16
  required?: boolean;
17
+ /** HTML name attribute for form submission. */
12
18
  name?: string;
19
+ /** HTML value attribute for form submission. */
13
20
  value?: string;
14
21
  /** Called when checked state changes. `eventDetails` is the base-ui event details object. */
15
22
  onCheckedChange?: (checked: boolean, eventDetails: unknown) => void;
23
+ /** Label content rendered next to the checkbox. */
16
24
  children?: ReactNode;
25
+ /** Override the auto-generated element id. */
17
26
  id?: string;
18
27
  className?: string;
19
28
  }
29
+ /**
30
+ * Boolean selection with an accessible label. Wraps `@base-ui/react` Checkbox
31
+ * with a styled indicator, check icon, and label layout.
32
+ */
20
33
  declare function Checkbox({
21
34
  children,
22
35
  id,
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox.d.ts","names":[],"sources":["../../src/checkbox/checkbox.tsx"],"mappings":";;;;;UAKiB,aAAA;EACf,OAAA;EACA,cAAA;EACA,aAAA;EACA,QAAA;EACA,QAAA;EACA,IAAA;EACA,KAAA;EALA;EAOA,eAAA,IAAmB,OAAA,WAAkB,YAAA;EACrC,QAAA,GAAW,SAAA;EACX,EAAA;EACA,SAAA;AAAA;AAAA,iBAGc,QAAA,CAAA;EAAW,QAAA;EAAU,EAAA;EAAI,SAAA;EAAW,eAAA;EAAA,GAAoB;AAAA,GAAS,aAAA,GAAa,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"checkbox.d.ts","names":[],"sources":["../../src/checkbox/checkbox.tsx"],"mappings":";;;;;UAKiB,aAAA;;EAEf,OAAA;EAFe;EAIf,cAAA;;EAEA,aAAA;EAJA;EAMA,QAAA;EAFA;EAIA,QAAA;EAAA;EAEA,IAAA;EAEA;EAAA,KAAA;EAEmB;EAAnB,eAAA,IAAmB,OAAA,WAAkB,YAAA;EAErC;EAAA,QAAA,GAAW,SAAA;EAEX;EAAA,EAAA;EACA,SAAA;AAAA;AAOF;;;;AAAA,iBAAgB,QAAA,CAAA;EAAW,QAAA;EAAU,EAAA;EAAI,SAAA;EAAW,eAAA;EAAA,GAAoB;AAAA,GAAS,aAAA,GAAa,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -3,6 +3,10 @@ import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { useId } from "react";
4
4
  import { Checkbox } from "@base-ui/react/checkbox";
5
5
  //#region src/checkbox/checkbox.tsx
6
+ /**
7
+ * Boolean selection with an accessible label. Wraps `@base-ui/react` Checkbox
8
+ * with a styled indicator, check icon, and label layout.
9
+ */
6
10
  function Checkbox$1({ children, id, className, onCheckedChange, ...props }) {
7
11
  const checkboxId = id ?? useId();
8
12
  return /* @__PURE__ */ jsxs("label", {
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox.js","names":["Checkbox","styles","BaseCheckbox"],"sources":["../../src/checkbox/checkbox.tsx"],"sourcesContent":["import { useId } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { Checkbox as BaseCheckbox } from \"@base-ui/react/checkbox\";\nimport styles from \"./checkbox.module.css\";\n\nexport interface CheckboxProps {\n checked?: boolean;\n defaultChecked?: boolean;\n indeterminate?: boolean;\n disabled?: boolean;\n required?: boolean;\n name?: string;\n value?: string;\n /** Called when checked state changes. `eventDetails` is the base-ui event details object. */\n onCheckedChange?: (checked: boolean, eventDetails: unknown) => void;\n children?: ReactNode;\n id?: string;\n className?: string;\n}\n\nexport function Checkbox({ children, id, className, onCheckedChange, ...props }: CheckboxProps) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const checkboxId = id ?? useId();\n\n return (\n <label className={`${styles.root} ${className ?? \"\"}`} htmlFor={checkboxId}>\n <BaseCheckbox.Root id={checkboxId} className={styles.indicator} onCheckedChange={onCheckedChange as never} {...props}>\n <BaseCheckbox.Indicator className={styles.icon}>\n <svg viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1.5 5L3.5 7.5L8.5 2.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </BaseCheckbox.Indicator>\n </BaseCheckbox.Root>\n {children && <span className={styles.label}>{children}</span>}\n </label>\n );\n}\nexport { styles as CheckboxStyles };\n"],"mappings":";;;;;AAoBA,SAAgBA,WAAS,EAAE,UAAU,IAAI,WAAW,iBAAiB,GAAG,SAAwB;CAE9F,MAAM,aAAa,MAAM,OAAO;AAEhC,QACE,qBAAC,SAAD;EAAO,WAAW,GAAGC,wBAAO,KAAK,GAAG,aAAa;EAAM,SAAS;YAAhE,CACE,oBAACC,SAAa,MAAd;GAAmB,IAAI;GAAY,WAAWD,wBAAO;GAA4B;GAA0B,GAAI;aAC7G,oBAACC,SAAa,WAAd;IAAwB,WAAWD,wBAAO;cACxC,oBAAC,OAAD;KAAK,SAAQ;KAAY,MAAK;KAAO,OAAM;eACzC,oBAAC,QAAD;MAAM,GAAE;MAAyB,QAAO;MAAe,aAAY;MAAM,eAAc;MAAQ,gBAAe;MAAU,CAAA;KACpH,CAAA;IACiB,CAAA;GACP,CAAA,EACnB,YAAY,oBAAC,QAAD;GAAM,WAAWA,wBAAO;GAAQ;GAAgB,CAAA,CACvD"}
1
+ {"version":3,"file":"checkbox.js","names":["Checkbox","styles","BaseCheckbox"],"sources":["../../src/checkbox/checkbox.tsx"],"sourcesContent":["import { useId } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { Checkbox as BaseCheckbox } from \"@base-ui/react/checkbox\";\nimport styles from \"./checkbox.module.css\";\n\nexport interface CheckboxProps {\n /** Controlled checked state. */\n checked?: boolean;\n /** Initial checked state (uncontrolled). */\n defaultChecked?: boolean;\n /** Display a horizontal dash instead of a checkmark. */\n indeterminate?: boolean;\n /** Prevent interaction and dim the checkbox. */\n disabled?: boolean;\n /** Mark the field as required for form validation. */\n required?: boolean;\n /** HTML name attribute for form submission. */\n name?: string;\n /** HTML value attribute for form submission. */\n value?: string;\n /** Called when checked state changes. `eventDetails` is the base-ui event details object. */\n onCheckedChange?: (checked: boolean, eventDetails: unknown) => void;\n /** Label content rendered next to the checkbox. */\n children?: ReactNode;\n /** Override the auto-generated element id. */\n id?: string;\n className?: string;\n}\n\n/**\n * Boolean selection with an accessible label. Wraps `@base-ui/react` Checkbox\n * with a styled indicator, check icon, and label layout.\n */\nexport function Checkbox({ children, id, className, onCheckedChange, ...props }: CheckboxProps) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const checkboxId = id ?? useId();\n\n return (\n <label className={`${styles.root} ${className ?? \"\"}`} htmlFor={checkboxId}>\n <BaseCheckbox.Root id={checkboxId} className={styles.indicator} onCheckedChange={onCheckedChange as never} {...props}>\n <BaseCheckbox.Indicator className={styles.icon}>\n <svg viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1.5 5L3.5 7.5L8.5 2.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </BaseCheckbox.Indicator>\n </BaseCheckbox.Root>\n {children && <span className={styles.label}>{children}</span>}\n </label>\n );\n}\nexport { styles as CheckboxStyles };\n"],"mappings":";;;;;;;;;AAiCA,SAAgBA,WAAS,EAAE,UAAU,IAAI,WAAW,iBAAiB,GAAG,SAAwB;CAE9F,MAAM,aAAa,MAAM,OAAO;AAEhC,QACE,qBAAC,SAAD;EAAO,WAAW,GAAGC,wBAAO,KAAK,GAAG,aAAa;EAAM,SAAS;YAAhE,CACE,oBAACC,SAAa,MAAd;GAAmB,IAAI;GAAY,WAAWD,wBAAO;GAA4B;GAA0B,GAAI;aAC7G,oBAACC,SAAa,WAAd;IAAwB,WAAWD,wBAAO;cACxC,oBAAC,OAAD;KAAK,SAAQ;KAAY,MAAK;KAAO,OAAM;eACzC,oBAAC,QAAD;MAAM,GAAE;MAAyB,QAAO;MAAe,aAAY;MAAM,eAAc;MAAQ,gBAAe;MAAU,CAAA;KACpH,CAAA;IACiB,CAAA;GACP,CAAA,EACnB,YAAY,oBAAC,QAAD;GAAM,WAAWA,wBAAO;GAAQ;GAAgB,CAAA,CACvD"}
@@ -4,14 +4,25 @@ import styles from "./collapsible.module.css";
4
4
 
5
5
  //#region src/collapsible/collapsible.d.ts
6
6
  interface CollapsibleProps {
7
+ /** Content rendered inside the toggle button. */
7
8
  trigger: ReactNode;
9
+ /** Content revealed when expanded. */
8
10
  children: ReactNode;
11
+ /** Whether the panel is initially open (uncontrolled). */
9
12
  defaultOpen?: boolean;
13
+ /** Controlled open state. */
10
14
  open?: boolean;
15
+ /** Called when the panel opens or closes. */
11
16
  onOpenChange?: (open: boolean) => void;
17
+ /** Prevent the panel from being toggled. */
12
18
  disabled?: boolean;
13
19
  className?: string;
14
20
  }
21
+ /**
22
+ * A single panel toggled by a button. Unlike Accordion it stands alone —
23
+ * ideal for inline FAQ entries, code blocks, or side panels.
24
+ * Animates via `--collapsible-panel-height`.
25
+ */
15
26
  declare function Collapsible({
16
27
  trigger,
17
28
  children,
@@ -1 +1 @@
1
- {"version":3,"file":"collapsible.d.ts","names":[],"sources":["../../src/collapsible/collapsible.tsx"],"mappings":";;;;;UAIiB,gBAAA;EACf,OAAA,EAAS,SAAA;EACT,QAAA,EAAU,SAAA;EACV,WAAA;EACA,IAAA;EACA,YAAA,IAAgB,IAAA;EAChB,QAAA;EACA,SAAA;AAAA;AAAA,iBAWc,WAAA,CAAA;EAAc,OAAA;EAAS,QAAA;EAAU,SAAA;EAAW,YAAA;EAAA,GAAiB;AAAA,GAAS,gBAAA,GAAgB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"collapsible.d.ts","names":[],"sources":["../../src/collapsible/collapsible.tsx"],"mappings":";;;;;UAIiB,gBAAA;;EAEf,OAAA,EAAS,SAAA;EAFM;EAIf,QAAA,EAAU,SAAA;;EAEV,WAAA;EAJA;EAMA,IAAA;EAJA;EAMA,YAAA,IAAgB,IAAA;EAJhB;EAMA,QAAA;EACA,SAAA;AAAA;;;;;AAgBF;iBAAgB,WAAA,CAAA;EAAc,OAAA;EAAS,QAAA;EAAU,SAAA;EAAW,YAAA;EAAA,GAAiB;AAAA,GAAS,gBAAA,GAAgB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -18,6 +18,11 @@ function ChevronIcon() {
18
18
  })
19
19
  });
20
20
  }
21
+ /**
22
+ * A single panel toggled by a button. Unlike Accordion it stands alone —
23
+ * ideal for inline FAQ entries, code blocks, or side panels.
24
+ * Animates via `--collapsible-panel-height`.
25
+ */
21
26
  function Collapsible$1({ trigger, children, className, onOpenChange, ...props }) {
22
27
  return /* @__PURE__ */ jsxs(Collapsible.Root, {
23
28
  className: `${collapsible_module_default.root} ${className ?? ""}`,
@@ -1 +1 @@
1
- {"version":3,"file":"collapsible.js","names":["Collapsible","BaseCollapsible","styles"],"sources":["../../src/collapsible/collapsible.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Collapsible as BaseCollapsible } from \"@base-ui/react/collapsible\";\nimport styles from \"./collapsible.module.css\";\n\nexport interface CollapsibleProps {\n trigger: ReactNode;\n children: ReactNode;\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n className?: string;\n}\n\nfunction ChevronIcon() {\n return (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden>\n <path d=\"M3.5 9L7.5 5L3.5 1\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\nexport function Collapsible({ trigger, children, className, onOpenChange, ...props }: CollapsibleProps) {\n return (\n <BaseCollapsible.Root className={`${styles.root} ${className ?? \"\"}`} onOpenChange={onOpenChange as never} {...props}>\n <BaseCollapsible.Trigger className={styles.trigger}>\n <span className={styles[\"trigger-icon\"]}>\n <ChevronIcon />\n </span>\n {trigger}\n </BaseCollapsible.Trigger>\n <BaseCollapsible.Panel className={styles.panel}>\n <div className={styles[\"panel-content\"]}>{children}</div>\n </BaseCollapsible.Panel>\n </BaseCollapsible.Root>\n );\n}\nexport { styles as CollapsibleStyles };\n"],"mappings":";;;;AAcA,SAAS,cAAc;AACrB,QACE,oBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EAAO,eAAA;YAC1D,oBAAC,QAAD;GAAM,GAAE;GAAqB,QAAO;GAAe,aAAY;GAAM,eAAc;GAAQ,gBAAe;GAAU,CAAA;EAChH,CAAA;;AAIV,SAAgBA,cAAY,EAAE,SAAS,UAAU,WAAW,cAAc,GAAG,SAA2B;AACtG,QACE,qBAACC,YAAgB,MAAjB;EAAsB,WAAW,GAAGC,2BAAO,KAAK,GAAG,aAAa;EAAoB;EAAuB,GAAI;YAA/G,CACE,qBAACD,YAAgB,SAAjB;GAAyB,WAAWC,2BAAO;aAA3C,CACE,oBAAC,QAAD;IAAM,WAAWA,2BAAO;cACtB,oBAAC,aAAD,EAAe,CAAA;IACV,CAAA,EACN,QACuB;MAC1B,oBAACD,YAAgB,OAAjB;GAAuB,WAAWC,2BAAO;aACvC,oBAAC,OAAD;IAAK,WAAWA,2BAAO;IAAmB;IAAe,CAAA;GACnC,CAAA,CACH"}
1
+ {"version":3,"file":"collapsible.js","names":["Collapsible","BaseCollapsible","styles"],"sources":["../../src/collapsible/collapsible.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Collapsible as BaseCollapsible } from \"@base-ui/react/collapsible\";\nimport styles from \"./collapsible.module.css\";\n\nexport interface CollapsibleProps {\n /** Content rendered inside the toggle button. */\n trigger: ReactNode;\n /** Content revealed when expanded. */\n children: ReactNode;\n /** Whether the panel is initially open (uncontrolled). */\n defaultOpen?: boolean;\n /** Controlled open state. */\n open?: boolean;\n /** Called when the panel opens or closes. */\n onOpenChange?: (open: boolean) => void;\n /** Prevent the panel from being toggled. */\n disabled?: boolean;\n className?: string;\n}\n\nfunction ChevronIcon() {\n return (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden>\n <path d=\"M3.5 9L7.5 5L3.5 1\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\n/**\n * A single panel toggled by a button. Unlike Accordion it stands alone —\n * ideal for inline FAQ entries, code blocks, or side panels.\n * Animates via `--collapsible-panel-height`.\n */\nexport function Collapsible({ trigger, children, className, onOpenChange, ...props }: CollapsibleProps) {\n return (\n <BaseCollapsible.Root className={`${styles.root} ${className ?? \"\"}`} onOpenChange={onOpenChange as never} {...props}>\n <BaseCollapsible.Trigger className={styles.trigger}>\n <span className={styles[\"trigger-icon\"]}>\n <ChevronIcon />\n </span>\n {trigger}\n </BaseCollapsible.Trigger>\n <BaseCollapsible.Panel className={styles.panel}>\n <div className={styles[\"panel-content\"]}>{children}</div>\n </BaseCollapsible.Panel>\n </BaseCollapsible.Root>\n );\n}\nexport { styles as CollapsibleStyles };\n"],"mappings":";;;;AAoBA,SAAS,cAAc;AACrB,QACE,oBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EAAO,eAAA;YAC1D,oBAAC,QAAD;GAAM,GAAE;GAAqB,QAAO;GAAe,aAAY;GAAM,eAAc;GAAQ,gBAAe;GAAU,CAAA;EAChH,CAAA;;;;;;;AASV,SAAgBA,cAAY,EAAE,SAAS,UAAU,WAAW,cAAc,GAAG,SAA2B;AACtG,QACE,qBAACC,YAAgB,MAAjB;EAAsB,WAAW,GAAGC,2BAAO,KAAK,GAAG,aAAa;EAAoB;EAAuB,GAAI;YAA/G,CACE,qBAACD,YAAgB,SAAjB;GAAyB,WAAWC,2BAAO;aAA3C,CACE,oBAAC,QAAD;IAAM,WAAWA,2BAAO;cACtB,oBAAC,aAAD,EAAe,CAAA;IACV,CAAA,EACN,QACuB;MAC1B,oBAACD,YAAgB,OAAjB;GAAuB,WAAWC,2BAAO;aACvC,oBAAC,OAAD;IAAK,WAAWA,2BAAO;IAAmB;IAAe,CAAA;GACnC,CAAA,CACH"}
@@ -23,9 +23,14 @@ type ContextMenuEntry = ContextMenuItemDef | ContextMenuSeparatorDef | ContextMe
23
23
  interface ContextMenuProps {
24
24
  /** The element that can be right-clicked / long-pressed to open the menu. */
25
25
  children: ReactElement;
26
+ /** Array of menu entries: items, separators, and groups. */
26
27
  items: ContextMenuEntry[];
27
28
  className?: string;
28
29
  }
30
+ /**
31
+ * A menu that appears at the pointer on right-click or long press. Supports
32
+ * items, separators, groups, keyboard shortcuts, and disabled states.
33
+ */
29
34
  declare function ContextMenu({
30
35
  children,
31
36
  items,
@@ -1 +1 @@
1
- {"version":3,"file":"context-menu.d.ts","names":[],"sources":["../../src/context-menu/context-menu.tsx"],"mappings":";;;;;UAIiB,kBAAA;EACf,IAAA;EACA,KAAA,EAAO,SAAA;EACP,IAAA,GAAO,SAAA;EACP,QAAA;EACA,QAAA;EACA,QAAA;AAAA;AAAA,UAGe,uBAAA;EACf,IAAA;AAAA;AAAA,UAGe,mBAAA;EACf,IAAA;EACA,KAAA,GAAQ,SAAA;EACR,KAAA,EAAO,kBAAA;AAAA;AAAA,KAGG,gBAAA,GAAmB,kBAAA,GAAqB,uBAAA,GAA0B,mBAAA;AAAA,UAE7D,gBAAA;EAZuB;EActC,QAAA,EAAU,YAAA;EACV,KAAA,EAAO,gBAAA;EACP,SAAA;AAAA;AAAA,iBAac,WAAA,CAAA;EAAc,QAAA;EAAU,KAAA;EAAO;AAAA,GAAa,gBAAA,GAAgB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"context-menu.d.ts","names":[],"sources":["../../src/context-menu/context-menu.tsx"],"mappings":";;;;;UAIiB,kBAAA;EACf,IAAA;EACA,KAAA,EAAO,SAAA;EACP,IAAA,GAAO,SAAA;EACP,QAAA;EACA,QAAA;EACA,QAAA;AAAA;AAAA,UAGe,uBAAA;EACf,IAAA;AAAA;AAAA,UAGe,mBAAA;EACf,IAAA;EACA,KAAA,GAAQ,SAAA;EACR,KAAA,EAAO,kBAAA;AAAA;AAAA,KAGG,gBAAA,GAAmB,kBAAA,GAAqB,uBAAA,GAA0B,mBAAA;AAAA,UAE7D,gBAAA;EAZuB;EActC,QAAA,EAAU,YAAA;EAbV;EAeA,KAAA,EAAO,gBAAA;EACP,SAAA;AAAA;;;;;iBAiBc,WAAA,CAAA;EAAc,QAAA;EAAU,KAAA;EAAO;AAAA,GAAa,gBAAA,GAAgB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -23,6 +23,10 @@ function RenderItem({ item, i }) {
23
23
  ]
24
24
  }, i);
25
25
  }
26
+ /**
27
+ * A menu that appears at the pointer on right-click or long press. Supports
28
+ * items, separators, groups, keyboard shortcuts, and disabled states.
29
+ */
26
30
  function ContextMenu$1({ children, items, className }) {
27
31
  return /* @__PURE__ */ jsxs(ContextMenu.Root, { children: [/* @__PURE__ */ jsx(ContextMenu.Trigger, {
28
32
  className: `${context_menu_module_default.trigger} ${className ?? ""}`,
@@ -1 +1 @@
1
- {"version":3,"file":"context-menu.js","names":["BaseContextMenu","styles","ContextMenu"],"sources":["../../src/context-menu/context-menu.tsx"],"sourcesContent":["import type { ReactNode, ReactElement } from \"react\";\nimport { ContextMenu as BaseContextMenu } from \"@base-ui/react/context-menu\";\nimport styles from \"./context-menu.module.css\";\n\nexport interface ContextMenuItemDef {\n type?: \"item\";\n label: ReactNode;\n icon?: ReactNode;\n shortcut?: string;\n onSelect?: () => void;\n disabled?: boolean;\n}\n\nexport interface ContextMenuSeparatorDef {\n type: \"separator\";\n}\n\nexport interface ContextMenuGroupDef {\n type: \"group\";\n label?: ReactNode;\n items: ContextMenuItemDef[];\n}\n\nexport type ContextMenuEntry = ContextMenuItemDef | ContextMenuSeparatorDef | ContextMenuGroupDef;\n\nexport interface ContextMenuProps {\n /** The element that can be right-clicked / long-pressed to open the menu. */\n children: ReactElement;\n items: ContextMenuEntry[];\n className?: string;\n}\n\nfunction RenderItem({ item, i }: { item: ContextMenuItemDef; i: number }) {\n return (\n <BaseContextMenu.Item key={i} className={styles.item} disabled={item.disabled} onClick={item.onSelect}>\n {item.icon && <span className={styles[\"item-icon\"]}>{item.icon}</span>}\n <span className={styles[\"item-label\"]}>{item.label}</span>\n {item.shortcut && <span className={styles[\"item-shortcut\"]}>{item.shortcut}</span>}\n </BaseContextMenu.Item>\n );\n}\n\nexport function ContextMenu({ children, items, className }: ContextMenuProps) {\n return (\n <BaseContextMenu.Root>\n <BaseContextMenu.Trigger className={`${styles.trigger} ${className ?? \"\"}`} render={children} />\n <BaseContextMenu.Portal>\n <BaseContextMenu.Positioner className={styles.positioner}>\n <BaseContextMenu.Popup className={styles.popup}>\n {items.map((entry, i) => {\n if (entry.type === \"separator\") {\n return <BaseContextMenu.Separator key={i} className={styles.separator} />;\n }\n if (entry.type === \"group\") {\n return (\n <BaseContextMenu.Group key={i}>\n {entry.label && (\n <BaseContextMenu.GroupLabel className={styles[\"group-label\"]}>{entry.label}</BaseContextMenu.GroupLabel>\n )}\n {entry.items.map((item, j) => (\n <RenderItem key={j} item={item} i={j} />\n ))}\n </BaseContextMenu.Group>\n );\n }\n return <RenderItem key={i} item={entry} i={i} />;\n })}\n </BaseContextMenu.Popup>\n </BaseContextMenu.Positioner>\n </BaseContextMenu.Portal>\n </BaseContextMenu.Root>\n );\n}\n\nexport { styles as ContextMenuStyles };\n"],"mappings":";;;;AAgCA,SAAS,WAAW,EAAE,MAAM,KAA8C;AACxE,QACE,qBAACA,YAAgB,MAAjB;EAA8B,WAAWC,4BAAO;EAAM,UAAU,KAAK;EAAU,SAAS,KAAK;YAA7F;GACG,KAAK,QAAQ,oBAAC,QAAD;IAAM,WAAWA,4BAAO;cAAe,KAAK;IAAY,CAAA;GACtE,oBAAC,QAAD;IAAM,WAAWA,4BAAO;cAAgB,KAAK;IAAa,CAAA;GACzD,KAAK,YAAY,oBAAC,QAAD;IAAM,WAAWA,4BAAO;cAAmB,KAAK;IAAgB,CAAA;GAC7D;IAJI,EAIJ;;AAI3B,SAAgBC,cAAY,EAAE,UAAU,OAAO,aAA+B;AAC5E,QACE,qBAACF,YAAgB,MAAjB,EAAA,UAAA,CACE,oBAACA,YAAgB,SAAjB;EAAyB,WAAW,GAAGC,4BAAO,QAAQ,GAAG,aAAa;EAAM,QAAQ;EAAY,CAAA,EAChG,oBAACD,YAAgB,QAAjB,EAAA,UACE,oBAACA,YAAgB,YAAjB;EAA4B,WAAWC,4BAAO;YAC5C,oBAACD,YAAgB,OAAjB;GAAuB,WAAWC,4BAAO;aACtC,MAAM,KAAK,OAAO,MAAM;AACvB,QAAI,MAAM,SAAS,YACjB,QAAO,oBAACD,YAAgB,WAAjB,EAAmC,WAAWC,4BAAO,WAAa,EAAlC,EAAkC;AAE3E,QAAI,MAAM,SAAS,QACjB,QACE,qBAACD,YAAgB,OAAjB,EAAA,UAAA,CACG,MAAM,SACL,oBAACA,YAAgB,YAAjB;KAA4B,WAAWC,4BAAO;eAAiB,MAAM;KAAmC,CAAA,EAEzG,MAAM,MAAM,KAAK,MAAM,MACtB,oBAAC,YAAD;KAA0B;KAAM,GAAG;KAAK,EAAvB,EAAuB,CACxC,CACoB,EAAA,EAPI,EAOJ;AAG5B,WAAO,oBAAC,YAAD;KAAoB,MAAM;KAAU;KAAK,EAAxB,EAAwB;KAChD;GACoB,CAAA;EACG,CAAA,EACN,CAAA,CACJ,EAAA,CAAA"}
1
+ {"version":3,"file":"context-menu.js","names":["BaseContextMenu","styles","ContextMenu"],"sources":["../../src/context-menu/context-menu.tsx"],"sourcesContent":["import type { ReactNode, ReactElement } from \"react\";\nimport { ContextMenu as BaseContextMenu } from \"@base-ui/react/context-menu\";\nimport styles from \"./context-menu.module.css\";\n\nexport interface ContextMenuItemDef {\n type?: \"item\";\n label: ReactNode;\n icon?: ReactNode;\n shortcut?: string;\n onSelect?: () => void;\n disabled?: boolean;\n}\n\nexport interface ContextMenuSeparatorDef {\n type: \"separator\";\n}\n\nexport interface ContextMenuGroupDef {\n type: \"group\";\n label?: ReactNode;\n items: ContextMenuItemDef[];\n}\n\nexport type ContextMenuEntry = ContextMenuItemDef | ContextMenuSeparatorDef | ContextMenuGroupDef;\n\nexport interface ContextMenuProps {\n /** The element that can be right-clicked / long-pressed to open the menu. */\n children: ReactElement;\n /** Array of menu entries: items, separators, and groups. */\n items: ContextMenuEntry[];\n className?: string;\n}\n\nfunction RenderItem({ item, i }: { item: ContextMenuItemDef; i: number }) {\n return (\n <BaseContextMenu.Item key={i} className={styles.item} disabled={item.disabled} onClick={item.onSelect}>\n {item.icon && <span className={styles[\"item-icon\"]}>{item.icon}</span>}\n <span className={styles[\"item-label\"]}>{item.label}</span>\n {item.shortcut && <span className={styles[\"item-shortcut\"]}>{item.shortcut}</span>}\n </BaseContextMenu.Item>\n );\n}\n\n/**\n * A menu that appears at the pointer on right-click or long press. Supports\n * items, separators, groups, keyboard shortcuts, and disabled states.\n */\nexport function ContextMenu({ children, items, className }: ContextMenuProps) {\n return (\n <BaseContextMenu.Root>\n <BaseContextMenu.Trigger className={`${styles.trigger} ${className ?? \"\"}`} render={children} />\n <BaseContextMenu.Portal>\n <BaseContextMenu.Positioner className={styles.positioner}>\n <BaseContextMenu.Popup className={styles.popup}>\n {items.map((entry, i) => {\n if (entry.type === \"separator\") {\n return <BaseContextMenu.Separator key={i} className={styles.separator} />;\n }\n if (entry.type === \"group\") {\n return (\n <BaseContextMenu.Group key={i}>\n {entry.label && (\n <BaseContextMenu.GroupLabel className={styles[\"group-label\"]}>{entry.label}</BaseContextMenu.GroupLabel>\n )}\n {entry.items.map((item, j) => (\n <RenderItem key={j} item={item} i={j} />\n ))}\n </BaseContextMenu.Group>\n );\n }\n return <RenderItem key={i} item={entry} i={i} />;\n })}\n </BaseContextMenu.Popup>\n </BaseContextMenu.Positioner>\n </BaseContextMenu.Portal>\n </BaseContextMenu.Root>\n );\n}\n\nexport { styles as ContextMenuStyles };\n"],"mappings":";;;;AAiCA,SAAS,WAAW,EAAE,MAAM,KAA8C;AACxE,QACE,qBAACA,YAAgB,MAAjB;EAA8B,WAAWC,4BAAO;EAAM,UAAU,KAAK;EAAU,SAAS,KAAK;YAA7F;GACG,KAAK,QAAQ,oBAAC,QAAD;IAAM,WAAWA,4BAAO;cAAe,KAAK;IAAY,CAAA;GACtE,oBAAC,QAAD;IAAM,WAAWA,4BAAO;cAAgB,KAAK;IAAa,CAAA;GACzD,KAAK,YAAY,oBAAC,QAAD;IAAM,WAAWA,4BAAO;cAAmB,KAAK;IAAgB,CAAA;GAC7D;IAJI,EAIJ;;;;;;AAQ3B,SAAgBC,cAAY,EAAE,UAAU,OAAO,aAA+B;AAC5E,QACE,qBAACF,YAAgB,MAAjB,EAAA,UAAA,CACE,oBAACA,YAAgB,SAAjB;EAAyB,WAAW,GAAGC,4BAAO,QAAQ,GAAG,aAAa;EAAM,QAAQ;EAAY,CAAA,EAChG,oBAACD,YAAgB,QAAjB,EAAA,UACE,oBAACA,YAAgB,YAAjB;EAA4B,WAAWC,4BAAO;YAC5C,oBAACD,YAAgB,OAAjB;GAAuB,WAAWC,4BAAO;aACtC,MAAM,KAAK,OAAO,MAAM;AACvB,QAAI,MAAM,SAAS,YACjB,QAAO,oBAACD,YAAgB,WAAjB,EAAmC,WAAWC,4BAAO,WAAa,EAAlC,EAAkC;AAE3E,QAAI,MAAM,SAAS,QACjB,QACE,qBAACD,YAAgB,OAAjB,EAAA,UAAA,CACG,MAAM,SACL,oBAACA,YAAgB,YAAjB;KAA4B,WAAWC,4BAAO;eAAiB,MAAM;KAAmC,CAAA,EAEzG,MAAM,MAAM,KAAK,MAAM,MACtB,oBAAC,YAAD;KAA0B;KAAM,GAAG;KAAK,EAAvB,EAAuB,CACxC,CACoB,EAAA,EAPI,EAOJ;AAG5B,WAAO,oBAAC,YAAD;KAAoB,MAAM;KAAU;KAAK,EAAxB,EAAwB;KAChD;GACoB,CAAA;EACG,CAAA,EACN,CAAA,CACJ,EAAA,CAAA"}
@@ -4,12 +4,17 @@ import styles from "./dialog.module.css";
4
4
 
5
5
  //#region src/dialog/dialog.d.ts
6
6
  interface DialogProps {
7
+ /** Controlled open state. */
7
8
  open?: boolean;
9
+ /** Whether the dialog is initially open (uncontrolled). */
8
10
  defaultOpen?: boolean;
9
- /** `eventDetails` is the base-ui event details object. */
11
+ /** Called when the dialog opens or closes. `eventDetails` is the base-ui event details object. */
10
12
  onOpenChange?: (open: boolean, eventDetails: unknown) => void;
13
+ /** Element that opens the dialog when clicked. */
11
14
  trigger?: ReactElement;
15
+ /** Heading rendered at the top of the dialog. */
12
16
  title?: ReactNode;
17
+ /** Supplementary text below the title. */
13
18
  description?: ReactNode;
14
19
  children?: ReactNode;
15
20
  /** Buttons aligned to the right (cancel, confirm). */
@@ -21,8 +26,15 @@ interface DialogProps {
21
26
  */
22
27
  footerStart?: ReactNode;
23
28
  className?: string;
29
+ /** Whether the dialog can be closed by clicking the backdrop or pressing Escape. @default true */
24
30
  dismissible?: boolean;
25
31
  }
32
+ /**
33
+ * Modal overlay dialog with title, description, body, and footer slots.
34
+ * Wraps `@base-ui/react` Dialog with a pre-styled backdrop, popup, and
35
+ * close button. Use `footerStart` for a macOS-style left-aligned
36
+ * destructive action.
37
+ */
26
38
  declare function Dialog({
27
39
  trigger,
28
40
  title,
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.d.ts","names":[],"sources":["../../src/dialog/dialog.tsx"],"mappings":";;;;;UAIiB,WAAA;EACf,IAAA;EACA,WAAA;EAFe;EAIf,YAAA,IAAgB,IAAA,WAAe,YAAA;EAC/B,OAAA,GAAU,YAAA;EACV,KAAA,GAAQ,SAAA;EACR,WAAA,GAAc,SAAA;EACd,QAAA,GAAW,SAAA;EAAA;EAEX,MAAA,GAAS,SAAA;EAMK;;;;;EAAd,WAAA,GAAc,SAAA;EACd,SAAA;EACA,WAAA;AAAA;AAAA,iBAWc,MAAA,CAAA;EACd,OAAA;EACA,KAAA;EACA,WAAA;EACA,QAAA;EACA,MAAA;EACA,WAAA;EACA,SAAA;EACA,WAAA;EACA,YAAA;EAAA,GACG;AAAA,GACF,WAAA,GAAW,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"dialog.d.ts","names":[],"sources":["../../src/dialog/dialog.tsx"],"mappings":";;;;;UAIiB,WAAA;;EAEf,IAAA;EAFe;EAIf,WAAA;;EAEA,YAAA,IAAgB,IAAA,WAAe,YAAA;EAIvB;EAFR,OAAA,GAAU,YAAA;EAKC;EAHX,KAAA,GAAQ,SAAA;EAWM;EATd,WAAA,GAAc,SAAA;EACd,QAAA,GAAW,SAAA;EAXX;EAaA,MAAA,GAAS,SAAA;EATT;;;;;EAeA,WAAA,GAAc,SAAA;EACd,SAAA;EAVA;EAYA,WAAA;AAAA;;;;;;;iBAiBc,MAAA,CAAA;EACd,OAAA;EACA,KAAA;EACA,WAAA;EACA,QAAA;EACA,MAAA;EACA,WAAA;EACA,SAAA;EACA,WAAA;EACA,YAAA;EAAA,GACG;AAAA,GACF,WAAA,GAAW,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -16,6 +16,12 @@ function XIcon() {
16
16
  })
17
17
  });
18
18
  }
19
+ /**
20
+ * Modal overlay dialog with title, description, body, and footer slots.
21
+ * Wraps `@base-ui/react` Dialog with a pre-styled backdrop, popup, and
22
+ * close button. Use `footerStart` for a macOS-style left-aligned
23
+ * destructive action.
24
+ */
19
25
  function Dialog$1({ trigger, title, description, children, footer, footerStart, className, dismissible = true, onOpenChange, ...props }) {
20
26
  return /* @__PURE__ */ jsxs(Dialog.Root, {
21
27
  onOpenChange,
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.js","names":["Dialog","BaseDialog","styles"],"sources":["../../src/dialog/dialog.tsx"],"sourcesContent":["import type { ReactNode, ReactElement } from \"react\";\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport styles from \"./dialog.module.css\";\n\nexport interface DialogProps {\n open?: boolean;\n defaultOpen?: boolean;\n /** `eventDetails` is the base-ui event details object. */\n onOpenChange?: (open: boolean, eventDetails: unknown) => void;\n trigger?: ReactElement;\n title?: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n /** Buttons aligned to the right (cancel, confirm). */\n footer?: ReactNode;\n /**\n * Content anchored to the left of the footer — intended for a destructive\n * action (e.g. Delete). When present the footer switches to space-between\n * layout, matching the macOS dialog pattern.\n */\n footerStart?: ReactNode;\n className?: string;\n dismissible?: boolean;\n}\n\nfunction XIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M2 2L10 10M10 2L2 10\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\nexport function Dialog({\n trigger,\n title,\n description,\n children,\n footer,\n footerStart,\n className,\n dismissible = true,\n onOpenChange,\n ...props\n}: DialogProps) {\n return (\n <BaseDialog.Root onOpenChange={onOpenChange as never} {...props}>\n {trigger && <BaseDialog.Trigger render={trigger} />}\n <BaseDialog.Portal>\n <BaseDialog.Backdrop className={styles.backdrop} />\n <BaseDialog.Viewport>\n <BaseDialog.Popup className={`${styles.popup} ${className ?? \"\"}`}>\n {title && <BaseDialog.Title className={styles.title}>{title}</BaseDialog.Title>}\n {description && <BaseDialog.Description className={styles.description}>{description}</BaseDialog.Description>}\n {dismissible && (\n <BaseDialog.Close className={styles.close} aria-label=\"Close dialog\">\n <XIcon />\n </BaseDialog.Close>\n )}\n {children && <div className={styles.body}>{children}</div>}\n {(footer || footerStart) && (\n <div className={`${styles.footer} ${footerStart ? styles[\"footer-split\"] : \"\"}`}>\n {footerStart && <div>{footerStart}</div>}\n {footer && <div className={styles[\"footer-end\"]}>{footer}</div>}\n </div>\n )}\n </BaseDialog.Popup>\n </BaseDialog.Viewport>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n}\nexport { styles as DialogStyles };\n"],"mappings":";;;;AAyBA,SAAS,QAAQ;AACf,QACE,oBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;YACnD,oBAAC,QAAD;GAAM,GAAE;GAAuB,QAAO;GAAe,aAAY;GAAM,eAAc;GAAU,CAAA;EAC3F,CAAA;;AAIV,SAAgBA,SAAO,EACrB,SACA,OACA,aACA,UACA,QACA,aACA,WACA,cAAc,MACd,cACA,GAAG,SACW;AACd,QACE,qBAACC,OAAW,MAAZ;EAA+B;EAAuB,GAAI;YAA1D,CACG,WAAW,oBAACA,OAAW,SAAZ,EAAoB,QAAQ,SAAW,CAAA,EACnD,qBAACA,OAAW,QAAZ,EAAA,UAAA,CACE,oBAACA,OAAW,UAAZ,EAAqB,WAAWC,sBAAO,UAAY,CAAA,EACnD,oBAACD,OAAW,UAAZ,EAAA,UACE,qBAACA,OAAW,OAAZ;GAAkB,WAAW,GAAGC,sBAAO,MAAM,GAAG,aAAa;aAA7D;IACG,SAAS,oBAACD,OAAW,OAAZ;KAAkB,WAAWC,sBAAO;eAAQ;KAAyB,CAAA;IAC9E,eAAe,oBAACD,OAAW,aAAZ;KAAwB,WAAWC,sBAAO;eAAc;KAAqC,CAAA;IAC5G,eACC,oBAACD,OAAW,OAAZ;KAAkB,WAAWC,sBAAO;KAAO,cAAW;eACpD,oBAAC,OAAD,EAAS,CAAA;KACQ,CAAA;IAEpB,YAAY,oBAAC,OAAD;KAAK,WAAWA,sBAAO;KAAO;KAAe,CAAA;KACxD,UAAU,gBACV,qBAAC,OAAD;KAAK,WAAW,GAAGA,sBAAO,OAAO,GAAG,cAAcA,sBAAO,kBAAkB;eAA3E,CACG,eAAe,oBAAC,OAAD,EAAA,UAAM,aAAkB,CAAA,EACvC,UAAU,oBAAC,OAAD;MAAK,WAAWA,sBAAO;gBAAgB;MAAa,CAAA,CAC3D;;IAES;MACC,CAAA,CACJ,EAAA,CAAA,CACJ"}
1
+ {"version":3,"file":"dialog.js","names":["Dialog","BaseDialog","styles"],"sources":["../../src/dialog/dialog.tsx"],"sourcesContent":["import type { ReactNode, ReactElement } from \"react\";\nimport { Dialog as BaseDialog } from \"@base-ui/react/dialog\";\nimport styles from \"./dialog.module.css\";\n\nexport interface DialogProps {\n /** Controlled open state. */\n open?: boolean;\n /** Whether the dialog is initially open (uncontrolled). */\n defaultOpen?: boolean;\n /** Called when the dialog opens or closes. `eventDetails` is the base-ui event details object. */\n onOpenChange?: (open: boolean, eventDetails: unknown) => void;\n /** Element that opens the dialog when clicked. */\n trigger?: ReactElement;\n /** Heading rendered at the top of the dialog. */\n title?: ReactNode;\n /** Supplementary text below the title. */\n description?: ReactNode;\n children?: ReactNode;\n /** Buttons aligned to the right (cancel, confirm). */\n footer?: ReactNode;\n /**\n * Content anchored to the left of the footer — intended for a destructive\n * action (e.g. Delete). When present the footer switches to space-between\n * layout, matching the macOS dialog pattern.\n */\n footerStart?: ReactNode;\n className?: string;\n /** Whether the dialog can be closed by clicking the backdrop or pressing Escape. @default true */\n dismissible?: boolean;\n}\n\nfunction XIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M2 2L10 10M10 2L2 10\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\n/**\n * Modal overlay dialog with title, description, body, and footer slots.\n * Wraps `@base-ui/react` Dialog with a pre-styled backdrop, popup, and\n * close button. Use `footerStart` for a macOS-style left-aligned\n * destructive action.\n */\nexport function Dialog({\n trigger,\n title,\n description,\n children,\n footer,\n footerStart,\n className,\n dismissible = true,\n onOpenChange,\n ...props\n}: DialogProps) {\n return (\n <BaseDialog.Root onOpenChange={onOpenChange as never} {...props}>\n {trigger && <BaseDialog.Trigger render={trigger} />}\n <BaseDialog.Portal>\n <BaseDialog.Backdrop className={styles.backdrop} />\n <BaseDialog.Viewport>\n <BaseDialog.Popup className={`${styles.popup} ${className ?? \"\"}`}>\n {title && <BaseDialog.Title className={styles.title}>{title}</BaseDialog.Title>}\n {description && <BaseDialog.Description className={styles.description}>{description}</BaseDialog.Description>}\n {dismissible && (\n <BaseDialog.Close className={styles.close} aria-label=\"Close dialog\">\n <XIcon />\n </BaseDialog.Close>\n )}\n {children && <div className={styles.body}>{children}</div>}\n {(footer || footerStart) && (\n <div className={`${styles.footer} ${footerStart ? styles[\"footer-split\"] : \"\"}`}>\n {footerStart && <div>{footerStart}</div>}\n {footer && <div className={styles[\"footer-end\"]}>{footer}</div>}\n </div>\n )}\n </BaseDialog.Popup>\n </BaseDialog.Viewport>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n}\nexport { styles as DialogStyles };\n"],"mappings":";;;;AA+BA,SAAS,QAAQ;AACf,QACE,oBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;YACnD,oBAAC,QAAD;GAAM,GAAE;GAAuB,QAAO;GAAe,aAAY;GAAM,eAAc;GAAU,CAAA;EAC3F,CAAA;;;;;;;;AAUV,SAAgBA,SAAO,EACrB,SACA,OACA,aACA,UACA,QACA,aACA,WACA,cAAc,MACd,cACA,GAAG,SACW;AACd,QACE,qBAACC,OAAW,MAAZ;EAA+B;EAAuB,GAAI;YAA1D,CACG,WAAW,oBAACA,OAAW,SAAZ,EAAoB,QAAQ,SAAW,CAAA,EACnD,qBAACA,OAAW,QAAZ,EAAA,UAAA,CACE,oBAACA,OAAW,UAAZ,EAAqB,WAAWC,sBAAO,UAAY,CAAA,EACnD,oBAACD,OAAW,UAAZ,EAAA,UACE,qBAACA,OAAW,OAAZ;GAAkB,WAAW,GAAGC,sBAAO,MAAM,GAAG,aAAa;aAA7D;IACG,SAAS,oBAACD,OAAW,OAAZ;KAAkB,WAAWC,sBAAO;eAAQ;KAAyB,CAAA;IAC9E,eAAe,oBAACD,OAAW,aAAZ;KAAwB,WAAWC,sBAAO;eAAc;KAAqC,CAAA;IAC5G,eACC,oBAACD,OAAW,OAAZ;KAAkB,WAAWC,sBAAO;KAAO,cAAW;eACpD,oBAAC,OAAD,EAAS,CAAA;KACQ,CAAA;IAEpB,YAAY,oBAAC,OAAD;KAAK,WAAWA,sBAAO;KAAO;KAAe,CAAA;KACxD,UAAU,gBACV,qBAAC,OAAD;KAAK,WAAW,GAAGA,sBAAO,OAAO,GAAG,cAAcA,sBAAO,kBAAkB;eAA3E,CACG,eAAe,oBAAC,OAAD,EAAA,UAAM,aAAkB,CAAA,EACvC,UAAU,oBAAC,OAAD;MAAK,WAAWA,sBAAO;gBAAgB;MAAa,CAAA,CAC3D;;IAES;MACC,CAAA,CACJ,EAAA,CAAA,CACJ"}
@@ -9,18 +9,29 @@ interface DrawerProps {
9
9
  trigger?: ReactElement;
10
10
  /** Which edge the drawer slides in from. @default "right" */
11
11
  side?: DrawerSide;
12
+ /** Heading rendered at the top of the drawer. */
12
13
  title?: ReactNode;
14
+ /** Supplementary text below the title. */
13
15
  description?: ReactNode;
14
16
  children?: ReactNode;
17
+ /** Content rendered at the bottom of the drawer. */
15
18
  footer?: ReactNode;
16
19
  /** Show a drag handle bar (useful for bottom/top drawers). @default true for bottom/top */
17
20
  handleBar?: boolean;
18
21
  /** Show a close button in the top-right corner. @default true */
19
22
  dismissible?: boolean;
23
+ /** Controlled open state. */
20
24
  open?: boolean;
25
+ /** Whether the drawer is initially open (uncontrolled). */
21
26
  defaultOpen?: boolean;
27
+ /** Called when the drawer opens or closes. */
22
28
  onOpenChange?: (open: boolean) => void;
23
29
  }
30
+ /**
31
+ * A panel that slides in from any edge of the screen with swipe-to-dismiss
32
+ * gestures. Supports left, right, top, and bottom orientations with an
33
+ * optional drag handle bar.
34
+ */
24
35
  declare function Drawer({
25
36
  trigger,
26
37
  side,
@@ -1 +1 @@
1
- {"version":3,"file":"drawer.d.ts","names":[],"sources":["../../src/drawer/drawer.tsx"],"mappings":";;;;;KAIY,UAAA;AAAA,UAEK,WAAA;;EAEf,OAAA,GAAU,YAAA;EAJU;EAMpB,IAAA,GAAO,UAAA;EACP,KAAA,GAAQ,SAAA;EACR,WAAA,GAAc,SAAA;EACd,QAAA,GAAW,SAAA;EACX,MAAA,GAAS,SAAA;;EAET,SAAA;EANO;EAQP,WAAA;EAEA,IAAA;EACA,WAAA;EACA,YAAA,IAAgB,IAAA;AAAA;AAAA,iBA2BF,MAAA,CAAA;EACd,OAAA;EACA,IAAA;EACA,KAAA;EACA,WAAA;EACA,QAAA;EACA,MAAA;EACA,SAAA;EACA,WAAA;EACA,YAAA;EAAA,GACG;AAAA,GACF,WAAA,GAAW,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"drawer.d.ts","names":[],"sources":["../../src/drawer/drawer.tsx"],"mappings":";;;;;KAIY,UAAA;AAAA,UAEK,WAAA;;EAEf,OAAA,GAAU,YAAA;EAJU;EAMpB,IAAA,GAAO,UAAA;EANa;EAQpB,KAAA,GAAQ,SAAA;EANO;EAQf,WAAA,GAAc,SAAA;EACd,QAAA,GAAW,SAAA;EAPD;EASV,MAAA,GAAS,SAAA;EALD;EAOR,SAAA;EAJW;EAMX,WAAA;EAJkB;EAOlB,IAAA;EAhBA;EAkBA,WAAA;EAhBA;EAkBA,YAAA,IAAgB,IAAA;AAAA;;;;;;iBAgCF,MAAA,CAAA;EACd,OAAA;EACA,IAAA;EACA,KAAA;EACA,WAAA;EACA,QAAA;EACA,MAAA;EACA,SAAA;EACA,WAAA;EACA,YAAA;EAAA,GACG;AAAA,GACF,WAAA,GAAW,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -31,6 +31,11 @@ const POPUP_CLASS = {
31
31
  bottom: drawer_module_default["popup-bottom"],
32
32
  top: drawer_module_default["popup-top"]
33
33
  };
34
+ /**
35
+ * A panel that slides in from any edge of the screen with swipe-to-dismiss
36
+ * gestures. Supports left, right, top, and bottom orientations with an
37
+ * optional drag handle bar.
38
+ */
34
39
  function Drawer$1({ trigger, side = "right", title, description, children, footer, handleBar, dismissible = true, onOpenChange, ...props }) {
35
40
  const showHandle = handleBar ?? (side === "bottom" || side === "top");
36
41
  const popupClass = `${drawer_module_default.popup} ${POPUP_CLASS[side]}`;
@@ -1 +1 @@
1
- {"version":3,"file":"drawer.js","names":["styles","Drawer","BaseDrawer"],"sources":["../../src/drawer/drawer.tsx"],"sourcesContent":["import type { ReactNode, ReactElement } from \"react\";\nimport { Drawer as BaseDrawer } from \"@base-ui/react/drawer\";\nimport styles from \"./drawer.module.css\";\n\nexport type DrawerSide = \"left\" | \"right\" | \"bottom\" | \"top\";\n\nexport interface DrawerProps {\n /** Element that triggers the drawer — rendered as a `Drawer.Trigger`. */\n trigger?: ReactElement;\n /** Which edge the drawer slides in from. @default \"right\" */\n side?: DrawerSide;\n title?: ReactNode;\n description?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n /** Show a drag handle bar (useful for bottom/top drawers). @default true for bottom/top */\n handleBar?: boolean;\n /** Show a close button in the top-right corner. @default true */\n dismissible?: boolean;\n\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nfunction XIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden>\n <path d=\"M2 2L10 10M10 2L2 10\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\n/** Map side → swipe direction for dismiss gesture */\nconst SWIPE_DIR: Record<DrawerSide, \"left\" | \"right\" | \"up\" | \"down\"> = {\n right: \"right\",\n left: \"left\",\n bottom: \"down\",\n top: \"up\",\n};\n\n/** Popup CSS classes by side */\nconst POPUP_CLASS: Record<DrawerSide, string> = {\n right: styles[\"popup-right\"] as string,\n left: styles[\"popup-left\"] as string,\n bottom: styles[\"popup-bottom\"] as string,\n top: styles[\"popup-top\"] as string,\n};\n\nexport function Drawer({\n trigger,\n side = \"right\",\n title,\n description,\n children,\n footer,\n handleBar,\n dismissible = true,\n onOpenChange,\n ...props\n}: DrawerProps) {\n const showHandle = handleBar ?? (side === \"bottom\" || side === \"top\");\n const popupClass = `${styles.popup} ${POPUP_CLASS[side]}`;\n\n return (\n <BaseDrawer.Root swipeDirection={SWIPE_DIR[side]} onOpenChange={onOpenChange as never} {...props}>\n {trigger && <BaseDrawer.Trigger render={trigger} />}\n <BaseDrawer.Portal>\n <BaseDrawer.Backdrop className={styles.backdrop} />\n <BaseDrawer.Viewport className={styles.viewport} data-side={side}>\n <BaseDrawer.Popup className={popupClass} style={{ position: \"relative\" }}>\n {/* handle bar sits above content in bottom drawers */}\n {showHandle && side !== \"top\" && <div className={styles[\"handle-bar\"]} aria-hidden />}\n\n <BaseDrawer.Content className={styles.content}>\n {title && <BaseDrawer.Title className={styles.title}>{title}</BaseDrawer.Title>}\n {description && <BaseDrawer.Description className={styles.description}>{description}</BaseDrawer.Description>}\n {children}\n {footer && <div className={styles.footer}>{footer}</div>}\n </BaseDrawer.Content>\n\n {/* handle bar sits below content in top drawers */}\n {showHandle && side === \"top\" && <div className={styles[\"handle-bar\"]} aria-hidden />}\n\n {dismissible && (\n <BaseDrawer.Close className={styles.close} aria-label=\"Close drawer\">\n <XIcon />\n </BaseDrawer.Close>\n )}\n </BaseDrawer.Popup>\n </BaseDrawer.Viewport>\n </BaseDrawer.Portal>\n </BaseDrawer.Root>\n );\n}\nexport { styles as DrawerStyles };\n"],"mappings":";;;;AAyBA,SAAS,QAAQ;AACf,QACE,oBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EAAO,eAAA;YAC1D,oBAAC,QAAD;GAAM,GAAE;GAAuB,QAAO;GAAe,aAAY;GAAM,eAAc;GAAU,CAAA;EAC3F,CAAA;;;AAKV,MAAM,YAAkE;CACtE,OAAO;CACP,MAAM;CACN,QAAQ;CACR,KAAK;CACN;;AAGD,MAAM,cAA0C;CAC9C,OAAOA,sBAAO;CACd,MAAMA,sBAAO;CACb,QAAQA,sBAAO;CACf,KAAKA,sBAAO;CACb;AAED,SAAgBC,SAAO,EACrB,SACA,OAAO,SACP,OACA,aACA,UACA,QACA,WACA,cAAc,MACd,cACA,GAAG,SACW;CACd,MAAM,aAAa,cAAc,SAAS,YAAY,SAAS;CAC/D,MAAM,aAAa,GAAGD,sBAAO,MAAM,GAAG,YAAY;AAElD,QACE,qBAACE,OAAW,MAAZ;EAAiB,gBAAgB,UAAU;EAAqB;EAAuB,GAAI;YAA3F,CACG,WAAW,oBAACA,OAAW,SAAZ,EAAoB,QAAQ,SAAW,CAAA,EACnD,qBAACA,OAAW,QAAZ,EAAA,UAAA,CACE,oBAACA,OAAW,UAAZ,EAAqB,WAAWF,sBAAO,UAAY,CAAA,EACnD,oBAACE,OAAW,UAAZ;GAAqB,WAAWF,sBAAO;GAAU,aAAW;aAC1D,qBAACE,OAAW,OAAZ;IAAkB,WAAW;IAAY,OAAO,EAAE,UAAU,YAAY;cAAxE;KAEG,cAAc,SAAS,SAAS,oBAAC,OAAD;MAAK,WAAWF,sBAAO;MAAe,eAAA;MAAc,CAAA;KAErF,qBAACE,OAAW,SAAZ;MAAoB,WAAWF,sBAAO;gBAAtC;OACG,SAAS,oBAACE,OAAW,OAAZ;QAAkB,WAAWF,sBAAO;kBAAQ;QAAyB,CAAA;OAC9E,eAAe,oBAACE,OAAW,aAAZ;QAAwB,WAAWF,sBAAO;kBAAc;QAAqC,CAAA;OAC5G;OACA,UAAU,oBAAC,OAAD;QAAK,WAAWA,sBAAO;kBAAS;QAAa,CAAA;OACrC;;KAGpB,cAAc,SAAS,SAAS,oBAAC,OAAD;MAAK,WAAWA,sBAAO;MAAe,eAAA;MAAc,CAAA;KAEpF,eACC,oBAACE,OAAW,OAAZ;MAAkB,WAAWF,sBAAO;MAAO,cAAW;gBACpD,oBAAC,OAAD,EAAS,CAAA;MACQ,CAAA;KAEJ;;GACC,CAAA,CACJ,EAAA,CAAA,CACJ"}
1
+ {"version":3,"file":"drawer.js","names":["styles","Drawer","BaseDrawer"],"sources":["../../src/drawer/drawer.tsx"],"sourcesContent":["import type { ReactNode, ReactElement } from \"react\";\nimport { Drawer as BaseDrawer } from \"@base-ui/react/drawer\";\nimport styles from \"./drawer.module.css\";\n\nexport type DrawerSide = \"left\" | \"right\" | \"bottom\" | \"top\";\n\nexport interface DrawerProps {\n /** Element that triggers the drawer — rendered as a `Drawer.Trigger`. */\n trigger?: ReactElement;\n /** Which edge the drawer slides in from. @default \"right\" */\n side?: DrawerSide;\n /** Heading rendered at the top of the drawer. */\n title?: ReactNode;\n /** Supplementary text below the title. */\n description?: ReactNode;\n children?: ReactNode;\n /** Content rendered at the bottom of the drawer. */\n footer?: ReactNode;\n /** Show a drag handle bar (useful for bottom/top drawers). @default true for bottom/top */\n handleBar?: boolean;\n /** Show a close button in the top-right corner. @default true */\n dismissible?: boolean;\n\n /** Controlled open state. */\n open?: boolean;\n /** Whether the drawer is initially open (uncontrolled). */\n defaultOpen?: boolean;\n /** Called when the drawer opens or closes. */\n onOpenChange?: (open: boolean) => void;\n}\n\nfunction XIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden>\n <path d=\"M2 2L10 10M10 2L2 10\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n );\n}\n\n/** Map side → swipe direction for dismiss gesture */\nconst SWIPE_DIR: Record<DrawerSide, \"left\" | \"right\" | \"up\" | \"down\"> = {\n right: \"right\",\n left: \"left\",\n bottom: \"down\",\n top: \"up\",\n};\n\n/** Popup CSS classes by side */\nconst POPUP_CLASS: Record<DrawerSide, string> = {\n right: styles[\"popup-right\"] as string,\n left: styles[\"popup-left\"] as string,\n bottom: styles[\"popup-bottom\"] as string,\n top: styles[\"popup-top\"] as string,\n};\n\n/**\n * A panel that slides in from any edge of the screen with swipe-to-dismiss\n * gestures. Supports left, right, top, and bottom orientations with an\n * optional drag handle bar.\n */\nexport function Drawer({\n trigger,\n side = \"right\",\n title,\n description,\n children,\n footer,\n handleBar,\n dismissible = true,\n onOpenChange,\n ...props\n}: DrawerProps) {\n const showHandle = handleBar ?? (side === \"bottom\" || side === \"top\");\n const popupClass = `${styles.popup} ${POPUP_CLASS[side]}`;\n\n return (\n <BaseDrawer.Root swipeDirection={SWIPE_DIR[side]} onOpenChange={onOpenChange as never} {...props}>\n {trigger && <BaseDrawer.Trigger render={trigger} />}\n <BaseDrawer.Portal>\n <BaseDrawer.Backdrop className={styles.backdrop} />\n <BaseDrawer.Viewport className={styles.viewport} data-side={side}>\n <BaseDrawer.Popup className={popupClass} style={{ position: \"relative\" }}>\n {/* handle bar sits above content in bottom drawers */}\n {showHandle && side !== \"top\" && <div className={styles[\"handle-bar\"]} aria-hidden />}\n\n <BaseDrawer.Content className={styles.content}>\n {title && <BaseDrawer.Title className={styles.title}>{title}</BaseDrawer.Title>}\n {description && <BaseDrawer.Description className={styles.description}>{description}</BaseDrawer.Description>}\n {children}\n {footer && <div className={styles.footer}>{footer}</div>}\n </BaseDrawer.Content>\n\n {/* handle bar sits below content in top drawers */}\n {showHandle && side === \"top\" && <div className={styles[\"handle-bar\"]} aria-hidden />}\n\n {dismissible && (\n <BaseDrawer.Close className={styles.close} aria-label=\"Close drawer\">\n <XIcon />\n </BaseDrawer.Close>\n )}\n </BaseDrawer.Popup>\n </BaseDrawer.Viewport>\n </BaseDrawer.Portal>\n </BaseDrawer.Root>\n );\n}\nexport { styles as DrawerStyles };\n"],"mappings":";;;;AA+BA,SAAS,QAAQ;AACf,QACE,oBAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EAAO,eAAA;YAC1D,oBAAC,QAAD;GAAM,GAAE;GAAuB,QAAO;GAAe,aAAY;GAAM,eAAc;GAAU,CAAA;EAC3F,CAAA;;;AAKV,MAAM,YAAkE;CACtE,OAAO;CACP,MAAM;CACN,QAAQ;CACR,KAAK;CACN;;AAGD,MAAM,cAA0C;CAC9C,OAAOA,sBAAO;CACd,MAAMA,sBAAO;CACb,QAAQA,sBAAO;CACf,KAAKA,sBAAO;CACb;;;;;;AAOD,SAAgBC,SAAO,EACrB,SACA,OAAO,SACP,OACA,aACA,UACA,QACA,WACA,cAAc,MACd,cACA,GAAG,SACW;CACd,MAAM,aAAa,cAAc,SAAS,YAAY,SAAS;CAC/D,MAAM,aAAa,GAAGD,sBAAO,MAAM,GAAG,YAAY;AAElD,QACE,qBAACE,OAAW,MAAZ;EAAiB,gBAAgB,UAAU;EAAqB;EAAuB,GAAI;YAA3F,CACG,WAAW,oBAACA,OAAW,SAAZ,EAAoB,QAAQ,SAAW,CAAA,EACnD,qBAACA,OAAW,QAAZ,EAAA,UAAA,CACE,oBAACA,OAAW,UAAZ,EAAqB,WAAWF,sBAAO,UAAY,CAAA,EACnD,oBAACE,OAAW,UAAZ;GAAqB,WAAWF,sBAAO;GAAU,aAAW;aAC1D,qBAACE,OAAW,OAAZ;IAAkB,WAAW;IAAY,OAAO,EAAE,UAAU,YAAY;cAAxE;KAEG,cAAc,SAAS,SAAS,oBAAC,OAAD;MAAK,WAAWF,sBAAO;MAAe,eAAA;MAAc,CAAA;KAErF,qBAACE,OAAW,SAAZ;MAAoB,WAAWF,sBAAO;gBAAtC;OACG,SAAS,oBAACE,OAAW,OAAZ;QAAkB,WAAWF,sBAAO;kBAAQ;QAAyB,CAAA;OAC9E,eAAe,oBAACE,OAAW,aAAZ;QAAwB,WAAWF,sBAAO;kBAAc;QAAqC,CAAA;OAC5G;OACA,UAAU,oBAAC,OAAD;QAAK,WAAWA,sBAAO;kBAAS;QAAa,CAAA;OACrC;;KAGpB,cAAc,SAAS,SAAS,oBAAC,OAAD;MAAK,WAAWA,sBAAO;MAAe,eAAA;MAAc,CAAA;KAEpF,eACC,oBAACE,OAAW,OAAZ;MAAkB,WAAWF,sBAAO;MAAO,cAAW;gBACpD,oBAAC,OAAD,EAAS,CAAA;MACQ,CAAA;KAEJ;;GACC,CAAA,CACJ,EAAA,CAAA,CACJ"}