@codemation/ui 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/.turbo/turbo-build.log +19 -0
  2. package/.turbo/turbo-lint.log +4 -0
  3. package/.turbo/turbo-typecheck.log +4 -0
  4. package/CHANGELOG.md +25 -0
  5. package/LICENSE +37 -0
  6. package/dist/index.cjs +845 -0
  7. package/dist/index.cjs.map +1 -0
  8. package/dist/index.d.cts +417 -0
  9. package/dist/index.d.ts +417 -0
  10. package/dist/index.js +749 -0
  11. package/dist/index.js.map +1 -0
  12. package/package.json +71 -0
  13. package/src/components/StatusPill.tsx +33 -0
  14. package/src/components/composite/CodemationDialog.tsx +137 -0
  15. package/src/components/composite/JsonMonacoEditor.tsx +75 -0
  16. package/src/components/reui/tree/Tree.tsx +35 -0
  17. package/src/components/reui/tree/TreeContext.ts +21 -0
  18. package/src/components/reui/tree/TreeDragLine.tsx +28 -0
  19. package/src/components/reui/tree/TreeItem.tsx +51 -0
  20. package/src/components/reui/tree/TreeItemLabel.tsx +58 -0
  21. package/src/components/ui/badge.tsx +40 -0
  22. package/src/components/ui/button.tsx +64 -0
  23. package/src/components/ui/collapsible.tsx +26 -0
  24. package/src/components/ui/dialog.tsx +137 -0
  25. package/src/components/ui/dropdown-menu.tsx +239 -0
  26. package/src/components/ui/input.tsx +20 -0
  27. package/src/components/ui/label.tsx +18 -0
  28. package/src/components/ui/select.tsx +171 -0
  29. package/src/components/ui/switch.tsx +29 -0
  30. package/src/components/ui/tabs.tsx +76 -0
  31. package/src/components/ui/textarea.tsx +18 -0
  32. package/src/index.ts +76 -0
  33. package/src/lib/cn.ts +6 -0
  34. package/src/lucide-icons.d.ts +46 -0
  35. package/test/StatusPill.test.tsx +26 -0
  36. package/test/primitives.test.tsx +707 -0
  37. package/test/setup.ts +7 -0
  38. package/test/ui-components.test.tsx +208 -0
  39. package/tsconfig.json +11 -0
  40. package/tsdown.config.ts +10 -0
  41. package/vitest.ui.config.ts +40 -0
