@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,84 @@
1
+ @layer components {
2
+ .backdrop_xocxMW {
3
+ min-height: 100dvh;
4
+ z-index: var(--z-overlay);
5
+ transition: opacity var(--duration-slow) var(--easing-standard);
6
+ background-color: #0000007a;
7
+ position: fixed;
8
+ inset: 0;
9
+
10
+ @supports (-webkit-touch-callout: none) {
11
+ position: absolute;
12
+ }
13
+ }
14
+
15
+ .backdrop_xocxMW[data-starting-style], .backdrop_xocxMW[data-ending-style] {
16
+ opacity: 0;
17
+ }
18
+
19
+ .popup_xocxMW {
20
+ z-index: var(--z-modal);
21
+ background-color: var(--color-elevated);
22
+ border: var(--border-width-base) solid var(--color-line);
23
+ border-radius: var(--radius-2xl);
24
+ box-shadow: var(--shadow-xl);
25
+ padding: var(--space-5) var(--space-6);
26
+ width: min(380px, calc(100vw - var(--space-8)));
27
+ gap: var(--space-3);
28
+ transition: opacity .2s var(--easing-ease-out),
29
+ transform .2s var(--easing-spring);
30
+ outline: none;
31
+ flex-direction: column;
32
+ display: flex;
33
+ position: fixed;
34
+ top: 50%;
35
+ left: 50%;
36
+ overflow: hidden;
37
+ transform: translate(-50%, -50%);
38
+ }
39
+
40
+ .popup_xocxMW[data-starting-style] {
41
+ opacity: 0;
42
+ transform: translate(-50%, -48%) scale(.96);
43
+ }
44
+
45
+ .popup_xocxMW[data-ending-style] {
46
+ opacity: 0;
47
+ transition: opacity .15s var(--easing-ease-in),
48
+ transform .15s var(--easing-ease-in);
49
+ transform: translate(-50%, -50%) scale(.98);
50
+ }
51
+
52
+ .header_xocxMW {
53
+ gap: var(--space-1-5);
54
+ flex-direction: column;
55
+ display: flex;
56
+ }
57
+
58
+ .icon_xocxMW {
59
+ margin-bottom: var(--space-1);
60
+ }
61
+
62
+ .title_xocxMW {
63
+ font-family: var(--font-sans);
64
+ font-size: var(--font-size-lg);
65
+ font-weight: var(--font-weight-bold);
66
+ color: var(--color-primary);
67
+ line-height: var(--line-height-tight);
68
+ }
69
+
70
+ .description_xocxMW {
71
+ font-family: var(--font-sans);
72
+ font-size: var(--font-size-md);
73
+ color: var(--color-secondary);
74
+ line-height: var(--line-height-relaxed);
75
+ }
76
+
77
+ .actions_xocxMW {
78
+ justify-content: flex-end;
79
+ align-items: center;
80
+ gap: var(--space-2);
81
+ padding-top: var(--space-1);
82
+ display: flex;
83
+ }
84
+ }
@@ -0,0 +1,44 @@
1
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
2
+ import { ReactElement, ReactNode } from "react";
3
+ import styles from "./alert-dialog.module.css";
4
+
5
+ //#region src/alert-dialog/alert-dialog.d.ts
6
+ interface AlertAction {
7
+ label: ReactNode;
8
+ /** Called when the action button is clicked. The dialog closes automatically. */
9
+ onAction?: () => void;
10
+ /** Renders as a filled accent button — use for the primary confirm action. */
11
+ primary?: boolean;
12
+ /** Renders as a soft destructive button. Sits on the left when combined with other actions. */
13
+ destructive?: boolean;
14
+ }
15
+ interface AlertDialogProps {
16
+ open?: boolean;
17
+ defaultOpen?: boolean;
18
+ onOpenChange?: (open: boolean, eventDetails: unknown) => void;
19
+ trigger?: ReactElement;
20
+ /** Optional icon shown above the title. */
21
+ icon?: ReactNode;
22
+ title: ReactNode;
23
+ description?: ReactNode;
24
+ /**
25
+ * Action buttons rendered right-aligned.
26
+ * Use `primary: true` for the confirm action (solid), leave unset for cancel (outline).
27
+ * Use `destructive: true` to apply destructive tone to the confirm action.
28
+ */
29
+ actions: AlertAction[];
30
+ className?: string;
31
+ }
32
+ declare function AlertDialog({
33
+ trigger,
34
+ icon,
35
+ title,
36
+ description,
37
+ actions,
38
+ className,
39
+ onOpenChange,
40
+ ...props
41
+ }: AlertDialogProps): react_jsx_runtime0.JSX.Element;
42
+ //#endregion
43
+ export { AlertAction, AlertDialog, AlertDialogProps, styles };
44
+ //# sourceMappingURL=alert-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-dialog.d.ts","names":[],"sources":["../../src/alert-dialog/alert-dialog.tsx"],"mappings":";;;;;UAKiB,WAAA;EACf,KAAA,EAAO,SAAA;;EAEP,QAAA;EAH0B;EAK1B,OAAA;EAJgB;EAMhB,WAAA;AAAA;AAAA,UAGe,gBAAA;EACf,IAAA;EACA,WAAA;EACA,YAAA,IAAgB,IAAA,WAAe,YAAA;EAC/B,OAAA,GAAU,YAAA;EAJK;EAMf,IAAA,GAAO,SAAA;EACP,KAAA,EAAO,SAAA;EACP,WAAA,GAAc,SAAA;EAFP;;;;;EAQP,OAAA,EAAS,WAAA;EACT,SAAA;AAAA;AAAA,iBAGc,WAAA,CAAA;EAAc,OAAA;EAAS,IAAA;EAAM,KAAA;EAAO,WAAA;EAAa,OAAA;EAAS,SAAA;EAAW,YAAA;EAAA,GAAiB;AAAA,GAAS,gBAAA,GAAgB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -0,0 +1,46 @@
1
+ import { Button } from "../button/button.js";
2
+ import alert_dialog_module_default from "./alert-dialog.module.js";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { AlertDialog } from "@base-ui/react/alert-dialog";
5
+ //#region src/alert-dialog/alert-dialog.tsx
6
+ function AlertDialog$1({ trigger, icon, title, description, actions, className, onOpenChange, ...props }) {
7
+ return /* @__PURE__ */ jsxs(AlertDialog.Root, {
8
+ onOpenChange,
9
+ ...props,
10
+ children: [trigger && /* @__PURE__ */ jsx(AlertDialog.Trigger, { render: trigger }), /* @__PURE__ */ jsxs(AlertDialog.Portal, { children: [/* @__PURE__ */ jsx(AlertDialog.Backdrop, { className: alert_dialog_module_default.backdrop }), /* @__PURE__ */ jsxs(AlertDialog.Popup, {
11
+ className: `${alert_dialog_module_default.popup} ${className ?? ""}`,
12
+ children: [/* @__PURE__ */ jsxs("div", {
13
+ className: alert_dialog_module_default.header,
14
+ children: [
15
+ icon && /* @__PURE__ */ jsx("div", {
16
+ className: alert_dialog_module_default.icon,
17
+ children: icon
18
+ }),
19
+ /* @__PURE__ */ jsx(AlertDialog.Title, {
20
+ className: alert_dialog_module_default.title,
21
+ children: title
22
+ }),
23
+ description && /* @__PURE__ */ jsx(AlertDialog.Description, {
24
+ className: alert_dialog_module_default.description,
25
+ children: description
26
+ })
27
+ ]
28
+ }), /* @__PURE__ */ jsx("div", {
29
+ className: alert_dialog_module_default.actions,
30
+ children: actions.map((action, i) => /* @__PURE__ */ jsx(AlertDialog.Close, {
31
+ render: /* @__PURE__ */ jsx(Button, {
32
+ variant: action.primary ? "solid" : "outline",
33
+ tone: action.destructive ? "destructive" : "primary",
34
+ size: "sm",
35
+ onClick: action.onAction
36
+ }),
37
+ children: action.label
38
+ }, i))
39
+ })]
40
+ })] })]
41
+ });
42
+ }
43
+ //#endregion
44
+ export { AlertDialog$1 as AlertDialog };
45
+
46
+ //# sourceMappingURL=alert-dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-dialog.js","names":["AlertDialog","BaseAlertDialog","styles"],"sources":["../../src/alert-dialog/alert-dialog.tsx"],"sourcesContent":["import type { ReactNode, ReactElement } from \"react\";\nimport { AlertDialog as BaseAlertDialog } from \"@base-ui/react/alert-dialog\";\nimport { Button } from \"../button/button\";\nimport styles from \"./alert-dialog.module.css\";\n\nexport interface AlertAction {\n label: ReactNode;\n /** Called when the action button is clicked. The dialog closes automatically. */\n onAction?: () => void;\n /** Renders as a filled accent button — use for the primary confirm action. */\n primary?: boolean;\n /** Renders as a soft destructive button. Sits on the left when combined with other actions. */\n destructive?: boolean;\n}\n\nexport interface AlertDialogProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean, eventDetails: unknown) => void;\n trigger?: ReactElement;\n /** Optional icon shown above the title. */\n icon?: ReactNode;\n title: ReactNode;\n description?: ReactNode;\n /**\n * Action buttons rendered right-aligned.\n * Use `primary: true` for the confirm action (solid), leave unset for cancel (outline).\n * Use `destructive: true` to apply destructive tone to the confirm action.\n */\n actions: AlertAction[];\n className?: string;\n}\n\nexport function AlertDialog({ trigger, icon, title, description, actions, className, onOpenChange, ...props }: AlertDialogProps) {\n return (\n <BaseAlertDialog.Root onOpenChange={onOpenChange as never} {...props}>\n {trigger && <BaseAlertDialog.Trigger render={trigger} />}\n <BaseAlertDialog.Portal>\n <BaseAlertDialog.Backdrop className={styles.backdrop} />\n <BaseAlertDialog.Popup className={`${styles.popup} ${className ?? \"\"}`}>\n <div className={styles.header}>\n {icon && <div className={styles.icon}>{icon}</div>}\n <BaseAlertDialog.Title className={styles.title}>{title}</BaseAlertDialog.Title>\n {description && <BaseAlertDialog.Description className={styles.description}>{description}</BaseAlertDialog.Description>}\n </div>\n <div className={styles.actions}>\n {actions.map((action, i) => (\n <BaseAlertDialog.Close\n key={i}\n render={\n <Button\n variant={action.primary ? \"solid\" : \"outline\"}\n tone={action.destructive ? \"destructive\" : \"primary\"}\n size=\"sm\"\n onClick={action.onAction}\n />\n }\n >\n {action.label}\n </BaseAlertDialog.Close>\n ))}\n </div>\n </BaseAlertDialog.Popup>\n </BaseAlertDialog.Portal>\n </BaseAlertDialog.Root>\n );\n}\n\nexport { styles as AlertDialogStyles };\n"],"mappings":";;;;;AAiCA,SAAgBA,cAAY,EAAE,SAAS,MAAM,OAAO,aAAa,SAAS,WAAW,cAAc,GAAG,SAA2B;AAC/H,QACE,qBAACC,YAAgB,MAAjB;EAAoC;EAAuB,GAAI;YAA/D,CACG,WAAW,oBAACA,YAAgB,SAAjB,EAAyB,QAAQ,SAAW,CAAA,EACxD,qBAACA,YAAgB,QAAjB,EAAA,UAAA,CACE,oBAACA,YAAgB,UAAjB,EAA0B,WAAWC,4BAAO,UAAY,CAAA,EACxD,qBAACD,YAAgB,OAAjB;GAAuB,WAAW,GAAGC,4BAAO,MAAM,GAAG,aAAa;aAAlE,CACE,qBAAC,OAAD;IAAK,WAAWA,4BAAO;cAAvB;KACG,QAAQ,oBAAC,OAAD;MAAK,WAAWA,4BAAO;gBAAO;MAAW,CAAA;KAClD,oBAACD,YAAgB,OAAjB;MAAuB,WAAWC,4BAAO;gBAAQ;MAA8B,CAAA;KAC9E,eAAe,oBAACD,YAAgB,aAAjB;MAA6B,WAAWC,4BAAO;gBAAc;MAA0C,CAAA;KACnH;OACN,oBAAC,OAAD;IAAK,WAAWA,4BAAO;cACpB,QAAQ,KAAK,QAAQ,MACpB,oBAACD,YAAgB,OAAjB;KAEE,QACE,oBAAC,QAAD;MACE,SAAS,OAAO,UAAU,UAAU;MACpC,MAAM,OAAO,cAAc,gBAAgB;MAC3C,MAAK;MACL,SAAS,OAAO;MAChB,CAAA;eAGH,OAAO;KACc,EAXjB,EAWiB,CACxB;IACE,CAAA,CACgB;KACD,EAAA,CAAA,CACJ"}
@@ -0,0 +1,2 @@
1
+ declare const styles: Record<string, string | undefined>;
2
+ export default styles;
@@ -0,0 +1,14 @@
1
+ //#region src/alert-dialog/alert-dialog.module.css
2
+ var alert_dialog_module_default = {
3
+ "actions": "actions_xocxMW",
4
+ "backdrop": "backdrop_xocxMW",
5
+ "description": "description_xocxMW",
6
+ "header": "header_xocxMW",
7
+ "icon": "icon_xocxMW",
8
+ "popup": "popup_xocxMW",
9
+ "title": "title_xocxMW"
10
+ };
11
+ //#endregion
12
+ export { alert_dialog_module_default as default };
13
+
14
+ //# sourceMappingURL=alert-dialog.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-dialog.module.js","names":[],"sources":["../../src/alert-dialog/alert-dialog.module.css"],"sourcesContent":["@layer components {\n .backdrop {\n position: fixed;\n inset: 0;\n min-height: 100dvh;\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 @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 .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);\n width: min(380px, calc(100vw - var(--space-8)));\n outline: none;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n gap: var(--space-3);\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\n .header {\n display: flex;\n flex-direction: column;\n gap: var(--space-1-5);\n }\n\n .icon {\n margin-bottom: var(--space-1);\n }\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 }\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\n /* ─── Actions ─────────────────────────────────────────────────── */\n\n .actions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--space-2);\n padding-top: var(--space-1);\n }\n}\n"],"mappings":";AAcA,IAAA,8BAAY;CAAI,WAAU;CAAM,YAAA;CAAA,eAAA;CAAA,UAAA;CAAA,QAAA;CAAA,SAAA;CAAA,SAAA;CAAA"}
@@ -0,0 +1,3 @@
1
+ import { AlertAction, AlertDialog, AlertDialogProps, styles } from "./alert-dialog.js";
2
+ import { AlertDialogBackdrop, AlertDialogBackdropProps, AlertDialogDescription, AlertDialogDescriptionProps, AlertDialogPopup, AlertDialogPopupProps, AlertDialogTitle, AlertDialogTitleProps } from "./parts.js";
3
+ export { type AlertAction, AlertDialog, AlertDialogBackdrop, type AlertDialogBackdropProps, AlertDialogDescription, type AlertDialogDescriptionProps, AlertDialogPopup, type AlertDialogPopupProps, type AlertDialogProps, styles as AlertDialogStyles, AlertDialogTitle, type AlertDialogTitleProps };
@@ -0,0 +1,4 @@
1
+ import alert_dialog_module_default from "./alert-dialog.module.js";
2
+ import { AlertDialog } from "./alert-dialog.js";
3
+ import { AlertDialogBackdrop, AlertDialogDescription, AlertDialogPopup, AlertDialogTitle } from "./parts.js";
4
+ export { AlertDialog, AlertDialogBackdrop, AlertDialogDescription, AlertDialogPopup, alert_dialog_module_default as AlertDialogStyles, AlertDialogTitle };
@@ -0,0 +1,28 @@
1
+ import * as react from "react";
2
+ import { ComponentPropsWithoutRef } from "react";
3
+ import { AlertDialog } from "@base-ui/react/alert-dialog";
4
+
5
+ //#region src/alert-dialog/parts.d.ts
6
+ type BaseBackdropProps = ComponentPropsWithoutRef<typeof AlertDialog.Backdrop>;
7
+ type BasePopupProps = ComponentPropsWithoutRef<typeof AlertDialog.Popup>;
8
+ type BaseTitleProps = ComponentPropsWithoutRef<typeof AlertDialog.Title>;
9
+ type BaseDescriptionProps = ComponentPropsWithoutRef<typeof AlertDialog.Description>;
10
+ interface AlertDialogBackdropProps extends Omit<BaseBackdropProps, "className"> {
11
+ className?: string;
12
+ }
13
+ interface AlertDialogPopupProps extends Omit<BasePopupProps, "className"> {
14
+ className?: string;
15
+ }
16
+ interface AlertDialogTitleProps extends Omit<BaseTitleProps, "className"> {
17
+ className?: string;
18
+ }
19
+ interface AlertDialogDescriptionProps extends Omit<BaseDescriptionProps, "className"> {
20
+ className?: string;
21
+ }
22
+ declare const AlertDialogBackdrop: react.ForwardRefExoticComponent<AlertDialogBackdropProps & react.RefAttributes<HTMLDivElement>>;
23
+ declare const AlertDialogPopup: react.ForwardRefExoticComponent<AlertDialogPopupProps & react.RefAttributes<HTMLDivElement>>;
24
+ declare const AlertDialogTitle: react.ForwardRefExoticComponent<AlertDialogTitleProps & react.RefAttributes<HTMLHeadingElement>>;
25
+ declare const AlertDialogDescription: react.ForwardRefExoticComponent<AlertDialogDescriptionProps & react.RefAttributes<HTMLParagraphElement>>;
26
+ //#endregion
27
+ export { AlertDialogBackdrop, AlertDialogBackdropProps, AlertDialogDescription, AlertDialogDescriptionProps, AlertDialogPopup, AlertDialogPopupProps, AlertDialogTitle, AlertDialogTitleProps };
28
+ //# sourceMappingURL=parts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parts.d.ts","names":[],"sources":["../../src/alert-dialog/parts.tsx"],"mappings":";;;;;KA8BK,iBAAA,GAAoB,wBAAA,QAAgC,WAAA,CAAgB,QAAA;AAAA,KACpE,cAAA,GAAiB,wBAAA,QAAgC,WAAA,CAAgB,KAAA;AAAA,KACjE,cAAA,GAAiB,wBAAA,QAAgC,WAAA,CAAgB,KAAA;AAAA,KACjE,oBAAA,GAAuB,wBAAA,QAAgC,WAAA,CAAgB,WAAA;AAAA,UAE3D,wBAAA,SAAiC,IAAA,CAAK,iBAAA;EACrD,SAAA;AAAA;AAAA,UAEe,qBAAA,SAA8B,IAAA,CAAK,cAAA;EAClD,SAAA;AAAA;AAAA,UAEe,qBAAA,SAA8B,IAAA,CAAK,cAAA;EAClD,SAAA;AAAA;AAAA,UAEe,2BAAA,SAAoC,IAAA,CAAK,oBAAA;EACxD,SAAA;AAAA;AAAA,cAGW,mBAAA,EAAmB,KAAA,CAAA,yBAAA,CAAA,wBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,cAAA;AAAA,cAMnB,gBAAA,EAAgB,KAAA,CAAA,yBAAA,CAAA,qBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,cAAA;AAAA,cAOhB,gBAAA,EAAgB,KAAA,CAAA,yBAAA,CAAA,qBAAA,GAAA,KAAA,CAAA,aAAA,CAAA,kBAAA;AAAA,cAOhB,sBAAA,EAAsB,KAAA,CAAA,yBAAA,CAAA,2BAAA,GAAA,KAAA,CAAA,aAAA,CAAA,oBAAA"}
@@ -0,0 +1,62 @@
1
+ import alert_dialog_module_default from "./alert-dialog.module.js";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { forwardRef } from "react";
4
+ import { AlertDialog } from "@base-ui/react/alert-dialog";
5
+ //#region src/alert-dialog/parts.tsx
6
+ /**
7
+ * Styled primitives for AlertDialog.
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * import { AlertDialog as BaseAlertDialog } from '@base-ui/react/alert-dialog';
12
+ * import { Button } from '@brijbyte/agentic-ui/button';
13
+ * import { AlertDialogBackdrop, AlertDialogPopup, AlertDialogTitle, AlertDialogDescription } from '@brijbyte/agentic-ui/alert-dialog';
14
+ *
15
+ * <BaseAlertDialog.Root>
16
+ * <BaseAlertDialog.Trigger render={<button>Open</button>} />
17
+ * <BaseAlertDialog.Portal>
18
+ * <AlertDialogBackdrop />
19
+ * <AlertDialogPopup>
20
+ * <AlertDialogTitle>Delete account?</AlertDialogTitle>
21
+ * <AlertDialogDescription>This cannot be undone.</AlertDialogDescription>
22
+ * <div>
23
+ * <BaseAlertDialog.Close render={<Button variant="soft" tone="destructive" size="sm" />}>Delete</BaseAlertDialog.Close>
24
+ * <BaseAlertDialog.Close render={<Button variant="outline" size="sm" />}>Cancel</BaseAlertDialog.Close>
25
+ * </div>
26
+ * </AlertDialogPopup>
27
+ * </BaseAlertDialog.Portal>
28
+ * </BaseAlertDialog.Root>
29
+ * ```
30
+ */
31
+ const AlertDialogBackdrop = forwardRef(function AlertDialogBackdrop({ className, ...props }, ref) {
32
+ return /* @__PURE__ */ jsx(AlertDialog.Backdrop, {
33
+ ref,
34
+ className: `${alert_dialog_module_default.backdrop} ${className ?? ""}`,
35
+ ...props
36
+ });
37
+ });
38
+ const AlertDialogPopup = forwardRef(function AlertDialogPopup({ className, ...props }, ref) {
39
+ return /* @__PURE__ */ jsx(AlertDialog.Popup, {
40
+ ref,
41
+ className: `${alert_dialog_module_default.popup} ${className ?? ""}`,
42
+ ...props
43
+ });
44
+ });
45
+ const AlertDialogTitle = forwardRef(function AlertDialogTitle({ className, ...props }, ref) {
46
+ return /* @__PURE__ */ jsx(AlertDialog.Title, {
47
+ ref,
48
+ className: `${alert_dialog_module_default.title} ${className ?? ""}`,
49
+ ...props
50
+ });
51
+ });
52
+ const AlertDialogDescription = forwardRef(function AlertDialogDescription({ className, ...props }, ref) {
53
+ return /* @__PURE__ */ jsx(AlertDialog.Description, {
54
+ ref,
55
+ className: `${alert_dialog_module_default.description} ${className ?? ""}`,
56
+ ...props
57
+ });
58
+ });
59
+ //#endregion
60
+ export { AlertDialogBackdrop, AlertDialogDescription, AlertDialogPopup, AlertDialogTitle };
61
+
62
+ //# sourceMappingURL=parts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parts.js","names":["BaseAlertDialog","styles"],"sources":["../../src/alert-dialog/parts.tsx"],"sourcesContent":["/**\n * Styled primitives for AlertDialog.\n *\n * @example\n * ```tsx\n * import { AlertDialog as BaseAlertDialog } from '@base-ui/react/alert-dialog';\n * import { Button } from '@brijbyte/agentic-ui/button';\n * import { AlertDialogBackdrop, AlertDialogPopup, AlertDialogTitle, AlertDialogDescription } from '@brijbyte/agentic-ui/alert-dialog';\n *\n * <BaseAlertDialog.Root>\n * <BaseAlertDialog.Trigger render={<button>Open</button>} />\n * <BaseAlertDialog.Portal>\n * <AlertDialogBackdrop />\n * <AlertDialogPopup>\n * <AlertDialogTitle>Delete account?</AlertDialogTitle>\n * <AlertDialogDescription>This cannot be undone.</AlertDialogDescription>\n * <div>\n * <BaseAlertDialog.Close render={<Button variant=\"soft\" tone=\"destructive\" size=\"sm\" />}>Delete</BaseAlertDialog.Close>\n * <BaseAlertDialog.Close render={<Button variant=\"outline\" size=\"sm\" />}>Cancel</BaseAlertDialog.Close>\n * </div>\n * </AlertDialogPopup>\n * </BaseAlertDialog.Portal>\n * </BaseAlertDialog.Root>\n * ```\n */\nimport { forwardRef } from \"react\";\nimport type { ComponentRef, ComponentPropsWithoutRef } from \"react\";\nimport { AlertDialog as BaseAlertDialog } from \"@base-ui/react/alert-dialog\";\nimport styles from \"./alert-dialog.module.css\";\n\ntype BaseBackdropProps = ComponentPropsWithoutRef<typeof BaseAlertDialog.Backdrop>;\ntype BasePopupProps = ComponentPropsWithoutRef<typeof BaseAlertDialog.Popup>;\ntype BaseTitleProps = ComponentPropsWithoutRef<typeof BaseAlertDialog.Title>;\ntype BaseDescriptionProps = ComponentPropsWithoutRef<typeof BaseAlertDialog.Description>;\n\nexport interface AlertDialogBackdropProps extends Omit<BaseBackdropProps, \"className\"> {\n className?: string;\n}\nexport interface AlertDialogPopupProps extends Omit<BasePopupProps, \"className\"> {\n className?: string;\n}\nexport interface AlertDialogTitleProps extends Omit<BaseTitleProps, \"className\"> {\n className?: string;\n}\nexport interface AlertDialogDescriptionProps extends Omit<BaseDescriptionProps, \"className\"> {\n className?: string;\n}\n\nexport const AlertDialogBackdrop = forwardRef<ComponentRef<typeof BaseAlertDialog.Backdrop>, AlertDialogBackdropProps>(\n function AlertDialogBackdrop({ className, ...props }, ref) {\n return <BaseAlertDialog.Backdrop ref={ref} className={`${styles.backdrop} ${className ?? \"\"}`} {...props} />;\n },\n);\n\nexport const AlertDialogPopup = forwardRef<ComponentRef<typeof BaseAlertDialog.Popup>, AlertDialogPopupProps>(function AlertDialogPopup(\n { className, ...props },\n ref,\n) {\n return <BaseAlertDialog.Popup ref={ref} className={`${styles.popup} ${className ?? \"\"}`} {...props} />;\n});\n\nexport const AlertDialogTitle = forwardRef<ComponentRef<typeof BaseAlertDialog.Title>, AlertDialogTitleProps>(function AlertDialogTitle(\n { className, ...props },\n ref,\n) {\n return <BaseAlertDialog.Title ref={ref} className={`${styles.title} ${className ?? \"\"}`} {...props} />;\n});\n\nexport const AlertDialogDescription = forwardRef<ComponentRef<typeof BaseAlertDialog.Description>, AlertDialogDescriptionProps>(\n function AlertDialogDescription({ className, ...props }, ref) {\n return <BaseAlertDialog.Description ref={ref} className={`${styles.description} ${className ?? \"\"}`} {...props} />;\n },\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDA,MAAa,sBAAsB,WACjC,SAAS,oBAAoB,EAAE,WAAW,GAAG,SAAS,KAAK;AACzD,QAAO,oBAACA,YAAgB,UAAjB;EAA+B;EAAK,WAAW,GAAGC,4BAAO,SAAS,GAAG,aAAa;EAAM,GAAI;EAAS,CAAA;EAE/G;AAED,MAAa,mBAAmB,WAA8E,SAAS,iBACrH,EAAE,WAAW,GAAG,SAChB,KACA;AACA,QAAO,oBAACD,YAAgB,OAAjB;EAA4B;EAAK,WAAW,GAAGC,4BAAO,MAAM,GAAG,aAAa;EAAM,GAAI;EAAS,CAAA;EACtG;AAEF,MAAa,mBAAmB,WAA8E,SAAS,iBACrH,EAAE,WAAW,GAAG,SAChB,KACA;AACA,QAAO,oBAACD,YAAgB,OAAjB;EAA4B;EAAK,WAAW,GAAGC,4BAAO,MAAM,GAAG,aAAa;EAAM,GAAI;EAAS,CAAA;EACtG;AAEF,MAAa,yBAAyB,WACpC,SAAS,uBAAuB,EAAE,WAAW,GAAG,SAAS,KAAK;AAC5D,QAAO,oBAACD,YAAgB,aAAjB;EAAkC;EAAK,WAAW,GAAGC,4BAAO,YAAY,GAAG,aAAa;EAAM,GAAI;EAAS,CAAA;EAErH"}
@@ -1,5 +1,3 @@
1
- @layer theme, base;
2
-
3
1
  @layer components {
4
2
  .root_fRZpDq {
5
3
  align-items: center;
@@ -18,14 +16,14 @@
18
16
 
19
17
  .variant-default_fRZpDq {
20
18
  background-color: var(--color-surface-3);
21
- border-color: var(--color-border-base);
22
- color: var(--color-text-secondary);
19
+ border-color: var(--color-line);
20
+ color: var(--color-secondary);
23
21
  }
24
22
 
25
23
  .variant-solid_fRZpDq {
26
24
  background-color: var(--color-accent);
27
25
  border-color: var(--color-accent);
28
- color: var(--color-text-on-accent);
26
+ color: var(--color-on-accent);
29
27
  }
30
28
 
31
29
  .variant-soft_fRZpDq {
@@ -66,5 +64,3 @@
66
64
  height: 5px;
67
65
  }
68
66
  }
69
-
70
- @layer utilities;
@@ -1,5 +1,5 @@
1
- import { ComponentPropsWithoutRef } from "react";
2
1
  import * as react_jsx_runtime0 from "react/jsx-runtime";
2
+ import { ComponentPropsWithoutRef } from "react";
3
3
  import styles from "./badge.module.css";
4
4
 
5
5
  //#region src/badge/badge.d.ts
@@ -1 +1 @@
1
- {"version":3,"file":"badge.module.js","names":[],"sources":["../../src/badge/badge.module.css"],"sourcesContent":["@layer theme, base, components, utilities;\n\n@layer components {\n .root {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n font-family: var(--font-mono);\n font-size: var(--font-size-xs);\n font-weight: var(--font-weight-medium);\n letter-spacing: var(--letter-spacing-wide);\n line-height: 1;\n border-radius: var(--radius-sm);\n border: var(--border-width-base) solid transparent;\n padding: 2px var(--space-1-5);\n white-space: nowrap;\n }\n\n /* Variants */\n .variant-default {\n background-color: var(--color-surface-3);\n border-color: var(--color-border-base);\n color: var(--color-text-secondary);\n }\n\n .variant-solid {\n background-color: var(--color-accent);\n border-color: var(--color-accent);\n color: var(--color-text-on-accent);\n }\n\n .variant-soft {\n background-color: var(--color-accent-tint);\n border-color: var(--color-accent-tint-hover);\n color: var(--color-accent);\n }\n\n .variant-success {\n background-color: var(--color-success-bg);\n border-color: var(--color-success-border);\n color: var(--color-success-text);\n }\n\n .variant-warning {\n background-color: var(--color-warning-bg);\n border-color: var(--color-warning-border);\n color: var(--color-warning-text);\n }\n\n .variant-error {\n background-color: var(--color-error-bg);\n border-color: var(--color-error-border);\n color: var(--color-error-text);\n }\n\n .variant-info {\n background-color: var(--color-info-bg);\n border-color: var(--color-info-border);\n color: var(--color-info-text);\n }\n\n /* Dot indicator */\n .dot {\n width: 5px;\n height: 5px;\n border-radius: var(--radius-full);\n background-color: currentColor;\n flex-shrink: 0;\n }\n}\n"],"mappings":";AAkBA,IAAA,uBAAe;CAAA,OAAA;CAAA,QAAA;CAAA,mBAAA;CAAA,iBAAA;CAAA,gBAAA;CAAA,gBAAA;CAAA,iBAAA;CAAA,mBAAA;CAAA,mBAAA;CAAA"}
1
+ {"version":3,"file":"badge.module.js","names":[],"sources":["../../src/badge/badge.module.css"],"sourcesContent":["@layer components {\n .root {\n display: inline-flex;\n align-items: center;\n gap: var(--space-1);\n font-family: var(--font-mono);\n font-size: var(--font-size-xs);\n font-weight: var(--font-weight-medium);\n letter-spacing: var(--letter-spacing-wide);\n line-height: 1;\n border-radius: var(--radius-sm);\n border: var(--border-width-base) solid transparent;\n padding: 2px var(--space-1-5);\n white-space: nowrap;\n }\n /* Variants */\n .variant-default {\n background-color: var(--color-surface-3);\n border-color: var(--color-line);\n color: var(--color-secondary);\n }\n .variant-solid {\n background-color: var(--color-accent);\n border-color: var(--color-accent);\n color: var(--color-on-accent);\n }\n .variant-soft {\n background-color: var(--color-accent-tint);\n border-color: var(--color-accent-tint-hover);\n color: var(--color-accent);\n }\n .variant-success {\n background-color: var(--color-success-bg);\n border-color: var(--color-success-border);\n color: var(--color-success-text);\n }\n .variant-warning {\n background-color: var(--color-warning-bg);\n border-color: var(--color-warning-border);\n color: var(--color-warning-text);\n }\n .variant-error {\n background-color: var(--color-error-bg);\n border-color: var(--color-error-border);\n color: var(--color-error-text);\n }\n .variant-info {\n background-color: var(--color-info-bg);\n border-color: var(--color-info-border);\n color: var(--color-info-text);\n }\n /* Dot indicator */\n .dot {\n width: 5px;\n height: 5px;\n border-radius: var(--radius-full);\n background-color: currentColor;\n flex-shrink: 0;\n }\n}\n"],"mappings":";AAkBA,IAAA,uBAAW;CAAK,OAAM;CAAa,QAAA;CAAA,mBAAA;CAAA,iBAAA;CAAA,gBAAA;CAAA,gBAAA;CAAA,iBAAA;CAAA,mBAAA;CAAA,mBAAA;CAAA"}
@@ -86,48 +86,53 @@
86
86
  }
