@zentauri-ui/zentauri-components 1.7.6 → 1.7.8

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 (69) hide show
  1. package/README.md +9 -5
  2. package/cli/registry.json +2 -0
  3. package/dist/chunk-GRJFGIZC.mjs +417 -0
  4. package/dist/chunk-GRJFGIZC.mjs.map +1 -0
  5. package/dist/chunk-QHEHBC6M.js +421 -0
  6. package/dist/chunk-QHEHBC6M.js.map +1 -0
  7. package/dist/design-system/index.d.ts +2 -0
  8. package/dist/design-system/index.d.ts.map +1 -1
  9. package/dist/design-system/rating.d.ts +43 -0
  10. package/dist/design-system/rating.d.ts.map +1 -0
  11. package/dist/design-system/tree-view.d.ts +66 -0
  12. package/dist/design-system/tree-view.d.ts.map +1 -0
  13. package/dist/ui/rating/index.d.ts +4 -0
  14. package/dist/ui/rating/index.d.ts.map +1 -0
  15. package/dist/ui/rating/rating.d.ts +6 -0
  16. package/dist/ui/rating/rating.d.ts.map +1 -0
  17. package/dist/ui/rating/types.d.ts +25 -0
  18. package/dist/ui/rating/types.d.ts.map +1 -0
  19. package/dist/ui/rating/variants.d.ts +7 -0
  20. package/dist/ui/rating/variants.d.ts.map +1 -0
  21. package/dist/ui/rating.js +319 -0
  22. package/dist/ui/rating.js.map +1 -0
  23. package/dist/ui/rating.mjs +315 -0
  24. package/dist/ui/rating.mjs.map +1 -0
  25. package/dist/ui/tree-view/animated/animations.d.ts +6 -0
  26. package/dist/ui/tree-view/animated/animations.d.ts.map +1 -0
  27. package/dist/ui/tree-view/animated/index.d.ts +5 -0
  28. package/dist/ui/tree-view/animated/index.d.ts.map +1 -0
  29. package/dist/ui/tree-view/animated/tree-view-animated.d.ts +6 -0
  30. package/dist/ui/tree-view/animated/tree-view-animated.d.ts.map +1 -0
  31. package/dist/ui/tree-view/animated/types.d.ts +6 -0
  32. package/dist/ui/tree-view/animated/types.d.ts.map +1 -0
  33. package/dist/ui/tree-view/animated.js +53 -0
  34. package/dist/ui/tree-view/animated.js.map +1 -0
  35. package/dist/ui/tree-view/animated.mjs +50 -0
  36. package/dist/ui/tree-view/animated.mjs.map +1 -0
  37. package/dist/ui/tree-view/index.d.ts +5 -0
  38. package/dist/ui/tree-view/index.d.ts.map +1 -0
  39. package/dist/ui/tree-view/tree-view-base.d.ts +15 -0
  40. package/dist/ui/tree-view/tree-view-base.d.ts.map +1 -0
  41. package/dist/ui/tree-view/tree-view.d.ts +6 -0
  42. package/dist/ui/tree-view/tree-view.d.ts.map +1 -0
  43. package/dist/ui/tree-view/types.d.ts +61 -0
  44. package/dist/ui/tree-view/types.d.ts.map +1 -0
  45. package/dist/ui/tree-view/variants.d.ts +9 -0
  46. package/dist/ui/tree-view/variants.d.ts.map +1 -0
  47. package/dist/ui/tree-view.js +27 -0
  48. package/dist/ui/tree-view.js.map +1 -0
  49. package/dist/ui/tree-view.mjs +14 -0
  50. package/dist/ui/tree-view.mjs.map +1 -0
  51. package/package.json +1 -1
  52. package/src/design-system/index.ts +2 -0
  53. package/src/design-system/rating.ts +81 -0
  54. package/src/design-system/tree-view.ts +113 -0
  55. package/src/ui/rating/index.ts +10 -0
  56. package/src/ui/rating/rating.test.tsx +139 -0
  57. package/src/ui/rating/rating.tsx +305 -0
  58. package/src/ui/rating/types.ts +33 -0
  59. package/src/ui/rating/variants.ts +26 -0
  60. package/src/ui/tree-view/animated/animations.ts +13 -0
  61. package/src/ui/tree-view/animated/index.ts +6 -0
  62. package/src/ui/tree-view/animated/tree-view-animated.tsx +52 -0
  63. package/src/ui/tree-view/animated/types.ts +6 -0
  64. package/src/ui/tree-view/index.ts +13 -0
  65. package/src/ui/tree-view/tree-view-base.tsx +496 -0
  66. package/src/ui/tree-view/tree-view.test.tsx +136 -0
  67. package/src/ui/tree-view/tree-view.tsx +9 -0
  68. package/src/ui/tree-view/types.ts +68 -0
  69. package/src/ui/tree-view/variants.ts +32 -0
