@brijbyte/agentic-ui 0.0.1 → 0.0.3

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 (173) hide show
  1. package/README.md +183 -111
  2. package/dist/accordion/accordion.css +6 -10
  3. package/dist/accordion/accordion.d.ts +1 -1
  4. package/dist/accordion/accordion.js +1 -1
  5. package/dist/accordion/accordion.module.js.map +1 -1
  6. package/dist/accordion/parts.d.ts +1 -1
  7. package/dist/accordion/parts.js +2 -2
  8. package/dist/alert-dialog/alert-dialog.css +84 -0
  9. package/dist/alert-dialog/alert-dialog.d.ts +44 -0
  10. package/dist/alert-dialog/alert-dialog.d.ts.map +1 -0
  11. package/dist/alert-dialog/alert-dialog.js +46 -0
  12. package/dist/alert-dialog/alert-dialog.js.map +1 -0
  13. package/dist/alert-dialog/alert-dialog.module.css.d.ts +2 -0
  14. package/dist/alert-dialog/alert-dialog.module.js +14 -0
  15. package/dist/alert-dialog/alert-dialog.module.js.map +1 -0
  16. package/dist/alert-dialog/index.d.ts +3 -0
  17. package/dist/alert-dialog/index.js +4 -0
  18. package/dist/alert-dialog/parts.d.ts +28 -0
  19. package/dist/alert-dialog/parts.d.ts.map +1 -0
  20. package/dist/alert-dialog/parts.js +62 -0
  21. package/dist/alert-dialog/parts.js.map +1 -0
  22. package/dist/badge/badge.css +3 -7
  23. package/dist/badge/badge.d.ts +1 -1
  24. package/dist/badge/badge.module.js.map +1 -1
  25. package/dist/button/button.css +36 -22
  26. package/dist/button/button.d.ts +7 -7
  27. package/dist/button/button.js +1 -1
  28. package/dist/button/button.js.map +1 -1
  29. package/dist/button/button.module.js.map +1 -1
  30. package/dist/card/card.css +5 -9
  31. package/dist/card/card.d.ts +1 -1
  32. package/dist/card/card.module.js.map +1 -1
  33. package/dist/checkbox/checkbox.css +3 -7
  34. package/dist/checkbox/checkbox.d.ts +1 -1
  35. package/dist/checkbox/checkbox.js +1 -1
  36. package/dist/checkbox/checkbox.module.js.map +1 -1
  37. package/dist/checkbox/parts.js +1 -1
  38. package/dist/collapsible/collapsible.css +7 -11
  39. package/dist/collapsible/collapsible.d.ts +1 -1
  40. package/dist/collapsible/collapsible.module.js.map +1 -1
  41. package/dist/collapsible/parts.js +1 -1
  42. package/dist/context-menu/context-menu.css +151 -0
  43. package/dist/context-menu/context-menu.d.ts +36 -0
  44. package/dist/context-menu/context-menu.d.ts.map +1 -0
  45. package/dist/context-menu/context-menu.js +54 -0
  46. package/dist/context-menu/context-menu.js.map +1 -0
  47. package/dist/context-menu/context-menu.module.css.d.ts +2 -0
  48. package/dist/context-menu/context-menu.module.js +18 -0
  49. package/dist/context-menu/context-menu.module.js.map +1 -0
  50. package/dist/context-menu/index.d.ts +3 -0
  51. package/dist/context-menu/index.js +4 -0
  52. package/dist/context-menu/parts.d.ts +38 -0
  53. package/dist/context-menu/parts.d.ts.map +1 -0
  54. package/dist/context-menu/parts.js +91 -0
  55. package/dist/context-menu/parts.js.map +1 -0
  56. package/dist/dialog/dialog.css +27 -22
  57. package/dist/dialog/dialog.d.ts +9 -1
  58. package/dist/dialog/dialog.d.ts.map +1 -1
  59. package/dist/dialog/dialog.js +7 -4
  60. package/dist/dialog/dialog.js.map +1 -1
  61. package/dist/dialog/dialog.module.js +2 -0
  62. package/dist/dialog/dialog.module.js.map +1 -1
  63. package/dist/dialog/parts.js +1 -1
  64. package/dist/drawer/drawer.css +9 -13
  65. package/dist/drawer/drawer.d.ts +1 -1
  66. package/dist/drawer/drawer.module.js.map +1 -1
  67. package/dist/drawer/parts.d.ts +1 -1
  68. package/dist/drawer/parts.js +1 -1
  69. package/dist/index.css +1603 -1299
  70. package/dist/index.d.ts +30 -24
  71. package/dist/index.js +41 -32
  72. package/dist/input/input.css +5 -9
  73. package/dist/input/input.js +1 -1
  74. package/dist/input/input.module.js.map +1 -1
  75. package/dist/layer-order.css +22 -0
  76. package/dist/menu/menu.css +13 -17
  77. package/dist/menu/menu.d.ts +1 -1
  78. package/dist/menu/menu.module.js.map +1 -1
  79. package/dist/menu/menuitemshortcut.js +1 -1
  80. package/dist/menu/parts.js +1 -1
  81. package/dist/number-field/number-field.css +12 -16
  82. package/dist/number-field/number-field.d.ts +1 -1
  83. package/dist/number-field/number-field.js +1 -1
  84. package/dist/number-field/number-field.module.js.map +1 -1
  85. package/dist/number-field/parts.js +1 -1
  86. package/dist/progress/parts.js +1 -1
  87. package/dist/progress/progress.css +1 -5
  88. package/dist/progress/progress.module.js.map +1 -1
  89. package/dist/reset.css +6 -6
  90. package/dist/select/parts.js +1 -1
  91. package/dist/select/select.css +14 -16
  92. package/dist/select/select.d.ts +5 -2
  93. package/dist/select/select.d.ts.map +1 -1
  94. package/dist/select/select.js +11 -2
  95. package/dist/select/select.js.map +1 -1
  96. package/dist/select/select.module.js.map +1 -1
  97. package/dist/separator/separator.css +1 -5
  98. package/dist/separator/separator.js +1 -1
  99. package/dist/separator/separator.module.js.map +1 -1
  100. package/dist/slider/index.d.ts +3 -0
  101. package/dist/slider/index.js +4 -0
  102. package/dist/slider/parts.d.ts +38 -0
  103. package/dist/slider/parts.d.ts.map +1 -0
  104. package/dist/slider/parts.js +69 -0
  105. package/dist/slider/parts.js.map +1 -0
  106. package/dist/slider/slider.css +97 -0
  107. package/dist/slider/slider.d.ts +38 -0
  108. package/dist/slider/slider.d.ts.map +1 -0
  109. package/dist/slider/slider.js +41 -0
  110. package/dist/slider/slider.js.map +1 -0
  111. package/dist/slider/slider.module.css.d.ts +2 -0
  112. package/dist/slider/slider.module.js +15 -0
  113. package/dist/slider/slider.module.js.map +1 -0
  114. package/dist/styles/reset.css +6 -6
  115. package/dist/styles/tokens.css +91 -76
  116. package/dist/switch/parts.js +1 -1
  117. package/dist/switch/switch.css +2 -6
  118. package/dist/switch/switch.d.ts +1 -1
  119. package/dist/switch/switch.js +1 -1
  120. package/dist/switch/switch.module.js.map +1 -1
  121. package/dist/tabs/parts.js +1 -1
  122. package/dist/tabs/tabs.css +5 -9
  123. package/dist/tabs/tabs.d.ts +1 -1
  124. package/dist/tabs/tabs.module.js.map +1 -1
  125. package/dist/tailwind-theme.css +23 -23
  126. package/dist/toast/parts.js +1 -1
  127. package/dist/toast/toast.css +11 -15
  128. package/dist/toast/toast.d.ts +1 -1
  129. package/dist/toast/toast.module.js.map +1 -1
  130. package/dist/tokens.css +98 -82
  131. package/dist/tooltip/parts.js +1 -1
  132. package/dist/tooltip/tooltip.css +7 -11
  133. package/dist/tooltip/tooltip.d.ts +1 -1
  134. package/dist/tooltip/tooltip.module.js.map +1 -1
  135. package/package.json +18 -1
  136. package/src/accordion/accordion.module.css +6 -20
  137. package/src/alert-dialog/alert-dialog.module.css +91 -0
  138. package/src/alert-dialog/alert-dialog.tsx +69 -0
  139. package/src/alert-dialog/index.ts +7 -0
  140. package/src/alert-dialog/parts.tsx +73 -0
  141. package/src/badge/badge.module.css +3 -13
  142. package/src/button/button.module.css +44 -64
  143. package/src/button/button.tsx +7 -7
  144. package/src/card/card.module.css +5 -16
  145. package/src/checkbox/checkbox.module.css +3 -14
  146. package/src/collapsible/collapsible.module.css +7 -20
  147. package/src/context-menu/context-menu.module.css +168 -0
  148. package/src/context-menu/context-menu.tsx +75 -0
  149. package/src/context-menu/index.ts +21 -0
  150. package/src/context-menu/parts.tsx +99 -0
  151. package/src/dialog/dialog.module.css +26 -33
  152. package/src/dialog/dialog.tsx +14 -1
  153. package/src/drawer/drawer.module.css +9 -58
  154. package/src/index.ts +21 -185
  155. package/src/input/input.module.css +5 -21
  156. package/src/menu/menu.module.css +13 -43
  157. package/src/number-field/number-field.module.css +12 -28
  158. package/src/progress/progress.module.css +1 -10
  159. package/src/select/select.module.css +14 -35
  160. package/src/select/select.tsx +14 -5
  161. package/src/separator/separator.module.css +1 -5
  162. package/src/slider/index.ts +14 -0
  163. package/src/slider/parts.tsx +90 -0
  164. package/src/slider/slider.module.css +110 -0
  165. package/src/slider/slider.tsx +68 -0
  166. package/src/styles/layer-order.css +22 -0
  167. package/src/styles/reset.css +6 -6
  168. package/src/styles/tailwind-theme.css +23 -23
  169. package/src/styles/tokens.css +98 -82
  170. package/src/switch/switch.module.css +2 -12
  171. package/src/tabs/tabs.module.css +5 -18
  172. package/src/toast/toast.module.css +11 -51
  173. package/src/tooltip/tooltip.module.css +7 -18