87
87
 
88
88
  .tone-primary_4j5AgW {
89
- --btn-color: var(--color-accent);
89
+ --btn-color: var(--color-accent-solid);
90
90
  --btn-color-hover: var(--color-accent-hover);
91
91
  --btn-color-pressed: var(--color-accent-pressed);
92
+ --btn-text-color: var(--color-accent-text);
92
93
  --btn-tint: var(--color-accent-tint);
93
94
  --btn-tint-hover: var(--color-accent-tint-hover);
94
- --btn-on-color: var(--color-text-on-accent);
95
+ --btn-on-color: var(--color-on-accent);
95
96
  }
96
97
 
97
98
  .tone-secondary_4j5AgW {
98
- --btn-color: var(--color-text-secondary);
99
- --btn-color-hover: var(--color-text-primary);
100
- --btn-color-pressed: var(--color-text-primary);
101
- --btn-tint: var(--color-surface-hover);
102
- --btn-tint-hover: var(--color-surface-active);
103
- --btn-on-color: var(--color-bg-base);
99
+ --btn-color: var(--color-secondary);
100
+ --btn-color-hover: var(--color-primary);
101
+ --btn-color-pressed: var(--color-primary);
102
+ --btn-text-color: var(--color-secondary);
103
+ --btn-tint: var(--color-hover);
104
+ --btn-tint-hover: var(--color-active);
105
+ --btn-on-color: var(--color-canvas);
104
106
  }
