@nexub/react 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/dist/{chunk-XR4NBY54.js → chunk-2DYKENBM.js} +10 -10
  2. package/dist/{chunk-SVQCINRE.js → chunk-2I7FIU6R.js} +5 -2
  3. package/dist/{chunk-FHFVBOF3.js → chunk-2Y4WLNEZ.js} +3 -3
  4. package/dist/{chunk-CWS37T3K.js → chunk-3E7X3YK3.js} +4 -2
  5. package/dist/{chunk-GRB6T2TT.js → chunk-3FPJIXG7.js} +19 -13
  6. package/dist/chunk-3MT23LNM.js +171 -0
  7. package/dist/chunk-3QD76BKT.js +80 -0
  8. package/dist/{chunk-B54WADL4.js → chunk-4P2JJ2FH.js} +12 -12
  9. package/dist/chunk-52ZVJPF7.js +1 -0
  10. package/dist/chunk-5KI4YHA3.js +144 -0
  11. package/dist/chunk-5QEARXY3.js +55 -0
  12. package/dist/chunk-5VW6RUKZ.js +134 -0
  13. package/dist/{chunk-CNNJFWFA.js → chunk-6BGUZQAX.js} +4 -4
  14. package/dist/{chunk-LDYD7WL3.js → chunk-6ECOCGZG.js} +4 -3
  15. package/dist/{chunk-3AXIMXDU.js → chunk-6JBQAJJD.js} +6 -12
  16. package/dist/{chunk-YRDCY6BI.js → chunk-6UKNUI46.js} +0 -19
  17. package/dist/chunk-743Y5MY3.js +95 -0
  18. package/dist/{chunk-BFRX6X4O.js → chunk-74RUJ5KZ.js} +23 -17
  19. package/dist/chunk-77LYWSJW.js +85 -0
  20. package/dist/{chunk-YPHNHQYQ.js → chunk-7B4VF2ZU.js} +6 -2
  21. package/dist/{chunk-NCRFKPA4.js → chunk-7MSIOYJZ.js} +6 -8
  22. package/dist/{chunk-AHT35UWY.js → chunk-7Q4T7CB6.js} +10 -6
  23. package/dist/{chunk-GIGOTRXX.js → chunk-7VJABRKB.js} +3 -10
  24. package/dist/{chunk-6QLLH6ID.js → chunk-7XWJCFWI.js} +8 -17
  25. package/dist/chunk-A3O23F2B.js +1 -0
  26. package/dist/chunk-AT2DSFP3.js +47 -0
  27. package/dist/{chunk-OASFXI27.js → chunk-BNFGVFZ3.js} +5 -5
  28. package/dist/{chunk-GHCV6UXG.js → chunk-BTYDDKRQ.js} +5 -5
  29. package/dist/chunk-C6JRJ6JW.js +167 -0
  30. package/dist/chunk-CAOLGXA5.js +1 -0
  31. package/dist/{chunk-IIPYF6ZQ.js → chunk-CBDJRPMD.js} +16 -13
  32. package/dist/{chunk-OJ2TLWYD.js → chunk-CKFRMCZ7.js} +5 -3
  33. package/dist/{chunk-LZB3KTSH.js → chunk-CQWYZPPJ.js} +1 -1
  34. package/dist/{chunk-6RBNM5RO.js → chunk-CUOASXI7.js} +10 -10
  35. package/dist/{chunk-HG6HTUWU.js → chunk-CV5ZKED7.js} +2 -2
  36. package/dist/{chunk-HJERFB7J.js → chunk-DDRYT3SY.js} +2 -2
  37. package/dist/chunk-DGCAM2UJ.js +60 -0
  38. package/dist/{chunk-RLE5RN3T.js → chunk-DGQJRTO6.js} +15 -11
  39. package/dist/{chunk-FD7YU53N.js → chunk-DT3QGFXB.js} +4 -4
  40. package/dist/chunk-F73DTG2V.js +123 -0
  41. package/dist/{chunk-V3TETH4J.js → chunk-FIDUY6SS.js} +17 -16
  42. package/dist/{chunk-Z3IG5WRA.js → chunk-FJUVYRNT.js} +3 -3
  43. package/dist/{chunk-KQPLFVFR.js → chunk-FLZD7HQY.js} +0 -2
  44. package/dist/{chunk-64JDZWCV.js → chunk-GRKCUQG4.js} +6 -5
  45. package/dist/{chunk-EZ23IA3H.js → chunk-GSG2W6DP.js} +3 -3
  46. package/dist/{chunk-4I5ULCYG.js → chunk-HFTS5AN7.js} +3 -3
  47. package/dist/{chunk-RB4CVS22.js → chunk-HH7EHNOW.js} +3 -1
  48. package/dist/{chunk-S46W2QER.js → chunk-HSPGJSFJ.js} +17 -11
  49. package/dist/{chunk-NQVRF4RB.js → chunk-HXV5UA7K.js} +16 -13
  50. package/dist/{chunk-GUB7YKG2.js → chunk-I4U36P54.js} +6 -3
  51. package/dist/{chunk-BTRTORKU.js → chunk-I6CAF7C5.js} +6 -7
  52. package/dist/chunk-IGLOYOCH.js +134 -0
  53. package/dist/{chunk-IK23Q2OF.js → chunk-JHVYI5GK.js} +3 -3
  54. package/dist/chunk-K5FKEAAK.js +94 -0
  55. package/dist/{chunk-5URGARPH.js → chunk-KE4YVG5Q.js} +6 -10
  56. package/dist/{chunk-A4IMFAZX.js → chunk-LESI7J7B.js} +3 -3
  57. package/dist/chunk-MEUJBGY5.js +88 -0
  58. package/dist/chunk-MNEXMMLM.js +23 -0
  59. package/dist/{chunk-PVTACENM.js → chunk-MTK3GHDQ.js} +2 -2
  60. package/dist/chunk-NA5UMOE5.js +55 -0
  61. package/dist/{chunk-YJ3JQYAN.js → chunk-NGQKBDHA.js} +5 -13
  62. package/dist/{chunk-7Q7ZF6BY.js → chunk-NNIFOMIH.js} +18 -8
  63. package/dist/{chunk-7L3CGIRA.js → chunk-NQPGELMP.js} +8 -19
  64. package/dist/chunk-NSVXGOR3.js +54 -0
  65. package/dist/{chunk-6J3QTWKC.js → chunk-NZT4TTNV.js} +18 -9
  66. package/dist/{chunk-TJCHA3OI.js → chunk-O626NJEM.js} +7 -4
  67. package/dist/chunk-O74XEHLA.js +331 -0
  68. package/dist/{chunk-JSD3H7WV.js → chunk-OYCK6BRG.js} +6 -6
  69. package/dist/{chunk-2555JXCP.js → chunk-PBPUSRTJ.js} +19 -11
  70. package/dist/{chunk-QD7H3WV3.js → chunk-PGDXFBKT.js} +8 -8
  71. package/dist/{chunk-PQ6GU7SG.js → chunk-PMWYLYM3.js} +20 -14
  72. package/dist/{chunk-I4BHRVRL.js → chunk-PPCGUIAB.js} +9 -5
  73. package/dist/{chunk-NIX4SEKM.js → chunk-PREMZMLU.js} +7 -4
  74. package/dist/{chunk-4SSUM4CL.js → chunk-Q3ESHXKU.js} +9 -6
  75. package/dist/{chunk-KM6Z3VTI.js → chunk-QVTVDL6Y.js} +1 -1
  76. package/dist/{chunk-AXOKFS4K.js → chunk-RSU2UHN4.js} +20 -4
  77. package/dist/{chunk-DJZZ3FIP.js → chunk-RUR57JZQ.js} +5 -14
  78. package/dist/{chunk-ZV3AF5CL.js → chunk-S2CTBFLN.js} +13 -2
  79. package/dist/{chunk-WESZPFBZ.js → chunk-S7GH2BJP.js} +7 -4
  80. package/dist/chunk-SAUA52EJ.js +131 -0
  81. package/dist/{chunk-72I7EVOL.js → chunk-SYZADSLI.js} +10 -6
  82. package/dist/{chunk-TEOLG3N2.js → chunk-SZ2WPWXJ.js} +10 -6
  83. package/dist/{chunk-W2NEXOTG.js → chunk-T7RLPFGX.js} +2 -2
  84. package/dist/{chunk-J6TU45KP.js → chunk-TRA6A5C5.js} +26 -12
  85. package/dist/{chunk-H2W7IYVY.js → chunk-UTJJ5HFX.js} +18 -12
  86. package/dist/{chunk-5O34ZNC3.js → chunk-VAFBGFKY.js} +19 -13
  87. package/dist/{chunk-OJRSPDNJ.js → chunk-VD4RFTNV.js} +8 -14
  88. package/dist/chunk-VLQGQFW7.js +110 -0
  89. package/dist/{chunk-RTDUTWJ4.js → chunk-VMT7Y3AT.js} +5 -8
  90. package/dist/{chunk-LGQ737BP.js → chunk-WHTLXQB6.js} +1 -1
  91. package/dist/chunk-WLRRMT6W.js +1 -0
  92. package/dist/{chunk-2FCSWBSM.js → chunk-WMWX6DPB.js} +3 -3
  93. package/dist/{chunk-UMC64NCT.js → chunk-WVBGQCYC.js} +6 -3
  94. package/dist/{chunk-QCNLE27O.js → chunk-WXRQ42DR.js} +11 -7
  95. package/dist/{chunk-SY6V3HAK.js → chunk-XDU27NRX.js} +3 -3
  96. package/dist/{chunk-KA2J5OBA.js → chunk-XQDD76EF.js} +4 -7
  97. package/dist/chunk-XTATJMY6.js +64 -0
  98. package/dist/chunk-XYXMPHND.js +1 -0
  99. package/dist/{chunk-7ZWBHHRK.js → chunk-YNU6VRD5.js} +23 -32
  100. package/dist/{chunk-6SJPVQQW.js → chunk-Z3HF6XJ3.js} +1 -1
  101. package/dist/{chunk-I4URNMI7.js → chunk-ZC4MZAEX.js} +9 -7
  102. package/dist/{chunk-PWBPHGM3.js → chunk-ZCEUVK2R.js} +2 -2
  103. package/dist/chunk-ZT3NWE5U.js +1 -0
  104. package/dist/{chunk-RHOYF7MO.js → chunk-ZTLALVWA.js} +6 -15
  105. package/dist/components/Accordion/index.js +1 -1
  106. package/dist/components/Alert/index.js +2 -1
  107. package/dist/components/AlertDialog/index.js +3 -3
  108. package/dist/components/Amount/index.js +3 -1
  109. package/dist/components/AspectRatio/index.js +1 -1
  110. package/dist/components/Autocomplete/index.js +3 -2
  111. package/dist/components/Avatar/index.js +1 -1
  112. package/dist/components/AvatarGroup/index.js +3 -2
  113. package/dist/components/Badge/index.js +1 -1
  114. package/dist/components/Banner/index.js +2 -1
  115. package/dist/components/Breadcrumb/index.js +2 -1
  116. package/dist/components/Button/index.js +1 -1
  117. package/dist/components/ButtonGroup/index.js +1 -1
  118. package/dist/components/Callout/index.js +1 -1
  119. package/dist/components/Card/index.js +3 -1
  120. package/dist/components/CheckList/index.js +1 -1
  121. package/dist/components/Checkbox/index.js +1 -1
  122. package/dist/components/CheckboxCard/index.js +9 -0
  123. package/dist/components/Chip/index.js +2 -1
  124. package/dist/components/Citation/index.js +17 -0
  125. package/dist/components/Code/index.js +1 -1
  126. package/dist/components/Combobox/index.js +1 -1
  127. package/dist/components/CommandPalette/index.js +3 -2
  128. package/dist/components/ContextMenu/index.js +2 -2
  129. package/dist/components/CountryBadge/index.js +1 -1
  130. package/dist/components/DataTable/index.js +2 -1
  131. package/dist/components/DatePicker/index.js +5 -1
  132. package/dist/components/DateRangePicker/index.js +5 -1
  133. package/dist/components/Dialog/index.js +2 -2
  134. package/dist/components/Drawer/index.js +2 -2
  135. package/dist/components/DropdownMenu/index.js +2 -2
  136. package/dist/components/EmptyState/index.js +1 -1
  137. package/dist/components/ErrorState/index.js +2 -1
  138. package/dist/components/EyebrowChip/index.js +4 -1
  139. package/dist/components/FileUpload/index.js +2 -1
  140. package/dist/components/FilterChip/index.js +3 -1
  141. package/dist/components/Flex/index.js +2 -1
  142. package/dist/components/FormError/index.js +1 -1
  143. package/dist/components/FormField/index.js +7 -4
  144. package/dist/components/GradientDivider/index.js +1 -1
  145. package/dist/components/Grid/index.js +2 -1
  146. package/dist/components/Heading/index.js +4 -1
  147. package/dist/components/HelperText/index.js +4 -1
  148. package/dist/components/HoverCard/index.js +3 -2
  149. package/dist/components/IconButton/index.js +2 -1
  150. package/dist/components/Input/index.js +1 -1
  151. package/dist/components/Kbd/index.js +1 -1
  152. package/dist/components/KeyboardShortcut/index.js +2 -2
  153. package/dist/components/Label/index.js +4 -1
  154. package/dist/components/Link/index.js +1 -1
  155. package/dist/components/Logo/index.js +1 -1
  156. package/dist/components/MediaCard/index.js +9 -0
  157. package/dist/components/Menubar/index.js +2 -2
  158. package/dist/components/MessageBubble/index.js +18 -0
  159. package/dist/components/MoneyInput/index.js +3 -2
  160. package/dist/components/NavigationMenu/index.js +2 -2
  161. package/dist/components/NavigationRail/index.js +2 -1
  162. package/dist/components/NexubProvider/index.js +14 -0
  163. package/dist/components/NumberInput/index.js +3 -2
  164. package/dist/components/NumberTicker/index.js +10 -0
  165. package/dist/components/PageHeader/index.js +1 -1
  166. package/dist/components/Pagination/index.js +3 -1
  167. package/dist/components/PasswordInput/index.js +3 -2
  168. package/dist/components/Popover/index.js +2 -2
  169. package/dist/components/Progress/index.js +2 -1
  170. package/dist/components/PromptInput/index.js +15 -0
  171. package/dist/components/RadioCard/index.js +11 -0
  172. package/dist/components/RadioGroup/index.js +1 -1
  173. package/dist/components/Rating/index.js +2 -1
  174. package/dist/components/ScrollArea/index.js +1 -1
  175. package/dist/components/SearchInput/index.js +3 -2
  176. package/dist/components/Section/index.js +1 -1
  177. package/dist/components/SegmentedControl/index.js +3 -2
  178. package/dist/components/Select/index.js +2 -2
  179. package/dist/components/Separator/index.js +1 -1
  180. package/dist/components/Sidebar/index.js +2 -1
  181. package/dist/components/Skeleton/index.js +1 -1
  182. package/dist/components/Spinner/index.js +2 -1
  183. package/dist/components/SplitButton/index.js +5 -5
  184. package/dist/components/Stack/index.js +2 -1
  185. package/dist/components/StatusPill/index.js +1 -1
  186. package/dist/components/StreamingText/index.js +8 -0
  187. package/dist/components/Switch/index.js +1 -1
  188. package/dist/components/Table/index.js +1 -1
  189. package/dist/components/Tabs/index.js +3 -2
  190. package/dist/components/Tag/index.js +1 -1
  191. package/dist/components/Text/index.js +1 -1
  192. package/dist/components/TextGradient/index.js +1 -1
  193. package/dist/components/Textarea/index.js +1 -1
  194. package/dist/components/ThinkingIndicator/index.js +9 -0
  195. package/dist/components/Toast/index.js +3 -1
  196. package/dist/components/Tooltip/index.js +2 -1
  197. package/dist/components/TopNav/index.js +2 -1
  198. package/dist/index.d.ts +407 -22
  199. package/dist/index.js +245 -166
  200. package/package.json +52 -50
  201. package/dist/chunk-63DPMUMR.js +0 -67
  202. package/dist/chunk-CHGPGRML.js +0 -115
  203. package/dist/chunk-J2T4GFFS.js +0 -85
  204. package/dist/chunk-LH3BSAIS.js +0 -119
  205. package/dist/chunk-LMPGHWUA.js +0 -114
  206. package/dist/chunk-NMH5WSZG.js +0 -72
  207. package/dist/chunk-P44EROBX.js +0 -55
  208. package/dist/chunk-TYTW4F3B.js +0 -178