@@ -0,0 +1,91 @@
1
+ import context_menu_module_default from "./context-menu.module.js";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { forwardRef } from "react";
4
+ import { ContextMenu } from "@base-ui/react/context-menu";
5
+ //#region src/context-menu/parts.tsx
6
+ /**
7
+ * Styled primitives for ContextMenu.
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * import { ContextMenu as BaseContextMenu } from '@base-ui/react/context-menu';
12
+ * import { ContextMenuPopup, ContextMenuItem, ContextMenuSeparator } from '@brijbyte/agentic-ui/context-menu';
13
+ *
14
+ * <BaseContextMenu.Root>
15
+ * <BaseContextMenu.Trigger render={<div>Right click me</div>} />
16
+ * <BaseContextMenu.Portal>
17
+ * <BaseContextMenu.Positioner>
18
+ * <ContextMenuPopup>
19
+ * <ContextMenuItem>Cut</ContextMenuItem>
20
+ * <ContextMenuItem>Copy</ContextMenuItem>
21
+ * <ContextMenuSeparator />
22
+ * <ContextMenuItem>Paste</ContextMenuItem>
23
+ * </ContextMenuPopup>
24
+ * </BaseContextMenu.Positioner>
25
+ * </BaseContextMenu.Portal>
26
+ * </BaseContextMenu.Root>
27
+ * ```
28
+ */
29
+ const ContextMenuPopup = forwardRef(function ContextMenuPopup({ className, ...props }, ref) {
30
+ return /* @__PURE__ */ jsx(ContextMenu.Popup, {
31
+ ref,
32
+ className: `${context_menu_module_default.popup} ${className ?? ""}`,
33
+ ...props
34
+ });
35
+ });
36
+ const ContextMenuItem = forwardRef(function ContextMenuItem({ className, ...props }, ref) {
37
+ return /* @__PURE__ */ jsx(ContextMenu.Item, {
38
+ ref,
39
+ className: `${context_menu_module_default.item} ${className ?? ""}`,
40
+ ...props
41
+ });
42
+ });
43
+ const ContextMenuSeparator = forwardRef(function ContextMenuSeparator({ className, ...props }, ref) {
44
+ return /* @__PURE__ */ jsx(ContextMenu.Separator, {
45
+ ref,
46
+ className: `${context_menu_module_default.separator} ${className ?? ""}`,
47
+ ...props
48
+ });
49
+ });
50
+ const ContextMenuGroup = forwardRef(function ContextMenuGroup({ className, ...props }, ref) {
51
+ return /* @__PURE__ */ jsx(ContextMenu.Group, {
52
+ ref,
53
+ className,
54
+ ...props
55
+ });
56
+ });
57
+ const ContextMenuGroupLabel = forwardRef(function ContextMenuGroupLabel({ className, ...props }, ref) {
58
+ return /* @__PURE__ */ jsx(ContextMenu.GroupLabel, {
59
+ ref,
60
+ className: `${context_menu_module_default["group-label"]} ${className ?? ""}`,
61
+ ...props
62
+ });
63
+ });
64
+ const ContextMenuSubmenuTrigger = forwardRef(function ContextMenuSubmenuTrigger({ className, children, ...props }, ref) {
65
+ return /* @__PURE__ */ jsxs(ContextMenu.SubmenuTrigger, {
66
+ ref,
67
+ className: `${context_menu_module_default["submenu-trigger"]} ${className ?? ""}`,
68
+ ...props,
69
+ children: [/* @__PURE__ */ jsx("span", {
70
+ style: { flex: 1 },
71
+ children
72
+ }), /* @__PURE__ */ jsx("svg", {
73
+ width: "10",
74
+ height: "10",
75
+ viewBox: "0 0 10 10",
76
+ fill: "none",
77
+ className: context_menu_module_default["submenu-icon"],
78
+ children: /* @__PURE__ */ jsx("path", {
79
+ d: "M3.5 9L7.5 5L3.5 1",
80
+ stroke: "currentColor",
81
+ strokeWidth: "1.5",
82
+ strokeLinecap: "round",
83
+ strokeLinejoin: "round"
84
+ })
85
+ })]
86
+ });
87
+ });
88
+ //#endregion
89
+ export { ContextMenuGroup, ContextMenuGroupLabel, ContextMenuItem, ContextMenuPopup, ContextMenuSeparator, ContextMenuSubmenuTrigger };
90
+
91
+ //# sourceMappingURL=parts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parts.js","names":["BaseContextMenu","styles"],"sources":["../../src/context-menu/parts.tsx"],"sourcesContent":["/**\n * Styled primitives for ContextMenu.\n *\n * @example\n * ```tsx\n * import { ContextMenu as BaseContextMenu } from '@base-ui/react/context-menu';\n * import { ContextMenuPopup, ContextMenuItem, ContextMenuSeparator } from '@brijbyte/agentic-ui/context-menu';\n *\n * <BaseContextMenu.Root>\n * <BaseContextMenu.Trigger render={<div>Right click me</div>} />\n * <BaseContextMenu.Portal>\n * <BaseContextMenu.Positioner>\n * <ContextMenuPopup>\n * <ContextMenuItem>Cut</ContextMenuItem>\n * <ContextMenuItem>Copy</ContextMenuItem>\n * <ContextMenuSeparator />\n * <ContextMenuItem>Paste</ContextMenuItem>\n * </ContextMenuPopup>\n * </BaseContextMenu.Positioner>\n * </BaseContextMenu.Portal>\n * </BaseContextMenu.Root>\n * ```\n */\nimport { forwardRef } from \"react\";\nimport type { ComponentRef, ComponentPropsWithoutRef } from \"react\";\nimport { ContextMenu as BaseContextMenu } from \"@base-ui/react/context-menu\";\nimport styles from \"./context-menu.module.css\";\n\ntype BasePopupProps = ComponentPropsWithoutRef<typeof BaseContextMenu.Popup>;\ntype BaseItemProps = ComponentPropsWithoutRef<typeof BaseContextMenu.Item>;\ntype BaseSeparatorProps = ComponentPropsWithoutRef<typeof BaseContextMenu.Separator>;\ntype BaseGroupProps = ComponentPropsWithoutRef<typeof BaseContextMenu.Group>;\ntype BaseGroupLabelProps = ComponentPropsWithoutRef<typeof BaseContextMenu.GroupLabel>;\ntype BaseSubmenuTriggerProps = ComponentPropsWithoutRef<typeof BaseContextMenu.SubmenuTrigger>;\n\nexport interface ContextMenuPopupProps extends Omit<BasePopupProps, \"className\"> {\n className?: string;\n}\nexport interface ContextMenuItemProps extends Omit<BaseItemProps, \"className\"> {\n className?: string;\n}\nexport interface ContextMenuSeparatorProps extends Omit<BaseSeparatorProps, \"className\"> {\n className?: string;\n}\nexport interface ContextMenuGroupProps extends Omit<BaseGroupProps, \"className\"> {\n className?: string;\n}\nexport interface ContextMenuGroupLabelProps extends Omit<BaseGroupLabelProps, \"className\"> {\n className?: string;\n}\nexport interface ContextMenuSubmenuTriggerProps extends Omit<BaseSubmenuTriggerProps, \"className\"> {\n className?: string;\n}\n\nexport const ContextMenuPopup = forwardRef<ComponentRef<typeof BaseContextMenu.Popup>, ContextMenuPopupProps>(function ContextMenuPopup(\n { className, ...props },\n ref,\n) {\n return <BaseContextMenu.Popup ref={ref} className={`${styles.popup} ${className ?? \"\"}`} {...props} />;\n});\n\nexport const ContextMenuItem = forwardRef<ComponentRef<typeof BaseContextMenu.Item>, ContextMenuItemProps>(function ContextMenuItem(\n { className, ...props },\n ref,\n) {\n return <BaseContextMenu.Item ref={ref} className={`${styles.item} ${className ?? \"\"}`} {...props} />;\n});\n\nexport const ContextMenuSeparator = forwardRef<ComponentRef<typeof BaseContextMenu.Separator>, ContextMenuSeparatorProps>(\n function ContextMenuSeparator({ className, ...props }, ref) {\n return <BaseContextMenu.Separator ref={ref} className={`${styles.separator} ${className ?? \"\"}`} {...props} />;\n },\n);\n\nexport const ContextMenuGroup = forwardRef<ComponentRef<typeof BaseContextMenu.Group>, ContextMenuGroupProps>(function ContextMenuGroup(\n { className, ...props },\n ref,\n) {\n return <BaseContextMenu.Group ref={ref} className={className} {...props} />;\n});\n\nexport const ContextMenuGroupLabel = forwardRef<ComponentRef<typeof BaseContextMenu.GroupLabel>, ContextMenuGroupLabelProps>(\n function ContextMenuGroupLabel({ className, ...props }, ref) {\n return <BaseContextMenu.GroupLabel ref={ref} className={`${styles[\"group-label\"]} ${className ?? \"\"}`} {...props} />;\n },\n);\n\nexport const ContextMenuSubmenuTrigger = forwardRef<ComponentRef<typeof BaseContextMenu.SubmenuTrigger>, ContextMenuSubmenuTriggerProps>(\n function ContextMenuSubmenuTrigger({ className, children, ...props }, ref) {\n return (\n <BaseContextMenu.SubmenuTrigger ref={ref} className={`${styles[\"submenu-trigger\"]} ${className ?? \"\"}`} {...props}>\n <span style={{ flex: 1 }}>{children}</span>\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" className={styles[\"submenu-icon\"]}>\n <path d=\"M3.5 9L7.5 5L3.5 1\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </BaseContextMenu.SubmenuTrigger>\n );\n },\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsDA,MAAa,mBAAmB,WAA8E,SAAS,iBACrH,EAAE,WAAW,GAAG,SAChB,KACA;AACA,QAAO,oBAACA,YAAgB,OAAjB;EAA4B;EAAK,WAAW,GAAGC,4BAAO,MAAM,GAAG,aAAa;EAAM,GAAI;EAAS,CAAA;EACtG;AAEF,MAAa,kBAAkB,WAA4E,SAAS,gBAClH,EAAE,WAAW,GAAG,SAChB,KACA;AACA,QAAO,oBAACD,YAAgB,MAAjB;EAA2B;EAAK,WAAW,GAAGC,4BAAO,KAAK,GAAG,aAAa;EAAM,GAAI;EAAS,CAAA;EACpG;AAEF,MAAa,uBAAuB,WAClC,SAAS,qBAAqB,EAAE,WAAW,GAAG,SAAS,KAAK;AAC1D,QAAO,oBAACD,YAAgB,WAAjB;EAAgC;EAAK,WAAW,GAAGC,4BAAO,UAAU,GAAG,aAAa;EAAM,GAAI;EAAS,CAAA;EAEjH;AAED,MAAa,mBAAmB,WAA8E,SAAS,iBACrH,EAAE,WAAW,GAAG,SAChB,KACA;AACA,QAAO,oBAACD,YAAgB,OAAjB;EAA4B;EAAgB;EAAW,GAAI;EAAS,CAAA;EAC3E;AAEF,MAAa,wBAAwB,WACnC,SAAS,sBAAsB,EAAE,WAAW,GAAG,SAAS,KAAK;AAC3D,QAAO,oBAACA,YAAgB,YAAjB;EAAiC;EAAK,WAAW,GAAGC,4BAAO,eAAe,GAAG,aAAa;EAAM,GAAI;EAAS,CAAA;EAEvH;AAED,MAAa,4BAA4B,WACvC,SAAS,0BAA0B,EAAE,WAAW,UAAU,GAAG,SAAS,KAAK;AACzE,QACE,qBAACD,YAAgB,gBAAjB;EAAqC;EAAK,WAAW,GAAGC,4BAAO,mBAAmB,GAAG,aAAa;EAAM,GAAI;YAA5G,CACE,oBAAC,QAAD;GAAM,OAAO,EAAE,MAAM,GAAG;GAAG;GAAgB,CAAA,EAC3C,oBAAC,OAAD;GAAK,OAAM;GAAK,QAAO;GAAK,SAAQ;GAAY,MAAK;GAAO,WAAWA,4BAAO;aAC5E,oBAAC,QAAD;IAAM,GAAE;IAAqB,QAAO;IAAe,aAAY;IAAM,eAAc;IAAQ,gBAAe;IAAU,CAAA;GAChH,CAAA,CACyB;;EAGtC"}
@@ -1,5 +1,3 @@
1
- @layer theme, base;
2
-
3
1
  @layer components {
4
2
  .backdrop_VsZA5W {
5
3
  z-index: var(--z-overlay);
@@ -15,14 +13,14 @@
15
13
 
16
14
  .popup_VsZA5W {
17
15
  z-index: var(--z-modal);
18
- background-color: var(--color-bg-elevated);
19
- border: var(--border-width-base) solid var(--color-border-base);
16
+ background-color: var(--color-elevated);
17
+ border: var(--border-width-base) solid var(--color-line);
20
18
  border-radius: var(--radius-2xl);
21
19
  box-shadow: var(--shadow-xl);
22
- padding: var(--space-6);
23
- width: min(480px, calc(100vw - var(--space-8)));
20
+ padding: var(--space-5) var(--space-6) var(--space-5);
21
+ width: min(440px, calc(100vw - var(--space-8)));
24
22
  max-height: min(640px, calc(100vh - var(--space-8)));
25
- gap: var(--space-4);
23
+ gap: var(--space-3);
26
24
  transition: opacity .2s var(--easing-ease-out),
27
25
  transform .2s var(--easing-spring);
28
26
  outline: none;
@@ -48,25 +46,25 @@
48
46
  }
49
47
 
50
48
  .header_VsZA5W {
51
- gap: var(--space-1);
49
+ gap: var(--space-2);
50
+ text-align: center;
52
51
  flex-direction: column;
53
52
  display: flex;
54
53
  }
55
54
 
56
55
  .title_VsZA5W {
57
- font-family: var(--font-mono);
56
+ font-family: var(--font-sans);
58
57
  font-size: var(--font-size-lg);
59
- font-weight: var(--font-weight-semibold);
60
- color: var(--color-text-primary);
58
+ font-weight: var(--font-weight-bold);
59
+ color: var(--color-primary);
61
60
  line-height: var(--line-height-tight);
62
61
  letter-spacing: var(--letter-spacing-tight);
63
- padding-right: var(--space-6);
64
62
  }
65
63
 
66
64
  .description_VsZA5W {
67
- font-family: var(--font-mono);
68
- font-size: var(--font-size-sm);
69
- color: var(--color-text-secondary);
65
+ font-family: var(--font-sans);
66
+ font-size: var(--font-size-md);
67
+ color: var(--color-secondary);
70
68
  line-height: var(--line-height-relaxed);
71
69
  }
72
70
 
@@ -76,7 +74,7 @@
76
74
  border-radius: var(--radius-sm);
77
75
  width: 24px;
78
76
  height: 24px;
79
- color: var(--color-text-tertiary);
77
+ color: var(--color-tertiary);
80
78
  cursor: pointer;
81
79
  transition: background-color var(--duration-fast) var(--easing-standard),
82
80
  color var(--duration-fast) var(--easing-standard);
@@ -90,8 +88,8 @@
90
88
  }
91
89
 
92
90
  .close_VsZA5W:hover {
93
- background-color: var(--color-surface-hover);
94
- color: var(--color-text-primary);
91
+ background-color: var(--color-hover);
92
+ color: var(--color-primary);
95
93
  }
96
94
 
97
95
  .close_VsZA5W:focus-visible {
@@ -101,7 +99,7 @@
101
99
  .body_VsZA5W {
102
100
  font-family: var(--font-mono);
103
101
  font-size: var(--font-size-sm);
104
- color: var(--color-text-secondary);
102
+ color: var(--color-secondary);
105
103
  line-height: var(--line-height-relaxed);
106
104
  flex: 1;
107
105
  overflow-y: auto;
@@ -112,9 +110,16 @@
112
110
  align-items: center;
113
111
  gap: var(--space-2);
114
112
  padding-top: var(--space-2);
115
- border-top: var(--border-width-base) solid var(--color-border-subtle);
116
113
  display: flex;
117
114
  }
118
- }
119
115
 
120
- @layer utilities;
116
+ .footer-split_VsZA5W {
117
+ justify-content: space-between;
118
+ }
119
+
120
+ .footer-end_VsZA5W {
121
+ align-items: center;
122
+ gap: var(--space-2);
123
+ display: flex;
124
+ }
125
+ }
@@ -1,5 +1,5 @@
1
- import { ReactElement, ReactNode } from "react";
2
1
  import * as react_jsx_runtime0 from "react/jsx-runtime";