105
107
 
106
108
  .tone-destructive_4j5AgW {
107
109
  --btn-color: var(--color-error-solid);
108
110
  --btn-color-hover: var(--color-error-solid);
109
111
  --btn-color-pressed: var(--color-error-solid);
112
+ --btn-text-color: var(--color-error-text);
110
113
  --btn-tint: var(--color-error-bg);
111
114
  --btn-tint-hover: var(--color-error-bg);
112
- --btn-on-color: #fff;
115
+ --btn-on-color: var(--color-error-on-solid);
113
116
  }
114
117
 
115
118
  .tone-success_4j5AgW {
116
119
  --btn-color: var(--color-success-solid);
117
120
  --btn-color-hover: var(--color-success-solid);
118
121
  --btn-color-pressed: var(--color-success-solid);
122
+ --btn-text-color: var(--color-success-text);
119
123
  --btn-tint: var(--color-success-bg);
120
124
  --btn-tint-hover: var(--color-success-bg);
121
- --btn-on-color: #fff;
125
+ --btn-on-color: var(--color-success-on-solid);
122
126
  }
123
127
 
124
128
  .tone-warning_4j5AgW {
125
129
  --btn-color: var(--color-warning-solid);
126
130
  --btn-color-hover: var(--color-warning-solid);
127
131
  --btn-color-pressed: var(--color-warning-solid);
132
+ --btn-text-color: var(--color-warning-text);
128
133
  --btn-tint: var(--color-warning-bg);
129
134
  --btn-tint-hover: var(--color-warning-bg);
130
- --btn-on-color: #fff;
135
+ --btn-on-color: var(--color-warning-on-solid);
131
136
  }