@@ -0,0 +1,123 @@
1
+ 'use client';
2
+ import {
3
+ glassSurfaceClass
4
+ } from "./chunk-DEIBF3P7.js";
5
+ import {
6
+ cn
7
+ } from "./chunk-Q7G5WGYV.js";
8
+
9
+ // src/components/Card/Card.tsx
10
+ import * as React2 from "react";
11
+ import { Slot } from "@radix-ui/react-slot";
12
+ import { cva } from "class-variance-authority";
13
+
14
+ // src/hooks/usePointerSheen.ts
15
+ import * as React from "react";
16
+ function usePointerSheen(enabled, onPointerMove) {
17
+ const frame = React.useRef(0);
18
+ React.useEffect(() => () => cancelAnimationFrame(frame.current), []);
19
+ const handler = React.useCallback(
20
+ (event) => {
21
+ onPointerMove?.(event);
22
+ if (event.pointerType === "touch") return;
23
+ const el = event.currentTarget;
24
+ const { clientX, clientY } = event;
25
+ cancelAnimationFrame(frame.current);
26
+ frame.current = requestAnimationFrame(() => {
27
+ const r = el.getBoundingClientRect();
28
+ el.style.setProperty("--nx-mx", `${clientX - r.left}px`);
29
+ el.style.setProperty("--nx-my", `${clientY - r.top}px`);
30
+ });
31
+ },
32
+ [onPointerMove]
33
+ );
34
+ return enabled ? handler : onPointerMove;
35
+ }
36
+
37
+ // src/components/Card/Card.tsx
38
+ import { jsx } from "react/jsx-runtime";
39
+ var cardVariants = cva(
40
+ // In-flow content: tone + a soft alpha hairline, no shadow (shadows are for floating layers).
41
+ // A CardLink inside stretches over the card; the card then carries its focus ring.
42
+ "rounded-shape-container bg-[var(--color-surface-elevated)] border border-[color-mix(in_srgb,var(--color-outline-variant)_60%,transparent)] text-[var(--color-on-surface)] has-[[data-card-link]]:relative has-[[data-card-link]:focus-visible]:outline has-[[data-card-link]:focus-visible]:outline-[3px] has-[[data-card-link]:focus-visible]:outline-offset-2 has-[[data-card-link]:focus-visible]:outline-[var(--color-primary)]",
43
+ {
44
+ variants: {
45
+ variant: {
46
+ flat: "",
47
+ surface: "bg-[var(--color-surface-elevated)] shadow-elevation-1",
48
+ // Lift on hover (spring, elevation 1 → 2), sink on press, state layer
49
+ // tint; see .nx-lift in themes/base.css.
50
+ interactive: "nx-state-layer nx-lift cursor-pointer bg-[var(--color-surface-elevated)] shadow-elevation-1"
51
+ },
52
+ // Material. 'glass' needs data-material="glass" on the element (set in the
53
+ // component) for the --glass-* vars to resolve. Single box-shadow carries
54
+ // both the inset specular highlight and the drop shadow so neither clobbers
55
+ // the other. Listed after `variant` so tailwind-merge lets it win on bg/border.
56
+ surface: {
57
+ solid: "",
58
+ glass: glassSurfaceClass
59
+ }
60
+ },
61
+ defaultVariants: {
62
+ variant: "flat",
63
+ surface: "solid"
64
+ }
65
+ }
66
+ );
67
+ var toneBorderMap = {
68
+ neutral: "",
69
+ info: "border-s-4 border-s-[var(--color-info)]",
70
+ success: "border-s-4 border-s-[var(--color-success)]",
71
+ warning: "border-s-4 border-s-[var(--color-warning)]",
72
+ danger: "border-s-4 border-s-[var(--color-error)]",
73
+ leap: "border-s-4 border-s-[var(--color-leap)]",
74
+ bookub: "border-s-4 border-s-[var(--color-bookub)]",
75
+ payub: "border-s-4 border-s-[var(--color-payub)]",
76
+ founderub: "border-s-4 border-s-[var(--color-founderub)]"
77
+ };
78
+ var Card = React2.forwardRef(
79
+ ({ className, variant = "flat", surface = "solid", effect = "none", tone, asChild = false, onPointerMove, children, ...props }, ref) => {
80
+ const Comp = asChild ? Slot : "div";
81
+ const toneStyle = tone ? toneBorderMap[tone] : "";
82
+ const sheen = effect === "sheen";
83
+ const handlePointerMove = usePointerSheen(sheen, onPointerMove);
84
+ return /* @__PURE__ */ jsx(
85
+ Comp,
86
+ {
87
+ ref,
88
+ className: cn(cardVariants({ variant, surface }), toneStyle, sheen && "nx-sheen", className),
89
+ onPointerMove: handlePointerMove,
90
+ "data-tone": tone,
91
+ "data-material": surface === "glass" ? "glass" : void 0,
92
+ ...props,
93
+ children
94
+ }
95
+ );
96
+ }
97
+ );
98
+ Card.displayName = "Card";
99
+ var CardLink = React2.forwardRef(
100
+ ({ className, asChild = false, ...props }, ref) => {
101
+ const Comp = asChild ? Slot : "a";
102
+ return /* @__PURE__ */ jsx(
103
+ Comp,
104
+ {
105
+ ref,
106
+ "data-card-link": "",
107
+ className: cn(
108
+ "text-inherit no-underline outline-none after:absolute after:inset-0 after:rounded-[inherit] after:content-['']",
109
+ className
110
+ ),
111
+ ...props
112
+ }
113
+ );
114
+ }
115
+ );
116
+ CardLink.displayName = "CardLink";
117
+
118
+ export {
119
+ usePointerSheen,
120
+ cardVariants,
121
+ Card,
122
+ CardLink
123
+ };
@@ -3,9 +3,12 @@ import {
3
3
  useClassScrollLock
4
4
  } from "./chunk-47UGX37F.js";