@@ -0,0 +1,421 @@
1
+ 'use strict';
2
+
3
+ var chunkZS5756ZC_js = require('./chunk-ZS5756ZC.js');
4
+ var classVarianceAuthority = require('class-variance-authority');
5
+ var react = require('react');
6
+ var fa6 = require('react-icons/fa6');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ // src/design-system/tree-view.ts
10
+ var zuiTreeViewBase = "w-full text-[color:var(--zui-tree-view-fg,oklch(20.8%_0.042_265.755))] dark:text-[color:var(--zui-tree-view-fg-dark,oklch(92.9%_0.013_255.508))]";
11
+ var zuiTreeViewAppearances = {
12
+ default: "rounded-xl border border-[color:var(--zui-tree-view-default-border,#0000001a)] dark:border-[color:var(--zui-tree-view-default-border-dark,#ffffff1a)] p-2",
13
+ outline: "rounded-xl border border-[color:var(--zui-tree-view-outline-border,#00000026)] dark:border-[color:var(--zui-tree-view-outline-border-dark,#ffffff26)] p-2",
14
+ ghost: "p-1",
15
+ card: "rounded-xl border border-[color:var(--zui-tree-view-card-border,#0000001a)] dark:border-[color:var(--zui-tree-view-card-border-dark,#ffffff1a)] bg-[var(--zui-tree-view-card-bg,#0000000d)] dark:bg-[var(--zui-tree-view-card-bg-dark,#00000099)] p-3",
16
+ separated: "rounded-xl border border-[color:var(--zui-tree-view-separated-border,#0000001a)] dark:border-[color:var(--zui-tree-view-separated-border-dark,#ffffff1a)] bg-[var(--zui-tree-view-separated-bg,oklch(98.4%_0.003_247.858_/_0.4))] dark:bg-[var(--zui-tree-view-separated-bg-dark,oklch(12.9%_0.042_264.695_/_0.4))] p-3",
17
+ sky: "rounded-xl border border-[color:var(--zui-tree-view-sky-border,oklch(44.3%_0.11_240.79))] dark:border-[color:var(--zui-tree-view-sky-border-dark,oklch(58.8%_0.158_241.966))] p-2",
18
+ rose: "rounded-xl border border-[color:var(--zui-tree-view-rose-border,oklch(45.5%_0.188_13.697))] dark:border-[color:var(--zui-tree-view-rose-border-dark,oklch(58.6%_0.253_17.585))] p-2",
19
+ purple: "rounded-xl border border-[color:var(--zui-tree-view-purple-border,oklch(43.8%_0.218_303.724))] dark:border-[color:var(--zui-tree-view-purple-border-dark,oklch(55.8%_0.288_302.321))] p-2",
20
+ pink: "rounded-xl border border-[color:var(--zui-tree-view-pink-border,oklch(45.9%_0.187_3.815))] dark:border-[color:var(--zui-tree-view-pink-border-dark,oklch(59.2%_0.249_0.584))] p-2",
21
+ orange: "rounded-xl border border-[color:var(--zui-tree-view-orange-border,oklch(47%_0.157_37.304))] dark:border-[color:var(--zui-tree-view-orange-border-dark,oklch(64.6%_0.222_41.116))] p-2",
22
+ yellow: "rounded-xl border border-[color:var(--zui-tree-view-yellow-border,oklch(47.6%_0.114_61.907))] dark:border-[color:var(--zui-tree-view-yellow-border-dark,oklch(68.1%_0.162_75.834))] p-2",
23
+ teal: "rounded-xl border border-[color:var(--zui-tree-view-teal-border,oklch(43.7%_0.078_188.216))] dark:border-[color:var(--zui-tree-view-teal-border-dark,oklch(60%_0.118_184.704))] p-2",
24
+ indigo: "rounded-xl border border-[color:var(--zui-tree-view-indigo-border,oklch(39.8%_0.195_277.366))] dark:border-[color:var(--zui-tree-view-indigo-border-dark,oklch(51.1%_0.262_276.966))] p-2",
25
+ emerald: "rounded-xl border border-[color:var(--zui-tree-view-emerald-border,oklch(43.2%_0.095_166.913))] dark:border-[color:var(--zui-tree-view-emerald-border-dark,oklch(59.6%_0.145_163.225))] p-2",
26
+ "gradient-blue": "rounded-xl border border-[color:var(--zui-tree-view-gradient-blue-border,oklch(42.4%_0.199_265.638))] dark:border-[color:var(--zui-tree-view-gradient-blue-border-dark,oklch(54.6%_0.245_262.881))] p-2",
27
+ "gradient-green": "rounded-xl border border-[color:var(--zui-tree-view-gradient-green-border,oklch(44.8%_0.119_151.328))] dark:border-[color:var(--zui-tree-view-gradient-green-border-dark,oklch(62.7%_0.194_149.214))] p-2",
28
+ "gradient-red": "rounded-xl border border-[color:var(--zui-tree-view-gradient-red-border,oklch(44.4%_0.177_26.899))] dark:border-[color:var(--zui-tree-view-gradient-red-border-dark,oklch(57.7%_0.245_27.325))] p-2",
29
+ "gradient-yellow": "rounded-xl border border-[color:var(--zui-tree-view-gradient-yellow-border,oklch(47.6%_0.114_61.907))] dark:border-[color:var(--zui-tree-view-gradient-yellow-border-dark,oklch(68.1%_0.162_75.834))] p-2",
30
+ "gradient-purple": "rounded-xl border border-[color:var(--zui-tree-view-gradient-purple-border,oklch(43.8%_0.218_303.724))] dark:border-[color:var(--zui-tree-view-gradient-purple-border-dark,oklch(55.8%_0.288_302.321))] p-2",
31
+ "gradient-teal": "rounded-xl border border-[color:var(--zui-tree-view-gradient-teal-border,oklch(43.7%_0.078_188.216))] dark:border-[color:var(--zui-tree-view-gradient-teal-border-dark,oklch(60%_0.118_184.704))] p-2",
32
+ "gradient-indigo": "rounded-xl border border-[color:var(--zui-tree-view-gradient-indigo-border,oklch(39.8%_0.195_277.366))] dark:border-[color:var(--zui-tree-view-gradient-indigo-border-dark,oklch(51.1%_0.262_276.966))] p-2",
33
+ "gradient-pink": "rounded-xl border border-[color:var(--zui-tree-view-gradient-pink-border,oklch(45.9%_0.187_3.815))] dark:border-[color:var(--zui-tree-view-gradient-pink-border-dark,oklch(59.2%_0.249_0.584))] p-2",
34
+ "gradient-orange": "rounded-xl border border-[color:var(--zui-tree-view-gradient-orange-border,oklch(47%_0.157_37.304))] dark:border-[color:var(--zui-tree-view-gradient-orange-border-dark,oklch(64.6%_0.222_41.116))] p-2"
35
+ };
36
+ var zuiTreeViewSizes = {
37
+ sm: "text-xs",
38
+ md: "text-sm",
39
+ lg: "text-base"
40
+ };
41
+ var zuiTreeViewItemBase = "relative flex w-full items-center gap-2 rounded-lg pr-2 text-left font-medium outline-none transition select-none cursor-pointer hover:bg-[var(--zui-tree-view-item-hover,#0000000d)] dark:hover:bg-[var(--zui-tree-view-item-hover-dark,#ffffff0d)] focus-visible:ring-2 focus-visible:ring-[var(--zui-tree-view-ring-focus,#0000004d)] dark:focus-visible:ring-[var(--zui-tree-view-ring-focus-dark,#ffffff4d)] data-[disabled=true]:cursor-not-allowed data-[disabled=true]:opacity-50";
42
+ var zuiTreeViewItemSizes = {
43
+ sm: "py-1 text-xs",
44
+ md: "py-1.5 text-sm",
45
+ lg: "py-2 text-base"
46
+ };
47
+ var zuiTreeViewItemAppearances = {
48
+ default: "data-[selected=true]:bg-[var(--zui-tree-view-selected,#0000000f)] dark:data-[selected=true]:bg-[var(--zui-tree-view-selected-dark,#ffffff14)] data-[selected=true]:text-[color:var(--zui-tree-view-selected-fg,oklch(20.8%_0.042_265.755))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-selected-fg-dark,#ffffff)]",
49
+ outline: "data-[selected=true]:bg-[var(--zui-tree-view-selected,#0000000f)] dark:data-[selected=true]:bg-[var(--zui-tree-view-selected-dark,#ffffff14)] data-[selected=true]:text-[color:var(--zui-tree-view-selected-fg,oklch(20.8%_0.042_265.755))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-selected-fg-dark,#ffffff)]",
50
+ ghost: "data-[selected=true]:bg-[var(--zui-tree-view-selected,#0000000f)] dark:data-[selected=true]:bg-[var(--zui-tree-view-selected-dark,#ffffff14)] data-[selected=true]:text-[color:var(--zui-tree-view-selected-fg,oklch(20.8%_0.042_265.755))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-selected-fg-dark,#ffffff)]",
51
+ card: "data-[selected=true]:bg-[var(--zui-tree-view-selected,#00000014)] dark:data-[selected=true]:bg-[var(--zui-tree-view-selected-dark,#ffffff1f)] data-[selected=true]:text-[color:var(--zui-tree-view-selected-fg,oklch(20.8%_0.042_265.755))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-selected-fg-dark,#ffffff)]",
52
+ separated: "data-[selected=true]:bg-[var(--zui-tree-view-selected,#00000014)] dark:data-[selected=true]:bg-[var(--zui-tree-view-selected-dark,#ffffff1f)] data-[selected=true]:text-[color:var(--zui-tree-view-selected-fg,oklch(20.8%_0.042_265.755))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-selected-fg-dark,#ffffff)]",
53
+ sky: "data-[selected=true]:bg-[var(--zui-tree-view-sky-selected,oklch(95.1%_0.026_236.824))] dark:data-[selected=true]:bg-[var(--zui-tree-view-sky-selected-dark,oklch(58.8%_0.158_241.966_/_0.16))] data-[selected=true]:text-[color:var(--zui-tree-view-sky-selected-fg,oklch(44.3%_0.11_240.79))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-sky-selected-fg-dark,oklch(82.8%_0.111_230.318))]",
54
+ rose: "data-[selected=true]:bg-[var(--zui-tree-view-rose-selected,oklch(94.1%_0.03_12.58))] dark:data-[selected=true]:bg-[var(--zui-tree-view-rose-selected-dark,oklch(58.6%_0.253_17.585_/_0.16))] data-[selected=true]:text-[color:var(--zui-tree-view-rose-selected-fg,oklch(45.5%_0.188_13.697))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-rose-selected-fg-dark,oklch(81%_0.117_11.638))]",
55
+ purple: "data-[selected=true]:bg-[var(--zui-tree-view-purple-selected,oklch(94.6%_0.033_307.174))] dark:data-[selected=true]:bg-[var(--zui-tree-view-purple-selected-dark,oklch(55.8%_0.288_302.321_/_0.16))] data-[selected=true]:text-[color:var(--zui-tree-view-purple-selected-fg,oklch(43.8%_0.218_303.724))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-purple-selected-fg-dark,oklch(82.7%_0.119_306.383))]",
56
+ pink: "data-[selected=true]:bg-[var(--zui-tree-view-pink-selected,oklch(94.8%_0.028_342.258))] dark:data-[selected=true]:bg-[var(--zui-tree-view-pink-selected-dark,oklch(59.2%_0.249_0.584_/_0.16))] data-[selected=true]:text-[color:var(--zui-tree-view-pink-selected-fg,oklch(45.9%_0.187_3.815))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-pink-selected-fg-dark,oklch(82.3%_0.12_346.018))]",
57
+ orange: "data-[selected=true]:bg-[var(--zui-tree-view-orange-selected,oklch(95.4%_0.038_75.164))] dark:data-[selected=true]:bg-[var(--zui-tree-view-orange-selected-dark,oklch(64.6%_0.222_41.116_/_0.16))] data-[selected=true]:text-[color:var(--zui-tree-view-orange-selected-fg,oklch(47%_0.157_37.304))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-orange-selected-fg-dark,oklch(83.7%_0.128_66.29))]",
58
+ yellow: "data-[selected=true]:bg-[var(--zui-tree-view-yellow-selected,oklch(97.3%_0.071_103.193))] dark:data-[selected=true]:bg-[var(--zui-tree-view-yellow-selected-dark,oklch(68.1%_0.162_75.834_/_0.16))] data-[selected=true]:text-[color:var(--zui-tree-view-yellow-selected-fg,oklch(47.6%_0.114_61.907))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-yellow-selected-fg-dark,oklch(90.5%_0.182_98.111))]",
59
+ teal: "data-[selected=true]:bg-[var(--zui-tree-view-teal-selected,oklch(95.3%_0.051_180.801))] dark:data-[selected=true]:bg-[var(--zui-tree-view-teal-selected-dark,oklch(60%_0.118_184.704_/_0.16))] data-[selected=true]:text-[color:var(--zui-tree-view-teal-selected-fg,oklch(43.7%_0.078_188.216))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-teal-selected-fg-dark,oklch(85.5%_0.138_181.071))]",
60
+ indigo: "data-[selected=true]:bg-[var(--zui-tree-view-indigo-selected,oklch(93%_0.034_272.788))] dark:data-[selected=true]:bg-[var(--zui-tree-view-indigo-selected-dark,oklch(51.1%_0.262_276.966_/_0.16))] data-[selected=true]:text-[color:var(--zui-tree-view-indigo-selected-fg,oklch(39.8%_0.195_277.366))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-indigo-selected-fg-dark,oklch(78.5%_0.115_274.713))]",
61
+ emerald: "data-[selected=true]:bg-[var(--zui-tree-view-emerald-selected,oklch(95%_0.052_163.051))] dark:data-[selected=true]:bg-[var(--zui-tree-view-emerald-selected-dark,oklch(59.6%_0.145_163.225_/_0.16))] data-[selected=true]:text-[color:var(--zui-tree-view-emerald-selected-fg,oklch(43.2%_0.095_166.913))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-emerald-selected-fg-dark,oklch(84.5%_0.143_164.978))]",
62
+ "gradient-blue": "data-[selected=true]:bg-linear-to-r data-[selected=true]:from-[var(--zui-tree-view-gradient-blue-from,oklch(80.9%_0.105_251.813))] data-[selected=true]:to-[var(--zui-tree-view-gradient-blue-to,oklch(82.7%_0.119_306.383))] dark:data-[selected=true]:from-[var(--zui-tree-view-gradient-blue-from-dark,oklch(54.6%_0.245_262.881))] dark:data-[selected=true]:to-[var(--zui-tree-view-gradient-blue-to-dark,oklch(55.8%_0.288_302.321))] data-[selected=true]:text-[color:var(--zui-tree-view-gradient-fg,#ffffff)]",
63
+ "gradient-green": "data-[selected=true]:bg-linear-to-r data-[selected=true]:from-[var(--zui-tree-view-gradient-green-from,oklch(87.1%_0.15_154.449))] data-[selected=true]:to-[var(--zui-tree-view-gradient-green-to,oklch(89.7%_0.196_126.665))] dark:data-[selected=true]:from-[var(--zui-tree-view-gradient-green-from-dark,oklch(62.7%_0.194_149.214))] dark:data-[selected=true]:to-[var(--zui-tree-view-gradient-green-to-dark,oklch(64.8%_0.2_131.684))] data-[selected=true]:text-[color:var(--zui-tree-view-gradient-fg,#ffffff)]",
64
+ "gradient-red": "data-[selected=true]:bg-linear-to-r data-[selected=true]:from-[var(--zui-tree-view-gradient-red-from,oklch(80.8%_0.114_19.571))] data-[selected=true]:to-[var(--zui-tree-view-gradient-red-to,oklch(82.3%_0.12_346.018))] dark:data-[selected=true]:from-[var(--zui-tree-view-gradient-red-from-dark,oklch(57.7%_0.245_27.325))] dark:data-[selected=true]:to-[var(--zui-tree-view-gradient-red-to-dark,oklch(59.2%_0.249_0.584))] data-[selected=true]:text-[color:var(--zui-tree-view-gradient-fg,#ffffff)]",
65
+ "gradient-yellow": "data-[selected=true]:bg-linear-to-r data-[selected=true]:from-[var(--zui-tree-view-gradient-yellow-from,oklch(90.5%_0.182_98.111))] data-[selected=true]:to-[var(--zui-tree-view-gradient-yellow-to,oklch(83.7%_0.128_66.29))] dark:data-[selected=true]:from-[var(--zui-tree-view-gradient-yellow-from-dark,oklch(68.1%_0.162_75.834))] dark:data-[selected=true]:to-[var(--zui-tree-view-gradient-yellow-to-dark,oklch(64.6%_0.222_41.116))] data-[selected=true]:text-[color:var(--zui-tree-view-gradient-fg,#ffffff)]",
66
+ "gradient-purple": "data-[selected=true]:bg-linear-to-r data-[selected=true]:from-[var(--zui-tree-view-gradient-purple-from,oklch(82.7%_0.119_306.383))] data-[selected=true]:to-[var(--zui-tree-view-gradient-purple-to,oklch(82.3%_0.12_346.018))] dark:data-[selected=true]:from-[var(--zui-tree-view-gradient-purple-from-dark,oklch(55.8%_0.288_302.321))] dark:data-[selected=true]:to-[var(--zui-tree-view-gradient-purple-to-dark,oklch(59.2%_0.249_0.584))] data-[selected=true]:text-[color:var(--zui-tree-view-gradient-fg,#ffffff)]",
67
+ "gradient-teal": "data-[selected=true]:bg-linear-to-r data-[selected=true]:from-[var(--zui-tree-view-gradient-teal-from,oklch(85.5%_0.138_181.071))] data-[selected=true]:to-[var(--zui-tree-view-gradient-teal-to,oklch(86.5%_0.127_207.078))] dark:data-[selected=true]:from-[var(--zui-tree-view-gradient-teal-from-dark,oklch(60%_0.118_184.704))] dark:data-[selected=true]:to-[var(--zui-tree-view-gradient-teal-to-dark,oklch(60.9%_0.126_221.723))] data-[selected=true]:text-[color:var(--zui-tree-view-gradient-fg,#ffffff)]",
68
+ "gradient-indigo": "data-[selected=true]:bg-linear-to-r data-[selected=true]:from-[var(--zui-tree-view-gradient-indigo-from,oklch(78.5%_0.115_274.713))] data-[selected=true]:to-[var(--zui-tree-view-gradient-indigo-to,oklch(82.7%_0.119_306.383))] dark:data-[selected=true]:from-[var(--zui-tree-view-gradient-indigo-from-dark,oklch(51.1%_0.262_276.966))] dark:data-[selected=true]:to-[var(--zui-tree-view-gradient-indigo-to-dark,oklch(55.8%_0.288_302.321))] data-[selected=true]:text-[color:var(--zui-tree-view-gradient-fg,#ffffff)]",
69
+ "gradient-pink": "data-[selected=true]:bg-linear-to-r data-[selected=true]:from-[var(--zui-tree-view-gradient-pink-from,oklch(82.3%_0.12_346.018))] data-[selected=true]:to-[var(--zui-tree-view-gradient-pink-to,oklch(81%_0.117_11.638))] dark:data-[selected=true]:from-[var(--zui-tree-view-gradient-pink-from-dark,oklch(59.2%_0.249_0.584))] dark:data-[selected=true]:to-[var(--zui-tree-view-gradient-pink-to-dark,oklch(58.6%_0.253_17.585))] data-[selected=true]:text-[color:var(--zui-tree-view-gradient-fg,#ffffff)]",
70
+ "gradient-orange": "data-[selected=true]:bg-linear-to-r data-[selected=true]:from-[var(--zui-tree-view-gradient-orange-from,oklch(83.7%_0.128_66.29))] data-[selected=true]:to-[var(--zui-tree-view-gradient-orange-to,oklch(80.8%_0.114_19.571))] dark:data-[selected=true]:from-[var(--zui-tree-view-gradient-orange-from-dark,oklch(64.6%_0.222_41.116))] dark:data-[selected=true]:to-[var(--zui-tree-view-gradient-orange-to-dark,oklch(57.7%_0.245_27.325))] data-[selected=true]:text-[color:var(--zui-tree-view-gradient-fg,#ffffff)]"
71
+ };
72
+ var zuiTreeViewChevron = "inline-flex h-5 w-5 shrink-0 items-center justify-center rounded text-[color:var(--zui-tree-view-chevron,oklch(55.5%_0.041_257.417))] dark:text-[color:var(--zui-tree-view-chevron-dark,oklch(70.4%_0.04_256.788))] transition-transform duration-200 data-[expanded=true]:rotate-90";
73
+ var zuiTreeViewIcon = "inline-flex shrink-0 items-center justify-center text-[color:var(--zui-tree-view-icon,oklch(55.5%_0.041_257.417))] dark:text-[color:var(--zui-tree-view-icon-dark,oklch(70.4%_0.04_256.788))]";
74
+ var zuiTreeViewGuide = "border-l border-[color:var(--zui-tree-view-guide,#0000001a)] dark:border-[color:var(--zui-tree-view-guide-dark,#ffffff1a)]";
75
+
76
+ // src/ui/tree-view/variants.ts
77
+ var treeViewVariants = classVarianceAuthority.cva(zuiTreeViewBase, {
78
+ variants: {
79
+ appearance: zuiTreeViewAppearances,
80
+ size: zuiTreeViewSizes
81
+ },
82
+ defaultVariants: {
83
+ appearance: "default",
84
+ size: "md"
85
+ }
86
+ });
87
+ var treeViewItemVariants = classVarianceAuthority.cva(zuiTreeViewItemBase, {
88
+ variants: {
89
+ appearance: zuiTreeViewItemAppearances,
90
+ size: zuiTreeViewItemSizes
91
+ },
92
+ defaultVariants: {
93
+ appearance: "default",
94
+ size: "md"
95
+ }
96
+ });
97
+ var TreeViewContext = react.createContext(null);
98
+ function useTreeViewContext(component) {
99
+ const ctx = react.useContext(TreeViewContext);
100
+ if (!ctx) {
101
+ throw new Error(`${component} must be used within <TreeView>`);
102
+ }
103
+ return ctx;
104
+ }
105
+ function flattenVisible(nodes, isExpanded, level = 1, parentId = null, acc = []) {
106
+ for (const node of nodes) {
107
+ acc.push({ node, level, parentId });
108
+ if (node.children?.length && isExpanded(node.id)) {
109
+ flattenVisible(node.children, isExpanded, level + 1, node.id, acc);
110
+ }
111
+ }
112
+ return acc;
113
+ }
114
+ function StaticTreeGroup({ open, children }) {
115
+ if (!open) {
116
+ return null;
117
+ }
118
+ return /* @__PURE__ */ jsxRuntime.jsx("ul", { role: "group", "data-slot": "tree-view-group", className: "m-0 list-none p-0", children });
119
+ }
120
+ function TreeItemNode({
121
+ node,
122
+ level,
123
+ chevronIcon
124
+ }) {
125
+ const {
126
+ isExpanded,
127
+ selectedId,
128
+ activeId,
129
+ GroupComponent,
130
+ registerItem,
131
+ appearance,
132
+ size,
133
+ toggleExpanded,
134
+ selectNode,
135
+ onItemKeyDown,
136
+ renderNode,
137
+ showGuides
138
+ } = useTreeViewContext("TreeItem");
139
+ const hasChildren = Boolean(node.children?.length);
140
+ const expanded = hasChildren && isExpanded(node.id);
141
+ const selected = selectedId === node.id;
142
+ const active = activeId === node.id;
143
+ const disabled = Boolean(node.disabled);
144
+ const Group = GroupComponent;
145
+ return /* @__PURE__ */ jsxRuntime.jsxs("li", { role: "none", "data-slot": "tree-view-item", children: [
146
+ /* @__PURE__ */ jsxRuntime.jsxs(
147
+ "div",
148
+ {
149
+ role: "treeitem",
150
+ ref: (el) => registerItem(node.id, el),
151
+ "aria-expanded": hasChildren ? expanded : void 0,
152
+ "aria-selected": selected,
153
+ "aria-level": level,
154
+ "aria-disabled": disabled || void 0,
155
+ "data-slot": "tree-view-item-row",
156
+ "data-node-id": node.id,
157
+ "data-selected": selected,
158
+ "data-active": active,
159
+ "data-disabled": disabled,
160
+ tabIndex: active ? 0 : -1,
161
+ style: { paddingLeft: `${(level - 1) * 1.25 + 0.5}rem` },
162
+ className: treeViewItemVariants({
163
+ appearance,
164
+ size
165
+ }),
166
+ onClick: () => {
167
+ if (disabled) {
168
+ return;
169
+ }
170
+ if (hasChildren) {
171
+ toggleExpanded(node.id);
172
+ }
173
+ selectNode(node);
174
+ },
175
+ onKeyDown: onItemKeyDown,
176
+ children: [
177
+ hasChildren ? /* @__PURE__ */ jsxRuntime.jsx(
178
+ "span",
179
+ {
180
+ "data-slot": "tree-view-chevron",
181
+ "data-expanded": expanded,
182
+ className: zuiTreeViewChevron,
183
+ children: chevronIcon || /* @__PURE__ */ jsxRuntime.jsx(fa6.FaChevronRight, {})
184
+ }
185
+ ) : (
186
+ // Leaf nodes reserve chevron space to keep labels vertically aligned
187
+ // with sibling branches that do have disclosure icons.
188
+ /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "inline-flex h-5 w-5 shrink-0" })
189
+ ),
190
+ node.icon ? /* @__PURE__ */ jsxRuntime.jsx("span", { "data-slot": "tree-view-icon", className: zuiTreeViewIcon, children: node.icon }) : null,
191
+ /* @__PURE__ */ jsxRuntime.jsx("span", { "data-slot": "tree-view-label", className: "truncate", children: renderNode ? renderNode({
192
+ node,
193
+ depth: level,
194
+ isExpanded: expanded,
195
+ isSelected: selected
196
+ }) : node.label })
197
+ ]
198
+ }
199
+ ),
200
+ hasChildren ? /* @__PURE__ */ jsxRuntime.jsx(Group, { open: expanded, level, children: /* @__PURE__ */ jsxRuntime.jsx(
201
+ "ol",
202
+ {
203
+ className: chunkZS5756ZC_js.cn(showGuides && zuiTreeViewGuide, showGuides && "ml-5"),
204
+ children: node.children?.map((child) => (
205
+ // Recursion preserves each child's depth so ARIA levels,
206
+ // indentation, and guide spacing all stay in sync.
207
+ /* @__PURE__ */ jsxRuntime.jsx(TreeItemNode, { node: child, level: level + 1 }, child.id)
208
+ ))
209
+ }
210
+ ) }) : null
211
+ ] });
212
+ }
213
+ function TreeViewBase({
214
+ data = [],
215
+ defaultExpanded,
216
+ expanded,
217
+ onExpandedChange,
218
+ defaultSelected,
219
+ selected,
220
+ onSelect,
221
+ renderNode,
222
+ showGuides = false,
223
+ appearance = "default",
224
+ size = "md",
225
+ className,
226
+ GroupComponent = StaticTreeGroup,
227
+ ...rest
228
+ }) {
229
+ const isExpandedControlled = expanded !== void 0;
230
+ const isSelectedControlled = selected !== void 0;
231
+ const [expandedUncontrolled, setExpandedUncontrolled] = react.useState(
232
+ defaultExpanded ?? []
233
+ );
234
+ const [selectedUncontrolled, setSelectedUncontrolled] = react.useState(defaultSelected);
235
+ const expandedIds = isExpandedControlled ? expanded ?? [] : expandedUncontrolled;
236
+ const selectedId = isSelectedControlled ? selected : selectedUncontrolled;
237
+ const expandedSet = react.useMemo(() => new Set(expandedIds), [expandedIds]);
238
+ const isExpanded = react.useCallback(
239
+ (id) => expandedSet.has(id),
240
+ [expandedSet]
241
+ );
242
+ const commitExpanded = react.useCallback(
243
+ (next) => {
244
+ if (!isExpandedControlled) {
245
+ setExpandedUncontrolled(next);
246
+ }
247
+ onExpandedChange?.(next);
248
+ },
249
+ [isExpandedControlled, onExpandedChange]
250
+ );
251
+ const setExpanded = react.useCallback(
252
+ (id, open) => {
253
+ const has = expandedSet.has(id);
254
+ if (open === has) {
255
+ return;
256
+ }
257
+ const next = open ? [...expandedIds, id] : expandedIds.filter((entry) => entry !== id);
258
+ commitExpanded(next);
259
+ },
260
+ [commitExpanded, expandedIds, expandedSet]
261
+ );
262
+ const toggleExpanded = react.useCallback(
263
+ (id) => {
264
+ setExpanded(id, !expandedSet.has(id));
265
+ },
266
+ [expandedSet, setExpanded]
267
+ );
268
+ const itemRefs = react.useRef(/* @__PURE__ */ new Map());
269
+ const registerItem = react.useCallback((id, el) => {
270
+ if (el) {
271
+ itemRefs.current.set(id, el);
272
+ } else {
273
+ itemRefs.current.delete(id);
274
+ }
275
+ }, []);
276
+ const visible = react.useMemo(
277
+ () => flattenVisible(data, isExpanded),
278
+ [data, isExpanded]
279
+ );
280
+ const firstEnabledId = react.useMemo(
281
+ () => visible.find((entry) => !entry.node.disabled)?.node.id,
282
+ [visible]
283
+ );
284
+ const [activeIdState, setActiveIdState] = react.useState(
285
+ void 0
286
+ );
287
+ const isSelectedVisible = selectedId !== void 0 && visible.some((entry) => entry.node.id === selectedId);
288
+ const activeId = activeIdState && visible.some((entry) => entry.node.id === activeIdState) ? activeIdState : isSelectedVisible ? selectedId : firstEnabledId;
289
+ const focusItem = react.useCallback((id) => {
290
+ setActiveIdState(id);
291
+ itemRefs.current.get(id)?.focus();
292
+ }, []);
293
+ const selectNode = react.useCallback(
294
+ (node) => {
295
+ if (node.disabled) {
296
+ return;
297
+ }
298
+ setActiveIdState(node.id);
299
+ if (!isSelectedControlled) {
300
+ setSelectedUncontrolled(node.id);
301
+ }
302
+ onSelect?.(node);
303
+ },
304
+ [isSelectedControlled, onSelect]
305
+ );
306
+ const onItemKeyDown = react.useCallback(
307
+ (event) => {
308
+ const currentId = event.currentTarget.dataset.nodeId ?? activeId;
309
+ const index = visible.findIndex((entry) => entry.node.id === currentId);
310
+ const current = visible[index];
311
+ if (index === -1 || !current) {
312
+ return;
313
+ }
314
+ const moveTo = (target) => {
315
+ const clamped = Math.max(0, Math.min(visible.length - 1, target));
316
+ const next = visible[clamped];
317
+ if (next) {
318
+ focusItem(next.node.id);
319
+ }
320
+ };
321
+ switch (event.key) {
322
+ case "ArrowDown":
323
+ event.preventDefault();
324
+ moveTo(index + 1);
325
+ break;
326
+ case "ArrowUp":
327
+ event.preventDefault();
328
+ moveTo(index - 1);
329
+ break;
330
+ case "Home":
331
+ event.preventDefault();
332
+ moveTo(0);
333
+ break;
334
+ case "End":
335
+ event.preventDefault();
336
+ moveTo(visible.length - 1);
337
+ break;
338
+ case "ArrowRight": {
339
+ event.preventDefault();
340
+ const hasChildren = Boolean(current.node.children?.length);
341
+ if (hasChildren && !isExpanded(current.node.id)) {
342
+ setExpanded(current.node.id, true);
343
+ } else if (hasChildren) {
344
+ moveTo(index + 1);
345
+ }
346
+ break;
347
+ }
348
+ case "ArrowLeft": {
349
+ event.preventDefault();
350
+ const hasChildren = Boolean(current.node.children?.length);
351
+ if (hasChildren && isExpanded(current.node.id)) {
352
+ setExpanded(current.node.id, false);
353
+ } else if (current.parentId) {
354
+ focusItem(current.parentId);
355
+ }
356
+ break;
357
+ }
358
+ case "Enter":
359
+ case " ":
360
+ event.preventDefault();
361
+ selectNode(current.node);
362
+ break;
363
+ }
364
+ },
365
+ [activeId, focusItem, isExpanded, selectNode, setExpanded, visible]
366
+ );
367
+ const ctx = react.useMemo(
368
+ () => ({
369
+ appearance: appearance ?? "default",
370
+ size: size ?? "md",
371
+ showGuides,
372
+ GroupComponent,
373
+ isExpanded,
374
+ toggleExpanded,
375
+ setExpanded,
376
+ selectedId,
377
+ activeId,
378
+ selectNode,
379
+ registerItem,
380
+ onItemKeyDown,
381
+ renderNode
382
+ }),
383
+ [
384
+ activeId,
385
+ appearance,
386
+ GroupComponent,
387
+ isExpanded,
388
+ onItemKeyDown,
389
+ registerItem,
390
+ renderNode,
391
+ selectNode,
392
+ selectedId,
393
+ setExpanded,
394
+ showGuides,
395
+ size,
396
+ toggleExpanded
397
+ ]
398
+ );
399
+ return /* @__PURE__ */ jsxRuntime.jsx(TreeViewContext.Provider, { value: ctx, children: /* @__PURE__ */ jsxRuntime.jsx(
400
+ "ul",
401
+ {
402
+ role: "tree",
403
+ "data-slot": "tree-view",
404
+ "aria-label": rest["aria-label"],
405
+ "aria-labelledby": rest["aria-labelledby"],
406
+ className: chunkZS5756ZC_js.cn(
407
+ treeViewVariants({ appearance, size }),
408
+ "list-none",
409
+ className
410
+ ),
411
+ children: data.map((node) => /* @__PURE__ */ jsxRuntime.jsx(TreeItemNode, { node, level: 1 }, node.id))
412
+ }
413
+ ) });
414
+ }
415
+ TreeViewBase.displayName = "TreeView";
416
+
417
+ exports.TreeViewBase = TreeViewBase;
418
+ exports.treeViewItemVariants = treeViewItemVariants;
419
+ exports.treeViewVariants = treeViewVariants;
420
+ //# sourceMappingURL=chunk-QHEHBC6M.js.map
421
+ //# sourceMappingURL=chunk-QHEHBC6M.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/design-system/tree-view.ts","../src/ui/tree-view/variants.ts","../src/ui/tree-view/tree-view-base.tsx"],"names":["cva","createContext","useContext","jsx","jsxs","FaChevronRight","cn","useState","useMemo","useCallback","useRef"],"mappings":"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","file":"chunk-QHEHBC6M.js","sourcesContent":["export const zuiTreeViewBase =\n \"w-full text-[color:var(--zui-tree-view-fg,oklch(20.8%_0.042_265.755))] dark:text-[color:var(--zui-tree-view-fg-dark,oklch(92.9%_0.013_255.508))]\";\n\nexport const zuiTreeViewAppearances = {\n default:\n \"rounded-xl border border-[color:var(--zui-tree-view-default-border,#0000001a)] dark:border-[color:var(--zui-tree-view-default-border-dark,#ffffff1a)] p-2\",\n outline:\n \"rounded-xl border border-[color:var(--zui-tree-view-outline-border,#00000026)] dark:border-[color:var(--zui-tree-view-outline-border-dark,#ffffff26)] p-2\",\n ghost: \"p-1\",\n card: \"rounded-xl border border-[color:var(--zui-tree-view-card-border,#0000001a)] dark:border-[color:var(--zui-tree-view-card-border-dark,#ffffff1a)] bg-[var(--zui-tree-view-card-bg,#0000000d)] dark:bg-[var(--zui-tree-view-card-bg-dark,#00000099)] p-3\",\n separated:\n \"rounded-xl border border-[color:var(--zui-tree-view-separated-border,#0000001a)] dark:border-[color:var(--zui-tree-view-separated-border-dark,#ffffff1a)] bg-[var(--zui-tree-view-separated-bg,oklch(98.4%_0.003_247.858_/_0.4))] dark:bg-[var(--zui-tree-view-separated-bg-dark,oklch(12.9%_0.042_264.695_/_0.4))] p-3\",\n sky: \"rounded-xl border border-[color:var(--zui-tree-view-sky-border,oklch(44.3%_0.11_240.79))] dark:border-[color:var(--zui-tree-view-sky-border-dark,oklch(58.8%_0.158_241.966))] p-2\",\n rose: \"rounded-xl border border-[color:var(--zui-tree-view-rose-border,oklch(45.5%_0.188_13.697))] dark:border-[color:var(--zui-tree-view-rose-border-dark,oklch(58.6%_0.253_17.585))] p-2\",\n purple:\n \"rounded-xl border border-[color:var(--zui-tree-view-purple-border,oklch(43.8%_0.218_303.724))] dark:border-[color:var(--zui-tree-view-purple-border-dark,oklch(55.8%_0.288_302.321))] p-2\",\n pink: \"rounded-xl border border-[color:var(--zui-tree-view-pink-border,oklch(45.9%_0.187_3.815))] dark:border-[color:var(--zui-tree-view-pink-border-dark,oklch(59.2%_0.249_0.584))] p-2\",\n orange:\n \"rounded-xl border border-[color:var(--zui-tree-view-orange-border,oklch(47%_0.157_37.304))] dark:border-[color:var(--zui-tree-view-orange-border-dark,oklch(64.6%_0.222_41.116))] p-2\",\n yellow:\n \"rounded-xl border border-[color:var(--zui-tree-view-yellow-border,oklch(47.6%_0.114_61.907))] dark:border-[color:var(--zui-tree-view-yellow-border-dark,oklch(68.1%_0.162_75.834))] p-2\",\n teal: \"rounded-xl border border-[color:var(--zui-tree-view-teal-border,oklch(43.7%_0.078_188.216))] dark:border-[color:var(--zui-tree-view-teal-border-dark,oklch(60%_0.118_184.704))] p-2\",\n indigo:\n \"rounded-xl border border-[color:var(--zui-tree-view-indigo-border,oklch(39.8%_0.195_277.366))] dark:border-[color:var(--zui-tree-view-indigo-border-dark,oklch(51.1%_0.262_276.966))] p-2\",\n emerald:\n \"rounded-xl border border-[color:var(--zui-tree-view-emerald-border,oklch(43.2%_0.095_166.913))] dark:border-[color:var(--zui-tree-view-emerald-border-dark,oklch(59.6%_0.145_163.225))] p-2\",\n \"gradient-blue\":\n \"rounded-xl border border-[color:var(--zui-tree-view-gradient-blue-border,oklch(42.4%_0.199_265.638))] dark:border-[color:var(--zui-tree-view-gradient-blue-border-dark,oklch(54.6%_0.245_262.881))] p-2\",\n \"gradient-green\":\n \"rounded-xl border border-[color:var(--zui-tree-view-gradient-green-border,oklch(44.8%_0.119_151.328))] dark:border-[color:var(--zui-tree-view-gradient-green-border-dark,oklch(62.7%_0.194_149.214))] p-2\",\n \"gradient-red\":\n \"rounded-xl border border-[color:var(--zui-tree-view-gradient-red-border,oklch(44.4%_0.177_26.899))] dark:border-[color:var(--zui-tree-view-gradient-red-border-dark,oklch(57.7%_0.245_27.325))] p-2\",\n \"gradient-yellow\":\n \"rounded-xl border border-[color:var(--zui-tree-view-gradient-yellow-border,oklch(47.6%_0.114_61.907))] dark:border-[color:var(--zui-tree-view-gradient-yellow-border-dark,oklch(68.1%_0.162_75.834))] p-2\",\n \"gradient-purple\":\n \"rounded-xl border border-[color:var(--zui-tree-view-gradient-purple-border,oklch(43.8%_0.218_303.724))] dark:border-[color:var(--zui-tree-view-gradient-purple-border-dark,oklch(55.8%_0.288_302.321))] p-2\",\n \"gradient-teal\":\n \"rounded-xl border border-[color:var(--zui-tree-view-gradient-teal-border,oklch(43.7%_0.078_188.216))] dark:border-[color:var(--zui-tree-view-gradient-teal-border-dark,oklch(60%_0.118_184.704))] p-2\",\n \"gradient-indigo\":\n \"rounded-xl border border-[color:var(--zui-tree-view-gradient-indigo-border,oklch(39.8%_0.195_277.366))] dark:border-[color:var(--zui-tree-view-gradient-indigo-border-dark,oklch(51.1%_0.262_276.966))] p-2\",\n \"gradient-pink\":\n \"rounded-xl border border-[color:var(--zui-tree-view-gradient-pink-border,oklch(45.9%_0.187_3.815))] dark:border-[color:var(--zui-tree-view-gradient-pink-border-dark,oklch(59.2%_0.249_0.584))] p-2\",\n \"gradient-orange\":\n \"rounded-xl border border-[color:var(--zui-tree-view-gradient-orange-border,oklch(47%_0.157_37.304))] dark:border-[color:var(--zui-tree-view-gradient-orange-border-dark,oklch(64.6%_0.222_41.116))] p-2\",\n} as const;\n\nexport const zuiTreeViewSizes = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n} as const;\n\nexport const zuiTreeViewItemBase =\n \"relative flex w-full items-center gap-2 rounded-lg pr-2 text-left font-medium outline-none transition select-none cursor-pointer hover:bg-[var(--zui-tree-view-item-hover,#0000000d)] dark:hover:bg-[var(--zui-tree-view-item-hover-dark,#ffffff0d)] focus-visible:ring-2 focus-visible:ring-[var(--zui-tree-view-ring-focus,#0000004d)] dark:focus-visible:ring-[var(--zui-tree-view-ring-focus-dark,#ffffff4d)] data-[disabled=true]:cursor-not-allowed data-[disabled=true]:opacity-50\";\n\nexport const zuiTreeViewItemSizes = {\n sm: \"py-1 text-xs\",\n md: \"py-1.5 text-sm\",\n lg: \"py-2 text-base\",\n} as const;\n\nexport const zuiTreeViewItemAppearances = {\n default:\n \"data-[selected=true]:bg-[var(--zui-tree-view-selected,#0000000f)] dark:data-[selected=true]:bg-[var(--zui-tree-view-selected-dark,#ffffff14)] data-[selected=true]:text-[color:var(--zui-tree-view-selected-fg,oklch(20.8%_0.042_265.755))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-selected-fg-dark,#ffffff)]\",\n outline:\n \"data-[selected=true]:bg-[var(--zui-tree-view-selected,#0000000f)] dark:data-[selected=true]:bg-[var(--zui-tree-view-selected-dark,#ffffff14)] data-[selected=true]:text-[color:var(--zui-tree-view-selected-fg,oklch(20.8%_0.042_265.755))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-selected-fg-dark,#ffffff)]\",\n ghost:\n \"data-[selected=true]:bg-[var(--zui-tree-view-selected,#0000000f)] dark:data-[selected=true]:bg-[var(--zui-tree-view-selected-dark,#ffffff14)] data-[selected=true]:text-[color:var(--zui-tree-view-selected-fg,oklch(20.8%_0.042_265.755))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-selected-fg-dark,#ffffff)]\",\n card: \"data-[selected=true]:bg-[var(--zui-tree-view-selected,#00000014)] dark:data-[selected=true]:bg-[var(--zui-tree-view-selected-dark,#ffffff1f)] data-[selected=true]:text-[color:var(--zui-tree-view-selected-fg,oklch(20.8%_0.042_265.755))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-selected-fg-dark,#ffffff)]\",\n separated:\n \"data-[selected=true]:bg-[var(--zui-tree-view-selected,#00000014)] dark:data-[selected=true]:bg-[var(--zui-tree-view-selected-dark,#ffffff1f)] data-[selected=true]:text-[color:var(--zui-tree-view-selected-fg,oklch(20.8%_0.042_265.755))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-selected-fg-dark,#ffffff)]\",\n sky: \"data-[selected=true]:bg-[var(--zui-tree-view-sky-selected,oklch(95.1%_0.026_236.824))] dark:data-[selected=true]:bg-[var(--zui-tree-view-sky-selected-dark,oklch(58.8%_0.158_241.966_/_0.16))] data-[selected=true]:text-[color:var(--zui-tree-view-sky-selected-fg,oklch(44.3%_0.11_240.79))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-sky-selected-fg-dark,oklch(82.8%_0.111_230.318))]\",\n rose: \"data-[selected=true]:bg-[var(--zui-tree-view-rose-selected,oklch(94.1%_0.03_12.58))] dark:data-[selected=true]:bg-[var(--zui-tree-view-rose-selected-dark,oklch(58.6%_0.253_17.585_/_0.16))] data-[selected=true]:text-[color:var(--zui-tree-view-rose-selected-fg,oklch(45.5%_0.188_13.697))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-rose-selected-fg-dark,oklch(81%_0.117_11.638))]\",\n purple:\n \"data-[selected=true]:bg-[var(--zui-tree-view-purple-selected,oklch(94.6%_0.033_307.174))] dark:data-[selected=true]:bg-[var(--zui-tree-view-purple-selected-dark,oklch(55.8%_0.288_302.321_/_0.16))] data-[selected=true]:text-[color:var(--zui-tree-view-purple-selected-fg,oklch(43.8%_0.218_303.724))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-purple-selected-fg-dark,oklch(82.7%_0.119_306.383))]\",\n pink: \"data-[selected=true]:bg-[var(--zui-tree-view-pink-selected,oklch(94.8%_0.028_342.258))] dark:data-[selected=true]:bg-[var(--zui-tree-view-pink-selected-dark,oklch(59.2%_0.249_0.584_/_0.16))] data-[selected=true]:text-[color:var(--zui-tree-view-pink-selected-fg,oklch(45.9%_0.187_3.815))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-pink-selected-fg-dark,oklch(82.3%_0.12_346.018))]\",\n orange:\n \"data-[selected=true]:bg-[var(--zui-tree-view-orange-selected,oklch(95.4%_0.038_75.164))] dark:data-[selected=true]:bg-[var(--zui-tree-view-orange-selected-dark,oklch(64.6%_0.222_41.116_/_0.16))] data-[selected=true]:text-[color:var(--zui-tree-view-orange-selected-fg,oklch(47%_0.157_37.304))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-orange-selected-fg-dark,oklch(83.7%_0.128_66.29))]\",\n yellow:\n \"data-[selected=true]:bg-[var(--zui-tree-view-yellow-selected,oklch(97.3%_0.071_103.193))] dark:data-[selected=true]:bg-[var(--zui-tree-view-yellow-selected-dark,oklch(68.1%_0.162_75.834_/_0.16))] data-[selected=true]:text-[color:var(--zui-tree-view-yellow-selected-fg,oklch(47.6%_0.114_61.907))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-yellow-selected-fg-dark,oklch(90.5%_0.182_98.111))]\",\n teal: \"data-[selected=true]:bg-[var(--zui-tree-view-teal-selected,oklch(95.3%_0.051_180.801))] dark:data-[selected=true]:bg-[var(--zui-tree-view-teal-selected-dark,oklch(60%_0.118_184.704_/_0.16))] data-[selected=true]:text-[color:var(--zui-tree-view-teal-selected-fg,oklch(43.7%_0.078_188.216))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-teal-selected-fg-dark,oklch(85.5%_0.138_181.071))]\",\n indigo:\n \"data-[selected=true]:bg-[var(--zui-tree-view-indigo-selected,oklch(93%_0.034_272.788))] dark:data-[selected=true]:bg-[var(--zui-tree-view-indigo-selected-dark,oklch(51.1%_0.262_276.966_/_0.16))] data-[selected=true]:text-[color:var(--zui-tree-view-indigo-selected-fg,oklch(39.8%_0.195_277.366))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-indigo-selected-fg-dark,oklch(78.5%_0.115_274.713))]\",\n emerald:\n \"data-[selected=true]:bg-[var(--zui-tree-view-emerald-selected,oklch(95%_0.052_163.051))] dark:data-[selected=true]:bg-[var(--zui-tree-view-emerald-selected-dark,oklch(59.6%_0.145_163.225_/_0.16))] data-[selected=true]:text-[color:var(--zui-tree-view-emerald-selected-fg,oklch(43.2%_0.095_166.913))] dark:data-[selected=true]:text-[color:var(--zui-tree-view-emerald-selected-fg-dark,oklch(84.5%_0.143_164.978))]\",\n \"gradient-blue\":\n \"data-[selected=true]:bg-linear-to-r data-[selected=true]:from-[var(--zui-tree-view-gradient-blue-from,oklch(80.9%_0.105_251.813))] data-[selected=true]:to-[var(--zui-tree-view-gradient-blue-to,oklch(82.7%_0.119_306.383))] dark:data-[selected=true]:from-[var(--zui-tree-view-gradient-blue-from-dark,oklch(54.6%_0.245_262.881))] dark:data-[selected=true]:to-[var(--zui-tree-view-gradient-blue-to-dark,oklch(55.8%_0.288_302.321))] data-[selected=true]:text-[color:var(--zui-tree-view-gradient-fg,#ffffff)]\",\n \"gradient-green\":\n \"data-[selected=true]:bg-linear-to-r data-[selected=true]:from-[var(--zui-tree-view-gradient-green-from,oklch(87.1%_0.15_154.449))] data-[selected=true]:to-[var(--zui-tree-view-gradient-green-to,oklch(89.7%_0.196_126.665))] dark:data-[selected=true]:from-[var(--zui-tree-view-gradient-green-from-dark,oklch(62.7%_0.194_149.214))] dark:data-[selected=true]:to-[var(--zui-tree-view-gradient-green-to-dark,oklch(64.8%_0.2_131.684))] data-[selected=true]:text-[color:var(--zui-tree-view-gradient-fg,#ffffff)]\",\n \"gradient-red\":\n \"data-[selected=true]:bg-linear-to-r data-[selected=true]:from-[var(--zui-tree-view-gradient-red-from,oklch(80.8%_0.114_19.571))] data-[selected=true]:to-[var(--zui-tree-view-gradient-red-to,oklch(82.3%_0.12_346.018))] dark:data-[selected=true]:from-[var(--zui-tree-view-gradient-red-from-dark,oklch(57.7%_0.245_27.325))] dark:data-[selected=true]:to-[var(--zui-tree-view-gradient-red-to-dark,oklch(59.2%_0.249_0.584))] data-[selected=true]:text-[color:var(--zui-tree-view-gradient-fg,#ffffff)]\",\n \"gradient-yellow\":\n \"data-[selected=true]:bg-linear-to-r data-[selected=true]:from-[var(--zui-tree-view-gradient-yellow-from,oklch(90.5%_0.182_98.111))] data-[selected=true]:to-[var(--zui-tree-view-gradient-yellow-to,oklch(83.7%_0.128_66.29))] dark:data-[selected=true]:from-[var(--zui-tree-view-gradient-yellow-from-dark,oklch(68.1%_0.162_75.834))] dark:data-[selected=true]:to-[var(--zui-tree-view-gradient-yellow-to-dark,oklch(64.6%_0.222_41.116))] data-[selected=true]:text-[color:var(--zui-tree-view-gradient-fg,#ffffff)]\",\n \"gradient-purple\":\n \"data-[selected=true]:bg-linear-to-r data-[selected=true]:from-[var(--zui-tree-view-gradient-purple-from,oklch(82.7%_0.119_306.383))] data-[selected=true]:to-[var(--zui-tree-view-gradient-purple-to,oklch(82.3%_0.12_346.018))] dark:data-[selected=true]:from-[var(--zui-tree-view-gradient-purple-from-dark,oklch(55.8%_0.288_302.321))] dark:data-[selected=true]:to-[var(--zui-tree-view-gradient-purple-to-dark,oklch(59.2%_0.249_0.584))] data-[selected=true]:text-[color:var(--zui-tree-view-gradient-fg,#ffffff)]\",\n \"gradient-teal\":\n \"data-[selected=true]:bg-linear-to-r data-[selected=true]:from-[var(--zui-tree-view-gradient-teal-from,oklch(85.5%_0.138_181.071))] data-[selected=true]:to-[var(--zui-tree-view-gradient-teal-to,oklch(86.5%_0.127_207.078))] dark:data-[selected=true]:from-[var(--zui-tree-view-gradient-teal-from-dark,oklch(60%_0.118_184.704))] dark:data-[selected=true]:to-[var(--zui-tree-view-gradient-teal-to-dark,oklch(60.9%_0.126_221.723))] data-[selected=true]:text-[color:var(--zui-tree-view-gradient-fg,#ffffff)]\",\n \"gradient-indigo\":\n \"data-[selected=true]:bg-linear-to-r data-[selected=true]:from-[var(--zui-tree-view-gradient-indigo-from,oklch(78.5%_0.115_274.713))] data-[selected=true]:to-[var(--zui-tree-view-gradient-indigo-to,oklch(82.7%_0.119_306.383))] dark:data-[selected=true]:from-[var(--zui-tree-view-gradient-indigo-from-dark,oklch(51.1%_0.262_276.966))] dark:data-[selected=true]:to-[var(--zui-tree-view-gradient-indigo-to-dark,oklch(55.8%_0.288_302.321))] data-[selected=true]:text-[color:var(--zui-tree-view-gradient-fg,#ffffff)]\",\n \"gradient-pink\":\n \"data-[selected=true]:bg-linear-to-r data-[selected=true]:from-[var(--zui-tree-view-gradient-pink-from,oklch(82.3%_0.12_346.018))] data-[selected=true]:to-[var(--zui-tree-view-gradient-pink-to,oklch(81%_0.117_11.638))] dark:data-[selected=true]:from-[var(--zui-tree-view-gradient-pink-from-dark,oklch(59.2%_0.249_0.584))] dark:data-[selected=true]:to-[var(--zui-tree-view-gradient-pink-to-dark,oklch(58.6%_0.253_17.585))] data-[selected=true]:text-[color:var(--zui-tree-view-gradient-fg,#ffffff)]\",\n \"gradient-orange\":\n \"data-[selected=true]:bg-linear-to-r data-[selected=true]:from-[var(--zui-tree-view-gradient-orange-from,oklch(83.7%_0.128_66.29))] data-[selected=true]:to-[var(--zui-tree-view-gradient-orange-to,oklch(80.8%_0.114_19.571))] dark:data-[selected=true]:from-[var(--zui-tree-view-gradient-orange-from-dark,oklch(64.6%_0.222_41.116))] dark:data-[selected=true]:to-[var(--zui-tree-view-gradient-orange-to-dark,oklch(57.7%_0.245_27.325))] data-[selected=true]:text-[color:var(--zui-tree-view-gradient-fg,#ffffff)]\",\n} as const;\n\nexport const zuiTreeViewChevron =\n \"inline-flex h-5 w-5 shrink-0 items-center justify-center rounded text-[color:var(--zui-tree-view-chevron,oklch(55.5%_0.041_257.417))] dark:text-[color:var(--zui-tree-view-chevron-dark,oklch(70.4%_0.04_256.788))] transition-transform duration-200 data-[expanded=true]:rotate-90\";\n\nexport const zuiTreeViewIcon =\n \"inline-flex shrink-0 items-center justify-center text-[color:var(--zui-tree-view-icon,oklch(55.5%_0.041_257.417))] dark:text-[color:var(--zui-tree-view-icon-dark,oklch(70.4%_0.04_256.788))]\";\n\nexport const zuiTreeViewGuide =\n \"border-l border-[color:var(--zui-tree-view-guide,#0000001a)] dark:border-[color:var(--zui-tree-view-guide-dark,#ffffff1a)]\";\n","import { cva } from \"class-variance-authority\";\n\nimport {\n zuiTreeViewAppearances,\n zuiTreeViewBase,\n zuiTreeViewItemAppearances,\n zuiTreeViewItemBase,\n zuiTreeViewItemSizes,\n zuiTreeViewSizes,\n} from \"../../design-system/tree-view\";\n\nexport const treeViewVariants = cva(zuiTreeViewBase, {\n variants: {\n appearance: zuiTreeViewAppearances,\n size: zuiTreeViewSizes,\n },\n defaultVariants: {\n appearance: \"default\",\n size: \"md\",\n },\n});\n\nexport const treeViewItemVariants = cva(zuiTreeViewItemBase, {\n variants: {\n appearance: zuiTreeViewItemAppearances,\n size: zuiTreeViewItemSizes,\n },\n defaultVariants: {\n appearance: \"default\",\n size: \"md\",\n },\n});\n","\"use client\";\n\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { cn } from \"../../lib/utils\";\nimport {\n zuiTreeViewChevron,\n zuiTreeViewGuide,\n zuiTreeViewIcon,\n} from \"../../design-system/tree-view\";\n\nimport type {\n TreeGroupProps,\n TreeNode,\n TreeViewBaseProps,\n TreeViewCtx,\n} from \"./types\";\nimport { treeViewItemVariants, treeViewVariants } from \"./variants\";\nimport { FaChevronRight } from \"react-icons/fa6\";\n\nconst TreeViewContext = createContext<TreeViewCtx | null>(null);\n\n/**\n * Reads the shared tree-view state from context and fails early when a tree item\n * is rendered outside the TreeView provider. The component name keeps the error\n * message actionable for consumers composing custom tree-view pieces.\n */\nfunction useTreeViewContext(component: string): TreeViewCtx {\n const ctx = useContext(TreeViewContext);\n if (!ctx) {\n throw new Error(`${component} must be used within <TreeView>`);\n }\n return ctx;\n}\n\ntype FlatNode = { node: TreeNode; level: number; parentId: string | null };\n\n/**\n * Converts the nested tree into a flat list of the nodes that are currently\n * visible. Keyboard navigation works against this list so ArrowUp/ArrowDown can\n * move through the rendered rows in visual order without walking the nested\n * structure on every key press.\n *\n * The same accumulator is passed through recursive calls to avoid creating and\n * merging many intermediate arrays for large trees.\n */\nfunction flattenVisible(\n nodes: TreeNode[],\n isExpanded: (id: string) => boolean,\n level = 1,\n parentId: string | null = null,\n acc: FlatNode[] = [],\n): FlatNode[] {\n for (const node of nodes) {\n acc.push({ node, level, parentId });\n if (node.children?.length && isExpanded(node.id)) {\n flattenVisible(node.children, isExpanded, level + 1, node.id, acc);\n }\n }\n return acc;\n}\n\n/**\n * Default non-animated group wrapper. Animated tree variants can replace this\n * component through GroupComponent while the recursive TreeItemNode rendering\n * remains shared.\n */\nfunction StaticTreeGroup({ open, children }: TreeGroupProps) {\n if (!open) {\n return null;\n }\n return (\n <ul role=\"group\" data-slot=\"tree-view-group\" className=\"m-0 list-none p-0\">\n {children}\n </ul>\n );\n}\n\nfunction TreeItemNode({\n node,\n level,\n chevronIcon,\n}: {\n node: TreeNode;\n level: number;\n chevronIcon?: React.ReactNode;\n}) {\n const {\n isExpanded,\n selectedId,\n activeId,\n GroupComponent,\n registerItem,\n appearance,\n size,\n toggleExpanded,\n selectNode,\n onItemKeyDown,\n renderNode,\n showGuides,\n } = useTreeViewContext(\"TreeItem\");\n\n // These derived flags keep the JSX readable and mirror the ARIA state applied\n // to each row below.\n const hasChildren = Boolean(node.children?.length);\n const expanded = hasChildren && isExpanded(node.id);\n const selected = selectedId === node.id;\n const active = activeId === node.id;\n const disabled = Boolean(node.disabled);\n\n // GroupComponent is intentionally resolved from context so the base tree can\n // be reused by static and animated implementations without duplicating item\n // rendering logic.\n const Group = GroupComponent;\n\n return (\n <li role=\"none\" data-slot=\"tree-view-item\">\n <div\n role=\"treeitem\"\n // Register the focusable row so keyboard navigation can imperatively\n // focus the next visible item after the active id changes.\n ref={(el) => registerItem(node.id, el)}\n aria-expanded={hasChildren ? expanded : undefined}\n aria-selected={selected}\n aria-level={level}\n aria-disabled={disabled || undefined}\n data-slot=\"tree-view-item-row\"\n data-node-id={node.id}\n data-selected={selected}\n data-active={active}\n data-disabled={disabled}\n tabIndex={active ? 0 : -1}\n // Each level indents by a fixed step. The root still gets a small inset\n // so chevrons and labels align with surrounding UI.\n style={{ paddingLeft: `${(level - 1) * 1.25 + 0.5}rem` }}\n className={treeViewItemVariants({\n appearance: appearance,\n size: size,\n })}\n onClick={() => {\n // Disabled rows are rendered for context but should not toggle,\n // select, or receive active focus from pointer interaction.\n if (disabled) {\n return;\n }\n\n // Clicking a parent both toggles disclosure and selects the row,\n // matching the same selection behavior as leaf nodes.\n if (hasChildren) {\n toggleExpanded(node.id);\n }\n selectNode(node);\n }}\n onKeyDown={onItemKeyDown}\n >\n {hasChildren ? (\n <span\n data-slot=\"tree-view-chevron\"\n data-expanded={expanded}\n className={zuiTreeViewChevron}\n >\n {chevronIcon || <FaChevronRight />}\n </span>\n ) : (\n // Leaf nodes reserve chevron space to keep labels vertically aligned\n // with sibling branches that do have disclosure icons.\n <span aria-hidden className=\"inline-flex h-5 w-5 shrink-0\" />\n )}\n {node.icon ? (\n <span data-slot=\"tree-view-icon\" className={zuiTreeViewIcon}>\n {node.icon}\n </span>\n ) : null}\n <span data-slot=\"tree-view-label\" className=\"truncate\">\n {renderNode\n ? renderNode({\n node,\n depth: level,\n isExpanded: expanded,\n isSelected: selected,\n })\n : node.label}\n </span>\n </div>\n {hasChildren ? (\n <Group open={expanded} level={level}>\n <ol\n className={cn(showGuides && zuiTreeViewGuide, showGuides && \"ml-5\")}\n >\n {node.children?.map((child) => (\n // Recursion preserves each child's depth so ARIA levels,\n // indentation, and guide spacing all stay in sync.\n <TreeItemNode key={child.id} node={child} level={level + 1} />\n ))}\n </ol>\n </Group>\n ) : null}\n </li>\n );\n}\n\nexport function TreeViewBase({\n data = [],\n defaultExpanded,\n expanded,\n onExpandedChange,\n defaultSelected,\n selected,\n onSelect,\n renderNode,\n showGuides = false,\n appearance = \"default\",\n size = \"md\",\n className,\n GroupComponent = StaticTreeGroup,\n ...rest\n}: TreeViewBaseProps & {\n GroupComponent?: TreeViewCtx[\"GroupComponent\"];\n}) {\n // Mirror common React controlled/uncontrolled patterns. When a controlled prop\n // is provided, internal state is treated as read-only fallback state and every\n // change is reported through the matching callback.\n const isExpandedControlled = expanded !== undefined;\n const isSelectedControlled = selected !== undefined;\n\n const [expandedUncontrolled, setExpandedUncontrolled] = useState<string[]>(\n defaultExpanded ?? [],\n );\n const [selectedUncontrolled, setSelectedUncontrolled] = useState<\n string | undefined\n >(defaultSelected);\n\n const expandedIds = isExpandedControlled\n ? (expanded ?? [])\n : expandedUncontrolled;\n const selectedId = isSelectedControlled ? selected : selectedUncontrolled;\n\n // A Set gives O(1) lookup for expansion checks. This is used in render, the\n // flattening utility, and keyboard navigation, so memoizing it prevents\n // rebuilding the lookup unless the expanded ids actually change.\n const expandedSet = useMemo(() => new Set(expandedIds), [expandedIds]);\n\n const isExpanded = useCallback(\n (id: string) => expandedSet.has(id),\n [expandedSet],\n );\n\n // Centralizes the \"commit\" step so controlled and uncontrolled expansion\n // updates always notify consumers consistently.\n const commitExpanded = useCallback(\n (next: string[]) => {\n if (!isExpandedControlled) {\n setExpandedUncontrolled(next);\n }\n onExpandedChange?.(next);\n },\n [isExpandedControlled, onExpandedChange],\n );\n\n const setExpanded = useCallback(\n (id: string, open: boolean) => {\n const has = expandedSet.has(id);\n\n // Avoid sending duplicate updates when the requested state already\n // matches the current expansion state.\n if (open === has) {\n return;\n }\n\n const next = open\n ? [...expandedIds, id]\n : expandedIds.filter((entry) => entry !== id);\n commitExpanded(next);\n },\n [commitExpanded, expandedIds, expandedSet],\n );\n\n const toggleExpanded = useCallback(\n (id: string) => {\n setExpanded(id, !expandedSet.has(id));\n },\n [expandedSet, setExpanded],\n );\n\n // Stores mounted treeitem rows by node id. The Map is held in a ref because\n // focus targets change over time without needing to trigger React renders.\n const itemRefs = useRef(new Map<string, HTMLDivElement>());\n const registerItem = useCallback((id: string, el: HTMLDivElement | null) => {\n if (el) {\n itemRefs.current.set(id, el);\n } else {\n itemRefs.current.delete(id);\n }\n }, []);\n\n // Only expanded branches are included. This becomes the single source of truth\n // for roving focus and Home/End/Arrow navigation.\n const visible = useMemo(\n () => flattenVisible(data, isExpanded),\n [data, isExpanded],\n );\n\n // Used as a safe fallback for tab focus when nothing has been selected or when\n // the selected/active item is hidden by a collapsed parent.\n const firstEnabledId = useMemo(\n () => visible.find((entry) => !entry.node.disabled)?.node.id,\n [visible],\n );\n\n const [activeIdState, setActiveIdState] = useState<string | undefined>(\n undefined,\n );\n\n // A selected item can become hidden when an ancestor is collapsed. In that\n // case it should not keep the roving tab stop; focus falls back below.\n const isSelectedVisible =\n selectedId !== undefined &&\n visible.some((entry) => entry.node.id === selectedId);\n\n // Roving tabindex chooses a single keyboard tab stop: prefer the last active\n // visible item, then the selected visible item, then the first enabled row.\n const activeId =\n activeIdState && visible.some((entry) => entry.node.id === activeIdState)\n ? activeIdState\n : isSelectedVisible\n ? selectedId\n : firstEnabledId;\n\n // Updates logical focus state and then focuses the mounted row when available.\n // Optional chaining handles cases where React has not mounted the row yet.\n const focusItem = useCallback((id: string) => {\n setActiveIdState(id);\n itemRefs.current.get(id)?.focus();\n }, []);\n\n const selectNode = useCallback(\n (node: TreeNode) => {\n // Selection ignores disabled nodes from both pointer and keyboard paths.\n if (node.disabled) {\n return;\n }\n\n setActiveIdState(node.id);\n if (!isSelectedControlled) {\n setSelectedUncontrolled(node.id);\n }\n onSelect?.(node);\n },\n [isSelectedControlled, onSelect],\n );\n\n const onItemKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n // Prefer the DOM row id because the event always originates from a\n // treeitem. activeId is a fallback for unusual composed event paths.\n const currentId = (event.currentTarget.dataset.nodeId ??\n activeId) as string;\n const index = visible.findIndex((entry) => entry.node.id === currentId);\n const current = visible[index];\n if (index === -1 || !current) {\n return;\n }\n\n const moveTo = (target: number) => {\n // Clamp so repeated ArrowUp/ArrowDown at the edges keeps focus on the\n // first or last visible item instead of producing an invalid index.\n const clamped = Math.max(0, Math.min(visible.length - 1, target));\n const next = visible[clamped];\n if (next) {\n focusItem(next.node.id);\n }\n };\n\n switch (event.key) {\n case \"ArrowDown\":\n event.preventDefault();\n moveTo(index + 1);\n break;\n case \"ArrowUp\":\n event.preventDefault();\n moveTo(index - 1);\n break;\n case \"Home\":\n event.preventDefault();\n moveTo(0);\n break;\n case \"End\":\n event.preventDefault();\n moveTo(visible.length - 1);\n break;\n case \"ArrowRight\": {\n event.preventDefault();\n const hasChildren = Boolean(current.node.children?.length);\n\n // Right arrow first opens a closed branch. If it is already open,\n // focus moves to the next visible row, which is the first child.\n if (hasChildren && !isExpanded(current.node.id)) {\n setExpanded(current.node.id, true);\n } else if (hasChildren) {\n moveTo(index + 1);\n }\n break;\n }\n case \"ArrowLeft\": {\n event.preventDefault();\n const hasChildren = Boolean(current.node.children?.length);\n\n // Left arrow closes an open branch. From a leaf or already-closed\n // branch, it moves focus back to the parent row when there is one.\n if (hasChildren && isExpanded(current.node.id)) {\n setExpanded(current.node.id, false);\n } else if (current.parentId) {\n focusItem(current.parentId);\n }\n break;\n }\n case \"Enter\":\n case \" \":\n event.preventDefault();\n // Enter and Space select the current row. Parent expansion remains on\n // the arrow keys so keyboard users have predictable disclosure control.\n selectNode(current.node);\n break;\n default:\n break;\n }\n },\n [activeId, focusItem, isExpanded, selectNode, setExpanded, visible],\n );\n\n // Memoize the context payload so recursive items only re-render when the tree\n // state or rendering options they consume actually change.\n const ctx = useMemo<TreeViewCtx>(\n () => ({\n appearance: appearance ?? \"default\",\n size: size ?? \"md\",\n showGuides,\n GroupComponent,\n isExpanded,\n toggleExpanded,\n setExpanded,\n selectedId,\n activeId,\n selectNode,\n registerItem,\n onItemKeyDown,\n renderNode,\n }),\n [\n activeId,\n appearance,\n GroupComponent,\n isExpanded,\n onItemKeyDown,\n registerItem,\n renderNode,\n selectNode,\n selectedId,\n setExpanded,\n showGuides,\n size,\n toggleExpanded,\n ],\n );\n\n return (\n <TreeViewContext.Provider value={ctx}>\n <ul\n role=\"tree\"\n data-slot=\"tree-view\"\n aria-label={rest[\"aria-label\"]}\n aria-labelledby={rest[\"aria-labelledby\"]}\n className={cn(\n treeViewVariants({ appearance, size }),\n \"list-none\",\n className,\n )}\n >\n {data.map((node) => (\n <TreeItemNode key={node.id} node={node} level={1} />\n ))}\n </ul>\n </TreeViewContext.Provider>\n );\n}\n\nTreeViewBase.displayName = \"TreeView\";\n\nexport { useTreeViewContext };\n"]}
@@ -20,6 +20,7 @@ export * from "./otp-input";
20
20
  export * from "./pagination";
