@nexub/react 1.5.1 → 1.7.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 (207) hide show
  1. package/dist/chunk-24ZFAXB2.js +101 -0
  2. package/dist/{chunk-XR4NBY54.js → chunk-2DYKENBM.js} +10 -10
  3. package/dist/{chunk-SVQCINRE.js → chunk-2I7FIU6R.js} +5 -2
  4. package/dist/{chunk-S46W2QER.js → chunk-37L5ERUJ.js} +17 -11
  5. package/dist/{chunk-CWS37T3K.js → chunk-3E7X3YK3.js} +4 -2
  6. package/dist/{chunk-EZ23IA3H.js → chunk-3LTB6TGN.js} +4 -4
  7. package/dist/chunk-3QD76BKT.js +80 -0
  8. package/dist/{chunk-PQ6GU7SG.js → chunk-4HQFOIZW.js} +20 -14
  9. package/dist/{chunk-RLE5RN3T.js → chunk-4NFUBFYK.js} +15 -11
  10. package/dist/{chunk-B54WADL4.js → chunk-4P2JJ2FH.js} +12 -12
  11. package/dist/{chunk-I4BHRVRL.js → chunk-4UBVU53C.js} +9 -5
  12. package/dist/chunk-52ZVJPF7.js +1 -0
  13. package/dist/chunk-5QEARXY3.js +55 -0
  14. package/dist/chunk-643EYCLL.js +54 -0
  15. package/dist/{chunk-CNNJFWFA.js → chunk-6BGUZQAX.js} +4 -4
  16. package/dist/{chunk-LDYD7WL3.js → chunk-6ECOCGZG.js} +4 -3
  17. package/dist/{chunk-3AXIMXDU.js → chunk-6JBQAJJD.js} +6 -12
  18. package/dist/{chunk-YRDCY6BI.js → chunk-6UKNUI46.js} +0 -19
  19. package/dist/chunk-77LYWSJW.js +85 -0
  20. package/dist/{chunk-NCRFKPA4.js → chunk-7MSIOYJZ.js} +6 -8
  21. package/dist/{chunk-GIGOTRXX.js → chunk-7VJABRKB.js} +3 -10
  22. package/dist/{chunk-6QLLH6ID.js → chunk-7XWJCFWI.js} +8 -17
  23. package/dist/chunk-A3O23F2B.js +1 -0
  24. package/dist/chunk-AGYGWU6C.js +88 -0
  25. package/dist/chunk-AT2DSFP3.js +47 -0
  26. package/dist/{chunk-IIPYF6ZQ.js → chunk-B254JXS7.js} +16 -13
  27. package/dist/{chunk-GRB6T2TT.js → chunk-BSL62LBX.js} +19 -13
  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-OJ2TLWYD.js → chunk-CKFRMCZ7.js} +5 -3
  32. package/dist/{chunk-LZB3KTSH.js → chunk-CQWYZPPJ.js} +1 -1
  33. package/dist/{chunk-6RBNM5RO.js → chunk-CUOASXI7.js} +10 -10
  34. package/dist/{chunk-HG6HTUWU.js → chunk-CV5ZKED7.js} +2 -2
  35. package/dist/{chunk-HJERFB7J.js → chunk-DDRYT3SY.js} +2 -2
  36. package/dist/chunk-DGCAM2UJ.js +60 -0
  37. package/dist/{chunk-FD7YU53N.js → chunk-DT3QGFXB.js} +4 -4
  38. package/dist/chunk-F73DTG2V.js +123 -0
  39. package/dist/{chunk-Z3IG5WRA.js → chunk-FJUVYRNT.js} +3 -3
  40. package/dist/{chunk-KQPLFVFR.js → chunk-FLZD7HQY.js} +0 -2
  41. package/dist/chunk-GG54WBLA.js +134 -0
  42. package/dist/{chunk-64JDZWCV.js → chunk-GRKCUQG4.js} +6 -5
  43. package/dist/{chunk-YPHNHQYQ.js → chunk-GWDEKW7P.js} +6 -2
  44. package/dist/{chunk-4I5ULCYG.js → chunk-HFTS5AN7.js} +3 -3
  45. package/dist/{chunk-GUB7YKG2.js → chunk-I4U36P54.js} +6 -3
  46. package/dist/{chunk-BTRTORKU.js → chunk-I6CAF7C5.js} +6 -7
  47. package/dist/{chunk-TJCHA3OI.js → chunk-J65MK3N4.js} +7 -4
  48. package/dist/{chunk-IK23Q2OF.js → chunk-JHVYI5GK.js} +3 -3
  49. package/dist/{chunk-J6TU45KP.js → chunk-JSBNYRO4.js} +26 -12
  50. package/dist/chunk-K5FKEAAK.js +94 -0
  51. package/dist/{chunk-5URGARPH.js → chunk-KE4YVG5Q.js} +6 -10
  52. package/dist/{chunk-QCNLE27O.js → chunk-KRCLK5O4.js} +11 -7
  53. package/dist/{chunk-A4IMFAZX.js → chunk-LESI7J7B.js} +3 -3
  54. package/dist/chunk-MLT7SA3T.js +171 -0
  55. package/dist/chunk-MNEXMMLM.js +23 -0
  56. package/dist/{chunk-PVTACENM.js → chunk-MTK3GHDQ.js} +2 -2
  57. package/dist/chunk-MYP5ZTC3.js +169 -0
  58. package/dist/chunk-NA5UMOE5.js +55 -0
  59. package/dist/chunk-NAJKIBU2.js +163 -0
  60. package/dist/{chunk-WESZPFBZ.js → chunk-NERAWEIQ.js} +7 -4
  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-5O34ZNC3.js → chunk-NYWD5SI4.js} +19 -13
  65. package/dist/chunk-NZR4UGUZ.js +143 -0
  66. package/dist/{chunk-6J3QTWKC.js → chunk-NZT4TTNV.js} +18 -9
  67. package/dist/{chunk-JSD3H7WV.js → chunk-OYCK6BRG.js} +6 -6
  68. package/dist/{chunk-2555JXCP.js → chunk-PBPUSRTJ.js} +19 -11
  69. package/dist/{chunk-QD7H3WV3.js → chunk-PGDXFBKT.js} +8 -8
  70. package/dist/{chunk-NIX4SEKM.js → chunk-PREMZMLU.js} +7 -4
  71. package/dist/{chunk-4SSUM4CL.js → chunk-QUNH4BFR.js} +9 -6
  72. package/dist/{chunk-FHFVBOF3.js → chunk-QUYOV2ZJ.js} +6 -4
  73. package/dist/{chunk-KM6Z3VTI.js → chunk-QVTVDL6Y.js} +1 -1
  74. package/dist/{chunk-XI63BK3S.js → chunk-RATKKN3F.js} +3 -3
  75. package/dist/chunk-RM7MTOT5.js +339 -0
  76. package/dist/{chunk-DJZZ3FIP.js → chunk-RUR57JZQ.js} +5 -14
  77. package/dist/{chunk-ZV3AF5CL.js → chunk-S2CTBFLN.js} +13 -2
  78. package/dist/{chunk-72I7EVOL.js → chunk-SYZADSLI.js} +10 -6
  79. package/dist/{chunk-W2NEXOTG.js → chunk-T7RLPFGX.js} +2 -2
  80. package/dist/chunk-TAVVXXGO.js +131 -0
  81. package/dist/{chunk-BFRX6X4O.js → chunk-TZ6KJIR4.js} +23 -17
  82. package/dist/{chunk-V3TETH4J.js → chunk-U2ZYPPRG.js} +17 -16
  83. package/dist/{chunk-AHT35UWY.js → chunk-UTLKZPKJ.js} +10 -6
  84. package/dist/{chunk-OJRSPDNJ.js → chunk-VD4RFTNV.js} +8 -14
  85. package/dist/chunk-VLQGQFW7.js +110 -0
  86. package/dist/{chunk-RTDUTWJ4.js → chunk-VMT7Y3AT.js} +5 -8
  87. package/dist/{chunk-AXOKFS4K.js → chunk-W3KO3JNZ.js} +20 -4
  88. package/dist/{chunk-LGQ737BP.js → chunk-WHTLXQB6.js} +1 -1
  89. package/dist/chunk-WLRRMT6W.js +1 -0
  90. package/dist/{chunk-2FCSWBSM.js → chunk-WMWX6DPB.js} +3 -3
  91. package/dist/{chunk-UMC64NCT.js → chunk-WVBGQCYC.js} +6 -3
  92. package/dist/{chunk-TEOLG3N2.js → chunk-X4BQHXLB.js} +10 -6
  93. package/dist/{chunk-SY6V3HAK.js → chunk-XDU27NRX.js} +3 -3
  94. package/dist/{chunk-KA2J5OBA.js → chunk-XQDD76EF.js} +4 -7
  95. package/dist/chunk-XTATJMY6.js +64 -0
  96. package/dist/chunk-XYXMPHND.js +1 -0
  97. package/dist/{chunk-7ZWBHHRK.js → chunk-YNU6VRD5.js} +23 -32
  98. package/dist/{chunk-6SJPVQQW.js → chunk-Z3HF6XJ3.js} +1 -1
  99. package/dist/{chunk-I4URNMI7.js → chunk-ZC4MZAEX.js} +9 -7
  100. package/dist/{chunk-PWBPHGM3.js → chunk-ZCEUVK2R.js} +2 -2
  101. package/dist/{chunk-NQVRF4RB.js → chunk-ZMJ54TG6.js} +16 -13
  102. package/dist/chunk-ZT3NWE5U.js +1 -0
  103. package/dist/{chunk-RHOYF7MO.js → chunk-ZTLALVWA.js} +6 -15
  104. package/dist/components/Accordion/index.js +1 -1
  105. package/dist/components/Alert/index.js +2 -1
  106. package/dist/components/AlertDialog/index.js +3 -3
  107. package/dist/components/Amount/index.js +3 -1
  108. package/dist/components/AspectRatio/index.js +1 -1
  109. package/dist/components/Autocomplete/index.js +3 -2
  110. package/dist/components/Avatar/index.js +1 -1
  111. package/dist/components/AvatarGroup/index.js +3 -2
  112. package/dist/components/Badge/index.js +1 -1
  113. package/dist/components/Banner/index.js +2 -1
  114. package/dist/components/Breadcrumb/index.js +2 -1
  115. package/dist/components/Button/index.js +1 -1
  116. package/dist/components/ButtonGroup/index.js +1 -1
  117. package/dist/components/Callout/index.js +1 -1
  118. package/dist/components/Card/index.js +3 -1
  119. package/dist/components/CheckList/index.js +1 -1
  120. package/dist/components/Checkbox/index.js +1 -1
  121. package/dist/components/CheckboxCard/index.js +9 -0
  122. package/dist/components/Chip/index.js +2 -1
  123. package/dist/components/Citation/index.js +17 -0
  124. package/dist/components/Code/index.js +1 -1
  125. package/dist/components/Combobox/index.js +1 -1
  126. package/dist/components/CommandPalette/index.js +3 -2
  127. package/dist/components/ContextMenu/index.js +2 -2
  128. package/dist/components/CountryBadge/index.js +1 -1
  129. package/dist/components/DataTable/index.js +2 -1
  130. package/dist/components/DatePicker/index.js +5 -1
  131. package/dist/components/DateRangePicker/index.js +5 -1
  132. package/dist/components/Dialog/index.js +2 -2
  133. package/dist/components/Drawer/index.js +2 -2
  134. package/dist/components/DropdownMenu/index.js +2 -2
  135. package/dist/components/EmptyState/index.js +1 -1
  136. package/dist/components/ErrorState/index.js +2 -1
  137. package/dist/components/EyebrowChip/index.js +4 -1
  138. package/dist/components/FileUpload/index.js +2 -1
  139. package/dist/components/FilterChip/index.js +3 -1
  140. package/dist/components/Flex/index.js +2 -1
  141. package/dist/components/FormError/index.js +1 -1
  142. package/dist/components/FormField/index.js +7 -4
  143. package/dist/components/GradientDivider/index.js +1 -1
  144. package/dist/components/Grid/index.js +2 -1
  145. package/dist/components/Heading/index.js +4 -1
  146. package/dist/components/HelperText/index.js +4 -1
  147. package/dist/components/HoverCard/index.js +3 -2
  148. package/dist/components/IconButton/index.js +2 -1
  149. package/dist/components/Input/index.js +1 -1
  150. package/dist/components/Kbd/index.js +1 -1
  151. package/dist/components/KeyboardShortcut/index.js +2 -2
  152. package/dist/components/Label/index.js +4 -1
  153. package/dist/components/Link/index.js +1 -1
  154. package/dist/components/Logo/index.js +1 -1
  155. package/dist/components/MediaCard/index.js +9 -0
  156. package/dist/components/Menubar/index.js +2 -2
  157. package/dist/components/MessageBubble/index.js +18 -0
  158. package/dist/components/MoneyInput/index.js +3 -2
  159. package/dist/components/NavigationMenu/index.js +2 -2
  160. package/dist/components/NavigationRail/index.js +2 -1
  161. package/dist/components/NexubProvider/index.js +14 -0
  162. package/dist/components/NumberInput/index.js +3 -2
  163. package/dist/components/NumberTicker/index.js +10 -0
  164. package/dist/components/PageHeader/index.js +1 -1
  165. package/dist/components/Pagination/index.js +3 -1
  166. package/dist/components/PasswordInput/index.js +3 -2
  167. package/dist/components/Popover/index.js +2 -2
  168. package/dist/components/Progress/index.js +2 -1
  169. package/dist/components/PromptInput/index.js +15 -0
  170. package/dist/components/RadioCard/index.js +11 -0
  171. package/dist/components/RadioGroup/index.js +1 -1
  172. package/dist/components/Rating/index.js +2 -1
  173. package/dist/components/ScrollArea/index.js +1 -1
  174. package/dist/components/SearchInput/index.js +3 -2
  175. package/dist/components/Section/index.js +1 -1
  176. package/dist/components/SegmentedControl/index.js +3 -2
  177. package/dist/components/Select/index.js +2 -2
  178. package/dist/components/Separator/index.js +1 -1
  179. package/dist/components/Sidebar/index.js +2 -1
  180. package/dist/components/Skeleton/index.js +1 -1
  181. package/dist/components/Spinner/index.js +2 -1
  182. package/dist/components/SplitButton/index.js +5 -5
  183. package/dist/components/Stack/index.js +2 -1
  184. package/dist/components/StatusPill/index.js +1 -1
  185. package/dist/components/StreamingText/index.js +8 -0
  186. package/dist/components/Switch/index.js +1 -1
  187. package/dist/components/Table/index.js +1 -1
  188. package/dist/components/Tabs/index.js +3 -2
  189. package/dist/components/Tag/index.js +1 -1
  190. package/dist/components/Text/index.js +1 -1
  191. package/dist/components/Textarea/index.js +1 -1
  192. package/dist/components/ThinkingIndicator/index.js +9 -0
  193. package/dist/components/Toast/index.js +3 -1
  194. package/dist/components/Tooltip/index.js +2 -1
  195. package/dist/components/TopNav/index.js +2 -1
  196. package/dist/index.d.ts +440 -24
  197. package/dist/index.js +225 -146
  198. package/package.json +52 -50
  199. package/dist/chunk-63DPMUMR.js +0 -67
  200. package/dist/chunk-CHGPGRML.js +0 -115
  201. package/dist/chunk-H2W7IYVY.js +0 -155
  202. package/dist/chunk-J2T4GFFS.js +0 -85
  203. package/dist/chunk-LH3BSAIS.js +0 -119
  204. package/dist/chunk-LMPGHWUA.js +0 -114
  205. package/dist/chunk-NMH5WSZG.js +0 -72
  206. package/dist/chunk-P44EROBX.js +0 -55
  207. package/dist/chunk-TYTW4F3B.js +0 -178