5
5
  import {
6
- enterExit,
7
- overlaySurface
8
- } from "./chunk-KQPLFVFR.js";
6
+ overlaySurface,
7
+ scrim
8
+ } from "./chunk-FLZD7HQY.js";
9
+ import {
10
+ useNexubMessages
11
+ } from "./chunk-743Y5MY3.js";
9
12
  import {
10
13
  cn
11
14
  } from "./chunk-Q7G5WGYV.js";
@@ -16,13 +19,15 @@ import * as RadixDialog from "@radix-ui/react-dialog";
16
19
  import { Command } from "cmdk";
17
20
  import { Search } from "@nexub/icons";
18
21
  import { jsx, jsxs } from "react/jsx-runtime";
19
- var overlayClasses = "fixed inset-0 z-[var(--z-modal)] bg-[color-mix(in_srgb,#000_40%,transparent)] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0 duration-effects-default ease-effects-default";
22
+ var overlayClasses = cn("fixed inset-0 z-[var(--z-modal)] nx-motion", scrim);
20
23
  function ClassLockOverlay() {
21
24
  useClassScrollLock();
22
25
  return /* @__PURE__ */ jsx("div", { "data-state": "open", className: overlayClasses });
23
26
  }
24
27
  var Root2 = React.forwardRef(
25
- ({ children, label = "Command palette", scrollLock = "style", shouldFilter, ...props }, ref) => {
28
+ ({ children, label: labelProp, scrollLock = "style", shouldFilter, ...props }, ref) => {
29
+ const messages = useNexubMessages();
30
+ const label = labelProp ?? messages.commandPalette;
26
31
  const returnFocusRef = React.useRef(null);
27
32
  return /* @__PURE__ */ jsx(RadixDialog.Root, { ...props, children: /* @__PURE__ */ jsxs(RadixDialog.Portal, { children: [
28
33
  scrollLock === "class" ? /* @__PURE__ */ jsx(ClassLockOverlay, {}) : /* @__PURE__ */ jsx(RadixDialog.Overlay, { className: overlayClasses }),
@@ -40,12 +45,8 @@ var Root2 = React.forwardRef(
40
45
  },
41
46
  className: cn(
42
47
  "fixed left-1/2 top-[20%] z-[var(--z-modal)] w-[calc(100%-2rem)] max-w-xl -translate-x-1/2",
43
- "overflow-hidden",
44
- overlaySurface,
45
- enterExit,
46
- "data-[state=open]:animate-in data-[state=closed]:animate-out",
47
- "data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
48
- "data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95"
48
+ "nx-motion nx-dialog overflow-hidden",
49
+ overlaySurface
49
50
  ),
50
51
  children: [
51
52
  /* @__PURE__ */ jsx(RadixDialog.Title, { className: "sr-only", children: label }),
@@ -55,7 +56,7 @@ var Root2 = React.forwardRef(
55
56
  label,
56
57
  shouldFilter,
57
58
  loop: true,
58
- className: "flex h-full w-full flex-col overflow-hidden text-[var(--color-text-primary)]",
59
+ className: "flex h-full w-full flex-col overflow-hidden text-[var(--color-on-surface)]",
59
60
  children
60
61
  }
61
62
  )
@@ -66,14 +67,14 @@ var Root2 = React.forwardRef(
66
67
  }
67
68
  );
68
69
  Root2.displayName = "CommandPalette.Root";
69
- var Input = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs("div", { className: "flex items-center border-b border-[var(--color-border-default)] px-3", children: [
70
- /* @__PURE__ */ jsx(Search, { size: "sm", className: "mr-2 shrink-0 opacity-50", "aria-hidden": "true" }),
70
+ var Input = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs("div", { className: "flex items-center border-b border-[var(--color-outline-variant)] px-3", children: [
71
+ /* @__PURE__ */ jsx(Search, { size: "sm", className: "me-2 shrink-0 opacity-50", "aria-hidden": "true" }),
71
72
  /* @__PURE__ */ jsx(
72
73
  Command.Input,
73
74
  {
74
75
  ref,
75
76
  className: cn(
76
- "flex h-control-xl w-full bg-transparent text-body-lg outline-none placeholder:text-[var(--color-text-placeholder)] disabled:cursor-not-allowed disabled:text-[var(--color-text-disabled)]",
77
+ "flex h-control-xl w-full bg-transparent text-body-lg outline-none placeholder:text-[var(--color-on-surface-muted)] disabled:cursor-not-allowed disabled:text-[var(--color-text-disabled)]",
77
78
  className
78
79
  ),
79
80
  ...props
@@ -134,7 +135,7 @@ var Separator = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__
134
135
  Command.Separator,
135
136
  {
136
137
  ref,
137
- className: cn("-mx-1 my-1 h-px bg-[var(--color-border-default)]", className),
138
+ className: cn("-mx-1 my-1 h-px bg-[var(--color-outline-variant)]", className),
138
139
  ...props
139
140
  }
140
141
  ));
@@ -27,7 +27,7 @@ var Input = React.forwardRef(
27
27
  {
28
28
  ref,
29
29
  className: cn(
30
- "flex h-control-md w-full bg-transparent text-body-md outline-none placeholder:text-[var(--color-text-placeholder)] disabled:cursor-not-allowed disabled:text-[var(--color-text-disabled)]",
30
+ "flex h-control-md w-full bg-transparent text-body-md outline-none placeholder:text-[var(--color-on-surface-muted)] disabled:cursor-not-allowed disabled:text-[var(--color-text-disabled)]",
31
31
  className
32
32
  ),
33
33
  ...props
@@ -63,7 +63,7 @@ var Group = React.forwardRef(
63
63
  {
64
64
  ref,
65
65
  className: cn(
66
- "overflow-hidden p-1 text-[var(--color-text-primary)] [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-[var(--color-text-muted)]",
66
+ "overflow-hidden p-1 text-[var(--color-on-surface)] [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-[var(--color-on-surface-muted)]",
67
67
  className
68
68
  ),
69
69
  ...props
@@ -77,7 +77,7 @@ var Item = React.forwardRef(
77
77
  {
78
78
  ref,
79
79
  className: cn(
80
- "relative flex cursor-default select-none items-center rounded-lg px-2.5 py-2 text-body-sm outline-none",
80
+ "relative flex cursor-default select-none items-center rounded-[10px] px-2.5 py-2 text-body-sm outline-none",
81
81
  // Highlight = the on-surface state layer at hover opacity.
82
82
  "aria-selected:bg-[color-mix(in_srgb,var(--color-on-surface)_8%,transparent)]",
83
83
  "data-[disabled=true]:pointer-events-none data-[disabled=true]:text-[var(--color-text-disabled)]",
@@ -12,7 +12,6 @@ var menuItem = [
12
12
  ].join(" ");
13
13
  var menuSeparator = "-mx-1.5 my-1.5 h-px bg-[var(--color-outline-variant)]";
14
14
  var menuLabel = "px-2.5 py-1.5 text-label-sm text-[var(--color-on-surface-muted)]";
15
- var enterExit = "duration-spatial-default ease-spatial-default data-[state=closed]:duration-effects-fast data-[state=closed]:ease-effects-fast";
16
15
  var scrim = "bg-[color-mix(in_srgb,var(--color-scrim,#000)_40%,transparent)]";
17
16
 
18
17
  export {
@@ -22,6 +21,5 @@ export {
22
21
  menuItem,
23
22
  menuSeparator,
24
23
  menuLabel,
25
- enterExit,
26
24
  scrim
27
25
  };
@@ -1,13 +1,13 @@
1
1
  'use client';
2
2
  import {
3
3
  DropdownMenu
4
- } from "./chunk-7L3CGIRA.js";
4
+ } from "./chunk-NQPGELMP.js";
5
5
  import {
6
6
  ButtonGroup
7
- } from "./chunk-LGQ737BP.js";
7
+ } from "./chunk-WHTLXQB6.js";
8
8
  import {
9
9
  Button
10
- } from "./chunk-LMPGHWUA.js";
10
+ } from "./chunk-C6JRJ6JW.js";
11
11
  import {
12
12
  cn
13
13
  } from "./chunk-Q7G5WGYV.js";
@@ -18,14 +18,15 @@ import { ChevronDown } from "@nexub/icons";
18
18
  import { jsx, jsxs } from "react/jsx-runtime";
19
19
  var SplitButton = React.forwardRef(
20
20
  ({ menuLabel, menu, align = "end", variant, size, tone, disabled, loading, className, ...props }, ref) => {
21
- const shared = { variant, size, tone, disabled: disabled || loading };
21
+ const shared = { variant, size, tone };
22
22
  return /* @__PURE__ */ jsxs(ButtonGroup, { attached: true, className, children: [
23
- /* @__PURE__ */ jsx(Button, { ref, ...shared, loading, ...props }),
23
+ /* @__PURE__ */ jsx(Button, { ref, ...shared, disabled, ...loading ? { loading: true } : {}, ...props }),
24
24
  /* @__PURE__ */ jsxs(DropdownMenu.Root, { modal: false, children: [
25
25
  /* @__PURE__ */ jsx(DropdownMenu.Trigger, { asChild: true, children: /* @__PURE__ */ jsx(
26
26
  Button,
27
27
  {
28
28
  ...shared,
29
+ disabled: disabled || loading,
29
30
  "aria-label": menuLabel,
30
31
  className: cn(
31
32
  "px-3",
@@ -13,9 +13,9 @@ var ScrollArea = React.forwardRef(
13
13
  (orientation === "vertical" || orientation === "both") && /* @__PURE__ */ jsx(
14
14
  RadixScrollArea.Scrollbar,
15
15
  {
16
- className: "flex touch-none select-none transition-colors h-full w-2.5 border-l border-l-transparent p-[1px]",
16
+ className: "flex touch-none select-none transition-colors h-full w-2.5 border-s border-s-transparent p-[1px]",
17
17
  orientation: "vertical",
18
- children: /* @__PURE__ */ jsx(RadixScrollArea.Thumb, { className: "relative flex-1 rounded-full bg-[var(--color-border-default)]" })
18
+ children: /* @__PURE__ */ jsx(RadixScrollArea.Thumb, { className: "relative flex-1 rounded-full bg-[var(--color-outline-variant)]" })
19
19
  }
20
20
  ),
21
21
  (orientation === "horizontal" || orientation === "both") && /* @__PURE__ */ jsx(
@@ -23,7 +23,7 @@ var ScrollArea = React.forwardRef(
23
23
  {
24
24
  className: "flex touch-none select-none transition-colors flex-col h-2.5 border-t border-t-transparent p-[1px]",
25
25
  orientation: "horizontal",
26
- children: /* @__PURE__ */ jsx(RadixScrollArea.Thumb, { className: "relative flex-1 rounded-full bg-[var(--color-border-default)]" })
26
+ children: /* @__PURE__ */ jsx(RadixScrollArea.Thumb, { className: "relative flex-1 rounded-full bg-[var(--color-outline-variant)]" })
27
27
  }
28
28
  ),
29
29
  /* @__PURE__ */ jsx(RadixScrollArea.Corner, {})
@@ -30,13 +30,13 @@ var CheckListItem = React.forwardRef(
30
30
  "li",
31
31
  {
32
32
  ref,
33
- className: cn("flex items-start gap-2 text-[var(--color-text-primary)]", className),
33
+ className: cn("flex items-start gap-2 text-[var(--color-on-surface)]", className),
34
34
  ...props,
35
35
  children: [
36
- /* @__PURE__ */ jsx("span", { className: "shrink-0 inline-flex items-center justify-center mt-0.5 h-4 w-4 rounded-full bg-[var(--color-semantic-success-default)]/10", children: /* @__PURE__ */ jsx(
36
+ /* @__PURE__ */ jsx("span", { className: "shrink-0 inline-flex items-center justify-center mt-0.5 h-4 w-4 rounded-full bg-[color-mix(in_srgb,var(--color-success)_10%,transparent)]", children: /* @__PURE__ */ jsx(
37
37
  Check,
38
38
  {
39
- className: "h-3 w-3 text-[var(--color-semantic-success-default)]",
39
+ className: "h-3 w-3 text-[var(--color-success)]",
40
40
  "aria-hidden": "true"
41
41
  }
42
42
  ) }),
@@ -13,7 +13,9 @@ var TextGradient = React.forwardRef(
13
13
  {
14
14
  ref,
15
15
  className: cn(
16
- "bg-[var(--gradient-brand-horizontal)] bg-clip-text text-transparent",
16
+ // Keep the `image:` hint: without it the arbitrary value compiles to
17
+ // background-color, which drops the gradient and hides the text.
18
+ "bg-[image:var(--gradient-brand-horizontal)] bg-clip-text text-transparent",
17
19
  className
18
20
  ),
19
21
  ...rest,
@@ -1,4 +1,10 @@
1
1
  'use client';
2
+ import {
3
+ disabledText
4
+ } from "./chunk-7SXR4PGO.js";
5
+ import {
6
+ useNexubMessages
7
+ } from "./chunk-743Y5MY3.js";
2
8
  import {
3
9
  cn
4
10
  } from "./chunk-Q7G5WGYV.js";
@@ -8,12 +14,14 @@ import * as React from "react";
8
14
  import { jsx, jsxs } from "react/jsx-runtime";
9
15
  var FilterChip = React.forwardRef(
10
16
  ({ className, selected = false, count, onRemove, children, ...props }, ref) => {
17
+ const messages = useNexubMessages();
11
18
  return /* @__PURE__ */ jsxs(
12
19
  "span",
13
20
  {
14
21
  className: cn(
15
- "inline-flex items-center gap-1 rounded-full border px-3 py-1 text-sm font-medium select-none transition-colors",
16
- selected ? "bg-[var(--color-fill-accent)] text-white border-[var(--color-fill-accent)]" : "bg-[var(--color-bg-subtle)] text-[var(--color-text-primary)] border-[var(--color-border-default)] hover:bg-[var(--color-bg-muted)]"
22
+ // Matches Chip; hover/press come from the state layer.
23
+ "nx-state-layer inline-flex items-center gap-1 rounded-shape-control border h-8 px-3 text-label-lg select-none",
24
+ selected ? "bg-[var(--color-secondary-container)] text-[var(--color-on-secondary-container)] border-transparent" : "bg-[var(--color-surface-container-low)] text-[var(--color-on-surface-variant)] border-[var(--color-outline-variant)]"
17
25
  ),
18
26
  children: [
19
27
  /* @__PURE__ */ jsxs(
@@ -22,9 +30,8 @@ var FilterChip = React.forwardRef(
22
30
  ref,
23
31
  type: "button",
24
32
  className: cn(
25
- "inline-flex items-center gap-1 bg-transparent border-0 p-0 m-0 cursor-pointer",
26
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-ring-default)] focus-visible:ring-offset-2 ring-offset-[var(--color-ring-offset)] rounded-sm",
27
- selected ? "text-white" : "text-[var(--color-text-primary)]",
33
+ "inline-flex items-center gap-1 bg-transparent border-0 p-0 m-0 cursor-pointer rounded-shape-control text-current",
34
+ disabledText,
28
35
  className
29
36
  ),
30
37
  "aria-pressed": selected,
@@ -35,8 +42,8 @@ var FilterChip = React.forwardRef(
35
42
  "span",
36
43
  {
37
44
  className: cn(
38
- "inline-flex items-center justify-center rounded-full text-xs font-semibold px-1.5 min-w-[1.25rem] h-5",
39
- selected ? "bg-white/20 text-white" : "bg-[var(--color-bg-muted)] text-[var(--color-text-muted)]"
45
+ "inline-flex items-center justify-center rounded-full text-label-sm px-1.5 min-w-[1.25rem] h-5",
46
+ selected ? "bg-[var(--color-on-secondary-container)] text-[var(--color-secondary-container)]" : "bg-[var(--color-surface-container-high)] text-[var(--color-on-surface-variant)]"
40
47
  ),
41
48
  children: count
42
49
  }
@@ -48,15 +55,14 @@ var FilterChip = React.forwardRef(
48
55
  "button",
49
56
  {
50
57
  type: "button",
51
- "aria-label": "Remove filter",
58
+ "aria-label": messages.removeFilter,
52
59
  onClick: (e) => {
53
60
  e.stopPropagation();
54
61
  onRemove();
55
62
  },
56
63
  className: cn(
57
- "inline-flex items-center justify-center rounded-full w-4 h-4 text-xs transition-colors",
58
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-ring-default)] focus-visible:ring-offset-1",
59
- selected ? "text-white hover:bg-white/20" : "text-[var(--color-text-muted)] hover:bg-[var(--color-bg-muted)] hover:text-[var(--color-text-primary)]"
64
+ // State layer for hover/press; focus = the global ring.
65
+ "nx-state-layer inline-flex items-center justify-center rounded-full w-5 h-5 -me-1 text-current"
60
66
  ),
61
67
  children: /* @__PURE__ */ jsx(
62
68
  "svg",
@@ -1,4 +1,7 @@
1
1
  'use client';
2
+ import {
3
+ useNexubMessages
4
+ } from "./chunk-743Y5MY3.js";
2
5
  import {
3
6
  cn
4
7
  } from "./chunk-Q7G5WGYV.js";
@@ -9,22 +12,22 @@ import { cva } from "class-variance-authority";
9
12
  import { jsx, jsxs } from "react/jsx-runtime";
10
13
  var bannerVariants = cva(
11
14
  [
12
- "relative flex gap-3 border-l-4 px-4 py-3",
15
+ "relative flex gap-3 border-s-4 px-4 py-3",
13
16
  "w-full"
14
17
  // No border-radius — full-width banner
15
18
  ],
16
19
  {
17
20
  variants: {
18
21
  tone: {
19
- neutral: "bg-[var(--color-bg-subtle)] border-l-[var(--color-neutral-500)] text-[var(--color-text-primary)]",
20
- info: "bg-[var(--color-semantic-info-default)]/10 border-l-[var(--color-semantic-info-default)] text-[var(--color-semantic-info-default)]",
21
- success: "bg-[var(--color-semantic-success-default)]/10 border-l-[var(--color-semantic-success-default)] text-[var(--color-semantic-success-default)]",
22
- warning: "bg-[var(--color-semantic-warning-default)]/10 border-l-[var(--color-semantic-warning-default)] text-[var(--color-semantic-warning-default)]",
23
- danger: "bg-[var(--color-semantic-error-default)]/10 border-l-[var(--color-semantic-error-default)] text-[var(--color-semantic-error-default)]",
24
- leap: "bg-[var(--color-leap-500)]/10 border-l-[var(--color-leap-500)] text-[var(--color-leap-700)]",
25
- bookub: "bg-[var(--color-bookub-500)]/10 border-l-[var(--color-bookub-500)] text-[var(--color-bookub-700)]",
26
- payub: "bg-[var(--color-payub-500)]/10 border-l-[var(--color-payub-500)] text-[var(--color-payub-700)]",
27
- founderub: "bg-[var(--color-founderub-500)]/10 border-l-[var(--color-founderub-500)] text-[var(--color-founderub-700)]"
22
+ neutral: "bg-[var(--color-surface-container-low)] border-s-[var(--color-outline)] text-[var(--color-on-surface)]",
23
+ info: "bg-[var(--color-info-container)] border-s-[var(--color-info)] text-[var(--color-on-info-container)]",
24
+ success: "bg-[var(--color-success-container)] border-s-[var(--color-success)] text-[var(--color-on-success-container)]",
25
+ warning: "bg-[var(--color-warning-container)] border-s-[var(--color-warning)] text-[var(--color-on-warning-container)]",
26
+ danger: "bg-[var(--color-error-container)] border-s-[var(--color-error)] text-[var(--color-on-error-container)]",
27
+ leap: "bg-[var(--color-leap-container)] border-s-[var(--color-leap)] text-[var(--color-on-leap-container)]",
28
+ bookub: "bg-[var(--color-bookub-container)] border-s-[var(--color-bookub)] text-[var(--color-on-bookub-container)]",
29
+ payub: "bg-[var(--color-payub-container)] border-s-[var(--color-payub)] text-[var(--color-on-payub-container)]",
30
+ founderub: "bg-[var(--color-founderub-container)] border-s-[var(--color-founderub)] text-[var(--color-on-founderub-container)]"
28
31
  }
29
32
  },
30
33
  defaultVariants: {
@@ -43,6 +46,7 @@ var Banner = React.forwardRef(
43
46
  children,
44
47
  ...props
45
48
  }, ref) => {
49
+ const messages = useNexubMessages();
46
50
  return /* @__PURE__ */ jsxs(
47
51
  "div",
48
52
  {
@@ -62,11 +66,10 @@ var Banner = React.forwardRef(
62
66
  "button",
63
67
  {
64
68
  type: "button",
65
- "aria-label": "Dismiss banner",
69
+ "aria-label": messages.dismissBanner,
66
70
  onClick: onClose,
67
71
  className: cn(
68
- "shrink-0 inline-flex items-center justify-center rounded-md w-6 h-6 opacity-60 hover:opacity-100 transition-opacity",
69
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-ring-default)] focus-visible:ring-offset-2 ring-offset-[var(--color-ring-offset)]"
72
+ "nx-state-layer shrink-0 inline-flex items-center justify-center rounded-full w-6 h-6"
70
73
  ),
71
74
  children: /* @__PURE__ */ jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { d: "M10 2L2 10M2 2l8 8", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) })
72
75
  }
@@ -6,7 +6,7 @@ import {
6
6
  // src/components/Checkbox/Checkbox.tsx
7
7
  import * as React from "react";
8
8
  import * as RadixCheckbox from "@radix-ui/react-checkbox";
9
- import { Check, Minus } from "@nexub/icons";
9
+ import { Minus } from "@nexub/icons";
10
10
  import { jsx } from "react/jsx-runtime";
11
11
  var Checkbox = React.forwardRef(
12
12
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
@@ -15,7 +15,7 @@ var Checkbox = React.forwardRef(
15
15
  ref,
16
16
  className: cn(
17
17
  // 18px, 2px outline border (>= 3:1), primary when on. Focus = the global ring.
18
- "peer h-[18px] w-[18px] shrink-0 rounded-[5px] border-2 border-[var(--color-outline)]",
18
+ "nx-hit peer h-[18px] w-[18px] shrink-0 rounded-[5px] border-2 border-[var(--color-outline)]",
19
19
  "transition-[background-color,border-color] duration-effects-fast ease-effects-fast",
20
20
  "hover:border-[var(--color-on-surface)]",
21
21
  "data-[state=checked]:bg-[var(--color-primary)] data-[state=checked]:border-[var(--color-primary)] data-[state=checked]:text-[var(--color-on-primary)]",
@@ -24,7 +24,10 @@ var Checkbox = React.forwardRef(
24
24
  className
25
25
  ),
26
26
  ...props,
27
- children: /* @__PURE__ */ jsx(RadixCheckbox.Indicator, { className: "flex items-center justify-center", children: props.checked === "indeterminate" ? /* @__PURE__ */ jsx(Minus, { size: "xs" }) : /* @__PURE__ */ jsx(Check, { size: "xs" }) })
27
+ children: /* @__PURE__ */ jsx(RadixCheckbox.Indicator, { className: "flex items-center justify-center", children: props.checked === "indeterminate" ? /* @__PURE__ */ jsx(Minus, { size: "xs" }) : (
28
+ // Drawn inline so the stroke can draw itself in (nx-check-draw).
29
+ /* @__PURE__ */ jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { className: "nx-check-draw", pathLength: 1, d: "M20 6 9 17l-5-5" }) })
30
+ ) })
28
31
  }
29
32
  )
30
33
  );
@@ -1,4 +1,7 @@
1
1
  'use client';
2
+ import {
3
+ layoutProps
4
+ } from "./chunk-VLQGQFW7.js";
2
5
  import {
3
6
  cn
4
7
  } from "./chunk-Q7G5WGYV.js";
@@ -34,12 +37,7 @@ var Stack = React.forwardRef(
34
37
  ...rest
35
38
  }, ref) => {
36
39
  const Comp = asChild ? Slot : "div";
37
- const inlineStyle = {
38
- ...gap !== void 0 ? { gap: typeof gap === "number" ? `${gap * 0.25}rem` : gap } : {},
39
- ...align ? { alignItems: align } : {},
40
- ...justify ? { justifyContent: justify } : {},
41
- ...style
42
- };
40
+ const layout = layoutProps({ gap, align, justify, style });
43
41
  const content = divider ? injectDividers(children, divider) : children;
44
42
  return /* @__PURE__ */ jsx(
45
43
  Comp,
@@ -47,11 +45,12 @@ var Stack = React.forwardRef(
47
45
  ref,
48
46
  className: cn(
49
47
  "flex",
48
+ layout.className,
50
49
  direction === "row" ? "flex-row" : "flex-col",
51
50
  wrap && "flex-wrap",
52
51
  className
53
52
  ),
54
- style: inlineStyle,
53
+ style: layout.style,
55
54
  ...rest,
56
55
  children: content
57
56
  }