@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,315 @@
1
+ "use client";
2
+ import { cn } from '../chunk-4D54YOL6.mjs';
3
+ import { useId, useState, useCallback } from 'react';
4
+ import { FaStar, FaThumbsUp, FaFire, FaHeart } from 'react-icons/fa';
5
+ import { cva } from 'class-variance-authority';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
+
8
+ // src/design-system/rating.ts
9
+ var 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";
10
+ var 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))]";
11
+ var 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))]";
12
+ var zuiRatingGroupBase = "flex w-fit flex-wrap items-center gap-[var(--zui-rating-gap,0.25rem)]";
13
+ var 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))]";
14
+ var zuiRatingIconBase = "pointer-events-none col-start-1 row-start-1 transition-[clip-path,color,transform] duration-200 ease-out";
15
+ var 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))]";
16
+ var 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))]";
17
+ var zuiRatingSizes = {
18
+ sm: "size-5 text-lg",
19
+ md: "size-7 text-2xl",
20
+ lg: "size-9 text-3xl"
21
+ };
22
+ var zuiRatingAppearances = {
23
+ 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))]",
24
+ 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))]",
25
+ 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))]",
26
+ 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))]",
27
+ 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))]",
28
+ 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))]",
29
+ 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))]",
30
+ 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))]",
31
+ 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))]",
32
+ 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))]",
33
+ 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))]",
34
+ 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))]",
35
+ 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))]",
36
+ 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))]",
37
+ 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))]",
38
+ 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))]",
39
+ 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))]",
40
+ 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))]",
41
+ "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))]",
42
+ "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))]",
43
+ "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))]",
44
+ "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))]",
45
+ "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))]",
46
+ "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))]",
47
+ "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))]",
48
+ "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))]",
49
+ "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))]"
50
+ };
51
+ var ratingItemVariants = cva(zuiRatingItemBase, {
52
+ variants: {
53
+ size: zuiRatingSizes
54
+ },
55
+ defaultVariants: {
56
+ size: "md"
57
+ }
58
+ });
59
+ var ratingIconVariants = cva(zuiRatingIconBase, {
60
+ variants: {
61
+ appearance: zuiRatingAppearances
62
+ },
63
+ defaultVariants: {
64
+ appearance: "amber"
65
+ }
66
+ });
67
+ var PRESET_ICONS = {
68
+ star: FaStar,
69
+ heart: FaHeart,
70
+ flame: FaFire,
71
+ thumb: FaThumbsUp
72
+ };
73
+ function clamp(value, min, max) {
74
+ return Math.min(Math.max(value, min), max);
75
+ }
76
+ function normalizeMax(max) {
77
+ const resolved = Number.isFinite(max) ? Number(max) : 5;
78
+ return Math.max(1, Math.min(10, Math.floor(resolved)));
79
+ }
80
+ function normalizeValue(value, max, allowHalf) {
81
+ const resolved = Number.isFinite(value) ? Number(value) : 0;
82
+ const step = allowHalf ? 0.5 : 1;
83
+ return clamp(Math.round(resolved / step) * step, 0, max);
84
+ }
85
+ function defaultGetLabel(value, max) {
86
+ return `${value} of ${max}`;
87
+ }
88
+ function resolveIcon(icon) {
89
+ if (!icon) {
90
+ return PRESET_ICONS.star;
91
+ }
92
+ if (typeof icon === "string") {
93
+ return PRESET_ICONS[icon] ?? PRESET_ICONS.star;
94
+ }
95
+ return icon;
96
+ }
97
+ function Rating(props) {
98
+ const {
99
+ allowClear = false,
100
+ allowHalf = false,
101
+ appearance,
102
+ className,
103
+ defaultValue = 0,
104
+ disabled,
105
+ errorMessage,
106
+ getLabel = defaultGetLabel,
107
+ hint,
108
+ icon,
109
+ iconClassName,
110
+ id,
111
+ label,
112
+ max = 5,
113
+ name,
114
+ onValueChange,
115
+ readOnly,
116
+ ref,
117
+ size,
118
+ value,
119
+ ...rest
120
+ } = props;
121
+ const generatedId = useId();
122
+ const rootId = id ?? generatedId;
123
+ const resolvedMax = normalizeMax(max);
124
+ const isControlled = value !== void 0;
125
+ const [uncontrolledValue, setUncontrolledValue] = useState(
126
+ () => normalizeValue(defaultValue, resolvedMax, allowHalf)
127
+ );
128
+ const [hoverValue, setHoverValue] = useState();
129
+ const resolvedValue = normalizeValue(
130
+ isControlled ? value : uncontrolledValue,
131
+ resolvedMax,
132
+ allowHalf
133
+ );
134
+ const displayValue = hoverValue ?? resolvedValue;
135
+ const Icon = resolveIcon(icon);
136
+ const interactive = !disabled && !readOnly;
137
+ const controlsDisabled = disabled || readOnly;
138
+ const step = allowHalf ? 0.5 : 1;
139
+ const labelId = `${rootId}-label`;
140
+ const hintId = `${rootId}-hint`;
141
+ const errorId = `${rootId}-error`;
142
+ const describedBy = [
143
+ hint !== void 0 ? hintId : void 0,
144
+ errorMessage !== void 0 ? errorId : void 0
145
+ ].filter(Boolean).join(" ");
146
+ const commitValue = useCallback(
147
+ (nextValue) => {
148
+ const normalized = normalizeValue(nextValue, resolvedMax, allowHalf);
149
+ const next = allowClear && normalized === resolvedValue ? 0 : normalized;
150
+ if (!isControlled) {
151
+ setUncontrolledValue(next);
152
+ }
153
+ onValueChange?.(next);
154
+ },
155
+ [
156
+ allowClear,
157
+ allowHalf,
158
+ isControlled,
159
+ onValueChange,
160
+ resolvedMax,
161
+ resolvedValue
162
+ ]
163
+ );
164
+ const handleKeyDown = useCallback(
165
+ (event) => {
166
+ if (!interactive) {
167
+ return;
168
+ }
169
+ const root = event.currentTarget.closest('[data-slot="rating"]');
170
+ const focusValue = (nextValue) => {
171
+ const control = root?.querySelector(
172
+ `button[data-value="${nextValue}"]`
173
+ );
174
+ control?.focus();
175
+ };
176
+ if (event.key === "ArrowRight" || event.key === "ArrowUp") {
177
+ event.preventDefault();
178
+ const nextValue = clamp(resolvedValue + step, step, resolvedMax);
179
+ commitValue(nextValue);
180
+ focusValue(nextValue);
181
+ return;
182
+ }
183
+ if (event.key === "ArrowLeft" || event.key === "ArrowDown") {
184
+ event.preventDefault();
185
+ const nextValue = clamp(resolvedValue - step, 0, resolvedMax);
186
+ commitValue(nextValue);
187
+ focusValue(nextValue === 0 ? step : nextValue);
188
+ return;
189
+ }
190
+ if (event.key === "Home") {
191
+ event.preventDefault();
192
+ commitValue(step);
193
+ focusValue(step);
194
+ return;
195
+ }
196
+ if (event.key === "End") {
197
+ event.preventDefault();
198
+ commitValue(resolvedMax);
199
+ focusValue(resolvedMax);
200
+ }
201
+ },
202
+ [commitValue, interactive, resolvedMax, resolvedValue, step]
203
+ );
204
+ return /* @__PURE__ */ jsxs(
205
+ "div",
206
+ {
207
+ ref,
208
+ id: rootId,
209
+ className: cn(zuiRatingRootBase, className),
210
+ "data-disabled": disabled ? "true" : void 0,
211
+ "data-readonly": readOnly ? "true" : void 0,
212
+ "data-slot": "rating",
213
+ ...rest,
214
+ children: [
215
+ label !== void 0 && /* @__PURE__ */ jsx("p", { id: labelId, className: zuiRatingLabelBase, children: label }),
216
+ hint !== void 0 && /* @__PURE__ */ jsx("p", { id: hintId, className: zuiRatingHintBase, children: hint }),
217
+ /* @__PURE__ */ jsx(
218
+ "div",
219
+ {
220
+ "aria-describedby": describedBy || void 0,
221
+ "aria-invalid": errorMessage !== void 0 ? true : void 0,
222
+ "aria-labelledby": label !== void 0 ? labelId : void 0,
223
+ "aria-label": label === void 0 ? "Rating" : void 0,
224
+ className: zuiRatingGroupBase,
225
+ "data-slot": "rating-group",
226
+ onPointerLeave: () => setHoverValue(void 0),
227
+ role: "radiogroup",
228
+ children: Array.from({ length: resolvedMax }, (_, index) => {
229
+ const fullValue = index + 1;
230
+ const fillAmount = clamp(displayValue - index, 0, 1);
231
+ const clipStyle = {
232
+ clipPath: `inset(0 ${100 - fillAmount * 100}% 0 0)`
233
+ };
234
+ const itemOptions = allowHalf ? [fullValue - 0.5, fullValue] : [fullValue];
235
+ return /* @__PURE__ */ jsxs(
236
+ "span",
237
+ {
238
+ className: ratingItemVariants({ size }),
239
+ "data-interactive": interactive ? "true" : void 0,
240
+ "data-slot": "rating-item",
241
+ children: [
242
+ /* @__PURE__ */ jsx(
243
+ Icon,
244
+ {
245
+ "aria-hidden": "true",
246
+ className: cn("col-start-1 row-start-1", iconClassName)
247
+ }
248
+ ),
249
+ /* @__PURE__ */ jsx(
250
+ Icon,
251
+ {
252
+ "aria-hidden": "true",
253
+ className: cn(
254
+ ratingIconVariants({ appearance }),
255
+ iconClassName
256
+ ),
257
+ "data-slot": "rating-icon-fill",
258
+ style: clipStyle
259
+ }
260
+ ),
261
+ itemOptions.map((optionValue, optionIndex) => /* @__PURE__ */ jsx(
262
+ "button",
263
+ {
264
+ type: "button",
265
+ "aria-checked": resolvedValue === optionValue,
266
+ "aria-label": getLabel(optionValue, resolvedMax),
267
+ className: cn(
268
+ zuiRatingControlBase,
269
+ allowHalf ? optionIndex === 0 ? "left-0 w-1/2" : "right-0 w-1/2" : "inset-x-0"
270
+ ),
271
+ "data-slot": "rating-control",
272
+ "data-value": optionValue,
273
+ disabled: controlsDisabled,
274
+ onClick: () => {
275
+ if (interactive) {
276
+ commitValue(optionValue);
277
+ }
278
+ },
279
+ onKeyDown: handleKeyDown,
280
+ onPointerEnter: () => {
281
+ if (interactive) {
282
+ setHoverValue(optionValue);
283
+ }
284
+ },
285
+ role: "radio",
286
+ tabIndex: resolvedValue === optionValue || resolvedValue === 0 && optionValue === step ? 0 : -1
287
+ },
288
+ optionValue
289
+ ))
290
+ ]
291
+ },
292
+ fullValue
293
+ );
294
+ })
295
+ }
296
+ ),
297
+ name !== void 0 && /* @__PURE__ */ jsx(
298
+ "input",
299
+ {
300
+ type: "hidden",
301
+ name,
302
+ value: resolvedValue,
303
+ disabled
304
+ }
305
+ ),
306
+ errorMessage !== void 0 && /* @__PURE__ */ jsx("p", { id: errorId, className: zuiRatingErrorBase, children: errorMessage })
307
+ ]
308
+ }
309
+ );
310
+ }
311
+ Rating.displayName = "Rating";
312
+
313
+ export { Rating, ratingIconVariants, ratingItemVariants };
314
+ //# sourceMappingURL=rating.mjs.map
315
+ //# sourceMappingURL=rating.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/design-system/rating.ts","../../src/ui/rating/variants.ts","../../src/ui/rating/rating.tsx"],"names":[],"mappings":"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","file":"rating.mjs","sourcesContent":["export const zuiRatingRootBase =\n \"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\";\n\nexport const zuiRatingLabelBase =\n \"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))]\";\n\nexport const zuiRatingHintBase =\n \"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))]\";\n\nexport const zuiRatingGroupBase =\n \"flex w-fit flex-wrap items-center gap-[var(--zui-rating-gap,0.25rem)]\";\n\nexport const zuiRatingItemBase =\n \"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))]\";\n\nexport const zuiRatingIconBase =\n \"pointer-events-none col-start-1 row-start-1 transition-[clip-path,color,transform] duration-200 ease-out\";\n\nexport const zuiRatingControlBase =\n \"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))]\";\n\nexport const zuiRatingErrorBase =\n \"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))]\";\n\nexport const zuiRatingSizes = {\n sm: \"size-5 text-lg\",\n md: \"size-7 text-2xl\",\n lg: \"size-9 text-3xl\",\n} as const;\n\nexport const zuiRatingAppearances = {\n default:\n \"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))]\",\n secondary:\n \"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))]\",\n destructive:\n \"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))]\",\n outline:\n \"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))]\",\n ghost:\n \"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))]\",\n glass:\n \"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))]\",\n emerald:\n \"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))]\",\n indigo:\n \"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))]\",\n purple:\n \"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))]\",\n 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))]\",\n 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))]\",\n 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))]\",\n 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))]\",\n yellow:\n \"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))]\",\n orange:\n \"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))]\",\n 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))]\",\n amber:\n \"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))]\",\n violet:\n \"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))]\",\n \"gradient-blue\":\n \"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))]\",\n \"gradient-green\":\n \"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))]\",\n \"gradient-red\":\n \"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))]\",\n \"gradient-yellow\":\n \"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))]\",\n \"gradient-purple\":\n \"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))]\",\n \"gradient-teal\":\n \"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))]\",\n \"gradient-indigo\":\n \"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))]\",\n \"gradient-pink\":\n \"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))]\",\n \"gradient-orange\":\n \"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))]\",\n} as const;\n","import { cva } from \"class-variance-authority\";\n\nimport {\n zuiRatingAppearances,\n zuiRatingIconBase,\n zuiRatingItemBase,\n zuiRatingSizes,\n} from \"../../design-system/rating\";\n\nexport const ratingItemVariants = cva(zuiRatingItemBase, {\n variants: {\n size: zuiRatingSizes,\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nexport const ratingIconVariants = cva(zuiRatingIconBase, {\n variants: {\n appearance: zuiRatingAppearances,\n },\n defaultVariants: {\n appearance: \"amber\",\n },\n});\n","\"use client\";\n\nimport {\n type CSSProperties,\n type KeyboardEvent,\n useCallback,\n useId,\n useState,\n} from \"react\";\nimport { FaFire, FaHeart, FaStar, FaThumbsUp } from \"react-icons/fa\";\nimport type { IconType } from \"react-icons\";\n\nimport {\n zuiRatingControlBase,\n zuiRatingErrorBase,\n zuiRatingGroupBase,\n zuiRatingHintBase,\n zuiRatingLabelBase,\n zuiRatingRootBase,\n} from \"../../design-system/rating\";\nimport { cn } from \"../../lib/utils\";\n\nimport type { RatingPresetIcon, RatingProps } from \"./types\";\nimport { ratingIconVariants, ratingItemVariants } from \"./variants\";\n\nconst PRESET_ICONS: Record<RatingPresetIcon, IconType> = {\n star: FaStar,\n heart: FaHeart,\n flame: FaFire,\n thumb: FaThumbsUp,\n};\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\nfunction normalizeMax(max: number | undefined): number {\n const resolved = Number.isFinite(max) ? Number(max) : 5;\n return Math.max(1, Math.min(10, Math.floor(resolved)));\n}\n\nfunction normalizeValue(\n value: number | undefined,\n max: number,\n allowHalf: boolean,\n): number {\n const resolved = Number.isFinite(value) ? Number(value) : 0;\n const step = allowHalf ? 0.5 : 1;\n return clamp(Math.round(resolved / step) * step, 0, max);\n}\n\nfunction defaultGetLabel(value: number, max: number): string {\n return `${value} of ${max}`;\n}\n\nfunction resolveIcon(icon: RatingProps[\"icon\"]): IconType {\n if (!icon) {\n return PRESET_ICONS.star;\n }\n\n if (typeof icon === \"string\") {\n return PRESET_ICONS[icon as RatingPresetIcon] ?? PRESET_ICONS.star;\n }\n\n return icon;\n}\n\nexport function Rating(props: RatingProps) {\n const {\n allowClear = false,\n allowHalf = false,\n appearance,\n className,\n defaultValue = 0,\n disabled,\n errorMessage,\n getLabel = defaultGetLabel,\n hint,\n icon,\n iconClassName,\n id,\n label,\n max = 5,\n name,\n onValueChange,\n readOnly,\n ref,\n size,\n value,\n ...rest\n } = props;\n\n const generatedId = useId();\n const rootId = id ?? generatedId;\n const resolvedMax = normalizeMax(max);\n const isControlled = value !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState(() =>\n normalizeValue(defaultValue, resolvedMax, allowHalf),\n );\n const [hoverValue, setHoverValue] = useState<number | undefined>();\n const resolvedValue = normalizeValue(\n isControlled ? value : uncontrolledValue,\n resolvedMax,\n allowHalf,\n );\n const displayValue = hoverValue ?? resolvedValue;\n const Icon = resolveIcon(icon);\n const interactive = !disabled && !readOnly;\n const controlsDisabled = disabled || readOnly;\n const step = allowHalf ? 0.5 : 1;\n const labelId = `${rootId}-label`;\n const hintId = `${rootId}-hint`;\n const errorId = `${rootId}-error`;\n const describedBy = [\n hint !== undefined ? hintId : undefined,\n errorMessage !== undefined ? errorId : undefined,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const commitValue = useCallback(\n (nextValue: number) => {\n const normalized = normalizeValue(nextValue, resolvedMax, allowHalf);\n const next = allowClear && normalized === resolvedValue ? 0 : normalized;\n\n if (!isControlled) {\n setUncontrolledValue(next);\n }\n onValueChange?.(next);\n },\n [\n allowClear,\n allowHalf,\n isControlled,\n onValueChange,\n resolvedMax,\n resolvedValue,\n ],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>) => {\n if (!interactive) {\n return;\n }\n\n const root = event.currentTarget.closest('[data-slot=\"rating\"]');\n const focusValue = (nextValue: number) => {\n const control = root?.querySelector(\n `button[data-value=\"${nextValue}\"]`,\n ) as HTMLButtonElement | null;\n control?.focus();\n };\n\n if (event.key === \"ArrowRight\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n const nextValue = clamp(resolvedValue + step, step, resolvedMax);\n commitValue(nextValue);\n focusValue(nextValue);\n return;\n }\n\n if (event.key === \"ArrowLeft\" || event.key === \"ArrowDown\") {\n event.preventDefault();\n const nextValue = clamp(resolvedValue - step, 0, resolvedMax);\n commitValue(nextValue);\n focusValue(nextValue === 0 ? step : nextValue);\n return;\n }\n\n if (event.key === \"Home\") {\n event.preventDefault();\n commitValue(step);\n focusValue(step);\n return;\n }\n\n if (event.key === \"End\") {\n event.preventDefault();\n commitValue(resolvedMax);\n focusValue(resolvedMax);\n }\n },\n [commitValue, interactive, resolvedMax, resolvedValue, step],\n );\n\n return (\n <div\n ref={ref}\n id={rootId}\n className={cn(zuiRatingRootBase, className)}\n data-disabled={disabled ? \"true\" : undefined}\n data-readonly={readOnly ? \"true\" : undefined}\n data-slot=\"rating\"\n {...rest}\n >\n {label !== undefined && (\n <p id={labelId} className={zuiRatingLabelBase}>\n {label}\n </p>\n )}\n {hint !== undefined && (\n <p id={hintId} className={zuiRatingHintBase}>\n {hint}\n </p>\n )}\n <div\n aria-describedby={describedBy || undefined}\n aria-invalid={errorMessage !== undefined ? true : undefined}\n aria-labelledby={label !== undefined ? labelId : undefined}\n aria-label={label === undefined ? \"Rating\" : undefined}\n className={zuiRatingGroupBase}\n data-slot=\"rating-group\"\n onPointerLeave={() => setHoverValue(undefined)}\n role=\"radiogroup\"\n >\n {Array.from({ length: resolvedMax }, (_, index) => {\n const fullValue = index + 1;\n const fillAmount = clamp(displayValue - index, 0, 1);\n const clipStyle = {\n clipPath: `inset(0 ${100 - fillAmount * 100}% 0 0)`,\n } satisfies CSSProperties;\n const itemOptions = allowHalf\n ? [fullValue - 0.5, fullValue]\n : [fullValue];\n\n return (\n <span\n key={fullValue}\n className={ratingItemVariants({ size })}\n data-interactive={interactive ? \"true\" : undefined}\n data-slot=\"rating-item\"\n >\n <Icon\n aria-hidden=\"true\"\n className={cn(\"col-start-1 row-start-1\", iconClassName)}\n />\n <Icon\n aria-hidden=\"true\"\n className={cn(\n ratingIconVariants({ appearance }),\n iconClassName,\n )}\n data-slot=\"rating-icon-fill\"\n style={clipStyle}\n />\n {itemOptions.map((optionValue, optionIndex) => (\n <button\n key={optionValue}\n type=\"button\"\n aria-checked={resolvedValue === optionValue}\n aria-label={getLabel(optionValue, resolvedMax)}\n className={cn(\n zuiRatingControlBase,\n allowHalf\n ? optionIndex === 0\n ? \"left-0 w-1/2\"\n : \"right-0 w-1/2\"\n : \"inset-x-0\",\n )}\n data-slot=\"rating-control\"\n data-value={optionValue}\n disabled={controlsDisabled}\n onClick={() => {\n if (interactive) {\n commitValue(optionValue);\n }\n }}\n onKeyDown={handleKeyDown}\n onPointerEnter={() => {\n if (interactive) {\n setHoverValue(optionValue);\n }\n }}\n role=\"radio\"\n tabIndex={\n resolvedValue === optionValue ||\n (resolvedValue === 0 && optionValue === step)\n ? 0\n : -1\n }\n />\n ))}\n </span>\n );\n })}\n </div>\n {name !== undefined && (\n <input\n type=\"hidden\"\n name={name}\n value={resolvedValue}\n disabled={disabled}\n />\n )}\n {errorMessage !== undefined && (\n <p id={errorId} className={zuiRatingErrorBase}>\n {errorMessage}\n </p>\n )}\n </div>\n );\n}\n\nRating.displayName = \"Rating\";\n"]}
@@ -0,0 +1,6 @@
1
+ import type { Transition } from "framer-motion";
2
+ /** Easing and duration presets for tree group expand/collapse. */
3
+ export type TreeViewTransition = "none" | "default" | "smooth" | "slow";
4
+ export type TreeViewTransitionPresets = Record<TreeViewTransition, Transition>;
5
+ export declare const treeViewTransitionPresets: TreeViewTransitionPresets;
6
+ //# sourceMappingURL=animations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animations.d.ts","sourceRoot":"","sources":["../../../../src/ui/tree-view/animated/animations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,kEAAkE;AAClE,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAExE,MAAM,MAAM,yBAAyB,GAAG,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;AAE/E,eAAO,MAAM,yBAAyB,EAAE,yBAKvC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { TreeViewAnimated } from "./tree-view-animated";
2
+ export type { TreeViewAnimatedProps } from "./types";
3
+ export { treeViewTransitionPresets } from "./animations";
4
+ export type { TreeViewTransition } from "./animations";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ui/tree-view/animated/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { TreeViewAnimatedProps } from "./types";
2
+ export declare function TreeViewAnimated({ transitionVariant, ...props }: TreeViewAnimatedProps): import("react/jsx-runtime").JSX.Element;
3
+ export declare namespace TreeViewAnimated {
4
+ var displayName: string;
5
+ }
6
+ //# sourceMappingURL=tree-view-animated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-view-animated.d.ts","sourceRoot":"","sources":["../../../../src/ui/tree-view/animated/tree-view-animated.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AA+BrD,wBAAgB,gBAAgB,CAAC,EAC/B,iBAA6B,EAC7B,GAAG,KAAK,EACT,EAAE,qBAAqB,2CAMvB;yBATe,gBAAgB"}
@@ -0,0 +1,6 @@
1
+ import type { TreeViewBaseProps } from "../types";
2
+ import type { TreeViewTransition } from "./animations";
3
+ export type TreeViewAnimatedProps = TreeViewBaseProps & {
4
+ transitionVariant?: TreeViewTransition;
5
+ };
6
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/ui/tree-view/animated/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,GAAG;IACtD,iBAAiB,CAAC,EAAE,kBAAkB,CAAC;CACxC,CAAC"}
@@ -0,0 +1,53 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunkQHEHBC6M_js = require('../../chunk-QHEHBC6M.js');
5
+ require('../../chunk-ZS5756ZC.js');
6
+ var react = require('react');
7
+ var framerMotion = require('framer-motion');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+
10
+ // src/ui/tree-view/animated/animations.ts
11
+ var treeViewTransitionPresets = {
12
+ none: { duration: 0 },
13
+ default: { duration: 0.2, ease: [0.4, 0, 0.2, 1] },
14
+ smooth: { duration: 0.28, ease: [0.22, 1, 0.36, 1] },
15
+ slow: { duration: 0.38, ease: [0.4, 0, 0.2, 1] }
16
+ };
17
+ function createAnimatedGroup(transitionVariant) {
18
+ const transition = treeViewTransitionPresets[transitionVariant];
19
+ const motionless = transitionVariant === "none";
20
+ function AnimatedTreeGroup({ open, children }) {
21
+ return /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { initial: false, children: open ? /* @__PURE__ */ jsxRuntime.jsx(
22
+ framerMotion.motion.ul,
23
+ {
24
+ role: "group",
25
+ "data-slot": "tree-view-group",
26
+ className: "m-0 list-none overflow-hidden p-0",
27
+ initial: motionless ? false : { height: 0, opacity: 0 },
28
+ animate: motionless ? void 0 : { height: "auto", opacity: 1 },
29
+ exit: motionless ? void 0 : { height: 0, opacity: 0 },
30
+ transition,
31
+ children
32
+ }
33
+ ) : null });
34
+ }
35
+ AnimatedTreeGroup.displayName = "AnimatedTreeGroup";
36
+ return AnimatedTreeGroup;
37
+ }
38
+ function TreeViewAnimated({
39
+ transitionVariant = "default",
40
+ ...props
41
+ }) {
42
+ const GroupComponent = react.useMemo(
43
+ () => createAnimatedGroup(transitionVariant),
44
+ [transitionVariant]
45
+ );
46
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkQHEHBC6M_js.TreeViewBase, { ...props, GroupComponent });
47
+ }
48
+ TreeViewAnimated.displayName = "TreeViewAnimated";
49
+
50
+ exports.TreeViewAnimated = TreeViewAnimated;
51
+ exports.treeViewTransitionPresets = treeViewTransitionPresets;
52
+ //# sourceMappingURL=animated.js.map
53
+ //# sourceMappingURL=animated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/ui/tree-view/animated/animations.ts","../../../src/ui/tree-view/animated/tree-view-animated.tsx"],"names":["jsx","AnimatePresence","motion","useMemo","TreeViewBase"],"mappings":";;;;;;;;;AAOO,IAAM,yBAAA,GAAuD;AAAA,EAClE,IAAA,EAAM,EAAE,QAAA,EAAU,CAAA,EAAE;AAAA,EACpB,OAAA,EAAS,EAAE,QAAA,EAAU,GAAA,EAAK,IAAA,EAAM,CAAC,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,CAAC,CAAA,EAAE;AAAA,EACjD,MAAA,EAAQ,EAAE,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,CAAC,IAAA,EAAM,CAAA,EAAG,IAAA,EAAM,CAAC,CAAA,EAAE;AAAA,EACnD,IAAA,EAAM,EAAE,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,CAAC,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,CAAC,CAAA;AAC/C;ACAA,SAAS,oBAAoB,iBAAA,EAAuC;AAClE,EAAA,MAAM,UAAA,GAAa,0BAA0B,iBAAiB,CAAA;AAC9D,EAAA,MAAM,aAAa,iBAAA,KAAsB,MAAA;AAEzC,EAAA,SAAS,iBAAA,CAAkB,EAAE,IAAA,EAAM,QAAA,EAAS,EAAmB;AAC7D,IAAA,uBACEA,cAAA,CAACC,4BAAA,EAAA,EAAgB,OAAA,EAAS,KAAA,EACvB,QAAA,EAAA,IAAA,mBACCD,cAAA;AAAA,MAACE,mBAAA,CAAO,EAAA;AAAA,MAAP;AAAA,QACC,IAAA,EAAK,OAAA;AAAA,QACL,WAAA,EAAU,iBAAA;AAAA,QACV,SAAA,EAAU,mCAAA;AAAA,QACV,SAAS,UAAA,GAAa,KAAA,GAAQ,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,QACtD,SAAS,UAAA,GAAa,MAAA,GAAY,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAA,EAAE;AAAA,QAC/D,MAAM,UAAA,GAAa,MAAA,GAAY,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,QACvD,UAAA;AAAA,QAEC;AAAA;AAAA,QAED,IAAA,EACN,CAAA;AAAA,EAEJ;AAEA,EAAA,iBAAA,CAAkB,WAAA,GAAc,mBAAA;AAChC,EAAA,OAAO,iBAAA;AACT;AAEO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,iBAAA,GAAoB,SAAA;AAAA,EACpB,GAAG;AACL,CAAA,EAA0B;AACxB,EAAA,MAAM,cAAA,GAAiBC,aAAA;AAAA,IACrB,MAAM,oBAAoB,iBAAiB,CAAA;AAAA,IAC3C,CAAC,iBAAiB;AAAA,GACpB;AACA,EAAA,uBAAOH,cAAA,CAACI,6BAAA,EAAA,EAAc,GAAG,KAAA,EAAO,cAAA,EAAgC,CAAA;AAClE;AAEA,gBAAA,CAAiB,WAAA,GAAc,kBAAA","file":"animated.js","sourcesContent":["import type { Transition } from \"framer-motion\";\n\n/** Easing and duration presets for tree group expand/collapse. */\nexport type TreeViewTransition = \"none\" | \"default\" | \"smooth\" | \"slow\";\n\nexport type TreeViewTransitionPresets = Record<TreeViewTransition, Transition>;\n\nexport const treeViewTransitionPresets: TreeViewTransitionPresets = {\n none: { duration: 0 },\n default: { duration: 0.2, ease: [0.4, 0, 0.2, 1] },\n smooth: { duration: 0.28, ease: [0.22, 1, 0.36, 1] },\n slow: { duration: 0.38, ease: [0.4, 0, 0.2, 1] },\n};\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\n\nimport { TreeViewBase } from \"../tree-view-base\";\nimport type { TreeGroupProps } from \"../types\";\n\nimport { treeViewTransitionPresets } from \"./animations\";\nimport type { TreeViewAnimatedProps } from \"./types\";\nimport type { TreeViewTransition } from \"./animations\";\n\nfunction createAnimatedGroup(transitionVariant: TreeViewTransition) {\n const transition = treeViewTransitionPresets[transitionVariant];\n const motionless = transitionVariant === \"none\";\n\n function AnimatedTreeGroup({ open, children }: TreeGroupProps) {\n return (\n <AnimatePresence initial={false}>\n {open ? (\n <motion.ul\n role=\"group\"\n data-slot=\"tree-view-group\"\n className=\"m-0 list-none overflow-hidden p-0\"\n initial={motionless ? false : { height: 0, opacity: 0 }}\n animate={motionless ? undefined : { height: \"auto\", opacity: 1 }}\n exit={motionless ? undefined : { height: 0, opacity: 0 }}\n transition={transition}\n >\n {children}\n </motion.ul>\n ) : null}\n </AnimatePresence>\n );\n }\n\n AnimatedTreeGroup.displayName = \"AnimatedTreeGroup\";\n return AnimatedTreeGroup;\n}\n\nexport function TreeViewAnimated({\n transitionVariant = \"default\",\n ...props\n}: TreeViewAnimatedProps) {\n const GroupComponent = useMemo(\n () => createAnimatedGroup(transitionVariant),\n [transitionVariant],\n );\n return <TreeViewBase {...props} GroupComponent={GroupComponent} />;\n}\n\nTreeViewAnimated.displayName = \"TreeViewAnimated\";\n"]}
@@ -0,0 +1,50 @@
1
+ "use client";
2
+ import { TreeViewBase } from '../../chunk-GRJFGIZC.mjs';
3
+ import '../../chunk-4D54YOL6.mjs';
4
+ import { useMemo } from 'react';
5
+ import { AnimatePresence, motion } from 'framer-motion';
6
+ import { jsx } from 'react/jsx-runtime';
7
+
8
+ // src/ui/tree-view/animated/animations.ts
9
+ var treeViewTransitionPresets = {
10
+ none: { duration: 0 },
11
+ default: { duration: 0.2, ease: [0.4, 0, 0.2, 1] },
12
+ smooth: { duration: 0.28, ease: [0.22, 1, 0.36, 1] },
13
+ slow: { duration: 0.38, ease: [0.4, 0, 0.2, 1] }
14
+ };
15
+ function createAnimatedGroup(transitionVariant) {
16
+ const transition = treeViewTransitionPresets[transitionVariant];
17
+ const motionless = transitionVariant === "none";
18
+ function AnimatedTreeGroup({ open, children }) {
19
+ return /* @__PURE__ */ jsx(AnimatePresence, { initial: false, children: open ? /* @__PURE__ */ jsx(
20
+ motion.ul,
21
+ {
22
+ role: "group",
23
+ "data-slot": "tree-view-group",
24
+ className: "m-0 list-none overflow-hidden p-0",
25
+ initial: motionless ? false : { height: 0, opacity: 0 },
26
+ animate: motionless ? void 0 : { height: "auto", opacity: 1 },
27
+ exit: motionless ? void 0 : { height: 0, opacity: 0 },
28
+ transition,
29
+ children
30
+ }
31
+ ) : null });
32
+ }
33
+ AnimatedTreeGroup.displayName = "AnimatedTreeGroup";
34
+ return AnimatedTreeGroup;
35
+ }
36
+ function TreeViewAnimated({
37
+ transitionVariant = "default",
38
+ ...props
39
+ }) {
40
+ const GroupComponent = useMemo(
41
+ () => createAnimatedGroup(transitionVariant),
42
+ [transitionVariant]
43
+ );
44
+ return /* @__PURE__ */ jsx(TreeViewBase, { ...props, GroupComponent });
45
+ }
46
+ TreeViewAnimated.displayName = "TreeViewAnimated";
47
+
48
+ export { TreeViewAnimated, treeViewTransitionPresets };
49
+ //# sourceMappingURL=animated.mjs.map
50
+ //# sourceMappingURL=animated.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/ui/tree-view/animated/animations.ts","../../../src/ui/tree-view/animated/tree-view-animated.tsx"],"names":[],"mappings":";;;;;;;AAOO,IAAM,yBAAA,GAAuD;AAAA,EAClE,IAAA,EAAM,EAAE,QAAA,EAAU,CAAA,EAAE;AAAA,EACpB,OAAA,EAAS,EAAE,QAAA,EAAU,GAAA,EAAK,IAAA,EAAM,CAAC,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,CAAC,CAAA,EAAE;AAAA,EACjD,MAAA,EAAQ,EAAE,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,CAAC,IAAA,EAAM,CAAA,EAAG,IAAA,EAAM,CAAC,CAAA,EAAE;AAAA,EACnD,IAAA,EAAM,EAAE,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,CAAC,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,CAAC,CAAA;AAC/C;ACAA,SAAS,oBAAoB,iBAAA,EAAuC;AAClE,EAAA,MAAM,UAAA,GAAa,0BAA0B,iBAAiB,CAAA;AAC9D,EAAA,MAAM,aAAa,iBAAA,KAAsB,MAAA;AAEzC,EAAA,SAAS,iBAAA,CAAkB,EAAE,IAAA,EAAM,QAAA,EAAS,EAAmB;AAC7D,IAAA,uBACE,GAAA,CAAC,eAAA,EAAA,EAAgB,OAAA,EAAS,KAAA,EACvB,QAAA,EAAA,IAAA,mBACC,GAAA;AAAA,MAAC,MAAA,CAAO,EAAA;AAAA,MAAP;AAAA,QACC,IAAA,EAAK,OAAA;AAAA,QACL,WAAA,EAAU,iBAAA;AAAA,QACV,SAAA,EAAU,mCAAA;AAAA,QACV,SAAS,UAAA,GAAa,KAAA,GAAQ,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,QACtD,SAAS,UAAA,GAAa,MAAA,GAAY,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAA,EAAE;AAAA,QAC/D,MAAM,UAAA,GAAa,MAAA,GAAY,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,QACvD,UAAA;AAAA,QAEC;AAAA;AAAA,QAED,IAAA,EACN,CAAA;AAAA,EAEJ;AAEA,EAAA,iBAAA,CAAkB,WAAA,GAAc,mBAAA;AAChC,EAAA,OAAO,iBAAA;AACT;AAEO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,iBAAA,GAAoB,SAAA;AAAA,EACpB,GAAG;AACL,CAAA,EAA0B;AACxB,EAAA,MAAM,cAAA,GAAiB,OAAA;AAAA,IACrB,MAAM,oBAAoB,iBAAiB,CAAA;AAAA,IAC3C,CAAC,iBAAiB;AAAA,GACpB;AACA,EAAA,uBAAO,GAAA,CAAC,YAAA,EAAA,EAAc,GAAG,KAAA,EAAO,cAAA,EAAgC,CAAA;AAClE;AAEA,gBAAA,CAAiB,WAAA,GAAc,kBAAA","file":"animated.mjs","sourcesContent":["import type { Transition } from \"framer-motion\";\n\n/** Easing and duration presets for tree group expand/collapse. */\nexport type TreeViewTransition = \"none\" | \"default\" | \"smooth\" | \"slow\";\n\nexport type TreeViewTransitionPresets = Record<TreeViewTransition, Transition>;\n\nexport const treeViewTransitionPresets: TreeViewTransitionPresets = {\n none: { duration: 0 },\n default: { duration: 0.2, ease: [0.4, 0, 0.2, 1] },\n smooth: { duration: 0.28, ease: [0.22, 1, 0.36, 1] },\n slow: { duration: 0.38, ease: [0.4, 0, 0.2, 1] },\n};\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\n\nimport { TreeViewBase } from \"../tree-view-base\";\nimport type { TreeGroupProps } from \"../types\";\n\nimport { treeViewTransitionPresets } from \"./animations\";\nimport type { TreeViewAnimatedProps } from \"./types\";\nimport type { TreeViewTransition } from \"./animations\";\n\nfunction createAnimatedGroup(transitionVariant: TreeViewTransition) {\n const transition = treeViewTransitionPresets[transitionVariant];\n const motionless = transitionVariant === \"none\";\n\n function AnimatedTreeGroup({ open, children }: TreeGroupProps) {\n return (\n <AnimatePresence initial={false}>\n {open ? (\n <motion.ul\n role=\"group\"\n data-slot=\"tree-view-group\"\n className=\"m-0 list-none overflow-hidden p-0\"\n initial={motionless ? false : { height: 0, opacity: 0 }}\n animate={motionless ? undefined : { height: \"auto\", opacity: 1 }}\n exit={motionless ? undefined : { height: 0, opacity: 0 }}\n transition={transition}\n >\n {children}\n </motion.ul>\n ) : null}\n </AnimatePresence>\n );\n }\n\n AnimatedTreeGroup.displayName = \"AnimatedTreeGroup\";\n return AnimatedTreeGroup;\n}\n\nexport function TreeViewAnimated({\n transitionVariant = \"default\",\n ...props\n}: TreeViewAnimatedProps) {\n const GroupComponent = useMemo(\n () => createAnimatedGroup(transitionVariant),\n [transitionVariant],\n );\n return <TreeViewBase {...props} GroupComponent={GroupComponent} />;\n}\n\nTreeViewAnimated.displayName = \"TreeViewAnimated\";\n"]}
@@ -0,0 +1,5 @@
1
+ export { TreeView } from "./tree-view";
2
+ export { TreeViewBase } from "./tree-view-base";
3
+ export type { TreeNode, TreeViewBaseProps, TreeViewProps, TreeViewRenderArgs, TreeViewVariantProps, TreeGroupProps, } from "./types";
4
+ export { treeViewVariants, treeViewItemVariants } from "./variants";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/tree-view/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,YAAY,EACV,QAAQ,EACR,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,GACf,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { TreeViewBaseProps, TreeViewCtx } from "./types";
2
+ /**
3
+ * Reads the shared tree-view state from context and fails early when a tree item
4
+ * is rendered outside the TreeView provider. The component name keeps the error
5
+ * message actionable for consumers composing custom tree-view pieces.
6
+ */
7
+ declare function useTreeViewContext(component: string): TreeViewCtx;
8
+ export declare function TreeViewBase({ data, defaultExpanded, expanded, onExpandedChange, defaultSelected, selected, onSelect, renderNode, showGuides, appearance, size, className, GroupComponent, ...rest }: TreeViewBaseProps & {
9
+ GroupComponent?: TreeViewCtx["GroupComponent"];
10
+ }): import("react/jsx-runtime").JSX.Element;
11
+ export declare namespace TreeViewBase {
12
+ var displayName: string;
13
+ }
14
+ export { useTreeViewContext };
15
+ //# sourceMappingURL=tree-view-base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-view-base.d.ts","sourceRoot":"","sources":["../../../src/ui/tree-view/tree-view-base.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAGV,iBAAiB,EACjB,WAAW,EACZ,MAAM,SAAS,CAAC;AAMjB;;;;GAIG;AACH,iBAAS,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAM1D;AAwKD,wBAAgB,YAAY,CAAC,EAC3B,IAAS,EACT,eAAe,EACf,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,UAAkB,EAClB,UAAsB,EACtB,IAAW,EACX,SAAS,EACT,cAAgC,EAChC,GAAG,IAAI,EACR,EAAE,iBAAiB,GAAG;IACrB,cAAc,CAAC,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;CAChD,2CA0QA;yBA3Re,YAAY;;;AA+R5B,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { TreeViewProps } from "./types";
2
+ export declare function TreeView(props: TreeViewProps): import("react/jsx-runtime").JSX.Element;
3
+ export declare namespace TreeView {
4
+ var displayName: string;
5
+ }
6
+ //# sourceMappingURL=tree-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-view.d.ts","sourceRoot":"","sources":["../../../src/ui/tree-view/tree-view.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,2CAE5C;yBAFe,QAAQ"}