132
137
 
133
138
  .variant-solid_4j5AgW {
@@ -162,7 +167,7 @@
162
167
 
163
168
  .variant-soft_4j5AgW {
164
169
  background-color: var(--btn-tint);
165
- color: var(--btn-color);
170
+ color: var(--btn-text-color);
166
171
  border-color: #0000;
167
172
  }
168
173
 
@@ -176,34 +181,43 @@
176
181
  }
177
182
 
178
183
  .variant-outline_4j5AgW {
179
- border-color: var(--color-border-strong);
180
- color: var(--color-text-primary);
184
+ border-color: var(--color-line-strong);
185
+ color: var(--color-primary);
181
186
  background-color: #0000;
182
187
  }
183
188
 
189
+ .variant-outline_4j5AgW:not(.tone-secondary_4j5AgW) {
190
+ border-color: var(--btn-text-color);
191
+ color: var(--btn-text-color);
192
+ }
193
+
184
194
  .variant-outline_4j5AgW:hover:not([data-disabled]) {
185
- background-color: var(--color-surface-hover);
186
- border-color: var(--btn-color);
187
- color: var(--btn-color);
195
+ background-color: var(--color-hover);
196
+ border-color: var(--btn-text-color);
197
+ color: var(--btn-text-color);
188
198
  }