2
+ import { ReactElement, ReactNode } from "react";
3
3
  import styles from "./dialog.module.css";
4
4
 
5
5
  //#region src/dialog/dialog.d.ts
@@ -12,7 +12,14 @@ interface DialogProps {
12
12
  title?: ReactNode;
13
13
  description?: ReactNode;
14
14
  children?: ReactNode;
15
+ /** Buttons aligned to the right (cancel, confirm). */
15
16
  footer?: ReactNode;
17
+ /**
18
+ * Content anchored to the left of the footer — intended for a destructive
19
+ * action (e.g. Delete). When present the footer switches to space-between
20
+ * layout, matching the macOS dialog pattern.
21
+ */
22
+ footerStart?: ReactNode;
16
23
  className?: string;
17
24
  dismissible?: boolean;
18
25
  }
@@ -22,6 +29,7 @@ declare function Dialog({
22
29
  description,
23
30
  children,
24
31
  footer,
32
+ footerStart,
25
33
  className,
26
34
  dismissible,
27
35
  onOpenChange,
@@ -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;EACX,MAAA,GAAS,SAAA;EACT,SAAA;EACA,WAAA;AAAA;AAAA,iBAWc,MAAA,CAAA;EACd,OAAA;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":"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"}
@@ -16,7 +16,7 @@ function XIcon() {
16
16
  })
17
17
  });