@@ -0,0 +1,54 @@
1
+ 'use client';
2
+ import {
3
+ useNexubMessages
4
+ } from "./chunk-24ZFAXB2.js";
5
+ import {
6
+ cn
7
+ } from "./chunk-Q7G5WGYV.js";
8
+
9
+ // src/components/ThinkingIndicator/ThinkingIndicator.tsx
10
+ import * as React from "react";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
12
+ var fallbackMessages = { thinking: "Thinking" };
13
+ var ThinkingIndicator = React.forwardRef(
14
+ ({ label, size = "md", messages: messagesProp, className, ...props }, ref) => {
15
+ const m = {
16
+ ...fallbackMessages,
17
+ ...useNexubMessages(),
18
+ ...messagesProp
19
+ };
20
+ const text = label === void 0 ? m.thinking : label;
21
+ return /* @__PURE__ */ jsxs(
22
+ "div",
23
+ {
24
+ ref,
25
+ role: "status",
26
+ "aria-live": "polite",
27
+ className: cn(
28
+ "inline-flex items-center text-[var(--color-on-surface-variant)]",
29
+ size === "sm" ? "gap-2 text-label-md" : "gap-2.5 text-body-md",
30
+ className
31
+ ),
32
+ ...props,
33
+ children: [
34
+ /* @__PURE__ */ jsx(
35
+ "span",
36
+ {
37
+ "aria-hidden": "true",
38
+ className: cn(
39
+ "nx-morph shrink-0 rounded-full bg-[var(--color-primary)]",
40
+ size === "sm" ? "size-4" : "size-5"
41
+ )
42
+ }
43
+ ),
44
+ text === null ? /* @__PURE__ */ jsx("span", { className: "sr-only", children: m.thinking }) : /* @__PURE__ */ jsx("span", { className: "nx-shimmer", children: text })
45
+ ]
46
+ }
47
+ );
48
+ }
49
+ );
50
+ ThinkingIndicator.displayName = "ThinkingIndicator";
51
+
52
+ export {
53
+ ThinkingIndicator
54
+ };
@@ -12,14 +12,14 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
12
12
  var linkVariants = cva(
13
13
  [
14
14
  "inline-flex items-center gap-1 transition-colors",
15
- "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"
15
+ "rounded-shape-min"
16
16
  ],
17
17
  {
18
18
  variants: {
19
19
  variant: {
20
- default: "text-[var(--color-brand-primary-500)] hover:text-[var(--color-brand-primary-600)]",
21
- muted: "text-[var(--color-text-muted)] hover:text-[var(--color-text-primary)]",
22
- underlined: "text-[var(--color-brand-primary-500)] underline underline-offset-4 hover:text-[var(--color-brand-primary-600)]"
20
+ default: "text-[var(--color-primary)] underline-offset-4 hover:underline",
21
+ muted: "text-[var(--color-on-surface-muted)] hover:text-[var(--color-on-surface)]",
22
+ underlined: "text-[var(--color-primary)] underline underline-offset-4 hover:decoration-2"
23
23
  }
24
24
  },
25
25
  defaultVariants: {
@@ -16,8 +16,9 @@ var logoVariants = cva("inline-flex min-w-0 max-w-full items-center gap-2", {
16
16
  lg: "h-10"
17
17
  },
18
18
  tone: {
19
- default: "text-[var(--color-text-primary)]",
20
- inverse: "text-white"
19
+ default: "text-[var(--color-on-surface)]",
20
+ // Brand asset: the inverse mark is always white (on dark or imagery), in both themes.
21
+ inverse: "text-[var(--color-palette-neutral-100)]"
21
22
  }
22
23
  },
23
24
  defaultVariants: {
@@ -84,7 +85,7 @@ var Logo = React.forwardRef(
84
85
  wordmarkSizeMap[resolvedSize],
85
86
  // leading-normal so the clip box doesn't cut descenders.
86
87
  "min-w-0 truncate font-medium tracking-tight leading-normal",
87
- resolvedTone === "inverse" ? "opacity-70" : "text-[var(--color-text-muted)]"
88
+ resolvedTone === "inverse" ? "opacity-70" : "text-[var(--color-on-surface-muted)]"
88
89
  ),
89
90
  children: product
90
91
  }
@@ -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";
@@ -25,22 +28,13 @@ var Grid = React.forwardRef(
25
28
  ...rest
26
29
  }, ref) => {
27
30
  const Comp = asChild ? Slot : "div";
28
- const inlineStyle = {
29
- ...cols !== void 0 ? {
30
- gridTemplateColumns: typeof cols === "number" ? `repeat(${cols}, minmax(0, 1fr))` : cols
31
- } : {},
32
- ...rows !== void 0 ? {
33
- gridTemplateRows: typeof rows === "number" ? `repeat(${rows}, minmax(0, 1fr))` : rows
34
- } : {},
35
- ...gap !== void 0 ? { gap: typeof gap === "number" ? `${gap * 0.25}rem` : gap } : {},
36
- ...style
37
- };
31
+ const layout = layoutProps({ gap, cols, rows, style });
38
32
  return /* @__PURE__ */ jsx(
39
33
  Comp,
40
34
  {
41
35
  ref,
42
- className: cn("grid", flow && flowClass[flow], className),
43
- style: inlineStyle,
36
+ className: cn("grid", layout.className, flow && flowClass[flow], className),
37
+ style: layout.style,
44
38
  ...rest,
45
39
  children
46
40
  }
@@ -3,24 +3,6 @@ import {
3
3
  useIsomorphicLayoutEffect
4
4
  } from "./chunk-NHUQLIHL.js";
5
5
 
6
- // src/hooks/useMergedRefs.ts
7
- import { useCallback, useRef } from "react";
8
- function setRef(ref, value) {
9
- if (!ref) return;
10
- if (typeof ref === "function") {
11
- ref(value);
12
- } else {
13
- ref.current = value;
14
- }
15
- }
16
- function useMergedRefs(...refs) {
17
- const refsRef = useRef(refs);
18
- refsRef.current = refs;
19
- return useCallback((node) => {
20
- for (const ref of refsRef.current) setRef(ref, node);
21
- }, []);
22
- }
23
-
24
6
  // src/hooks/useSlidingIndicator.ts
25
7
  function useSlidingIndicator(ref, activeSelector) {
26
8
  useIsomorphicLayoutEffect(() => {
@@ -50,6 +32,5 @@ function useSlidingIndicator(ref, activeSelector) {
50
32
  }
51
33
 
52
34
  export {
53
- useMergedRefs,
54
35
  useSlidingIndicator
55
36
  };
@@ -0,0 +1,85 @@
1
+ 'use client';
2
+ import {
3
+ cn
4
+ } from "./chunk-Q7G5WGYV.js";
5
+
6
+ // src/components/StatusPill/StatusPill.tsx
7
+ import * as React from "react";
8
+ import { cva } from "class-variance-authority";
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
+ var statusPillVariants = cva(
11
+ "inline-flex items-center gap-1.5 rounded-shape-control px-2.5 py-1 text-xs font-medium select-none",
12
+ {
13
+ variants: {
14
+ tone: {
15
+ neutral: "bg-[var(--color-surface-container-high)] text-[var(--color-on-surface-variant)] border border-[var(--color-outline-variant)]",
16
+ info: "bg-[var(--color-info-container)] text-[var(--color-on-info-container)] border border-[color-mix(in_srgb,var(--color-info)_35%,transparent)]",
17
+ success: "bg-[var(--color-success-container)] text-[var(--color-on-success-container)] border border-[color-mix(in_srgb,var(--color-success)_35%,transparent)]",
18
+ warning: "bg-[var(--color-warning-container)] text-[var(--color-on-warning-container)] border border-[color-mix(in_srgb,var(--color-warning)_35%,transparent)]",
19
+ danger: "bg-[var(--color-error-container)] text-[var(--color-on-error-container)] border border-[color-mix(in_srgb,var(--color-error)_35%,transparent)]",
20
+ leap: "bg-[var(--color-leap-container)] text-[var(--color-on-leap-container)] border border-[color-mix(in_srgb,var(--color-leap)_35%,transparent)]",
21
+ bookub: "bg-[var(--color-bookub-container)] text-[var(--color-on-bookub-container)] border border-[color-mix(in_srgb,var(--color-bookub)_35%,transparent)]",
22
+ payub: "bg-[var(--color-payub-container)] text-[var(--color-on-payub-container)] border border-[color-mix(in_srgb,var(--color-payub)_35%,transparent)]",
23
+ founderub: "bg-[var(--color-founderub-container)] text-[var(--color-on-founderub-container)] border border-[color-mix(in_srgb,var(--color-founderub)_35%,transparent)]"
24
+ }
25
+ },
26
+ defaultVariants: {
27
+ tone: "neutral"
28
+ }
29
+ }
30
+ );
31
+ var dotColorMap = {
32
+ neutral: "bg-[var(--color-outline)]",
33
+ info: "bg-[var(--color-info)]",
34
+ success: "bg-[var(--color-success)]",
35
+ warning: "bg-[var(--color-warning)]",
36
+ danger: "bg-[var(--color-error)]",
37
+ leap: "bg-[var(--color-leap)]",
38
+ bookub: "bg-[var(--color-bookub)]",
39
+ payub: "bg-[var(--color-payub)]",
40
+ founderub: "bg-[var(--color-founderub)]"
41
+ };
42
+ var pulseTones = ["success", "info"];
43
+ var StatusPill = React.forwardRef(
44
+ ({ className, tone = "neutral", label, dot = false, ...props }, ref) => {
45
+ const shouldPulse = dot && pulseTones.includes(tone);
46
+ return /* @__PURE__ */ jsxs(
47
+ "span",
48
+ {
49
+ ref,
50
+ className: cn(statusPillVariants({ tone }), className),
51
+ ...props,
52
+ children: [
53
+ dot && /* @__PURE__ */ jsxs("span", { className: "relative inline-flex h-2 w-2 shrink-0", children: [
54
+ shouldPulse && /* @__PURE__ */ jsx(
55
+ "span",
56
+ {
57
+ className: cn(
58
+ "animate-ping absolute inline-flex h-full w-full rounded-full opacity-75",
59
+ dotColorMap[tone]
60
+ ),
61
+ "aria-hidden": "true"
62
+ }
63
+ ),
64
+ /* @__PURE__ */ jsx(
65
+ "span",
66
+ {
67
+ className: cn(
68
+ "relative inline-flex rounded-full h-2 w-2",
69
+ dotColorMap[tone]
70
+ )
71
+ }
72
+ )
73
+ ] }),
74
+ label
75
+ ]
76
+ }
77
+ );
78
+ }
79
+ );
80
+ StatusPill.displayName = "StatusPill";
81
+
82
+ export {
83
+ statusPillVariants,
84
+ StatusPill
85
+ };
@@ -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";
@@ -27,18 +30,13 @@ var Flex = React.forwardRef(
27
30
  ...rest
28
31
  }, ref) => {
29
32
  const Comp = asChild ? Slot : "div";
30
- const inlineStyle = {
31
- ...gap !== void 0 ? { gap: typeof gap === "number" ? `${gap * 0.25}rem` : gap } : {},
32
- ...align ? { alignItems: align } : {},
33
- ...justify ? { justifyContent: justify } : {},
34
- ...style
35
- };
33
+ const layout = layoutProps({ gap, align, justify, style });
36
34
  return /* @__PURE__ */ jsx(
37
35
  Comp,
38
36
  {
39
37
  ref,
40
- className: cn("flex", directionClass[direction], wrap && "flex-wrap", className),
41
- style: inlineStyle,
38
+ className: cn("flex", layout.className, directionClass[direction], wrap && "flex-wrap", className),
39
+ style: layout.style,
42
40
  ...rest,
43
41
  children
44
42
  }
@@ -1,8 +1,7 @@
1
1
  'use client';
2
2
  import {
3
- enterExit,
4
3
  floatingSurface
5
- } from "./chunk-KQPLFVFR.js";
4
+ } from "./chunk-FLZD7HQY.js";
6
5
  import {
7
6
  glassSurfaceClass
8
7
  } from "./chunk-DEIBF3P7.js";
@@ -28,13 +27,7 @@ var Content2 = React.forwardRef(
28
27
  className: cn(
29
28
  "z-[var(--z-popover)] p-4 outline-none",
30
29
  floatingSurface,
31
- enterExit,
32
- "outline-none",
33
- "data-[state=open]:animate-in data-[state=closed]:animate-out",
34
- "data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0",
35
- "data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95",
36
- "data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2",
37
- "data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2",
30
+ "nx-motion nx-pop origin-[var(--radix-popover-content-transform-origin)]",
38
31
  surface === "glass" && glassSurfaceClass,
39
32
  className
40
33
  ),
@@ -51,7 +44,7 @@ var Arrow2 = React.forwardRef(
51
44
  RadixPopover.Arrow,
52
45
  {
53
46
  ref,
54
- className: cn("fill-[var(--color-border-default)]", className),
47
+ className: cn("fill-[var(--color-outline-variant)]", className),
55
48
  ...props
56
49
  }
57
50
  );
@@ -1,12 +1,11 @@
1
1
  'use client';
2
2
  import {
3
- enterExit,
4
3
  floatingSurface,
5
4
  menuContent,
6
5
  menuItem,
7
6
  menuLabel,
8
7
  menuSeparator
9
- } from "./chunk-KQPLFVFR.js";
8
+ } from "./chunk-FLZD7HQY.js";
10
9
  import {
11
10
  cn
12
11
  } from "./chunk-Q7G5WGYV.js";
@@ -32,10 +31,7 @@ var Content2 = React.forwardRef(
32
31
  "z-[var(--z-popover)] min-w-48 outline-none",
33
32
  floatingSurface,
34
33
  menuContent,
35
- enterExit,
36
- "data-[state=open]:animate-in data-[state=closed]:animate-out",
37
- "data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0",
38
- "data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95",
34
+ "nx-motion nx-pop origin-[var(--radix-context-menu-content-transform-origin)]",
39
35
  className
40
36
  ),
41
37
  ...props
@@ -94,11 +90,11 @@ var CheckboxItem2 = React.forwardRef(function ContextMenuCheckboxItem({ classNam
94
90
  RadixContextMenu.CheckboxItem,
95
91
  {
96
92
  ref,
97
- className: cn(itemBaseClasses, "pl-8", className),
93
+ className: cn(itemBaseClasses, "ps-8", className),
98
94
  checked,
99
95
  ...props,
100
96
  children: [
101
- /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-4 w-4 items-center justify-center", children: /* @__PURE__ */ jsx(RadixContextMenu.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { className: "h-4 w-4" }) }) }),
97
+ /* @__PURE__ */ jsx("span", { className: "absolute start-2 flex h-4 w-4 items-center justify-center", children: /* @__PURE__ */ jsx(RadixContextMenu.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { className: "h-4 w-4" }) }) }),
102
98
  children
103
99
  ]
104
100
  }
@@ -110,10 +106,10 @@ var RadioItem2 = React.forwardRef(function ContextMenuRadioItem({ className, chi
110
106
  RadixContextMenu.RadioItem,
111
107
  {
112
108
  ref,
113
- className: cn(itemBaseClasses, "pl-8", className),
109
+ className: cn(itemBaseClasses, "ps-8", className),
114
110
  ...props,
115
111
  children: [
116
- /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-4 w-4 items-center justify-center", children: /* @__PURE__ */ jsx(RadixContextMenu.ItemIndicator, { children: /* @__PURE__ */ jsx("svg", { className: "h-2 w-2 fill-current", viewBox: "0 0 8 8", "aria-hidden": "true", children: /* @__PURE__ */ jsx("circle", { cx: "4", cy: "4", r: "4" }) }) }) }),
112
+ /* @__PURE__ */ jsx("span", { className: "absolute start-2 flex h-4 w-4 items-center justify-center", children: /* @__PURE__ */ jsx(RadixContextMenu.ItemIndicator, { children: /* @__PURE__ */ jsx("svg", { className: "h-2 w-2 fill-current", viewBox: "0 0 8 8", "aria-hidden": "true", children: /* @__PURE__ */ jsx("circle", { cx: "4", cy: "4", r: "4" }) }) }) }),
117
113
  children
118
114
  ]
119
115
  }
@@ -133,7 +129,7 @@ var SubTrigger2 = React.forwardRef(function ContextMenuSubTrigger({ className, c
133
129
  ...props,
134
130
  children: [
135
131
  children,
136
- /* @__PURE__ */ jsx(ChevronRight, { className: "ml-auto h-4 w-4" })
132
+ /* @__PURE__ */ jsx(ChevronRight, { className: "ms-auto h-4 w-4 rtl:-scale-x-100" })
137
133
  ]
138
134
  }
139
135
  );
@@ -148,12 +144,7 @@ var SubContent2 = React.forwardRef(function ContextMenuSubContent({ className, .
148
144
  "z-[var(--z-popover)] min-w-48 outline-none",
149
145
  floatingSurface,
150
146
  menuContent,
151
- enterExit,
152
- "data-[state=open]:animate-in data-[state=closed]:animate-out",
153
- "data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0",
154
- "data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95",
155
- "data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2",
156
- "data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2",
147
+ "nx-motion nx-pop origin-[var(--radix-context-menu-content-transform-origin)]",
157
148
  className
158
149
  ),
159
150
  ...props
@@ -0,0 +1 @@
1
+ 'use client';
@@ -0,0 +1,88 @@
1
+ 'use client';
2
+ import {
3
+ useIntlLocale
4
+ } from "./chunk-24ZFAXB2.js";
5
+ import {
6
+ cn
7
+ } from "./chunk-Q7G5WGYV.js";
8
+
9
+ // src/components/NumberTicker/NumberTicker.tsx
10
+ import * as React from "react";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
12
+ var SHIFT = [
13
+ "translate-y-0",
14
+ "-translate-y-[10%]",
15
+ "-translate-y-[20%]",
16
+ "-translate-y-[30%]",
17
+ "-translate-y-[40%]",
18
+ "-translate-y-[50%]",
19
+ "-translate-y-[60%]",
20
+ "-translate-y-[70%]",
21
+ "-translate-y-[80%]",
22
+ "-translate-y-[90%]"
23
+ ];
24
+ var DIGITS = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
25
+ function Char({ char, className, enter }) {
26
+ const [entering] = React.useState(enter);
27
+ const motion = entering ? { "data-motion": "from-fade" } : {};
28
+ if (!/^[0-9]$/.test(char)) {
29
+ return /* @__PURE__ */ jsx("span", { className: cn(entering && "nx-motion", className), ...motion, children: char });
30
+ }
31
+ return /* @__PURE__ */ jsxs(
32
+ "span",
33
+ {
34
+ "data-digit": char,
35
+ className: cn("relative inline-block overflow-clip", entering && "nx-motion", className),
36
+ ...motion,
37
+ children: [
38
+ /* @__PURE__ */ jsx("span", { className: "invisible", children: "0" }),
39
+ /* @__PURE__ */ jsx(
40
+ "span",
41
+ {
42
+ className: cn(
43
+ "absolute inset-x-0 top-0 flex h-[1000%] flex-col text-center",
44
+ "transition-transform duration-spatial-default ease-spatial-default motion-reduce:transition-none",
45
+ SHIFT[Number(char)]
46
+ ),
47
+ children: DIGITS.map((d) => /* @__PURE__ */ jsx("span", { className: "h-[10%]", children: d }, d))
48
+ }
49
+ )
50
+ ]
51
+ }
52
+ );
53
+ }
54
+ var NumberTicker = React.forwardRef(
55
+ ({ value, format, locale: localeProp, className, "aria-live": ariaLive = "off", ...props }, ref) => {
56
+ const locale = useIntlLocale(localeProp);
57
+ const parts = typeof value === "number" ? [{ value: new Intl.NumberFormat(locale, format).format(value) }] : typeof value === "string" ? [{ value }] : value;
58
+ const chars = parts.flatMap((p) => Array.from(p.value, (char) => ({ char, className: p.className })));
59
+ const text = parts.map((p) => p.value).join("");
60
+ const mounted = React.useRef(false);
61
+ React.useEffect(() => {
62
+ mounted.current = true;
63
+ }, []);
64
+ return /* @__PURE__ */ jsxs(
65
+ "span",
66
+ {
67
+ ref,
68
+ className: cn("whitespace-nowrap tabular-nums", className),
69
+ "aria-live": ariaLive,
70
+ "aria-atomic": "true",
71
+ ...props,
72
+ children: [
73
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: text }),
74
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: chars.map(({ char, className: cls }, i) => {
75
+ const fromEnd = chars.length - 1 - i;
76
+ const kind = /^[0-9]$/.test(char) ? "d" : `s${char}`;
77
+ return /* @__PURE__ */ jsx(Char, { char, className: cls, enter: mounted.current }, `${fromEnd}${kind}`);
78
+ }) })
79
+ ]
80
+ }
81
+ );
82
+ }
83
+ );
84
+ NumberTicker.displayName = "NumberTicker";
85
+
86
+ export {
87
+ NumberTicker
88
+ };
@@ -0,0 +1,47 @@
1
+ 'use client';
2
+ import {
3
+ SelectableCardContent,
4
+ selectableCardClass,
5
+ useCardIds
6
+ } from "./chunk-K5FKEAAK.js";
7
+ import {
8
+ cn
9
+ } from "./chunk-Q7G5WGYV.js";
10
+
11
+ // src/components/CheckboxCard/CheckboxCard.tsx
12
+ import * as React from "react";
13
+ import * as RadixCheckbox from "@radix-ui/react-checkbox";
14
+ import { jsx } from "react/jsx-runtime";
15
+ var CheckboxCard = React.forwardRef(
16
+ ({ className, icon, title, description, children, onCheckedChange, ...props }, ref) => {
17
+ const ids = useCardIds(description != null);
18
+ return /* @__PURE__ */ jsx(
19
+ RadixCheckbox.Root,
20
+ {
21
+ ref,
22
+ "aria-labelledby": ids.titleId,
23
+ "aria-describedby": ids.describedBy,
24
+ className: cn(selectableCardClass, className),
25
+ onCheckedChange: onCheckedChange ? (c) => onCheckedChange(c === true) : void 0,
26
+ ...props,
27
+ children: /* @__PURE__ */ jsx(
28
+ SelectableCardContent,
29
+ {
30
+ icon,
31
+ title,
32
+ description,
33
+ titleId: ids.titleId,
34
+ descriptionId: ids.descriptionId,
35
+ shape: "square",
36
+ children
37
+ }
38
+ )
39
+ }
40
+ );
41
+ }
42
+ );
43
+ CheckboxCard.displayName = "CheckboxCard";
44
+
45
+ export {
46
+ CheckboxCard
47
+ };
@@ -1,4 +1,7 @@
1
1
  'use client';
2
+ import {
3
+ useNexubMessages
4
+ } from "./chunk-24ZFAXB2.js";
2
5
  import {
3
6
  cn
4
7
  } from "./chunk-Q7G5WGYV.js";
@@ -9,21 +12,21 @@ import { cva } from "class-variance-authority";
9
12
  import { jsx, jsxs } from "react/jsx-runtime";
10
13
  var alertVariants = cva(
11
14
  [
12
- "relative flex gap-3 rounded-lg border-l-4 p-4",
15
+ "relative flex gap-3 rounded-shape-container border-s-4 p-4",
13
16
  "w-full"
14
17
  ],
15
18
  {
16
19
  variants: {
17
20
  tone: {
18
- neutral: "bg-[var(--color-bg-subtle)] border-l-[var(--color-neutral-500)] text-[var(--color-text-primary)]",
19
- info: "bg-[var(--color-semantic-info-default)]/8 border-l-[var(--color-semantic-info-default)] text-[var(--color-semantic-info-default)]",
20
- success: "bg-[var(--color-semantic-success-default)]/8 border-l-[var(--color-semantic-success-default)] text-[var(--color-semantic-success-default)]",
21
- warning: "bg-[var(--color-semantic-warning-default)]/8 border-l-[var(--color-semantic-warning-default)] text-[var(--color-semantic-warning-default)]",
22
- danger: "bg-[var(--color-semantic-error-default)]/8 border-l-[var(--color-semantic-error-default)] text-[var(--color-semantic-error-default)]",
23
- leap: "bg-[var(--color-leap-500)]/8 border-l-[var(--color-leap-500)] text-[var(--color-leap-700)]",
24
- bookub: "bg-[var(--color-bookub-500)]/8 border-l-[var(--color-bookub-500)] text-[var(--color-bookub-700)]",
25
- payub: "bg-[var(--color-payub-500)]/8 border-l-[var(--color-payub-500)] text-[var(--color-payub-700)]",
26
- founderub: "bg-[var(--color-founderub-500)]/8 border-l-[var(--color-founderub-500)] text-[var(--color-founderub-700)]"
21
+ neutral: "bg-[var(--color-surface-container-low)] border-s-[var(--color-outline)] text-[var(--color-on-surface)]",
22
+ info: "bg-[var(--color-info-container)] border-s-[var(--color-info)] text-[var(--color-on-info-container)]",
23
+ success: "bg-[var(--color-success-container)] border-s-[var(--color-success)] text-[var(--color-on-success-container)]",
24
+ warning: "bg-[var(--color-warning-container)] border-s-[var(--color-warning)] text-[var(--color-on-warning-container)]",
25
+ danger: "bg-[var(--color-error-container)] border-s-[var(--color-error)] text-[var(--color-on-error-container)]",
26
+ leap: "bg-[var(--color-leap-container)] border-s-[var(--color-leap)] text-[var(--color-on-leap-container)]",
27
+ bookub: "bg-[var(--color-bookub-container)] border-s-[var(--color-bookub)] text-[var(--color-on-bookub-container)]",
28
+ payub: "bg-[var(--color-payub-container)] border-s-[var(--color-payub)] text-[var(--color-on-payub-container)]",
29
+ founderub: "bg-[var(--color-founderub-container)] border-s-[var(--color-founderub)] text-[var(--color-on-founderub-container)]"
27
30
  }
28
31
  },
29
32
  defaultVariants: {
@@ -42,6 +45,7 @@ var Alert = React.forwardRef(
42
45
  children,
43
46
  ...props
44
47
  }, ref) => {
48
+ const messages = useNexubMessages();
45
49
  return /* @__PURE__ */ jsxs(
46
50
  "div",
47
51
  {
@@ -61,11 +65,10 @@ var Alert = React.forwardRef(
61
65
  "button",
62
66
  {
63
67
  type: "button",
64
- "aria-label": "Dismiss alert",
68
+ "aria-label": messages.dismissAlert,
65
69
  onClick: onClose,
66
70
  className: cn(
67
- "shrink-0 inline-flex items-center justify-center rounded-md w-6 h-6 opacity-60 hover:opacity-100 transition-opacity",
68
- "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)]"
71
+ "nx-state-layer shrink-0 inline-flex items-center justify-center rounded-full w-6 h-6"
69
72
  ),
70
73
  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" }) })
71
74
  }
@@ -2,6 +2,9 @@
2
2
  import {
3
3
  glassSurfaceClass
4
4
  } from "./chunk-DEIBF3P7.js";
5
+ import {
6
+ useNexubMessages
7
+ } from "./chunk-24ZFAXB2.js";
5
8
  import {
6
9
  cn
7
10
  } from "./chunk-Q7G5WGYV.js";
@@ -33,18 +36,21 @@ var Logo = React.forwardRef(
33
36
  );
34
37
  Logo.displayName = "TopNav.Logo";
35
38
  var Menu = React.forwardRef(
36
- ({ className, ...props }, ref) => (
37
- // Scrolls horizontally on narrow screens rather than hiding the links.
38
- /* @__PURE__ */ jsx(
39
- "nav",
40
- {
41
- ref,
42
- "aria-label": "Main",
43
- className: cn("flex min-w-0 items-center gap-1 overflow-x-auto", className),
44
- ...props
45
- }
46
- )
47
- )
39
+ ({ className, ...props }, ref) => {
40
+ const messages = useNexubMessages();
41
+ return (
42
+ // Scrolls horizontally on narrow screens rather than hiding the links.
43
+ /* @__PURE__ */ jsx(
44
+ "nav",
45
+ {
46
+ ref,
47
+ "aria-label": messages.mainNavigation,
48
+ className: cn("flex min-w-0 items-center gap-1 overflow-x-auto", className),
49
+ ...props
50
+ }
51
+ )
52
+ );
53
+ }
48
54
  );
49
55
  Menu.displayName = "TopNav.Menu";
50
56
  var Item = React.forwardRef(
@@ -67,7 +73,7 @@ var Item = React.forwardRef(
67
73
  );
68
74
  Item.displayName = "TopNav.Item";
69
75
  var Actions = React.forwardRef(
70
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("ml-auto flex items-center gap-2", className), ...props })
76
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("ms-auto flex items-center gap-2", className), ...props })
71
77
  );
72
78
  Actions.displayName = "TopNav.Actions";
73
79
  var TopNav = { Root, Logo, Menu, Item, Actions };