package/dist/index.js ADDED
@@ -0,0 +1,749 @@
1
+ import { clsx } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+ import { Fragment, createContext, useContext } from "react";
4
+ import { cva } from "class-variance-authority";
5
+ import { Collapsible as Collapsible$1, Dialog as Dialog$1, DropdownMenu as DropdownMenu$1, Label as Label$1, Select as Select$1, Slot, Switch as Switch$1, Tabs as Tabs$1 } from "radix-ui";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import XIcon from "lucide-react/dist/esm/icons/x";
8
+ import CheckIcon from "lucide-react/dist/esm/icons/check";
9
+ import ChevronRightIcon from "lucide-react/dist/esm/icons/chevron-right";
10
+ import ChevronDownIcon from "lucide-react/dist/esm/icons/chevron-down";
11
+ import ChevronUpIcon from "lucide-react/dist/esm/icons/chevron-up";
12
+ import MinusIcon from "lucide-react/dist/esm/icons/minus";
13
+ import PlusIcon from "lucide-react/dist/esm/icons/plus";
14
+ import Editor from "@monaco-editor/react";
15
+
16
+ //#region src/lib/cn.ts
17
+ function cn(...inputs) {
18
+ return twMerge(clsx(inputs));
19
+ }
20
+
21
+ //#endregion
22
+ //#region src/components/ui/badge.tsx
23
+ const badgeVariants = cva("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap shadow-none transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!", {
24
+ variants: { variant: {
25
+ default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
26
+ secondary: "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
27
+ destructive: "bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",
28
+ outline: "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",
29
+ ghost: "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
30
+ link: "text-primary underline-offset-4 hover:underline"
31
+ } },
32
+ defaultVariants: { variant: "default" }
33
+ });
34
+ function Badge({ className, variant = "default", asChild = false,...props }) {
35
+ return /* @__PURE__ */ jsx(asChild ? Slot.Root : "span", {
36
+ "data-slot": "badge",
37
+ "data-variant": variant,
38
+ className: cn(badgeVariants({ variant }), className),
39
+ ...props
40
+ });
41
+ }
42
+
43
+ //#endregion
44
+ //#region src/components/ui/input.tsx
45
+ function Input({ className, type,...props }) {
46
+ return /* @__PURE__ */ jsx("input", {
47
+ type,
48
+ "data-slot": "input",
49
+ className: cn("border-input file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50", "aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40", className),
50
+ ...props
51
+ });
52
+ }
53
+
54
+ //#endregion
55
+ //#region src/components/ui/label.tsx
56
+ function Label({ className,...props }) {
57
+ return /* @__PURE__ */ jsx(Label$1.Root, {
58
+ "data-slot": "label",
59
+ className: cn("text-sm leading-none font-medium select-none group-data-[disabled=true]/form-item:pointer-events-none group-data-[disabled=true]/form-item:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", className),
60
+ ...props
61
+ });
62
+ }
63
+
64
+ //#endregion
65
+ //#region src/components/ui/switch.tsx
66
+ function Switch({ className,...props }) {
67
+ return /* @__PURE__ */ jsx(Switch$1.Root, {
68
+ "data-slot": "switch",
69
+ className: cn("peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-xs transition-[color,box-shadow] outline-none", "focus-visible:ring-[3px] focus-visible:ring-ring/50", "disabled:cursor-not-allowed disabled:opacity-50", "data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80", className),
70
+ ...props,
71
+ children: /* @__PURE__ */ jsx(Switch$1.Thumb, {
72
+ "data-slot": "switch-thumb",
73
+ className: cn("pointer-events-none block size-4 rounded-full bg-white shadow-sm ring-0 transition-transform", "data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0")
74
+ })
75
+ });
76
+ }
77
+
78
+ //#endregion
79
+ //#region src/components/ui/button.tsx
80
+ const buttonVariants = cva("group/button inline-flex shrink-0 items-center justify-center rounded-md border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap shadow-sm transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
81
+ variants: {
82
+ variant: {
83
+ default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
84
+ outline: "shadow-none border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
85
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
86
+ ghost: "shadow-none hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
87
+ destructive: "shadow-none bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
88
+ link: "shadow-none text-primary underline-offset-4 hover:underline"
89
+ },
90
+ size: {
91
+ default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
92
+ xs: "h-6 gap-1 rounded-sm px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
93
+ sm: "h-7 gap-1 rounded-sm px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
94
+ lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3",
95
+ icon: "size-8",
96
+ "icon-xs": "size-6 rounded-sm in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3",
97
+ "icon-sm": "size-7 rounded-sm in-data-[slot=button-group]:rounded-md",
98
+ "icon-lg": "size-9"
99
+ }
100
+ },
101
+ defaultVariants: {
102
+ variant: "default",
103
+ size: "default"
104
+ }
105
+ });
106
+ function Button({ className, variant = "default", size = "default", asChild = false,...props }) {
107
+ return /* @__PURE__ */ jsx(asChild ? Slot.Root : "button", {
108
+ "data-slot": "button",
109
+ "data-variant": variant,
110
+ "data-size": size,
111
+ className: cn(buttonVariants({
112
+ variant,
113
+ size,
114
+ className
115
+ })),
116
+ ...props
117
+ });
118
+ }
119
+
120
+ //#endregion
121
+ //#region src/components/ui/collapsible.tsx
122
+ function Collapsible(props) {
123
+ return /* @__PURE__ */ jsx(Collapsible$1.Root, {
124
+ "data-slot": "collapsible",
125
+ ...props
126
+ });
127
+ }
128
+ function CollapsibleTrigger(props) {
129
+ return /* @__PURE__ */ jsx(Collapsible$1.Trigger, {
130
+ "data-slot": "collapsible-trigger",
131
+ ...props
132
+ });
133
+ }
134
+ function CollapsibleContent({ className,...props }) {
135
+ return /* @__PURE__ */ jsx(Collapsible$1.Content, {
136
+ "data-slot": "collapsible-content",
137
+ className: cn("overflow-hidden", className),
138
+ ...props
139
+ });
140
+ }
141
+
142
+ //#endregion
143
+ //#region src/components/ui/dialog.tsx
144
+ function Dialog({ ...props }) {
145
+ return /* @__PURE__ */ jsx(Dialog$1.Root, {
146
+ "data-slot": "dialog",
147
+ ...props
148
+ });
149
+ }
150
+ function DialogTrigger({ ...props }) {
151
+ return /* @__PURE__ */ jsx(Dialog$1.Trigger, {
152
+ "data-slot": "dialog-trigger",
153
+ ...props
154
+ });
155
+ }
156
+ function DialogPortal({ ...props }) {
157
+ return /* @__PURE__ */ jsx(Dialog$1.Portal, {
158
+ "data-slot": "dialog-portal",
159
+ ...props
160
+ });
161
+ }
162
+ function DialogClose({ ...props }) {
163
+ return /* @__PURE__ */ jsx(Dialog$1.Close, {
164
+ "data-slot": "dialog-close",
165
+ ...props
166
+ });
167
+ }
168
+ function DialogOverlay({ className,...props }) {
169
+ return /* @__PURE__ */ jsx(Dialog$1.Overlay, {
170
+ "data-slot": "dialog-overlay",
171
+ className: cn("fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0", className),
172
+ ...props
173
+ });
174
+ }
175
+ function DialogContent({ className, children, showCloseButton = true,...props }) {
176
+ return /* @__PURE__ */ jsxs(DialogPortal, { children: [/* @__PURE__ */ jsx(DialogOverlay, {}), /* @__PURE__ */ jsxs(Dialog$1.Content, {
177
+ "data-slot": "dialog-content",
178
+ className: cn("fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-background p-4 text-sm ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
179
+ ...props,
180
+ children: [children, showCloseButton && /* @__PURE__ */ jsx(Dialog$1.Close, {
181
+ "data-slot": "dialog-close",
182
+ asChild: true,
183
+ children: /* @__PURE__ */ jsxs(Button, {
184
+ variant: "ghost",
185
+ className: "absolute top-2 right-2",
186
+ size: "icon-sm",
187
+ children: [/* @__PURE__ */ jsx(XIcon, {}), /* @__PURE__ */ jsx("span", {
188
+ className: "sr-only",
189
+ children: "Close"
190
+ })]
191
+ })
192
+ })]
193
+ })] });
194
+ }
195
+ function DialogHeader({ className,...props }) {
196
+ return /* @__PURE__ */ jsx("div", {
197
+ "data-slot": "dialog-header",
198
+ className: cn("flex flex-col gap-2", className),
199
+ ...props
200
+ });
201
+ }
202
+ function DialogFooter({ className, showCloseButton = false, children,...props }) {
203
+ return /* @__PURE__ */ jsxs("div", {
204
+ "data-slot": "dialog-footer",
205
+ className: cn("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end", className),
206
+ ...props,
207
+ children: [children, showCloseButton && /* @__PURE__ */ jsx(Dialog$1.Close, {
208
+ asChild: true,
209
+ children: /* @__PURE__ */ jsx(Button, {
210
+ variant: "outline",
211
+ children: "Close"
212
+ })
213
+ })]
214
+ });
215
+ }
216
+ function DialogTitle({ className,...props }) {
217
+ return /* @__PURE__ */ jsx(Dialog$1.Title, {
218
+ "data-slot": "dialog-title",
219
+ className: cn("text-base leading-none font-medium", className),
220
+ ...props
221
+ });
222
+ }
223
+ function DialogDescription({ className,...props }) {
224
+ return /* @__PURE__ */ jsx(Dialog$1.Description, {
225
+ "data-slot": "dialog-description",
226
+ className: cn("text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className),
227
+ ...props
228
+ });
229
+ }
230
+
231
+ //#endregion
232
+ //#region src/components/ui/dropdown-menu.tsx
233
+ function DropdownMenu({ ...props }) {
234
+ return /* @__PURE__ */ jsx(DropdownMenu$1.Root, {
235
+ "data-slot": "dropdown-menu",
236
+ ...props
237
+ });
238
+ }
239
+ function DropdownMenuPortal({ ...props }) {
240
+ return /* @__PURE__ */ jsx(DropdownMenu$1.Portal, {
241
+ "data-slot": "dropdown-menu-portal",
242
+ ...props
243
+ });
244
+ }
245
+ function DropdownMenuTrigger({ ...props }) {
246
+ return /* @__PURE__ */ jsx(DropdownMenu$1.Trigger, {
247
+ "data-slot": "dropdown-menu-trigger",
248
+ ...props
249
+ });
250
+ }
251
+ function DropdownMenuContent({ className, align = "start", sideOffset = 4,...props }) {
252
+ return /* @__PURE__ */ jsx(DropdownMenu$1.Portal, { children: /* @__PURE__ */ jsx(DropdownMenu$1.Content, {
253
+ "data-slot": "dropdown-menu-content",
254
+ sideOffset,
255
+ align,
256
+ className: cn("z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:overflow-hidden data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
257
+ ...props
258
+ }) });
259
+ }
260
+ function DropdownMenuGroup({ ...props }) {
261
+ return /* @__PURE__ */ jsx(DropdownMenu$1.Group, {
262
+ "data-slot": "dropdown-menu-group",
263
+ ...props
264
+ });
265
+ }
266
+ function DropdownMenuItem({ className, inset, variant = "default",...props }) {
267
+ return /* @__PURE__ */ jsx(DropdownMenu$1.Item, {
268
+ "data-slot": "dropdown-menu-item",
269
+ "data-inset": inset,
270
+ "data-variant": variant,
271
+ className: cn("group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive", className),
272
+ ...props
273
+ });
274
+ }
275
+ function DropdownMenuCheckboxItem({ className, children, checked, inset,...props }) {
276
+ return /* @__PURE__ */ jsxs(DropdownMenu$1.CheckboxItem, {
277
+ "data-slot": "dropdown-menu-checkbox-item",
278
+ "data-inset": inset,
279
+ className: cn("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
280
+ checked,
281
+ ...props,
282
+ children: [/* @__PURE__ */ jsx("span", {
283
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
284
+ "data-slot": "dropdown-menu-checkbox-item-indicator",
285
+ children: /* @__PURE__ */ jsx(DropdownMenu$1.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
286
+ }), children]
287
+ });
288
+ }
289
+ function DropdownMenuRadioGroup({ ...props }) {
290
+ return /* @__PURE__ */ jsx(DropdownMenu$1.RadioGroup, {
291
+ "data-slot": "dropdown-menu-radio-group",
292
+ ...props
293
+ });
294
+ }
295
+ function DropdownMenuRadioItem({ className, children, inset,...props }) {
296
+ return /* @__PURE__ */ jsxs(DropdownMenu$1.RadioItem, {
297
+ "data-slot": "dropdown-menu-radio-item",
298
+ "data-inset": inset,
299
+ className: cn("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
300
+ ...props,
301
+ children: [/* @__PURE__ */ jsx("span", {
302
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
303
+ "data-slot": "dropdown-menu-radio-item-indicator",
304
+ children: /* @__PURE__ */ jsx(DropdownMenu$1.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
305
+ }), children]
306
+ });
307
+ }
308
+ function DropdownMenuLabel({ className, inset,...props }) {
309
+ return /* @__PURE__ */ jsx(DropdownMenu$1.Label, {
310
+ "data-slot": "dropdown-menu-label",
311
+ "data-inset": inset,
312
+ className: cn("px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7", className),
313
+ ...props
314
+ });
315
+ }
316
+ function DropdownMenuSeparator({ className,...props }) {
317
+ return /* @__PURE__ */ jsx(DropdownMenu$1.Separator, {
318
+ "data-slot": "dropdown-menu-separator",
319
+ className: cn("-mx-1 my-1 h-px bg-border", className),
320
+ ...props
321
+ });
322
+ }
323
+ function DropdownMenuShortcut({ className,...props }) {
324
+ return /* @__PURE__ */ jsx("span", {
325
+ "data-slot": "dropdown-menu-shortcut",
326
+ className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground", className),
327
+ ...props
328
+ });
329
+ }
330
+ function DropdownMenuSub({ ...props }) {
331
+ return /* @__PURE__ */ jsx(DropdownMenu$1.Sub, {
332
+ "data-slot": "dropdown-menu-sub",
333
+ ...props
334
+ });
335
+ }
336
+ function DropdownMenuSubTrigger({ className, inset, children,...props }) {
337
+ return /* @__PURE__ */ jsxs(DropdownMenu$1.SubTrigger, {
338
+ "data-slot": "dropdown-menu-sub-trigger",
339
+ "data-inset": inset,
340
+ className: cn("flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
341
+ ...props,
342
+ children: [children, /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto" })]
343
+ });
344
+ }
345
+ function DropdownMenuSubContent({ className,...props }) {
346
+ return /* @__PURE__ */ jsx(DropdownMenu$1.SubContent, {
347
+ "data-slot": "dropdown-menu-sub-content",
348
+ className: cn("z-50 min-w-[96px] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
349
+ ...props
350
+ });
351
+ }
352
+
353
+ //#endregion
354
+ //#region src/components/ui/select.tsx
355
+ function Select({ ...props }) {
356
+ return /* @__PURE__ */ jsx(Select$1.Root, {
357
+ "data-slot": "select",
358
+ ...props
359
+ });
360
+ }
361
+ function SelectGroup({ className,...props }) {
362
+ return /* @__PURE__ */ jsx(Select$1.Group, {
363
+ "data-slot": "select-group",
364
+ className: cn("scroll-my-1 p-1", className),
365
+ ...props
366
+ });
367
+ }
368
+ function SelectValue({ ...props }) {
369
+ return /* @__PURE__ */ jsx(Select$1.Value, {
370
+ "data-slot": "select-value",
371
+ ...props
372
+ });
373
+ }
374
+ function SelectTrigger({ className, size = "default", children,...props }) {
375
+ return /* @__PURE__ */ jsxs(Select$1.Trigger, {
376
+ "data-slot": "select-trigger",
377
+ "data-size": size,
378
+ className: cn("flex w-fit items-center justify-between gap-1.5 rounded-md border border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap shadow-sm transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-sm *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
379
+ ...props,
380
+ children: [children, /* @__PURE__ */ jsx(Select$1.Icon, {
381
+ asChild: true,
382
+ children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "pointer-events-none size-4 text-muted-foreground" })
383
+ })]
384
+ });
385
+ }
386
+ function SelectContent({ className, children, position = "item-aligned", align = "center",...props }) {
387
+ return /* @__PURE__ */ jsx(Select$1.Portal, { children: /* @__PURE__ */ jsxs(Select$1.Content, {
388
+ "data-slot": "select-content",
389
+ "data-align-trigger": position === "item-aligned",
390
+ className: cn("relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1", className),
391
+ position,
392
+ align,
393
+ ...props,
394
+ children: [
395
+ /* @__PURE__ */ jsx(SelectScrollUpButton, {}),
396
+ /* @__PURE__ */ jsx(Select$1.Viewport, {
397
+ "data-position": position,
398
+ className: cn("data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)", position === "popper" && ""),
399
+ children
400
+ }),
401
+ /* @__PURE__ */ jsx(SelectScrollDownButton, {})
402
+ ]
403
+ }) });
404
+ }
405
+ function SelectLabel({ className,...props }) {
406
+ return /* @__PURE__ */ jsx(Select$1.Label, {
407
+ "data-slot": "select-label",
408
+ className: cn("px-1.5 py-1 text-xs text-muted-foreground", className),
409
+ ...props
410
+ });
411
+ }
412
+ function SelectItem({ className, children,...props }) {
413
+ return /* @__PURE__ */ jsxs(Select$1.Item, {
414
+ "data-slot": "select-item",
415
+ className: cn("relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2", className),
416
+ ...props,
417
+ children: [/* @__PURE__ */ jsx("span", {
418
+ className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center",
419
+ children: /* @__PURE__ */ jsx(Select$1.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "pointer-events-none" }) })
420
+ }), /* @__PURE__ */ jsx(Select$1.ItemText, { children })]
421
+ });
422
+ }
423
+ function SelectSeparator({ className,...props }) {
424
+ return /* @__PURE__ */ jsx(Select$1.Separator, {
425
+ "data-slot": "select-separator",
426
+ className: cn("pointer-events-none -mx-1 my-1 h-px bg-border", className),
427
+ ...props
428
+ });
429
+ }
430
+ function SelectScrollUpButton({ className,...props }) {
431
+ return /* @__PURE__ */ jsx(Select$1.ScrollUpButton, {
432
+ "data-slot": "select-scroll-up-button",
433
+ className: cn("z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4", className),
434
+ ...props,
435
+ children: /* @__PURE__ */ jsx(ChevronUpIcon, {})
436
+ });
437
+ }
438
+ function SelectScrollDownButton({ className,...props }) {
439
+ return /* @__PURE__ */ jsx(Select$1.ScrollDownButton, {
440
+ "data-slot": "select-scroll-down-button",
441
+ className: cn("z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4", className),
442
+ ...props,
443
+ children: /* @__PURE__ */ jsx(ChevronDownIcon, {})
444
+ });
445
+ }
446
+
447
+ //#endregion
448
+ //#region src/components/ui/tabs.tsx
449
+ function Tabs({ className, orientation = "horizontal",...props }) {
450
+ return /* @__PURE__ */ jsx(Tabs$1.Root, {
451
+ "data-slot": "tabs",
452
+ "data-orientation": orientation,
453
+ className: cn("group/tabs flex gap-2 data-horizontal:flex-col", className),
454
+ ...props
455
+ });
456
+ }
457
+ const tabsListVariants = cva("group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-8 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none", {
458
+ variants: { variant: {
459
+ default: "bg-muted",
460
+ line: "gap-1 bg-transparent"
461
+ } },
462
+ defaultVariants: { variant: "default" }
463
+ });
464
+ function TabsList({ className, variant = "default",...props }) {
465
+ return /* @__PURE__ */ jsx(Tabs$1.List, {
466
+ "data-slot": "tabs-list",
467
+ "data-variant": variant,
468
+ className: cn(tabsListVariants({ variant }), className),
469
+ ...props
470
+ });
471
+ }
472
+ function TabsTrigger({ className,...props }) {
473
+ return /* @__PURE__ */ jsx(Tabs$1.Trigger, {
474
+ "data-slot": "tabs-trigger",
475
+ className: cn("relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", "group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent", "data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground", "after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100", className),
476
+ ...props
477
+ });
478
+ }
479
+ function TabsContent({ className,...props }) {
480
+ return /* @__PURE__ */ jsx(Tabs$1.Content, {
481
+ "data-slot": "tabs-content",
482
+ className: cn("flex-1 text-sm outline-none", className),
483
+ ...props
484
+ });
485
+ }
486
+
487
+ //#endregion
488
+ //#region src/components/ui/textarea.tsx
489
+ function Textarea({ className,...props }) {
490
+ return /* @__PURE__ */ jsx("textarea", {
491
+ "data-slot": "textarea",
492
+ className: cn("flex field-sizing-content min-h-16 w-full rounded-md border border-input bg-transparent px-2.5 py-2 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40", className),
493
+ ...props
494
+ });
495
+ }
496
+
497
+ //#endregion
498
+ //#region src/components/reui/tree/TreeContext.ts
499
+ const TreeContext = createContext({
500
+ indent: 20,
501
+ currentItem: void 0,
502
+ tree: void 0,
503
+ toggleIconType: "plus-minus"
504
+ });
505
+
506
+ //#endregion
507
+ //#region src/components/reui/tree/Tree.tsx
508
+ function Tree(args) {
509
+ const { indent = 20, tree, className, toggleIconType = "chevron", asChild = false,...props } = args;
510
+ const containerProps = tree?.getContainerProps?.() ?? {};
511
+ const { style: propStyle,...otherProps } = {
512
+ ...props,
513
+ ...containerProps
514
+ };
515
+ const mergedStyle = {
516
+ ...propStyle,
517
+ "--tree-indent": `${indent}px`
518
+ };
519
+ const Component = asChild ? Slot.Root : "div";
520
+ return /* @__PURE__ */ jsx(TreeContext.Provider, {
521
+ value: {
522
+ indent,
523
+ tree,
524
+ toggleIconType
525
+ },
526
+ children: /* @__PURE__ */ jsx(Component, {
527
+ "data-slot": "tree",
528
+ style: mergedStyle,
529
+ className: cn("flex flex-col", className),
530
+ ...otherProps
531
+ })
532
+ });
533
+ }
534
+
535
+ //#endregion
536
+ //#region src/components/reui/tree/TreeDragLine.tsx
537
+ function TreeDragLine(args) {
538
+ const { className,...props } = args;
539
+ const { tree } = useContext(TreeContext);
540
+ const dragLine = tree?.getDragLineStyle?.();
541
+ if (!dragLine) return null;
542
+ return /* @__PURE__ */ jsx("div", {
543
+ style: dragLine,
544
+ className: cn("bg-primary before:bg-background before:border-primary absolute z-30 -mt-px h-0.5 w-[unset] before:absolute before:-top-[3px] before:left-0 before:size-2 before:border-2 before:rounded-full", className),
545
+ ...props
546
+ });
547
+ }
548
+
549
+ //#endregion
550
+ //#region src/components/reui/tree/TreeItem.tsx
551
+ function TreeItem(args) {
552
+ const { item, className, asChild = false, children,...props } = args;
553
+ const parentContext = useContext(TreeContext);
554
+ const indent = parentContext.indent;
555
+ const itemProps = item.getProps();
556
+ const { style: propStyle,...otherProps } = {
557
+ ...props,
558
+ children,
559
+ ...itemProps
560
+ };
561
+ const mergedStyle = {
562
+ ...propStyle,
563
+ "--tree-padding": `${item.getItemMeta().level * indent}px`
564
+ };
565
+ const defaultProps = {
566
+ "data-slot": "tree-item",
567
+ style: mergedStyle,
568
+ className: cn("z-10 ps-(--tree-padding) outline-hidden select-none not-last:pb-0.5 focus:z-20 data-[disabled]:pointer-events-none data-[disabled]:opacity-50", className),
569
+ "data-focus": item.isFocused() || false,
570
+ "data-folder": item.isFolder() || false,
571
+ "data-selected": typeof item.isSelected === "function" ? item.isSelected() || false : void 0,
572
+ "data-drag-target": typeof item.isDragTarget === "function" ? item.isDragTarget() || false : void 0,
573
+ "data-search-match": typeof item.isMatchingSearch === "function" ? item.isMatchingSearch() || false : void 0,
574
+ "aria-expanded": item.isExpanded()
575
+ };
576
+ const Component = asChild ? Slot.Root : "button";
577
+ return /* @__PURE__ */ jsx(TreeContext.Provider, {
578
+ value: {
579
+ ...parentContext,
580
+ currentItem: item
581
+ },
582
+ children: /* @__PURE__ */ jsx(Component, {
583
+ ...defaultProps,
584
+ ...otherProps,
585
+ children
586
+ })
587
+ });
588
+ }
589
+
590
+ //#endregion
591
+ //#region src/components/reui/tree/TreeItemLabel.tsx
592
+ function TreeItemLabel(args) {
593
+ const { item: propItem, children, className, asChild = false,...props } = args;
594
+ const { currentItem, toggleIconType } = useContext(TreeContext);
595
+ const item = propItem ?? currentItem;
596
+ if (!item) return null;
597
+ return /* @__PURE__ */ jsx(asChild ? Slot.Root : "span", {
598
+ "data-slot": "tree-item-label",
599
+ className: cn("in-focus-visible:ring-ring/50 bg-background hover:bg-accent in-data-[selected=true]:bg-accent in-data-[selected=true]:text-accent-foreground in-data-[drag-target=true]:bg-accent flex items-center gap-1 transition-colors not-in-data-[folder=true]:ps-7 in-focus-visible:ring-[3px] in-data-[search-match=true]:bg-blue-50! [&_svg]:pointer-events-none [&_svg]:shrink-0", "rounded-sm py-1.5 px-2 text-sm", className),
600
+ ...props,
601
+ children: /* @__PURE__ */ jsxs(Fragment, { children: [item.isFolder() && (toggleIconType === "plus-minus" ? item.isExpanded() ? /* @__PURE__ */ jsx(MinusIcon, {
602
+ className: "text-muted-foreground size-3.5",
603
+ stroke: "currentColor",
604
+ strokeWidth: "1"
605
+ }) : /* @__PURE__ */ jsx(PlusIcon, {
606
+ className: "text-muted-foreground size-3.5",
607
+ stroke: "currentColor",
608
+ strokeWidth: "1"
609
+ }) : /* @__PURE__ */ jsx(ChevronDownIcon, { className: "text-muted-foreground size-4 in-aria-[expanded=false]:-rotate-90" })), children ?? item.getItemName()] })
610
+ });
611
+ }
612
+
613
+ //#endregion
614
+ //#region src/components/composite/CodemationDialog.tsx
615
+ const maxWidthBySize = {
616
+ narrow: "sm:max-w-lg",
617
+ wide: "sm:max-w-2xl",
618
+ full: "sm:max-w-[min(92vw,960px)]"
619
+ };
620
+ function CodemationDialogRoot({ children, onClose, testId, role = "dialog", size = "wide", contentClassName, showCloseButton = false }) {
621
+ return /* @__PURE__ */ jsx(Dialog, {
622
+ open: true,
623
+ onOpenChange: (open) => {
624
+ if (!open) onClose();
625
+ },
626
+ children: /* @__PURE__ */ jsx(DialogContent, {
627
+ showCloseButton,
628
+ "data-testid": testId,
629
+ role,
630
+ "aria-describedby": void 0,
631
+ className: cn("flex max-h-[min(92vh,900px)] flex-col gap-0 overflow-hidden p-0", maxWidthBySize[size], contentClassName),
632
+ children
633
+ })
634
+ });
635
+ }
636
+ /**
637
+ * Do not set `id` on the underlying Radix `DialogTitle` — the dialog root assigns `titleId`
638
+ * in context; overriding `id` breaks `aria-labelledby` and Radix dev warnings.
639
+ */
640
+ function CodemationDialogTitle({ children, className }) {
641
+ return /* @__PURE__ */ jsx(DialogTitle, {
642
+ className: cn("m-0 shrink-0 border-b border-border px-4 py-3 text-base leading-none font-semibold", className),
643
+ children
644
+ });
645
+ }
646
+ function CodemationDialogContent({ children, className }) {
647
+ return /* @__PURE__ */ jsx("div", {
648
+ className: cn("flex min-h-0 flex-1 flex-col gap-4 overflow-auto px-4 py-3 text-sm", className),
649
+ children
650
+ });
651
+ }
652
+ function CodemationDialogActions({ children, position = "bottom", align = "end", className }) {
653
+ return /* @__PURE__ */ jsx("div", {
654
+ className: cn("flex shrink-0 flex-wrap gap-2 border-border bg-muted/30 px-4 py-3", position === "top" ? "border-b" : "border-t", align === "end" && "justify-end", align === "start" && "justify-start", align === "between" && "justify-between", className),
655
+ children
656
+ });
657
+ }
658
+ const CodemationDialog = Object.assign(CodemationDialogRoot, {
659
+ Title: CodemationDialogTitle,
660
+ Content: CodemationDialogContent,
661
+ Actions: CodemationDialogActions
662
+ });
663
+
664
+ //#endregion
665
+ //#region src/components/composite/JsonMonacoEditor.tsx
666
+ const defaultOptions = {
667
+ automaticLayout: true,
668
+ formatOnPaste: true,
669
+ formatOnType: true,
670
+ minimap: { enabled: false },
671
+ scrollBeyondLastLine: false,
672
+ lineNumbersMinChars: 3,
673
+ tabSize: 2,
674
+ insertSpaces: true,
675
+ wordWrap: "on",
676
+ bracketPairColorization: { enabled: true },
677
+ guides: {
678
+ indentation: true,
679
+ bracketPairs: true
680
+ },
681
+ padding: {
682
+ top: 12,
683
+ bottom: 12
684
+ }
685
+ };
686
+ /**
687
+ * Monaco-based JSON editor with a mirrored, visually hidden `<textarea>` that carries the same value.
688
+ * Tests and automation can drive `data-testid` on that textarea because Monaco's surface is not a reliable
689
+ * DOM target for `fireEvent.change` / user typing simulation.
690
+ */
691
+ function JsonMonacoEditor(args) {
692
+ const { path, value, onChange, error, testId = "workflow-json-editor-input" } = args;
693
+ return /* @__PURE__ */ jsxs("div", {
694
+ className: "relative flex min-h-0 flex-1 flex-col",
695
+ children: [
696
+ /* @__PURE__ */ jsx("div", {
697
+ className: "h-[min(60vh,560px)] min-h-[200px] shrink-0 overflow-hidden rounded-md border border-border bg-background",
698
+ children: /* @__PURE__ */ jsx(Editor, {
699
+ height: "100%",
700
+ language: "json",
701
+ path,
702
+ value,
703
+ onChange,
704
+ loading: /* @__PURE__ */ jsx("div", {
705
+ className: "grid h-full place-items-center text-xs text-muted-foreground",
706
+ children: "Loading editor…"
707
+ }),
708
+ options: defaultOptions
709
+ })
710
+ }),
711
+ /* @__PURE__ */ jsx(Textarea, {
712
+ "data-testid": testId,
713
+ value,
714
+ onChange: (event) => {
715
+ onChange(event.target.value);
716
+ },
717
+ spellCheck: false,
718
+ className: "pointer-events-none absolute inset-0 h-px w-px min-h-0 resize-none border-0 p-0 opacity-0",
719
+ "aria-hidden": "true",
720
+ tabIndex: -1
721
+ }),
722
+ error ? /* @__PURE__ */ jsx("div", {
723
+ className: "mt-1 text-xs text-destructive",
724
+ children: error
725
+ }) : null
726
+ ]
727
+ });
728
+ }
729
+
730
+ //#endregion
731
+ //#region src/components/StatusPill.tsx
732
+ const KIND_CLASSES = {
733
+ success: "bg-emerald-100 text-emerald-800 border-emerald-200 hover:bg-emerald-100 dark:bg-emerald-900/30 dark:text-emerald-300 dark:border-emerald-800",
734
+ warning: "bg-amber-100 text-amber-800 border-amber-200 hover:bg-amber-100 dark:bg-amber-900/30 dark:text-amber-300 dark:border-amber-800",
735
+ danger: "bg-red-100 text-red-800 border-red-200 hover:bg-red-100 dark:bg-red-900/30 dark:text-red-300 dark:border-red-800",
736
+ neutral: "border-border text-foreground bg-transparent hover:bg-muted",
737
+ info: "bg-blue-100 text-blue-800 border-blue-200 hover:bg-blue-100 dark:bg-blue-900/30 dark:text-blue-300 dark:border-blue-800"
738
+ };
739
+ function StatusPill({ status, children, className }) {
740
+ return /* @__PURE__ */ jsx(Badge, {
741
+ variant: "outline",
742
+ className: cn("inline-flex items-center gap-1", KIND_CLASSES[status], className),
743
+ children: children ?? status
744
+ });
745
+ }
746
+
747
+ //#endregion
748
+ export { Badge, Button, CodemationDialog, Collapsible, CollapsibleContent, CollapsibleTrigger, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Input, JsonMonacoEditor, Label, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, StatusPill, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Tree, TreeContext, TreeDragLine, TreeItem, TreeItemLabel, badgeVariants, buttonVariants, cn, tabsListVariants };
749
+ //# sourceMappingURL=index.js.map