18
18
  }
19
- function Dialog$1({ trigger, title, description, children, footer, className, dismissible = true, onOpenChange, ...props }) {
19
+ function Dialog$1({ trigger, title, description, children, footer, footerStart, className, dismissible = true, onOpenChange, ...props }) {
20
20
  return /* @__PURE__ */ jsxs(Dialog.Root, {
21
21
  onOpenChange,
22
22
  ...props,
@@ -40,9 +40,12 @@ function Dialog$1({ trigger, title, description, children, footer, className, di
40
40
  className: dialog_module_default.body,
41
41
  children
42
42
  }),
43
- footer && /* @__PURE__ */ jsx("div", {
44
- className: dialog_module_default.footer,
45
- children: footer
43
+ (footer || footerStart) && /* @__PURE__ */ jsxs("div", {
44
+ className: `${dialog_module_default.footer} ${footerStart ? dialog_module_default["footer-split"] : ""}`,
45
+ children: [footerStart && /* @__PURE__ */ jsx("div", { children: footerStart }), footer && /* @__PURE__ */ jsx("div", {
46
+ className: dialog_module_default["footer-end"],
47
+ children: footer
48
+ })]
46
49
  })
47
50
  ]
48
51
  }) })] })]
@@ -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 footer?: 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 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 && <div className={styles.footer}>{footer}</div>}\n </BaseDialog.Popup>\n </BaseDialog.Viewport>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n}\nexport { styles as DialogStyles };\n"],"mappings":";;;;AAkBA,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,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;IACzD,UAAU,oBAAC,OAAD;KAAK,WAAWA,sBAAO;eAAS;KAAa,CAAA;IACvC;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 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"}
@@ -5,6 +5,8 @@ var dialog_module_default = {
5
5
  "close": "close_VsZA5W",
6
6
  "description": "description_VsZA5W",
7
7
  "footer": "footer_VsZA5W",
8
+ "footer-end": "footer-end_VsZA5W",
9
+ "footer-split": "footer-split_VsZA5W",
8
10
  "header": "header_VsZA5W",
9
11
  "popup": "popup_VsZA5W",
10
12
  "title": "title_VsZA5W"
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.module.js","names":[],"sources":["../../src/dialog/dialog.module.css"],"sourcesContent":["@layer theme, base, components, utilities;\n\n@layer components {\n .backdrop {\n position: fixed;\n inset: 0;\n background-color: rgba(0, 0, 0, 0.48);\n z-index: var(--z-overlay);\n transition: opacity var(--duration-slow) var(--easing-standard);\n }\n\n .backdrop[data-starting-style],\n .backdrop[data-ending-style] {\n opacity: 0;\n }\n\n .popup {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: var(--z-modal);\n background-color: var(--color-bg-elevated);\n border: var(--border-width-base) solid var(--color-border-base);\n border-radius: var(--radius-2xl);\n box-shadow: var(--shadow-xl);\n padding: var(--space-6);\n width: min(480px, calc(100vw - var(--space-8)));\n max-height: min(640px, calc(100vh - var(--space-8)));\n display: flex;\n flex-direction: column;\n gap: var(--space-4);\n outline: none;\n overflow: hidden;\n\n transition:\n opacity 200ms var(--easing-ease-out),\n transform 200ms var(--easing-spring);\n }\n\n .popup[data-starting-style] {\n opacity: 0;\n transform: translate(-50%, -48%) scale(0.96);\n }\n\n .popup[data-ending-style] {\n opacity: 0;\n transform: translate(-50%, -50%) scale(0.98);\n transition:\n opacity 150ms var(--easing-ease-in),\n transform 150ms var(--easing-ease-in);\n }\n\n .header {\n display: flex;\n flex-direction: column;\n gap: var(--space-1);\n }\n\n .title {\n font-family: var(--font-mono);\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-primary);\n line-height: var(--line-height-tight);\n letter-spacing: var(--letter-spacing-tight);\n padding-right: var(--space-6);\n }\n\n .description {\n font-family: var(--font-mono);\n font-size: var(--font-size-sm);\n color: var(--color-text-secondary);\n line-height: var(--line-height-relaxed);\n }\n\n .close {\n position: absolute;\n top: var(--space-4);\n right: var(--space-4);\n width: 24px;\n height: 24px;\n border-radius: var(--radius-sm);\n border: none;\n background: transparent;\n color: var(--color-text-tertiary);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n outline: none;\n transition:\n background-color var(--duration-fast) var(--easing-standard),\n color var(--duration-fast) var(--easing-standard);\n }\n\n .close:hover {\n background-color: var(--color-surface-hover);\n color: var(--color-text-primary);\n }\n\n .close:focus-visible {\n box-shadow: var(--shadow-focus);\n }\n\n .body {\n flex: 1;\n overflow-y: auto;\n font-family: var(--font-mono);\n font-size: var(--font-size-sm);\n color: var(--color-text-secondary);\n line-height: var(--line-height-relaxed);\n }\n\n .footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--space-2);\n padding-top: var(--space-2);\n border-top: var(--border-width-base) solid var(--color-border-subtle);\n }\n}\n"],"mappings":";AAgBA,IAAA,wBAAS;CAAA,YAAA;CAAA,QAAA;CAAA,SAAA;CAAA,eAAA;CAAA,UAAA;CAAA,UAAA;CAAA,SAAA;CAAA,SAAA;CAAA"}
1
+ {"version":3,"file":"dialog.module.js","names":[],"sources":["../../src/dialog/dialog.module.css"],"sourcesContent":["@layer components {\n .backdrop {\n position: fixed;\n inset: 0;\n background-color: rgba(0, 0, 0, 0.48);\n z-index: var(--z-overlay);\n transition: opacity var(--duration-slow) var(--easing-standard);\n }\n .backdrop[data-starting-style],\n .backdrop[data-ending-style] {\n opacity: 0;\n }\n .popup {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: var(--z-modal);\n background-color: var(--color-elevated);\n border: var(--border-width-base) solid var(--color-line);\n border-radius: var(--radius-2xl);\n box-shadow: var(--shadow-xl);\n padding: var(--space-5) var(--space-6) var(--space-5);\n width: min(440px, calc(100vw - var(--space-8)));\n max-height: min(640px, calc(100vh - var(--space-8)));\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\n outline: none;\n overflow: hidden;\n transition:\n opacity 200ms var(--easing-ease-out),\n transform 200ms var(--easing-spring);\n }\n .popup[data-starting-style] {\n opacity: 0;\n transform: translate(-50%, -48%) scale(0.96);\n }\n .popup[data-ending-style] {\n opacity: 0;\n transform: translate(-50%, -50%) scale(0.98);\n transition:\n opacity 150ms var(--easing-ease-in),\n transform 150ms var(--easing-ease-in);\n }\n .header {\n display: flex;\n flex-direction: column;\n gap: var(--space-2);\n text-align: center;\n }\n .title {\n font-family: var(--font-sans);\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-bold);\n color: var(--color-primary);\n line-height: var(--line-height-tight);\n letter-spacing: var(--letter-spacing-tight);\n }\n .description {\n font-family: var(--font-sans);\n font-size: var(--font-size-md);\n color: var(--color-secondary);\n line-height: var(--line-height-relaxed);\n }\n .close {\n position: absolute;\n top: var(--space-4);\n right: var(--space-4);\n width: 24px;\n height: 24px;\n border-radius: var(--radius-sm);\n border: none;\n background: transparent;\n color: var(--color-tertiary);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n outline: none;\n transition:\n background-color var(--duration-fast) var(--easing-standard),\n color var(--duration-fast) var(--easing-standard);\n }\n .close:hover {\n background-color: var(--color-hover);\n color: var(--color-primary);\n }\n .close:focus-visible {\n box-shadow: var(--shadow-focus);\n }\n .body {\n flex: 1;\n overflow-y: auto;\n font-family: var(--font-mono);\n font-size: var(--font-size-sm);\n color: var(--color-secondary);\n line-height: var(--line-height-relaxed);\n }\n .footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--space-2);\n padding-top: var(--space-2);\n }\n /* When a footerStart slot is present, space-between pushes it left */\n .footer-split {\n justify-content: space-between;\n }\n .footer-end {\n display: flex;\n align-items: center;\n gap: var(--space-2);\n }\n}\n"],"mappings":";AAoBA,IAAA,wBAAW;CAAA,YAAc;CAAW,QAAA;CAAA,SAAA;CAAA,eAAA;CAAA,UAAA;CAAA,cAAA;CAAA,gBAAA;CAAA,UAAA;CAAA,SAAA;CAAA,SAAA;CAAA"}
@@ -1,6 +1,6 @@
1
1
  import dialog_module_default from "./dialog.module.js";