21
21
  export * from "./popover";
22
22
  export * from "./progress";
23
+ export * from "./rating";
23
24
  export * from "./radio-group";
24
25
  export * from "./scroll-area";
25
26
  export * from "./select";
@@ -34,5 +35,6 @@ export * from "./toast";
34
35
  export * from "./tokens";
35
36
  export * from "./toggle";
36
37
  export * from "./tooltip";
38
+ export * from "./tree-view";
37
39
  export * from "./typography";
38
40
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/design-system/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/design-system/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,43 @@
1
+ export declare const zuiRatingRootBase = "grid w-fit gap-2 text-[color:var(--zui-rating-label-fg,oklch(20.8%_0.042_265.755))] dark:text-[color:var(--zui-rating-label-fg-dark,oklch(98.4%_0.003_247.858))] data-[disabled=true]:cursor-not-allowed data-[disabled=true]:opacity-50";
2
+ export declare const zuiRatingLabelBase = "text-sm font-medium leading-6 text-[color:var(--zui-rating-label-fg,oklch(20.8%_0.042_265.755))] dark:text-[color:var(--zui-rating-label-fg-dark,oklch(98.4%_0.003_247.858))]";
3
+ export declare const zuiRatingHintBase = "max-w-sm text-xs leading-5 text-[color:var(--zui-rating-hint-fg,oklch(55.4%_0.046_257.417))] dark:text-[color:var(--zui-rating-hint-fg-dark,oklch(70.4%_0.04_256.788))]";
4
+ export declare const zuiRatingGroupBase = "flex w-fit flex-wrap items-center gap-[var(--zui-rating-gap,0.25rem)]";
5
+ export declare const zuiRatingItemBase = "relative inline-grid shrink-0 place-items-center text-[color:var(--zui-rating-empty,oklch(86.9%_0.022_252.894))] transition-transform duration-200 data-[interactive=true]:hover:-translate-y-0.5 dark:text-[color:var(--zui-rating-empty-dark,oklch(37.2%_0.044_257.287))]";
6
+ export declare const zuiRatingIconBase = "pointer-events-none col-start-1 row-start-1 transition-[clip-path,color,transform] duration-200 ease-out";
7
+ export declare const zuiRatingControlBase = "absolute inset-y-0 z-[1] cursor-pointer rounded-md bg-transparent outline-none transition-shadow focus-visible:ring-2 focus-visible:ring-[var(--zui-rating-ring-focus,oklch(54.6%_0.245_262.881_/_0.32))] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--zui-rating-ring-offset-focus,#ffffff)] disabled:cursor-not-allowed dark:focus-visible:ring-offset-[var(--zui-rating-ring-offset-focus-dark,oklch(12.9%_0.042_264.695))]";
8
+ export declare const zuiRatingErrorBase = "text-sm leading-6 text-[color:var(--zui-rating-error-fg,oklch(58.6%_0.253_17.585))] dark:text-[color:var(--zui-rating-error-fg-dark,oklch(71.2%_0.194_13.428))]";
9
+ export declare const zuiRatingSizes: {
10
+ readonly sm: "size-5 text-lg";
11
+ readonly md: "size-7 text-2xl";
12
+ readonly lg: "size-9 text-3xl";
13
+ };
14
+ export declare const zuiRatingAppearances: {
15
+ readonly default: "text-[color:var(--zui-rating-default-active,oklch(20.8%_0.042_265.755))] dark:text-[color:var(--zui-rating-default-active-dark,oklch(98.4%_0.003_247.858))]";
16
+ readonly secondary: "text-[color:var(--zui-rating-secondary-active,oklch(44.6%_0.043_257.281))] dark:text-[color:var(--zui-rating-secondary-active-dark,oklch(86.9%_0.022_252.894))]";
17
+ readonly destructive: "text-[color:var(--zui-rating-destructive-active,oklch(58.6%_0.253_17.585))] dark:text-[color:var(--zui-rating-destructive-active-dark,oklch(71.2%_0.194_13.428))]";
18
+ readonly outline: "text-[color:var(--zui-rating-outline-active,oklch(44.6%_0.043_257.281))] dark:text-[color:var(--zui-rating-outline-active-dark,oklch(86.9%_0.022_252.894))]";
19
+ readonly ghost: "text-[color:var(--zui-rating-ghost-active,oklch(37.2%_0.044_257.287))] dark:text-[color:var(--zui-rating-ghost-active-dark,oklch(92.9%_0.013_255.508))]";
20
+ readonly glass: "text-[color:var(--zui-rating-glass-active,oklch(54.6%_0.245_262.881))] drop-shadow-[0_2px_12px_rgba(59,130,246,0.25)] dark:text-[color:var(--zui-rating-glass-active-dark,oklch(78.9%_0.154_211.53))]";
21
+ readonly emerald: "text-[color:var(--zui-rating-emerald-active,oklch(59.6%_0.145_163.225))] dark:text-[color:var(--zui-rating-emerald-active-dark,oklch(77.7%_0.152_181.912))]";
22
+ readonly indigo: "text-[color:var(--zui-rating-indigo-active,oklch(51.1%_0.262_276.966))] dark:text-[color:var(--zui-rating-indigo-active-dark,oklch(67.3%_0.182_276.935))]";
23
+ readonly purple: "text-[color:var(--zui-rating-purple-active,oklch(55.8%_0.288_302.321))] dark:text-[color:var(--zui-rating-purple-active-dark,oklch(71.4%_0.203_305.504))]";
24
+ readonly pink: "text-[color:var(--zui-rating-pink-active,oklch(59.2%_0.249_0.584))] dark:text-[color:var(--zui-rating-pink-active-dark,oklch(71.8%_0.202_349.761))]";
25
+ readonly rose: "text-[color:var(--zui-rating-rose-active,oklch(58.6%_0.253_17.585))] dark:text-[color:var(--zui-rating-rose-active-dark,oklch(71.2%_0.194_13.428))]";
26
+ readonly sky: "text-[color:var(--zui-rating-sky-active,oklch(62.3%_0.214_259.815))] dark:text-[color:var(--zui-rating-sky-active-dark,oklch(74.6%_0.16_232.661))]";
27
+ readonly teal: "text-[color:var(--zui-rating-teal-active,oklch(60%_0.118_184.704))] dark:text-[color:var(--zui-rating-teal-active-dark,oklch(77.7%_0.152_181.912))]";
28
+ readonly yellow: "text-[color:var(--zui-rating-yellow-active,oklch(79.5%_0.184_86.047))] dark:text-[color:var(--zui-rating-yellow-active-dark,oklch(85.2%_0.199_91.936))]";
29
+ readonly orange: "text-[color:var(--zui-rating-orange-active,oklch(64.6%_0.222_41.116))] dark:text-[color:var(--zui-rating-orange-active-dark,oklch(75%_0.183_55.934))]";
30
+ readonly gray: "text-[color:var(--zui-rating-gray-active,oklch(55.1%_0.027_264.364))] dark:text-[color:var(--zui-rating-gray-active-dark,oklch(70.7%_0.022_261.325))]";
31
+ readonly amber: "text-[color:var(--zui-rating-amber-active,oklch(76.9%_0.188_70.08))] dark:text-[color:var(--zui-rating-amber-active-dark,oklch(82.8%_0.189_84.429))]";
32
+ readonly violet: "text-[color:var(--zui-rating-violet-active,oklch(54.1%_0.281_293.009))] dark:text-[color:var(--zui-rating-violet-active-dark,oklch(70.2%_0.183_293.541))]";
33
+ readonly "gradient-blue": "text-[color:var(--zui-rating-gradient-blue-active,oklch(54.6%_0.245_262.881))] drop-shadow-[0_2px_12px_rgba(37,99,235,0.28)] dark:text-[color:var(--zui-rating-gradient-blue-active-dark,oklch(70.7%_0.165_254.624))]";
34
+ readonly "gradient-green": "text-[color:var(--zui-rating-gradient-green-active,oklch(62.7%_0.194_149.214))] drop-shadow-[0_2px_12px_rgba(22,163,74,0.24)] dark:text-[color:var(--zui-rating-gradient-green-active-dark,oklch(79.2%_0.209_151.711))]";
35
+ readonly "gradient-red": "text-[color:var(--zui-rating-gradient-red-active,oklch(57.7%_0.245_27.325))] drop-shadow-[0_2px_12px_rgba(220,38,38,0.24)] dark:text-[color:var(--zui-rating-gradient-red-active-dark,oklch(70.4%_0.191_22.216))]";
36
+ readonly "gradient-yellow": "text-[color:var(--zui-rating-gradient-yellow-active,oklch(79.5%_0.184_86.047))] drop-shadow-[0_2px_12px_rgba(234,179,8,0.24)] dark:text-[color:var(--zui-rating-gradient-yellow-active-dark,oklch(85.2%_0.199_91.936))]";
37
+ readonly "gradient-purple": "text-[color:var(--zui-rating-gradient-purple-active,oklch(62.7%_0.265_303.9))] drop-shadow-[0_2px_12px_rgba(147,51,234,0.24)] dark:text-[color:var(--zui-rating-gradient-purple-active-dark,oklch(71.4%_0.203_305.504))]";
38
+ readonly "gradient-teal": "text-[color:var(--zui-rating-gradient-teal-active,oklch(60%_0.118_184.704))] drop-shadow-[0_2px_12px_rgba(13,148,136,0.24)] dark:text-[color:var(--zui-rating-gradient-teal-active-dark,oklch(77.7%_0.152_181.912))]";
39
+ readonly "gradient-indigo": "text-[color:var(--zui-rating-gradient-indigo-active,oklch(51.1%_0.262_276.966))] drop-shadow-[0_2px_12px_rgba(79,70,229,0.24)] dark:text-[color:var(--zui-rating-gradient-indigo-active-dark,oklch(67.3%_0.182_276.935))]";
40
+ readonly "gradient-pink": "text-[color:var(--zui-rating-gradient-pink-active,oklch(59.2%_0.249_0.584))] drop-shadow-[0_2px_12px_rgba(219,39,119,0.24)] dark:text-[color:var(--zui-rating-gradient-pink-active-dark,oklch(71.8%_0.202_349.761))]";
41
+ readonly "gradient-orange": "text-[color:var(--zui-rating-gradient-orange-active,oklch(64.6%_0.222_41.116))] drop-shadow-[0_2px_12px_rgba(234,88,12,0.24)] dark:text-[color:var(--zui-rating-gradient-orange-active-dark,oklch(75%_0.183_55.934))]";
42
+ };
43
+ //# sourceMappingURL=rating.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rating.d.ts","sourceRoot":"","sources":["../../src/design-system/rating.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,6OAC8M,CAAC;AAE7O,eAAO,MAAM,kBAAkB,kLACkJ,CAAC;AAElL,eAAO,MAAM,iBAAiB,4KAC6I,CAAC;AAE5K,eAAO,MAAM,kBAAkB,0EAC0C,CAAC;AAE1E,eAAO,MAAM,iBAAiB,gRACiP,CAAC;AAEhR,eAAO,MAAM,iBAAiB,6GAC8E,CAAC;AAE7G,eAAO,MAAM,oBAAoB,mbACiZ,CAAC;AAEnb,eAAO,MAAM,kBAAkB,oKACoI,CAAC;AAEpK,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAEX,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDvB,CAAC"}