189
199
 
190
200
  .variant-outline_4j5AgW:active:not([data-disabled]), .variant-outline_4j5AgW[data-pressed]:not([data-disabled]) {
191
- background-color: var(--color-surface-active);
201
+ background-color: var(--color-active);
192
202
  }
193
203
 
194
204
  .variant-ghost_4j5AgW {
195
- color: var(--color-text-secondary);
205
+ color: var(--color-secondary);
196
206
  background-color: #0000;
197
207
  border-color: #0000;
198
208
  }
199
209
 
210
+ .variant-ghost_4j5AgW:not(.tone-secondary_4j5AgW) {
211
+ color: var(--btn-text-color);
212
+ }
213
+
200
214
  .variant-ghost_4j5AgW:hover:not([data-disabled]) {
201
- background-color: var(--color-surface-hover);
202
- color: var(--btn-color);
215
+ background-color: var(--color-hover);
216
+ color: var(--btn-text-color);
203
217
  }
204
218
 
205
219
  .variant-ghost_4j5AgW:active:not([data-disabled]), .variant-ghost_4j5AgW[data-pressed]:not([data-disabled]) {
206
- background-color: var(--color-surface-active);
220
+ background-color: var(--color-active);
207
221
  }
208
222
 
209
223
  .loader_4j5AgW {
@@ -9,18 +9,18 @@ type ButtonSize = "xs" | "sm" | "md" | "lg";
9
9
  interface ButtonProps extends ComponentPropsWithoutRef<"button"> {
10
10
  variant?: ButtonVariant;
11
11
  /** Semantic color. Defaults to "primary". */
12
- tone?: ButtonTone;
13
- size?: ButtonSize;
14
- loading?: boolean;
12
+ tone?: ButtonTone | undefined;
13
+ size?: ButtonSize | undefined;
14
+ loading?: boolean | undefined;
15
15
  /**
16
16
  * Text shown in place of children while loading.
17
17
  * When provided the button width adapts to this text (variable width).
18
18
  * When omitted, children stay rendered invisibly — width stays stable.
19
19
  */
20
- loadingText?: string;
21
- iconOnly?: boolean;
22
- render?: ReactElement;
23
- nativeButton?: boolean;
20
+ loadingText?: string | undefined;
21
+ iconOnly?: boolean | undefined;
22
+ render?: ReactElement | undefined;
23
+ nativeButton?: boolean | undefined;
24
24
  }
25
25
  declare const Button: react.ForwardRefExoticComponent<ButtonProps & react.RefAttributes<HTMLButtonElement>>;
26
26
  //#endregion
@@ -1,7 +1,7 @@
1
1
  import button_module_default from "./button.module.js";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
2
3
  import { forwardRef } from "react";
3
4
  import { Button } from "@base-ui/react/button";
4
- import { jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region src/button/button.tsx
6
6
  const Button$1 = forwardRef(function Button$2({ variant = "solid", tone = "primary", size = "md", loading = false, loadingText, iconOnly = false, nativeButton = true, disabled, className, children, render, ...props }, ref) {
7
7
  return /* @__PURE__ */ jsxs(Button, {
@@ -1 +1 @@
1
- {"version":3,"file":"button.js","names":["Button","BaseButton","styles"],"sources":["../../src/button/button.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ReactElement } from \"react\";\nimport { Button as BaseButton } from \"@base-ui/react/button\";\nimport styles from \"./button.module.css\";\n\nexport type ButtonVariant = \"solid\" | \"soft\" | \"outline\" | \"ghost\";\nexport type ButtonTone = \"primary\" | \"secondary\" | \"destructive\" | \"success\" | \"warning\";\nexport type ButtonSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends ComponentPropsWithoutRef<\"button\"> {\n variant?: ButtonVariant;\n /** Semantic color. Defaults to \"primary\". */\n tone?: ButtonTone;\n size?: ButtonSize;\n loading?: boolean;\n /**\n * Text shown in place of children while loading.\n * When provided the button width adapts to this text (variable width).\n * When omitted, children stay rendered invisibly — width stays stable.\n */\n loadingText?: string;\n iconOnly?: boolean;\n render?: ReactElement;\n nativeButton?: boolean;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = \"solid\",\n tone = \"primary\",\n size = \"md\",\n loading = false,\n loadingText,\n iconOnly = false,\n nativeButton = true,\n disabled,\n className,\n children,\n render,\n ...props\n },\n ref,\n) {\n const classes = [\n styles.root,\n styles[`variant-${variant}`],\n styles[`tone-${tone}`],\n styles[`size-${size}`],\n iconOnly ? styles[\"icon-only\"] : \"\",\n className ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <BaseButton ref={ref} className={classes} disabled={disabled ?? loading} render={render} nativeButton={nativeButton} {...props}>\n <span className={`${styles.loader} ${loading && !loadingText ? styles[\"loader-visible\"] : \"\"}`} aria-hidden=\"true\">\n <span className={styles.spinner} />\n </span>\n <span className={loading && !loadingText ? styles[\"content-loading\"] : undefined}>\n {loading && loadingText ? loadingText : children}\n </span>\n </BaseButton>\n );\n});\n\nexport { styles as ButtonStyles };\n"],"mappings":";;;;;AA0BA,MAAaA,WAAS,WAA2C,SAASA,SACxE,EACE,UAAU,SACV,OAAO,WACP,OAAO,MACP,UAAU,OACV,aACA,WAAW,OACX,eAAe,MACf,UACA,WACA,UACA,QACA,GAAG,SAEL,KACA;AAYA,QACE,qBAACC,QAAD;EAAiB;EAAK,WAZR;GACdC,sBAAO;GACPA,sBAAO,WAAW;GAClBA,sBAAO,QAAQ;GACfA,sBAAO,QAAQ;GACf,WAAWA,sBAAO,eAAe;GACjC,aAAa;GACd,CACE,OAAO,QAAQ,CACf,KAAK,IAAI;EAGgC,UAAU,YAAY;EAAiB;EAAsB;EAAc,GAAI;YAAzH,CACE,oBAAC,QAAD;GAAM,WAAW,GAAGA,sBAAO,OAAO,GAAG,WAAW,CAAC,cAAcA,sBAAO,oBAAoB;GAAM,eAAY;aAC1G,oBAAC,QAAD,EAAM,WAAWA,sBAAO,SAAW,CAAA;GAC9B,CAAA,EACP,oBAAC,QAAD;GAAM,WAAW,WAAW,CAAC,cAAcA,sBAAO,qBAAqB,KAAA;aACpE,WAAW,cAAc,cAAc;GACnC,CAAA,CACI;;EAEf"}
1
+ {"version":3,"file":"button.js","names":["Button","BaseButton","styles"],"sources":["../../src/button/button.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ReactElement } from \"react\";\nimport { Button as BaseButton } from \"@base-ui/react/button\";\nimport styles from \"./button.module.css\";\n\nexport type ButtonVariant = \"solid\" | \"soft\" | \"outline\" | \"ghost\";\nexport type ButtonTone = \"primary\" | \"secondary\" | \"destructive\" | \"success\" | \"warning\";\nexport type ButtonSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends ComponentPropsWithoutRef<\"button\"> {\n variant?: ButtonVariant;\n /** Semantic color. Defaults to \"primary\". */\n tone?: ButtonTone | undefined;\n size?: ButtonSize | undefined;\n loading?: boolean | undefined;\n /**\n * Text shown in place of children while loading.\n * When provided the button width adapts to this text (variable width).\n * When omitted, children stay rendered invisibly — width stays stable.\n */\n loadingText?: string | undefined;\n iconOnly?: boolean | undefined;\n render?: ReactElement | undefined;\n nativeButton?: boolean | undefined;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = \"solid\",\n tone = \"primary\",\n size = \"md\",\n loading = false,\n loadingText,\n iconOnly = false,\n nativeButton = true,\n disabled,\n className,\n children,\n render,\n ...props\n },\n ref,\n) {\n const classes = [\n styles.root,\n styles[`variant-${variant}`],\n styles[`tone-${tone}`],\n styles[`size-${size}`],\n iconOnly ? styles[\"icon-only\"] : \"\",\n className ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <BaseButton ref={ref} className={classes} disabled={disabled ?? loading} render={render} nativeButton={nativeButton} {...props}>\n <span className={`${styles.loader} ${loading && !loadingText ? styles[\"loader-visible\"] : \"\"}`} aria-hidden=\"true\">\n <span className={styles.spinner} />\n </span>\n <span className={loading && !loadingText ? styles[\"content-loading\"] : undefined}>\n {loading && loadingText ? loadingText : children}\n </span>\n </BaseButton>\n );\n});\n\nexport { styles as ButtonStyles };\n"],"mappings":";;;;;AA0BA,MAAaA,WAAS,WAA2C,SAASA,SACxE,EACE,UAAU,SACV,OAAO,WACP,OAAO,MACP,UAAU,OACV,aACA,WAAW,OACX,eAAe,MACf,UACA,WACA,UACA,QACA,GAAG,SAEL,KACA;AAYA,QACE,qBAACC,QAAD;EAAiB;EAAK,WAZR;GACdC,sBAAO;GACPA,sBAAO,WAAW;GAClBA,sBAAO,QAAQ;GACfA,sBAAO,QAAQ;GACf,WAAWA,sBAAO,eAAe;GACjC,aAAa;GACd,CACE,OAAO,QAAQ,CACf,KAAK,IAAI;EAGgC,UAAU,YAAY;EAAiB;EAAsB;EAAc,GAAI;YAAzH,CACE,oBAAC,QAAD;GAAM,WAAW,GAAGA,sBAAO,OAAO,GAAG,WAAW,CAAC,cAAcA,sBAAO,oBAAoB;GAAM,eAAY;aAC1G,oBAAC,QAAD,EAAM,WAAWA,sBAAO,SAAW,CAAA;GAC9B,CAAA,EACP,oBAAC,QAAD;GAAM,WAAW,WAAW,CAAC,cAAcA,sBAAO,qBAAqB,KAAA;aACpE,WAAW,cAAc,cAAc;GACnC,CAAA,CACI;;EAEf"}
@@ -1 +1 @@
1
- {"version":3,"file":"button.module.js","names":[],"sources":["../../src/button/button.module.css"],"sourcesContent":["@layer components {\n .root {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-1-5);\n font-family: var(--font-mono);\n font-size: var(--font-size-sm);\n font-weight: var(--font-weight-medium);\n letter-spacing: var(--letter-spacing-normal);\n line-height: 1;\n border-radius: var(--radius-md);\n border: var(--border-width-base) solid transparent;\n cursor: pointer;\n user-select: none;\n text-decoration: none;\n white-space: nowrap;\n transition:\n background-color var(--duration-fast) var(--easing-standard),\n border-color var(--duration-fast) var(--easing-standard),\n color var(--duration-fast) var(--easing-standard),\n box-shadow var(--duration-fast) var(--easing-standard),\n opacity var(--duration-fast) var(--easing-standard),\n transform 100ms var(--easing-ease-out);\n outline: none;\n position: relative;\n }\n\n .root:active:not([data-disabled]) {\n transform: scale(0.97);\n }\n\n .root:focus-visible {\n box-shadow: var(--shadow-focus);\n }\n\n .root[data-disabled] {\n cursor: not-allowed;\n opacity: 0.44;\n pointer-events: none;\n }\n\n /* ─── Sizes ──────────────────────────────────────────────────────── */\n\n .size-xs {\n height: 22px;\n padding-inline: var(--space-2);\n font-size: var(--font-size-xs);\n border-radius: var(--radius-sm);\n }\n\n .size-sm {\n height: 26px;\n padding-inline: var(--space-2-5);\n font-size: var(--font-size-sm);\n }\n\n .size-md {\n height: 30px;\n padding-inline: var(--space-3);\n font-size: var(--font-size-md);\n }\n\n .size-lg {\n height: 36px;\n padding-inline: var(--space-4);\n font-size: var(--font-size-lg);\n border-radius: var(--radius-lg);\n }\n\n /* Icon-only */\n .icon-only.size-xs {\n width: 22px;\n padding-inline: 0;\n }\n .icon-only.size-sm {\n width: 26px;\n padding-inline: 0;\n }\n .icon-only.size-md {\n width: 30px;\n padding-inline: 0;\n }\n .icon-only.size-lg {\n width: 36px;\n padding-inline: 0;\n }\n\n /* ─── Tones — set scoped color tokens ────────────────────────────── */\n /*\n * Each tone exposes four custom properties consumed by the variants below:\n * --btn-color solid bg / soft text / outline+ghost hover text\n * --btn-color-hover solid bg hover\n * --btn-color-pressed solid bg pressed\n * --btn-tint soft bg\n * --btn-tint-hover soft bg hover\n * --btn-on-color text on solid bg\n */\n\n .tone-primary {\n --btn-color: var(--color-accent);\n --btn-color-hover: var(--color-accent-hover);\n --btn-color-pressed: var(--color-accent-pressed);\n --btn-tint: var(--color-accent-tint);\n --btn-tint-hover: var(--color-accent-tint-hover);\n --btn-on-color: var(--color-text-on-accent);\n }\n\n .tone-secondary {\n --btn-color: var(--color-text-secondary);\n --btn-color-hover: var(--color-text-primary);\n --btn-color-pressed: var(--color-text-primary);\n --btn-tint: var(--color-surface-hover);\n --btn-tint-hover: var(--color-surface-active);\n --btn-on-color: var(--color-bg-base);\n }\n\n .tone-destructive {\n --btn-color: var(--color-error-solid);\n --btn-color-hover: var(--color-error-solid);\n --btn-color-pressed: var(--color-error-solid);\n --btn-tint: var(--color-error-bg);\n --btn-tint-hover: var(--color-error-bg);\n --btn-on-color: #ffffff;\n }\n\n .tone-success {\n --btn-color: var(--color-success-solid);\n --btn-color-hover: var(--color-success-solid);\n --btn-color-pressed: var(--color-success-solid);\n --btn-tint: var(--color-success-bg);\n --btn-tint-hover: var(--color-success-bg);\n --btn-on-color: #ffffff;\n }\n\n .tone-warning {\n --btn-color: var(--color-warning-solid);\n --btn-color-hover: var(--color-warning-solid);\n --btn-color-pressed: var(--color-warning-solid);\n --btn-tint: var(--color-warning-bg);\n --btn-tint-hover: var(--color-warning-bg);\n --btn-on-color: #ffffff;\n }\n\n /* ─── Variants — consume tone tokens ────────────────────────────── */\n\n .variant-solid {\n background-color: var(--btn-color);\n border-color: var(--btn-color);\n color: var(--btn-on-color);\n }\n\n .variant-solid:hover:not([data-disabled]) {\n background-color: var(--btn-color-hover);\n border-color: var(--btn-color-hover);\n filter: brightness(0.92);\n }\n\n .variant-solid:active:not([data-disabled]),\n .variant-solid[data-pressed]:not([data-disabled]) {\n background-color: var(--btn-color-pressed);\n border-color: var(--btn-color-pressed);\n filter: brightness(0.84);\n }\n\n /* primary solid gets its own hover tokens instead of filter */\n .variant-solid.tone-primary:hover:not([data-disabled]) {\n background-color: var(--btn-color-hover);\n border-color: var(--btn-color-hover);\n filter: none;\n }\n\n .variant-solid.tone-primary:active:not([data-disabled]),\n .variant-solid.tone-primary[data-pressed]:not([data-disabled]) {\n background-color: var(--btn-color-pressed);\n border-color: var(--btn-color-pressed);\n filter: none;\n }\n\n .variant-soft {\n background-color: var(--btn-tint);\n border-color: transparent;\n color: var(--btn-color);\n }\n\n .variant-soft:hover:not([data-disabled]) {\n background-color: var(--btn-tint-hover);\n }\n\n .variant-soft:active:not([data-disabled]),\n .variant-soft[data-pressed]:not([data-disabled]) {\n background-color: var(--btn-tint-hover);\n filter: brightness(0.95);\n }\n\n .variant-outline {\n background-color: transparent;\n border-color: var(--color-border-strong);\n color: var(--color-text-primary);\n }\n\n .variant-outline:hover:not([data-disabled]) {\n background-color: var(--color-surface-hover);\n border-color: var(--btn-color);\n color: var(--btn-color);\n }\n\n .variant-outline:active:not([data-disabled]),\n .variant-outline[data-pressed]:not([data-disabled]) {\n background-color: var(--color-surface-active);\n }\n\n .variant-ghost {\n background-color: transparent;\n border-color: transparent;\n color: var(--color-text-secondary);\n }\n\n .variant-ghost:hover:not([data-disabled]) {\n background-color: var(--color-surface-hover);\n color: var(--btn-color);\n }\n\n .variant-ghost:active:not([data-disabled]),\n .variant-ghost[data-pressed]:not([data-disabled]) {\n background-color: var(--color-surface-active);\n }\n\n /* ─── Loader ─────────────────────────────────────────────────────── */\n\n /* Always in the DOM, always position:absolute so it never affects layout */\n .loader {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n pointer-events: none;\n }\n\n .loader-visible {\n opacity: 1;\n }\n\n .content-loading {\n visibility: hidden;\n }\n\n @keyframes spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n .spinner {\n width: 12px;\n height: 12px;\n border: 1.5px solid currentColor;\n border-top-color: transparent;\n border-radius: 50%;\n animation: spin 0.6s linear infinite;\n opacity: 0.7;\n }\n}\n"],"mappings":";AAwCA,IAAA,wBAAE;CAAA,mBAAA;CAAA,aAAA;CAAA,UAAA;CAAA,kBAAA;CAAA,QAAA;CAAA,WAAA;CAAA,WAAA;CAAA,WAAA;CAAA,WAAA;CAAA,QAAA;CAAA,WAAA;CAAA,oBAAA;CAAA,gBAAA;CAAA,kBAAA;CAAA,gBAAA;CAAA,gBAAA;CAAA,iBAAA;CAAA,mBAAA;CAAA,gBAAA;CAAA,iBAAA;CAAA"}
1
+ {"version":3,"file":"button.module.js","names":[],"sources":["../../src/button/button.module.css"],"sourcesContent":["@layer components {\n .root {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--space-1-5);\n font-family: var(--font-mono);\n font-size: var(--font-size-sm);\n font-weight: var(--font-weight-medium);\n letter-spacing: var(--letter-spacing-normal);\n line-height: 1;\n border-radius: var(--radius-md);\n border: var(--border-width-base) solid transparent;\n cursor: pointer;\n user-select: none;\n text-decoration: none;\n white-space: nowrap;\n transition:\n background-color var(--duration-fast) var(--easing-standard),\n border-color var(--duration-fast) var(--easing-standard),\n color var(--duration-fast) var(--easing-standard),\n box-shadow var(--duration-fast) var(--easing-standard),\n opacity var(--duration-fast) var(--easing-standard),\n transform 100ms var(--easing-ease-out);\n outline: none;\n position: relative;\n }\n .root:active:not([data-disabled]) {\n transform: scale(0.97);\n }\n .root:focus-visible {\n box-shadow: var(--shadow-focus);\n }\n .root[data-disabled] {\n cursor: not-allowed;\n opacity: 0.44;\n pointer-events: none;\n }\n /* ─── Sizes ──────────────────────────────────────────────────────── */\n .size-xs {\n height: 22px;\n padding-inline: var(--space-2);\n font-size: var(--font-size-xs);\n border-radius: var(--radius-sm);\n }\n .size-sm {\n height: 26px;\n padding-inline: var(--space-2-5);\n font-size: var(--font-size-sm);\n }\n .size-md {\n height: 30px;\n padding-inline: var(--space-3);\n font-size: var(--font-size-md);\n }\n .size-lg {\n height: 36px;\n padding-inline: var(--space-4);\n font-size: var(--font-size-lg);\n border-radius: var(--radius-lg);\n }\n /* Icon-only */\n .icon-only.size-xs {\n width: 22px;\n padding-inline: 0;\n }\n .icon-only.size-sm {\n width: 26px;\n padding-inline: 0;\n }\n .icon-only.size-md {\n width: 30px;\n padding-inline: 0;\n }\n .icon-only.size-lg {\n width: 36px;\n padding-inline: 0;\n }\n /* ─── Tones — set scoped color tokens ────────────────────────────── */\n /*\n * Each tone exposes scoped custom properties consumed by the variants below:\n * --btn-color solid bg color\n * --btn-color-hover solid bg on hover\n * --btn-color-pressed solid bg on press\n * --btn-text-color text color for soft / outline / ghost variants\n * (may differ from --btn-color for contrast on tinted surfaces)\n * --btn-tint soft bg\n * --btn-tint-hover soft bg on hover\n * --btn-on-color text on solid bg\n */\n .tone-primary {\n --btn-color: var(--color-accent-solid);\n --btn-color-hover: var(--color-accent-hover);\n --btn-color-pressed: var(--color-accent-pressed);\n --btn-text-color: var(--color-accent-text);\n --btn-tint: var(--color-accent-tint);\n --btn-tint-hover: var(--color-accent-tint-hover);\n --btn-on-color: var(--color-on-accent);\n }\n .tone-secondary {\n --btn-color: var(--color-secondary);\n --btn-color-hover: var(--color-primary);\n --btn-color-pressed: var(--color-primary);\n --btn-text-color: var(--color-secondary);\n --btn-tint: var(--color-hover);\n --btn-tint-hover: var(--color-active);\n --btn-on-color: var(--color-canvas);\n }\n .tone-destructive {\n --btn-color: var(--color-error-solid);\n --btn-color-hover: var(--color-error-solid);\n --btn-color-pressed: var(--color-error-solid);\n --btn-text-color: var(--color-error-text);\n --btn-tint: var(--color-error-bg);\n --btn-tint-hover: var(--color-error-bg);\n --btn-on-color: var(--color-error-on-solid);\n }\n .tone-success {\n --btn-color: var(--color-success-solid);\n --btn-color-hover: var(--color-success-solid);\n --btn-color-pressed: var(--color-success-solid);\n --btn-text-color: var(--color-success-text);\n --btn-tint: var(--color-success-bg);\n --btn-tint-hover: var(--color-success-bg);\n --btn-on-color: var(--color-success-on-solid);\n }\n .tone-warning {\n --btn-color: var(--color-warning-solid);\n --btn-color-hover: var(--color-warning-solid);\n --btn-color-pressed: var(--color-warning-solid);\n --btn-text-color: var(--color-warning-text);\n --btn-tint: var(--color-warning-bg);\n --btn-tint-hover: var(--color-warning-bg);\n --btn-on-color: var(--color-warning-on-solid);\n }\n /* ─── Variants — consume tone tokens ────────────────────────────── */\n .variant-solid {\n background-color: var(--btn-color);\n border-color: var(--btn-color);\n color: var(--btn-on-color);\n }\n .variant-solid:hover:not([data-disabled]) {\n background-color: var(--btn-color-hover);\n border-color: var(--btn-color-hover);\n filter: brightness(0.92);\n }\n .variant-solid:active:not([data-disabled]),\n .variant-solid[data-pressed]:not([data-disabled]) {\n background-color: var(--btn-color-pressed);\n border-color: var(--btn-color-pressed);\n filter: brightness(0.84);\n }\n /* primary solid gets its own hover tokens instead of filter */\n .variant-solid.tone-primary:hover:not([data-disabled]) {\n background-color: var(--btn-color-hover);\n border-color: var(--btn-color-hover);\n filter: none;\n }\n .variant-solid.tone-primary:active:not([data-disabled]),\n .variant-solid.tone-primary[data-pressed]:not([data-disabled]) {\n background-color: var(--btn-color-pressed);\n border-color: var(--btn-color-pressed);\n filter: none;\n }\n .variant-soft {\n background-color: var(--btn-tint);\n border-color: transparent;\n color: var(--btn-text-color);\n }\n .variant-soft:hover:not([data-disabled]) {\n background-color: var(--btn-tint-hover);\n }\n .variant-soft:active:not([data-disabled]),\n .variant-soft[data-pressed]:not([data-disabled]) {\n background-color: var(--btn-tint-hover);\n filter: brightness(0.95);\n }\n .variant-outline {\n background-color: transparent;\n border-color: var(--color-line-strong);\n color: var(--color-primary);\n }\n /* Non-secondary tones show their tone color at rest */\n .variant-outline:not(.tone-secondary) {\n border-color: var(--btn-text-color);\n color: var(--btn-text-color);\n }\n .variant-outline:hover:not([data-disabled]) {\n background-color: var(--color-hover);\n border-color: var(--btn-text-color);\n color: var(--btn-text-color);\n }\n .variant-outline:active:not([data-disabled]),\n .variant-outline[data-pressed]:not([data-disabled]) {\n background-color: var(--color-active);\n }\n .variant-ghost {\n background-color: transparent;\n border-color: transparent;\n color: var(--color-secondary);\n }\n /* Non-secondary tones show their tone color at rest */\n .variant-ghost:not(.tone-secondary) {\n color: var(--btn-text-color);\n }\n .variant-ghost:hover:not([data-disabled]) {\n background-color: var(--color-hover);\n color: var(--btn-text-color);\n }\n .variant-ghost:active:not([data-disabled]),\n .variant-ghost[data-pressed]:not([data-disabled]) {\n background-color: var(--color-active);\n }\n /* ─── Loader ─────────────────────────────────────────────────────── */\n /* Always in the DOM, always position:absolute so it never affects layout */\n .loader {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 0;\n pointer-events: none;\n }\n .loader-visible {\n opacity: 1;\n }\n .content-loading {\n visibility: hidden;\n }\n @keyframes spin {\n to {\n transform: rotate(360deg);\n }\n }\n .spinner {\n width: 12px;\n height: 12px;\n border: 1.5px solid currentColor;\n border-top-color: transparent;\n border-radius: 50%;\n animation: spin 0.6s linear infinite;\n opacity: 0.7;\n }\n}\n"],"mappings":";AAwCA,IAAA,wBAAY;CAAI,mBAAA;CAAA,aAAA;CAAA,UAAA;CAAA,kBAAA;CAAA,QAAA;CAAA,WAAA;CAAA,WAAA;CAAA,WAAA;CAAA,WAAA;CAAA,QAAA;CAAA,WAAA;CAAA,oBAAA;CAAA,gBAAA;CAAA,kBAAA;CAAA,gBAAA;CAAA,gBAAA;CAAA,iBAAA;CAAA,mBAAA;CAAA,gBAAA;CAAA,iBAAA;CAAA"}