2
- import { forwardRef } from "react";
3
2
  import { jsx } from "react/jsx-runtime";
3
+ import { forwardRef } from "react";
4
4
  import { Dialog } from "@base-ui/react/dialog";
5
5
  //#region src/dialog/parts.tsx
6
6
  /**
@@ -1,5 +1,3 @@
1
- @layer theme, base;
2
-
3
1
  @layer components {
4
2
  .backdrop_JNKGQq {
5
3
  --backdrop-opacity: .48;
@@ -73,8 +71,8 @@
73
71
 
74
72
  .popup_JNKGQq {
75
73
  box-sizing: border-box;
76
- background-color: var(--color-bg-elevated);
77
- border: var(--border-width-base) solid var(--color-border-base);
74
+ background-color: var(--color-elevated);
75
+ border: var(--border-width-base) solid var(--color-line);
78
76
  overscroll-behavior: contain;
79
77
  touch-action: auto;
80
78
  will-change: transform;
@@ -176,7 +174,7 @@
176
174
  }
177
175
 
178
176
  .handle-bar_JNKGQq {
179
- background-color: var(--color-border-strong);
177
+ background-color: var(--color-line-strong);
180
178
  width: 2.5rem;
181
179
  height: 4px;
182
180
  margin: 0 auto var(--space-4);
@@ -200,7 +198,7 @@
200
198
  font-family: var(--font-mono);
201
199
  font-size: var(--font-size-lg);
202
200
  font-weight: var(--font-weight-semibold);
203
- color: var(--color-text-primary);
201
+ color: var(--color-primary);
204
202
  line-height: var(--line-height-tight);
205
203
  letter-spacing: var(--letter-spacing-tight);
206
204
  padding-right: var(--space-6);
@@ -210,7 +208,7 @@
210
208
  .description_JNKGQq {
211
209
  font-family: var(--font-mono);
212
210
  font-size: var(--font-size-sm);
213
- color: var(--color-text-secondary);
211
+ color: var(--color-secondary);
214
212
  line-height: var(--line-height-relaxed);
215
213
  margin: 0;
216
214
  }
@@ -221,7 +219,7 @@
221
219
  border-radius: var(--radius-sm);
222
220
  width: 24px;
223
221
  height: 24px;
224
- color: var(--color-text-tertiary);
222
+ color: var(--color-tertiary);
225
223
  cursor: pointer;
226
224
  transition: background-color var(--duration-fast) var(--easing-standard),
227
225
  color var(--duration-fast) var(--easing-standard);
@@ -235,8 +233,8 @@
235
233
  }
236
234
 
237
235
  .close_JNKGQq:hover {
238
- background-color: var(--color-surface-hover);
239
- color: var(--color-text-primary);
236
+ background-color: var(--color-hover);
237
+ color: var(--color-primary);
240
238
  }
241
239
 
242
240
  .close_JNKGQq:focus-visible {
@@ -248,10 +246,8 @@
248
246
  align-items: center;
249
247
  gap: var(--space-2);
250
248
  padding-top: var(--space-4);
251
- border-top: var(--border-width-base) solid var(--color-border-subtle);
249
+ border-top: var(--border-width-base) solid var(--color-line-subtle);
252
250
  margin-top: auto;
253
251
  display: flex;
254
252
  }
255
253
  }
256
-
257
- @layer utilities;
@@ -1,5 +1,5 @@
1
- import { ReactElement, ReactNode } from "react";
2
1
  import * as react_jsx_runtime0 from "react/jsx-runtime";
2
+ import { ReactElement, ReactNode } from "react";
3
3
  import styles from "./drawer.module.css";
4
4
 
5
5
  //#region src/drawer/drawer.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"drawer.module.js","names":[],"sources":["../../src/drawer/drawer.module.css"],"sourcesContent":["@layer theme, base, components, utilities;\n\n@layer components {\n /* ── Backdrop ──────────────────────────────────────────────────── */\n\n .backdrop {\n --backdrop-opacity: 0.48;\n position: fixed;\n inset: 0;\n min-height: 100dvh;\n background-color: black;\n opacity: calc(var(--backdrop-opacity) * (1 - var(--drawer-swipe-progress)));\n z-index: var(--z-overlay);\n\n transition-property: opacity;\n transition-duration: 450ms;\n transition-timing-function: cubic-bezier(0.32, 0.72, 0, 1);\n\n /* iOS 26+: cover the full visual viewport even when scrolled */\n @supports (-webkit-touch-callout: none) {\n position: absolute;\n }\n }\n\n .backdrop[data-starting-style],\n .backdrop[data-ending-style] {\n opacity: 0;\n }\n\n .backdrop[data-swiping] {\n transition-duration: 0ms;\n }\n\n .backdrop[data-ending-style] {\n transition-duration: calc(var(--drawer-swipe-strength) * 400ms);\n }\n\n /* ── Viewport ──────────────────────────────────────────────────── */\n\n .viewport {\n position: fixed;\n inset: 0;\n z-index: var(--z-modal);\n display: flex;\n }\n\n /* side drawers sit against their respective edge */\n .viewport[data-side=\"left\"] {\n justify-content: flex-start;\n align-items: stretch;\n }\n .viewport[data-side=\"right\"] {\n justify-content: flex-end;\n align-items: stretch;\n }\n .viewport[data-side=\"bottom\"] {\n align-items: flex-end;\n justify-content: center;\n }\n .viewport[data-side=\"top\"] {\n align-items: flex-start;\n justify-content: center;\n }\n\n /* iOS rounded inset padding */\n @supports (-webkit-touch-callout: none) {\n .viewport[data-side=\"left\"],\n .viewport[data-side=\"right\"] {\n padding: 0.625rem;\n }\n\n .viewport[data-side=\"bottom\"] {\n padding: 0 0.625rem 0.625rem;\n }\n\n .viewport[data-side=\"top\"] {\n padding: 0.625rem 0.625rem 0;\n }\n }\n\n /* ── Popup — shared ────────────────────────────────────────────── */\n\n .popup {\n box-sizing: border-box;\n background-color: var(--color-bg-elevated);\n border: var(--border-width-base) solid var(--color-border-base);\n outline: none;\n overflow-y: auto;\n overscroll-behavior: contain;\n touch-action: auto;\n will-change: transform;\n transition-timing-function: cubic-bezier(0.32, 0.72, 0, 1);\n transition-duration: 450ms;\n }\n\n .popup[data-swiping] {\n user-select: none;\n transition-duration: 0ms;\n }\n\n .popup[data-ending-style] {\n transition-duration: calc(var(--drawer-swipe-strength) * 400ms);\n }\n\n /* ── Popup — right side (default) ─────────────────────────────── */\n\n .popup-right {\n --bleed: 3rem;\n height: 100%;\n width: calc(var(--drawer-width, 20rem) + var(--bleed));\n max-width: calc(100vw - 3rem + var(--bleed));\n padding: var(--space-6);\n padding-right: calc(var(--space-6) + var(--bleed));\n margin-right: calc(-1 * var(--bleed));\n transform: translateX(var(--drawer-swipe-movement-x));\n transition-property: transform;\n\n @supports (-webkit-touch-callout: none) {\n --bleed: 0px;\n margin-right: 0;\n border-radius: var(--radius-xl);\n }\n }\n\n .popup-right[data-starting-style],\n .popup-right[data-ending-style] {\n transform: translateX(calc(100% - var(--bleed) + 2px));\n }\n\n /* ── Popup — left side ─────────────────────────────────────────── */\n\n .popup-left {\n --bleed: 3rem;\n height: 100%;\n width: calc(var(--drawer-width, 20rem) + var(--bleed));\n max-width: calc(100vw - 3rem + var(--bleed));\n padding: var(--space-6);\n padding-left: calc(var(--space-6) + var(--bleed));\n margin-left: calc(-1 * var(--bleed));\n transform: translateX(var(--drawer-swipe-movement-x));\n transition-property: transform;\n\n @supports (-webkit-touch-callout: none) {\n --bleed: 0px;\n margin-left: 0;\n border-radius: var(--radius-xl);\n }\n }\n\n .popup-left[data-starting-style],\n .popup-left[data-ending-style] {\n transform: translateX(calc(-100% + var(--bleed) - 2px));\n }\n\n /* ── Popup — bottom ────────────────────────────────────────────── */\n\n .popup-bottom {\n width: 100%;\n max-width: var(--drawer-max-width, 480px);\n max-height: 90dvh;\n padding: var(--space-5) var(--space-5) calc(var(--space-5) + env(safe-area-inset-bottom, 0px));\n border-radius: var(--radius-2xl) var(--radius-2xl) 0 0;\n border-bottom: none;\n transform: translateY(var(--drawer-swipe-movement-y));\n transition-property: transform;\n\n @supports (-webkit-touch-callout: none) {\n border-radius: var(--radius-2xl);\n }\n }\n\n .popup-bottom[data-starting-style],\n .popup-bottom[data-ending-style] {\n transform: translateY(calc(100% + 2px));\n }\n\n /* ── Popup — top ───────────────────────────────────────────────── */\n\n .popup-top {\n width: 100%;\n max-width: var(--drawer-max-width, 480px);\n max-height: 90dvh;\n padding: calc(var(--space-5) + env(safe-area-inset-top, 0px)) var(--space-5) var(--space-5);\n border-radius: 0 0 var(--radius-2xl) var(--radius-2xl);\n border-top: none;\n transform: translateY(var(--drawer-swipe-movement-y));\n transition-property: transform;\n\n @supports (-webkit-touch-callout: none) {\n border-radius: var(--radius-2xl);\n }\n }\n\n .popup-top[data-starting-style],\n .popup-top[data-ending-style] {\n transform: translateY(calc(-100% - 2px));\n }\n\n /* ── Handle bar (bottom/top drawers) ───────────────────────────── */\n\n .handle-bar {\n width: 2.5rem;\n height: 4px;\n border-radius: 9999px;\n background-color: var(--color-border-strong);\n margin: 0 auto var(--space-4);\n flex-shrink: 0;\n }\n\n .popup-top .handle-bar {\n margin: var(--space-4) auto 0;\n order: 1; /* push to bottom in top drawer */\n }\n\n /* ── Content ───────────────────────────────────────────────────── */\n\n .content {\n display: flex;\n flex-direction: column;\n gap: var(--space-4);\n height: 100%;\n }\n\n /* ── Title ─────────────────────────────────────────────────────── */\n\n .title {\n font-family: var(--font-mono);\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n color: var(--color-text-primary);\n line-height: var(--line-height-tight);\n letter-spacing: var(--letter-spacing-tight);\n margin: 0;\n padding-right: var(--space-6);\n }\n\n /* ── Description ───────────────────────────────────────────────── */\n\n .description {\n font-family: var(--font-mono);\n font-size: var(--font-size-sm);\n color: var(--color-text-secondary);\n line-height: var(--line-height-relaxed);\n margin: 0;\n }\n\n /* ── Close button ──────────────────────────────────────────────── */\n\n .close {\n position: absolute;\n top: var(--space-4);\n right: var(--space-4);\n width: 24px;\n height: 24px;\n border-radius: var(--radius-sm);\n border: none;\n background: transparent;\n color: var(--color-text-tertiary);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n outline: none;\n transition:\n background-color var(--duration-fast) var(--easing-standard),\n color var(--duration-fast) var(--easing-standard);\n }\n\n .close:hover {\n background-color: var(--color-surface-hover);\n color: var(--color-text-primary);\n }\n\n .close:focus-visible {\n box-shadow: var(--shadow-focus);\n }\n\n /* ── Footer ────────────────────────────────────────────────────── */\n\n .footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--space-2);\n padding-top: var(--space-4);\n margin-top: auto;\n border-top: var(--border-width-base) solid var(--color-border-subtle);\n }\n}\n"],"mappings":";AA0BA,IAAA,wBAAc;CAAA,YAAA;CAAA,SAAA;CAAA,WAAA;CAAA,eAAA;CAAA,UAAA;CAAA,cAAA;CAAA,SAAA;CAAA,gBAAA;CAAA,cAAA;CAAA,eAAA;CAAA,aAAA;CAAA,SAAA;CAAA,YAAA;CAAA"}
1
+ {"version":3,"file":"drawer.module.js","names":[],"sources":["../../src/drawer/drawer.module.css"],"sourcesContent":["@layer components {\n /* ── Backdrop ──────────────────────────────────────────────────── */\n .backdrop {\n --backdrop-opacity: 0.48;\n position: fixed;\n inset: 0;\n min-height: 100dvh;\n background-color: black;\n opacity: calc(var(--backdrop-opacity) * (1 - var(--drawer-swipe-progress)));\n z-index: var(--z-overlay);\n transition-property: opacity;\n transition-duration: 450ms;\n transition-timing-function: cubic-bezier(0.32, 0.72, 0, 1);\n /* iOS 26+: cover the full visual viewport even when scrolled */\n @supports (-webkit-touch-callout: none) {\n position: absolute;\n }\n }\n .backdrop[data-starting-style],\n .backdrop[data-ending-style] {\n opacity: 0;\n }\n .backdrop[data-swiping] {\n transition-duration: 0ms;\n }\n .backdrop[data-ending-style] {\n transition-duration: calc(var(--drawer-swipe-strength) * 400ms);\n }\n /* ── Viewport ──────────────────────────────────────────────────── */\n .viewport {\n position: fixed;\n inset: 0;\n z-index: var(--z-modal);\n display: flex;\n }\n /* side drawers sit against their respective edge */\n .viewport[data-side=\"left\"] {\n justify-content: flex-start;\n align-items: stretch;\n }\n .viewport[data-side=\"right\"] {\n justify-content: flex-end;\n align-items: stretch;\n }\n .viewport[data-side=\"bottom\"] {\n align-items: flex-end;\n justify-content: center;\n }\n .viewport[data-side=\"top\"] {\n align-items: flex-start;\n justify-content: center;\n }\n /* iOS rounded inset padding */\n @supports (-webkit-touch-callout: none) {\n .viewport[data-side=\"left\"],\n .viewport[data-side=\"right\"] {\n padding: 0.625rem;\n }\n .viewport[data-side=\"bottom\"] {\n padding: 0 0.625rem 0.625rem;\n }\n .viewport[data-side=\"top\"] {\n padding: 0.625rem 0.625rem 0;\n }\n }\n /* ── Popup — shared ────────────────────────────────────────────── */\n .popup {\n box-sizing: border-box;\n background-color: var(--color-elevated);\n border: var(--border-width-base) solid var(--color-line);\n outline: none;\n overflow-y: auto;\n overscroll-behavior: contain;\n touch-action: auto;\n will-change: transform;\n transition-timing-function: cubic-bezier(0.32, 0.72, 0, 1);\n transition-duration: 450ms;\n }\n .popup[data-swiping] {\n user-select: none;\n transition-duration: 0ms;\n }\n .popup[data-ending-style] {\n transition-duration: calc(var(--drawer-swipe-strength) * 400ms);\n }\n /* ── Popup — right side (default) ─────────────────────────────── */\n .popup-right {\n --bleed: 3rem;\n height: 100%;\n width: calc(var(--drawer-width, 20rem) + var(--bleed));\n max-width: calc(100vw - 3rem + var(--bleed));\n padding: var(--space-6);\n padding-right: calc(var(--space-6) + var(--bleed));\n margin-right: calc(-1 * var(--bleed));\n transform: translateX(var(--drawer-swipe-movement-x));\n transition-property: transform;\n @supports (-webkit-touch-callout: none) {\n --bleed: 0px;\n margin-right: 0;\n border-radius: var(--radius-xl);\n }\n }\n .popup-right[data-starting-style],\n .popup-right[data-ending-style] {\n transform: translateX(calc(100% - var(--bleed) + 2px));\n }\n /* ── Popup — left side ─────────────────────────────────────────── */\n .popup-left {\n --bleed: 3rem;\n height: 100%;\n width: calc(var(--drawer-width, 20rem) + var(--bleed));\n max-width: calc(100vw - 3rem + var(--bleed));\n padding: var(--space-6);\n padding-left: calc(var(--space-6) + var(--bleed));\n margin-left: calc(-1 * var(--bleed));\n transform: translateX(var(--drawer-swipe-movement-x));\n transition-property: transform;\n @supports (-webkit-touch-callout: none) {\n --bleed: 0px;\n margin-left: 0;\n border-radius: var(--radius-xl);\n }\n }\n .popup-left[data-starting-style],\n .popup-left[data-ending-style] {\n transform: translateX(calc(-100% + var(--bleed) - 2px));\n }\n /* ── Popup — bottom ────────────────────────────────────────────── */\n .popup-bottom {\n width: 100%;\n max-width: var(--drawer-max-width, 480px);\n max-height: 90dvh;\n padding: var(--space-5) var(--space-5) calc(var(--space-5) + env(safe-area-inset-bottom, 0px));\n border-radius: var(--radius-2xl) var(--radius-2xl) 0 0;\n border-bottom: none;\n transform: translateY(var(--drawer-swipe-movement-y));\n transition-property: transform;\n @supports (-webkit-touch-callout: none) {\n border-radius: var(--radius-2xl);\n }\n }\n .popup-bottom[data-starting-style],\n .popup-bottom[data-ending-style] {\n transform: translateY(calc(100% + 2px));\n }\n /* ── Popup — top ───────────────────────────────────────────────── */\n .popup-top {\n width: 100%;\n max-width: var(--drawer-max-width, 480px);\n max-height: 90dvh;\n padding: calc(var(--space-5) + env(safe-area-inset-top, 0px)) var(--space-5) var(--space-5);\n border-radius: 0 0 var(--radius-2xl) var(--radius-2xl);\n border-top: none;\n transform: translateY(var(--drawer-swipe-movement-y));\n transition-property: transform;\n @supports (-webkit-touch-callout: none) {\n border-radius: var(--radius-2xl);\n }\n }\n .popup-top[data-starting-style],\n .popup-top[data-ending-style] {\n transform: translateY(calc(-100% - 2px));\n }\n /* ── Handle bar (bottom/top drawers) ───────────────────────────── */\n .handle-bar {\n width: 2.5rem;\n height: 4px;\n border-radius: 9999px;\n background-color: var(--color-line-strong);\n margin: 0 auto var(--space-4);\n flex-shrink: 0;\n }\n .popup-top .handle-bar {\n margin: var(--space-4) auto 0;\n order: 1; /* push to bottom in top drawer */\n }\n /* ── Content ───────────────────────────────────────────────────── */\n .content {\n display: flex;\n flex-direction: column;\n gap: var(--space-4);\n height: 100%;\n }\n /* ── Title ─────────────────────────────────────────────────────── */\n .title {\n font-family: var(--font-mono);\n font-size: var(--font-size-lg);\n font-weight: var(--font-weight-semibold);\n color: var(--color-primary);\n line-height: var(--line-height-tight);\n letter-spacing: var(--letter-spacing-tight);\n margin: 0;\n padding-right: var(--space-6);\n }\n /* ── Description ───────────────────────────────────────────────── */\n .description {\n font-family: var(--font-mono);\n font-size: var(--font-size-sm);\n color: var(--color-secondary);\n line-height: var(--line-height-relaxed);\n margin: 0;\n }\n /* ── Close button ──────────────────────────────────────────────── */\n .close {\n position: absolute;\n top: var(--space-4);\n right: var(--space-4);\n width: 24px;\n height: 24px;\n border-radius: var(--radius-sm);\n border: none;\n background: transparent;\n color: var(--color-tertiary);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n outline: none;\n transition:\n background-color var(--duration-fast) var(--easing-standard),\n color var(--duration-fast) var(--easing-standard);\n }\n .close:hover {\n background-color: var(--color-hover);\n color: var(--color-primary);\n }\n .close:focus-visible {\n box-shadow: var(--shadow-focus);\n }\n /* ── Footer ────────────────────────────────────────────────────── */\n .footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--space-2);\n padding-top: var(--space-4);\n margin-top: auto;\n border-top: var(--border-width-base) solid var(--color-line-subtle);\n }\n}\n"],"mappings":";AA0BA,IAAA,wBAAe;CAAA,YAAU;CAAkB,SAAM;CAAkB,WAAA;CAAA,eAAA;CAAA,UAAA;CAAA,cAAA;CAAA,SAAA;CAAA,gBAAA;CAAA,cAAA;CAAA,eAAA;CAAA,aAAA;CAAA,SAAA;CAAA,YAAA;CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { DrawerSide } from "./drawer.js";
2
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
2
3
  import * as react from "react";
3
4
  import { ComponentPropsWithoutRef } from "react";
4
- import * as react_jsx_runtime0 from "react/jsx-runtime";
5
5
  import { Drawer } from "@base-ui/react/drawer";
6
6
 
7
7
  //#region src/drawer/parts.d.ts
@@ -1,6 +1,6 @@
1
1
  import drawer_module_default from "./drawer.module.js";
2
- import { forwardRef } from "react";
3
2
  import { jsx } from "react/jsx-runtime";
3
+ import { forwardRef } from "react";
4
4
  import { Drawer } from "@base-ui/react/drawer";
5
5
  //#region src/drawer/parts.tsx
6
6
  /**