@keboola/design 9.1.0 → 10.1.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 (84) hide show
  1. package/AGENTS.md +117 -40
  2. package/COMPONENT-API.md +31 -9
  3. package/README.md +3 -3
  4. package/dist/MermaidDiagram-EOKJHQQV.js +10 -0
  5. package/dist/MermaidDiagram-EOKJHQQV.js.map +1 -0
  6. package/dist/charts.d.ts +31 -2
  7. package/dist/charts.js +6 -9
  8. package/dist/charts.js.map +1 -1
  9. package/dist/chunk-63NSN2VL.js +274 -0
  10. package/dist/chunk-63NSN2VL.js.map +1 -0
  11. package/dist/{rjsf.cjs → chunk-6FPEI4EM.js} +1491 -5701
  12. package/dist/chunk-6FPEI4EM.js.map +1 -0
  13. package/dist/chunk-7PUUHEJQ.js +1313 -0
  14. package/dist/chunk-7PUUHEJQ.js.map +1 -0
  15. package/dist/chunk-BOHNXTMM.js +606 -0
  16. package/dist/chunk-BOHNXTMM.js.map +1 -0
  17. package/dist/{testing.cjs → chunk-C3L3TBBT.js} +33 -164
  18. package/dist/chunk-C3L3TBBT.js.map +1 -0
  19. package/dist/chunk-CTCFYWJC.js +407 -0
  20. package/dist/chunk-CTCFYWJC.js.map +1 -0
  21. package/dist/chunk-ESBL3IPF.js +23 -0
  22. package/dist/chunk-ESBL3IPF.js.map +1 -0
  23. package/dist/chunk-IJTHFNNJ.js +261 -0
  24. package/dist/chunk-IJTHFNNJ.js.map +1 -0
  25. package/dist/chunk-JP7PNHLH.js +40 -0
  26. package/dist/chunk-JP7PNHLH.js.map +1 -0
  27. package/dist/chunk-KPNAW5MU.js +229 -0
  28. package/dist/chunk-KPNAW5MU.js.map +1 -0
  29. package/dist/chunk-L37JJ6MR.js +152 -0
  30. package/dist/chunk-L37JJ6MR.js.map +1 -0
  31. package/dist/chunk-Q7NWXLCT.js +90 -0
  32. package/dist/chunk-Q7NWXLCT.js.map +1 -0
  33. package/dist/chunk-SYIEF644.js +1016 -0
  34. package/dist/chunk-SYIEF644.js.map +1 -0
  35. package/dist/chunk-VMFSRV5H.js +16 -0
  36. package/dist/chunk-VMFSRV5H.js.map +1 -0
  37. package/dist/chunk-VPPM7UUQ.js +47 -0
  38. package/dist/chunk-VPPM7UUQ.js.map +1 -0
  39. package/dist/chunk-XV3UUOYF.js +845 -0
  40. package/dist/chunk-XV3UUOYF.js.map +1 -0
  41. package/dist/editors.d.ts +27 -3
  42. package/dist/editors.js +85 -2081
  43. package/dist/editors.js.map +1 -1
  44. package/dist/icons.d.ts +29 -8
  45. package/dist/icons.js +2 -361
  46. package/dist/icons.js.map +1 -1
  47. package/dist/index.d.ts +709 -425
  48. package/dist/index.js +5042 -13885
  49. package/dist/index.js.map +1 -1
  50. package/dist/markdown-editor.js +41 -3426
  51. package/dist/markdown-editor.js.map +1 -1
  52. package/dist/mermaid.js +8 -1129
  53. package/dist/mermaid.js.map +1 -1
  54. package/dist/rjsf.js +180 -9381
  55. package/dist/rjsf.js.map +1 -1
  56. package/dist/styles.css +1 -1
  57. package/dist/testing.js +5 -357
  58. package/dist/testing.js.map +1 -1
  59. package/package.json +28 -73
  60. package/src/styles.css +60 -3
  61. package/src/theme.css +1 -0
  62. package/dist/charts.cjs +0 -268
  63. package/dist/charts.cjs.map +0 -1
  64. package/dist/charts.d.cts +0 -181
  65. package/dist/constants-D3gaMY-W.d.cts +0 -39
  66. package/dist/editors.cjs +0 -2440
  67. package/dist/editors.cjs.map +0 -1
  68. package/dist/editors.d.cts +0 -165
  69. package/dist/icons.cjs +0 -23888
  70. package/dist/icons.cjs.map +0 -1
  71. package/dist/icons.d.cts +0 -20
  72. package/dist/index.cjs +0 -24894
  73. package/dist/index.cjs.map +0 -1
  74. package/dist/index.d.cts +0 -10438
  75. package/dist/markdown-editor.cjs +0 -4636
  76. package/dist/markdown-editor.cjs.map +0 -1
  77. package/dist/markdown-editor.d.cts +0 -75
  78. package/dist/mermaid.cjs +0 -1138
  79. package/dist/mermaid.cjs.map +0 -1
  80. package/dist/mermaid.d.cts +0 -15
  81. package/dist/rjsf.cjs.map +0 -1
  82. package/dist/rjsf.d.cts +0 -55
  83. package/dist/testing.cjs.map +0 -1
  84. package/dist/testing.d.cts +0 -25
@@ -0,0 +1,845 @@
1
+ import { ScrollArea } from './chunk-SYIEF644.js';
2
+ import { ChevronRight, Loader2, X, AlertCircle, CircleCheck, Info, AlertTriangle, ToggleRight, Circle, Check } from './chunk-BOHNXTMM.js';
3
+ import { useArgoDesign } from './chunk-63NSN2VL.js';
4
+ import { cn } from './chunk-JP7PNHLH.js';
5
+ import { cva } from 'class-variance-authority';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
7
+ import { createContext, useMemo, use } from 'react';
8
+ import * as DropdownMenuPrimitive3 from '@radix-ui/react-dropdown-menu';
9
+ import { Root, Group, Trigger } from '@radix-ui/react-dropdown-menu';
10
+ import { Root as Root$1, Slottable } from '@radix-ui/react-slot';
11
+ import { toast as toast$1 } from 'sonner';
12
+
13
+ var buttonGroupVariant = cva(
14
+ ["tailwindcss-preflight", "tw:inline-flex", "tw:items-center", "tw:group/button-group"],
15
+ {
16
+ defaultVariants: {
17
+ variant: "inline",
18
+ space: "small"
19
+ },
20
+ variants: {
21
+ variant: {
22
+ inline: [],
23
+ block: [
24
+ "tw:w-full",
25
+ "tw:flex-col",
26
+ "tw:sm:flex-row",
27
+ "tw:[&_a]:flex-1",
28
+ "tw:[&>button:not([data-icon-only=true])]:flex-1"
29
+ ]
30
+ },
31
+ space: {
32
+ "extra-small": "tw:gap-1",
33
+ "little-small": "tw:gap-2",
34
+ small: "tw:gap-3",
35
+ medium: "tw:gap-4",
36
+ large: "tw:gap-6",
37
+ compact: [
38
+ "tw:border-collapse",
39
+ "tw:!gap-0",
40
+ // ensure that focus visible outline is at the top
41
+ "tw:[&>*:focus-visible]:!z-10",
42
+ "tw:[&>*:not(:first-child)]:rounded-l-none",
43
+ "tw:[&>*:not(:last-child)]:rounded-r-none",
44
+ "tw:[&>*:not(:last-child)]:border-r-0",
45
+ "tw:[&>*:not(:first-child)]:border-l-0",
46
+ // separator
47
+ "tw:[&>*:not(:first-child)]:before:content",
48
+ "tw:[&>*:not(:first-child)]:before:absolute",
49
+ "tw:[&>*:not(:first-child)]:before:left-0",
50
+ "tw:[&>*:not(:first-child)]:before:h-full",
51
+ "tw:[&>*:not(:first-child)]:before:w-px",
52
+ "tw:[&>*:not(:first-child)]:before:bg-black/10"
53
+ ]
54
+ }
55
+ }
56
+ }
57
+ );
58
+ var ButtonGroup = ({
59
+ ref,
60
+ children,
61
+ space = "small",
62
+ className,
63
+ variant,
64
+ ...rest
65
+ }) => {
66
+ return /* @__PURE__ */ jsx(
67
+ "div",
68
+ {
69
+ ref,
70
+ ...rest,
71
+ role: "group",
72
+ "data-variant": variant,
73
+ className: cn(buttonGroupVariant({ variant, space }), className),
74
+ children
75
+ }
76
+ );
77
+ };
78
+ var variants = cva(
79
+ [
80
+ "tailwindcss-preflight",
81
+ "tw:pointer-events-none",
82
+ // sizing
83
+ "tw:size-4",
84
+ "tw:aspect-square",
85
+ "tw:shrink-0",
86
+ // layout
87
+ "tw:flex",
88
+ "tw:items-center",
89
+ "tw:justify-center"
90
+ ],
91
+ {
92
+ variants: {
93
+ variant: {
94
+ none: [],
95
+ radio: [
96
+ "tw:border",
97
+ "tw:border-solid",
98
+ "tw:border-border",
99
+ "tw:rounded-full",
100
+ "tw:group-data-[variant=default]/dropdown-menu-content:bg-white",
101
+ "tw:group-data-[variant=argo]/dropdown-menu-content:bg-background",
102
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-2',
103
+ "tw:data-[state=unchecked]:[&_svg]:hidden",
104
+ // Lucide Circle is stroke-only — force fill to match the stroke
105
+ // (currentColor) so the indicator reads as a solid dot.
106
+ "tw:[&_svg]:fill-current",
107
+ "tw:group-data-[variant=argo]/dropdown-menu-content:[&_svg]:text-primary",
108
+ "tw:group-data-[variant=default]/dropdown-menu-content:[&_svg]:text-primary"
109
+ ],
110
+ check: ['tw:[&_svg:not([class*="tw:size-"])]:size-3.5', "tw:[&_svg]:text-primary"],
111
+ checkbox: [
112
+ "tw:[&_svg]:text-primary-foreground",
113
+ "tw:border",
114
+ "tw:border-solid",
115
+ "tw:rounded",
116
+ "tw:group-data-[variant=default]/dropdown-menu-content:border-neutral-200",
117
+ "tw:group-data-[variant=argo]/dropdown-menu-content:border-input",
118
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-3',
119
+ "tw:data-[state=unchecked]:[&_svg]:hidden",
120
+ "tw:group-data-[variant=argo]/dropdown-menu-content:data-[state=checked]:border-primary",
121
+ "tw:group-data-[variant=argo]/dropdown-menu-content:data-[state=checked]:bg-primary",
122
+ "tw:group-data-[variant=default]/dropdown-menu-content:data-[state=checked]:border-primary",
123
+ "tw:group-data-[variant=default]/dropdown-menu-content:data-[state=checked]:bg-primary"
124
+ ],
125
+ switch: [
126
+ "tw:size-5",
127
+ // Lucide SVGs default to 24×24 — constrain the rendered ToggleRight
128
+ // to the indicator slot so it doesn't overflow.
129
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-5',
130
+ "tw:text-neutral-400",
131
+ "tw:data-[state=unchecked]:rotate-180",
132
+ "tw:group-data-[variant=default]/dropdown-menu-content:data-[state=checked]:text-primary",
133
+ "tw:group-data-[variant=argo]/dropdown-menu-content:data-[state=checked]:text-primary"
134
+ ]
135
+ }
136
+ }
137
+ }
138
+ );
139
+ var DropdownMenuItemIndicator = ({
140
+ variant,
141
+ className,
142
+ forceMount: forceMountProp,
143
+ ...rest
144
+ }) => {
145
+ const IconComp = (() => {
146
+ if (variant === "switch") return ToggleRight;
147
+ if (variant === "radio") return Circle;
148
+ return Check;
149
+ })();
150
+ const forceMount = (() => {
151
+ if (forceMountProp) return true;
152
+ return variant === "check" ? void 0 : true;
153
+ })();
154
+ if (variant === "none") return null;
155
+ return /* @__PURE__ */ jsx(
156
+ DropdownMenuPrimitive3.ItemIndicator,
157
+ {
158
+ ...rest,
159
+ forceMount,
160
+ className: variants({ variant, className }),
161
+ children: /* @__PURE__ */ jsx(IconComp, {})
162
+ }
163
+ );
164
+ };
165
+ var ItemIcon = ({ className, children, ...props }) => /* @__PURE__ */ jsx(
166
+ "span",
167
+ {
168
+ ...props,
169
+ className: cn(
170
+ "tw:inline-flex",
171
+ "tw:items-center",
172
+ "tw:justify-center",
173
+ "tw:aspect-square",
174
+ // 20px container fits the 16px Lucide glyph plus 2px breathing room
175
+ // each side — the previous tw:size-4 + tw:p-0.5 clipped the 16px child.
176
+ "tw:size-5",
177
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-4',
178
+ "tw:group-data-[variant=default]/dropdown-menu-content:text-neutral-400",
179
+ "tw:group-data-[variant=argo]/dropdown-menu-content:text-primary",
180
+ "tw:group-data-[variant=argo]/dropdown-menu-content:group-aria-disabled:text-muted-foreground",
181
+ "tw:group-data-[variant=default]/dropdown-menu-content:group-hover:text-primary",
182
+ className
183
+ ),
184
+ children
185
+ }
186
+ );
187
+
188
+ // src/components/DropdownMenu/styles.ts
189
+ var itemVariants = cn(
190
+ // reset
191
+ "tailwindcss-preflight",
192
+ "tw:outline-hidden",
193
+ "tw:group",
194
+ "tw:peer",
195
+ "tw:relative",
196
+ // positioning
197
+ "tw:flex",
198
+ "tw:flex-1",
199
+ "tw:items-center",
200
+ "tw:gap-2",
201
+ // An icon passed as `children` rather than via the `icon` prop misses `ItemIcon`,
202
+ // so without this it falls back to Lucide's 24px default and towers over the
203
+ // siblings this row is laid out for. The `:not()` keeps a call-site size winning.
204
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-4',
205
+ "tw:cursor-pointer",
206
+ "tw:select-none",
207
+ "tw:transition-colors",
208
+ // spacing
209
+ "tw:p-2",
210
+ // typography
211
+ "tw:font-sans",
212
+ "tw:text-sm",
213
+ "tw:aria-disabled:pointer-events-none",
214
+ "tw:aria-disabled:opacity-50",
215
+ "tw:focus-visible:outline-hidden",
216
+ "tw:group-data-[variant=default]/dropdown-menu-content:rounded",
217
+ "tw:group-data-[variant=default]/dropdown-menu-content:focus:bg-neutral-100",
218
+ "tw:group-data-[variant=default]/dropdown-menu-content:focus:text-neutral-900",
219
+ "tw:group-data-[variant=default]/dropdown-menu-content:hover:bg-neutral-100",
220
+ "tw:group-data-[variant=default]/dropdown-menu-content:hover:text-neutral-900",
221
+ "tw:group-data-[variant=argo]/dropdown-menu-content:rounded-md",
222
+ "tw:group-data-[variant=argo]/dropdown-menu-content:text-popover-foreground",
223
+ "tw:group-data-[variant=argo]/dropdown-menu-content:focus:text-primary",
224
+ "tw:group-data-[variant=argo]/dropdown-menu-content:focus:bg-primary/10",
225
+ "tw:group-data-[variant=argo]/dropdown-menu-content:hover:text-primary",
226
+ "tw:group-data-[variant=argo]/dropdown-menu-content:hover:bg-primary/10"
227
+ );
228
+ var contentVariants = cn(
229
+ "tailwindcss-preflight",
230
+ "tw:group/dropdown-menu-content",
231
+ // Sit above Modal/Sheet (z-1051), matching the other floating overlays (Popover/Select z-1055)
232
+ "tw:z-[1055]",
233
+ // positioning
234
+ "tw:flex",
235
+ "tw:flex-col",
236
+ "tw:origin-(--radix-dropdown-menu-content-transform-origin)",
237
+ // sizing
238
+ "tw:max-h-[var(--radix-dropdown-menu-content-available-height)]",
239
+ "tw:min-w-32",
240
+ // border
241
+ "tw:border",
242
+ "tw:shadow-md",
243
+ // Legacy surface — fixed white panel.
244
+ "tw:data-[variant=default]:rounded-md",
245
+ "tw:data-[variant=default]:bg-white",
246
+ "tw:data-[variant=default]:border-neutral-100",
247
+ "tw:data-[variant=default]:text-neutral-800",
248
+ // Argo surface — semantic popover tokens (brand + dark aware).
249
+ "tw:data-[variant=argo]:rounded-2xl",
250
+ "tw:data-[variant=argo]:bg-popover",
251
+ "tw:data-[variant=argo]:text-popover-foreground",
252
+ "tw:data-[variant=argo]:border-border",
253
+ // animations
254
+ "tw:data-[state=open]:animate-in",
255
+ "tw:data-[state=open]:fade-in-0",
256
+ "tw:data-[state=open]:zoom-in-95",
257
+ "tw:data-[state=closed]:animate-out",
258
+ "tw:data-[state=closed]:fade-out-0",
259
+ "tw:data-[state=closed]:zoom-out-95",
260
+ "tw:data-[side=bottom]:slide-in-from-top-2",
261
+ "tw:data-[side=left]:slide-in-from-right-2",
262
+ "tw:data-[side=right]:slide-in-from-left-2",
263
+ "tw:data-[side=top]:slide-in-from-bottom-2"
264
+ );
265
+ var DropdownMenuCheckboxItem = ({
266
+ className,
267
+ children,
268
+ checked,
269
+ closeOnSelect = false,
270
+ onSelect,
271
+ indicatorAlign = "start",
272
+ indicator = "checkbox",
273
+ isLoading = false,
274
+ ...props
275
+ }) => {
276
+ const isAtStart = indicatorAlign === "start";
277
+ const indicatorEle = isLoading ? /* @__PURE__ */ jsx(ItemIcon, { className: isAtStart ? "" : "tw:ml-auto", children: /* @__PURE__ */ jsx(Loader2, { className: "tw:animate-spin" }) }) : /* @__PURE__ */ jsx(DropdownMenuItemIndicator, { variant: indicator, className: isAtStart ? "" : "tw:ml-auto" });
278
+ const handleSelect = (event) => {
279
+ if (!closeOnSelect) event.preventDefault();
280
+ onSelect?.(event);
281
+ };
282
+ return /* @__PURE__ */ jsxs(
283
+ DropdownMenuPrimitive3.CheckboxItem,
284
+ {
285
+ className: cn(itemVariants, className),
286
+ checked,
287
+ onSelect: handleSelect,
288
+ ...props,
289
+ children: [
290
+ isAtStart && indicatorEle,
291
+ children,
292
+ !isAtStart && indicatorEle
293
+ ]
294
+ }
295
+ );
296
+ };
297
+ var DropdownMenuContext = createContext({
298
+ variant: "default"
299
+ });
300
+ var useDropdownMenuContext = () => use(DropdownMenuContext);
301
+ var DropdownMenuContent = ({
302
+ className,
303
+ sideOffset = 4,
304
+ forceMount,
305
+ children,
306
+ viewPortClassName,
307
+ container,
308
+ ...props
309
+ }) => {
310
+ const { variant } = useDropdownMenuContext();
311
+ return /* @__PURE__ */ jsx(DropdownMenuPrimitive3.Portal, { forceMount: forceMount || void 0, container, children: /* @__PURE__ */ jsx(
312
+ DropdownMenuPrimitive3.Content,
313
+ {
314
+ ...props,
315
+ "data-variant": variant,
316
+ sideOffset,
317
+ className: contentVariants,
318
+ children: /* @__PURE__ */ jsx(
319
+ ScrollArea,
320
+ {
321
+ className,
322
+ viewPortClassName: cn(
323
+ "tw:p-2",
324
+ "tw:max-h-[var(--radix-dropdown-menu-content-available-height)]",
325
+ viewPortClassName
326
+ ),
327
+ scrollBarClassName: "tw:w-1.5",
328
+ children
329
+ }
330
+ )
331
+ }
332
+ ) });
333
+ };
334
+ var DropdownMenuItem = ({
335
+ ref,
336
+ className,
337
+ asModalTrigger = false,
338
+ onSelect,
339
+ onPointerLeave,
340
+ onPointerMove,
341
+ children,
342
+ asChild,
343
+ icon,
344
+ iconClassName,
345
+ isLoading = false,
346
+ ...props
347
+ }) => {
348
+ const Comp = asChild ? Root$1 : "div";
349
+ const adornment = isLoading ? /* @__PURE__ */ jsx(Loader2, { className: "tw:animate-spin" }) : icon;
350
+ const handleOnSelect = (event) => {
351
+ if (asModalTrigger) event.preventDefault();
352
+ onSelect?.(event);
353
+ };
354
+ const handlePointerLeave = (event) => {
355
+ if (asModalTrigger) event.preventDefault();
356
+ onPointerLeave?.(event);
357
+ };
358
+ const handlePointerMove = (event) => {
359
+ if (asModalTrigger) event.preventDefault();
360
+ onPointerMove?.(event);
361
+ };
362
+ return /* @__PURE__ */ jsx(
363
+ DropdownMenuPrimitive3.Item,
364
+ {
365
+ ...props,
366
+ ref,
367
+ onSelect: handleOnSelect,
368
+ onPointerLeave: handlePointerLeave,
369
+ onPointerMove: handlePointerMove,
370
+ className: cn(itemVariants, asChild && "tw:text-inherit", className),
371
+ asChild: true,
372
+ children: /* @__PURE__ */ jsxs(Comp, { children: [
373
+ adornment && /* @__PURE__ */ jsx(ItemIcon, { className: iconClassName, children: adornment }),
374
+ /* @__PURE__ */ jsx(Slottable, { children })
375
+ ] })
376
+ }
377
+ );
378
+ };
379
+ var descriptionVariants = cva(
380
+ [
381
+ "tw:box-border",
382
+ "tw:ml-auto",
383
+ "tw:font-sans",
384
+ "tw:tracking-normal",
385
+ "tw:font-normal",
386
+ "tw:text-xs",
387
+ "tw:text-muted-foreground"
388
+ ],
389
+ {
390
+ variants: {
391
+ hideOnHover: {
392
+ true: ["tw:group-focus-within:hidden", "tw:group-hover:hidden"],
393
+ false: []
394
+ }
395
+ },
396
+ defaultVariants: {}
397
+ }
398
+ );
399
+ var DropdownMenuItemDescription = ({
400
+ className,
401
+ children,
402
+ hideOnHover = false,
403
+ ...props
404
+ }) => {
405
+ return /* @__PURE__ */ jsx("span", { ...props, className: cn(descriptionVariants({ hideOnHover }), className), children });
406
+ };
407
+ var DropdownMenuLabel = ({ className, ...props }) => {
408
+ return /* @__PURE__ */ jsx(
409
+ DropdownMenuPrimitive3.Label,
410
+ {
411
+ className: cn(
412
+ "tw:p-2",
413
+ "tw:font-medium",
414
+ "tw:text-xs",
415
+ "tw:text-muted-foreground",
416
+ className
417
+ ),
418
+ ...props
419
+ }
420
+ );
421
+ };
422
+ var DropdownMenuRadioGroup = ({
423
+ value,
424
+ defaultValue,
425
+ onValueChange,
426
+ ...props
427
+ }) => {
428
+ const handleChange = (value2) => {
429
+ onValueChange?.(value2);
430
+ };
431
+ return /* @__PURE__ */ jsx(
432
+ DropdownMenuPrimitive3.RadioGroup,
433
+ {
434
+ ...props,
435
+ value,
436
+ defaultValue,
437
+ onValueChange: handleChange
438
+ }
439
+ );
440
+ };
441
+ var DropdownMenuRadioItem = ({
442
+ className,
443
+ children,
444
+ closeOnSelect,
445
+ onSelect,
446
+ indicatorAlign = "start",
447
+ indicator = "radio",
448
+ icon,
449
+ iconClassName,
450
+ isLoading = false,
451
+ ...props
452
+ }) => {
453
+ const isAtStart = indicatorAlign === "start";
454
+ const indicatorEle = isLoading ? /* @__PURE__ */ jsx(ItemIcon, { className: iconClassName, children: /* @__PURE__ */ jsx(Loader2, { className: "tw:animate-spin" }) }) : /* @__PURE__ */ jsx(DropdownMenuItemIndicator, { variant: indicator });
455
+ const handleSelect = (event) => {
456
+ if (!closeOnSelect) event.preventDefault();
457
+ onSelect?.(event);
458
+ };
459
+ return /* @__PURE__ */ jsxs(
460
+ DropdownMenuPrimitive3.RadioItem,
461
+ {
462
+ className: cn(
463
+ itemVariants,
464
+ "tw:data-[state=checked]:cursor-default",
465
+ {
466
+ "tw:data-[state=checked]:bg-neutral-100": indicator === "none",
467
+ // Semantic brand tint (flips under `[data-theme='dark']`) instead of a
468
+ // hardcoded `tw:bg-sky-100`, which stayed light in dark mode and left the
469
+ // checked item's text near-invisible.
470
+ "tw:group-data-[variant=argo]/dropdown-menu-content:data-[state=checked]:bg-primary/10": indicator === "check"
471
+ },
472
+ className
473
+ ),
474
+ onSelect: handleSelect,
475
+ ...props,
476
+ children: [
477
+ isAtStart && indicatorEle,
478
+ icon && /* @__PURE__ */ jsx(ItemIcon, { className: iconClassName, children: icon }),
479
+ /* @__PURE__ */ jsx("span", { className: "tw:flex tw:min-w-0 tw:flex-1 tw:items-center tw:gap-2", children }),
480
+ !isAtStart && indicatorEle
481
+ ]
482
+ }
483
+ );
484
+ };
485
+ var DropdownMenuSeparator = ({ className, ...props }) => /* @__PURE__ */ jsx(
486
+ DropdownMenuPrimitive3.Separator,
487
+ {
488
+ className: cn(
489
+ "tw:relative",
490
+ "tw:z-10",
491
+ // layout
492
+ "tw:flex",
493
+ "tw:items-center",
494
+ "tw:justify-center",
495
+ "tw:w-full",
496
+ // separator line
497
+ 'tw:before:content-[""]',
498
+ "tw:before:w-full",
499
+ "tw:before:h-px",
500
+ "tw:group-data-[variant=default]/dropdown-menu-content:py-2",
501
+ "tw:group-data-[variant=default]/dropdown-menu-content:before:bg-neutral-150",
502
+ "tw:group-data-[variant=argo]/dropdown-menu-content:py-1",
503
+ "tw:group-data-[variant=argo]/dropdown-menu-content:before:bg-border",
504
+ className
505
+ ),
506
+ ...props
507
+ }
508
+ );
509
+ var DropdownMenuSub = DropdownMenuPrimitive3.Sub;
510
+ var DropdownMenuSubContent = ({ className, ...props }) => {
511
+ const { variant } = useDropdownMenuContext();
512
+ return /* @__PURE__ */ jsx(DropdownMenuPrimitive3.Portal, { children: /* @__PURE__ */ jsx(
513
+ DropdownMenuPrimitive3.SubContent,
514
+ {
515
+ "data-variant": variant,
516
+ className: cn(contentVariants, "tw:z-[1041]", "tw:p-2", className),
517
+ ...props
518
+ }
519
+ ) });
520
+ };
521
+ var DropdownMenuSubTrigger = ({ className, children, ...props }) => {
522
+ return /* @__PURE__ */ jsxs(DropdownMenuPrimitive3.SubTrigger, { className: cn(itemVariants, className), ...props, children: [
523
+ children,
524
+ /* @__PURE__ */ jsx(ChevronRight, { className: "tw:ml-auto tw:size-5" })
525
+ ] });
526
+ };
527
+ var DropdownMenuTrigger = ({ ref, className, ...props }) => /* @__PURE__ */ jsx(
528
+ Trigger,
529
+ {
530
+ ...props,
531
+ ref,
532
+ "data-slot": "dropdown-menu-trigger",
533
+ className: cn("tw:group/dropdown-menu-trigger", className)
534
+ }
535
+ );
536
+ var DropdownMenu = ({
537
+ // change a default value to false, for modal property, as it is not used in most cases
538
+ modal = false,
539
+ ...props
540
+ }) => {
541
+ const effectiveVariant = useArgoDesign() ? "argo" : "default";
542
+ const contextValue = useMemo(() => ({ variant: effectiveVariant }), [effectiveVariant]);
543
+ return /* @__PURE__ */ jsx(DropdownMenuContext, { value: contextValue, children: /* @__PURE__ */ jsx(Root, { ...props, modal }) });
544
+ };
545
+ DropdownMenu.Trigger = DropdownMenuTrigger;
546
+ DropdownMenu.Content = DropdownMenuContent;
547
+ DropdownMenu.Group = Group;
548
+ DropdownMenu.Sub = DropdownMenuSub;
549
+ DropdownMenu.SubContent = DropdownMenuSubContent;
550
+ DropdownMenu.SubTrigger = DropdownMenuSubTrigger;
551
+ DropdownMenu.Separator = DropdownMenuSeparator;
552
+ DropdownMenu.Label = DropdownMenuLabel;
553
+ DropdownMenu.Item = DropdownMenuItem;
554
+ DropdownMenu.CheckboxItem = DropdownMenuCheckboxItem;
555
+ DropdownMenu.RadioGroup = DropdownMenuRadioGroup;
556
+ DropdownMenu.RadioItem = DropdownMenuRadioItem;
557
+ DropdownMenu.ItemDescription = DropdownMenuItemDescription;
558
+ var ToastAction = ({ ref, className, ...rest }) => /* @__PURE__ */ jsx(
559
+ "button",
560
+ {
561
+ ...rest,
562
+ ref,
563
+ "data-slot": "toast-action",
564
+ type: "button",
565
+ className: cn(
566
+ // layout
567
+ "tw:col-start-3",
568
+ "tw:row-start-1",
569
+ "tw:flex",
570
+ "tw:items-center",
571
+ "tw:justify-center",
572
+ // font
573
+ "tw:text-xs",
574
+ "tw:font-medium",
575
+ "tw:text-primary",
576
+ // sizing
577
+ "tw:px-2",
578
+ "tw:h-6",
579
+ // styles
580
+ "tw:bg-primary-foreground",
581
+ "tw:rounded",
582
+ className
583
+ )
584
+ }
585
+ );
586
+ var ToastDescription = ({ ref, className, children, ...rest }) => /* @__PURE__ */ jsx(
587
+ "div",
588
+ {
589
+ ref,
590
+ "data-slot": "toast-description",
591
+ className: cn(
592
+ "tw:col-start-2",
593
+ "tw:font-normal",
594
+ "tw:break-words",
595
+ "tw:text-white",
596
+ "tw:group-data-[variant=default]/toast:text-muted-foreground",
597
+ className
598
+ ),
599
+ ...rest,
600
+ children
601
+ }
602
+ );
603
+ var ToastDismiss = ({ ref, className, ...rest }) => /* @__PURE__ */ jsxs(
604
+ "button",
605
+ {
606
+ ref,
607
+ "data-slot": "toast-dismiss",
608
+ className: cn(
609
+ "tw:flex",
610
+ "tw:justify-center",
611
+ "tw:col-start-4",
612
+ "tw:row-start-1",
613
+ "tailwindcss-preflight",
614
+ "tw:[&_svg]:aspect-square",
615
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-4',
616
+ "tw:[&_svg]:m-1",
617
+ "tw:text-white",
618
+ "tw:group-data-[variant=default]/toast:[&_svg]:text-popover-foreground",
619
+ "tw:group-data-[variant=default]/toast:group-data-[argo=true]/toast:[&_svg]:text-foreground",
620
+ className
621
+ ),
622
+ type: "button",
623
+ ...rest,
624
+ children: [
625
+ /* @__PURE__ */ jsx(X, {}),
626
+ /* @__PURE__ */ jsx("span", { className: "tw:sr-only", children: "Dismiss" })
627
+ ]
628
+ }
629
+ );
630
+ var ToastDuration = ({ ref, duration, className, style, ...rest }) => /* @__PURE__ */ jsx(
631
+ "span",
632
+ {
633
+ ...rest,
634
+ ref,
635
+ className: cn(
636
+ "tw:bg-white/30",
637
+ "tw:group-data-[variant=default]/toast:bg-popover-foreground/20",
638
+ "tw:group-data-[variant=default]/toast:group-data-[argo=true]/toast:bg-foreground/20",
639
+ "tw:rounded-bl-lg",
640
+ "tw:mx-px",
641
+ // positioning
642
+ "tw:absolute",
643
+ "tw:bottom-0",
644
+ "tw:left-0",
645
+ // sizing
646
+ "tw:h-1",
647
+ // animation
648
+ "tw:animate-toast-progress",
649
+ "tw:group-hover/toast:[animation-play-state:paused]",
650
+ className
651
+ ),
652
+ style: {
653
+ animationDuration: `${duration}ms`,
654
+ ...style
655
+ }
656
+ }
657
+ );
658
+ var ToastTitle = ({ ref, className, children, ...rest }) => /* @__PURE__ */ jsx(
659
+ "div",
660
+ {
661
+ ref,
662
+ "data-slot": "toast-title",
663
+ className: cn(
664
+ "tw:col-start-2",
665
+ "tw:text-sm",
666
+ "tw:leading-6",
667
+ "tw:min-h-6",
668
+ "tw:self-center",
669
+ "tw:text-white",
670
+ "tw:group-data-[variant=default]/toast:text-popover-foreground",
671
+ "tw:group-data-[variant=default]/toast:group-data-[argo=true]/toast:text-foreground",
672
+ "tw:break-words",
673
+ "tw:font-medium",
674
+ className
675
+ ),
676
+ ...rest,
677
+ children
678
+ }
679
+ );
680
+ var variants2 = cva(
681
+ [
682
+ "tailwindcss-preflight",
683
+ "tw:group/toast",
684
+ "tw:relative",
685
+ // layout
686
+ "tw:grid",
687
+ "tw:grid-cols-[0_1fr_auto_auto]",
688
+ "tw:items-start",
689
+ "tw:has-[[data-slot=toast-description]]:grid-rows-[auto_auto]",
690
+ "tw:has-[[data-slot=toast-icon]]:grid-cols-[auto_1fr_auto_auto]",
691
+ "tw:[&_[data-slot=toast-icon]]:mr-2",
692
+ "tw:[&_[data-slot=toast-title]]:mr-2.5",
693
+ "tw:[&_[data-slot=toast-description]]:mr-2.5",
694
+ "tw:[&_[data-slot=toast-action]]:mr-2",
695
+ "tw:[&_[data-slot=toast-description]]:col-end-3",
696
+ "tw:gap-y-0",
697
+ // styles
698
+ "tw:p-4",
699
+ "tw:rounded-lg",
700
+ "tw:shadow-md"
701
+ ],
702
+ {
703
+ defaultVariants: {
704
+ variant: "info"
705
+ },
706
+ variants: {
707
+ variant: {
708
+ default: "tw:border tw:border-border tw:bg-popover",
709
+ error: "tw:bg-error-550",
710
+ info: "tw:bg-blue-600",
711
+ success: "tw:bg-green-700",
712
+ warning: "tw:bg-warning-550"
713
+ }
714
+ }
715
+ }
716
+ );
717
+ var DEFAULT_VARIANT_ICON = {
718
+ error: /* @__PURE__ */ jsx(AlertTriangle, {}),
719
+ info: /* @__PURE__ */ jsx(Info, {}),
720
+ success: /* @__PURE__ */ jsx(CircleCheck, {}),
721
+ warning: /* @__PURE__ */ jsx(AlertCircle, {})
722
+ };
723
+ var ToastRoot = ({
724
+ id,
725
+ title,
726
+ description,
727
+ action,
728
+ duration = Infinity,
729
+ variant = "info",
730
+ loading = false,
731
+ icon: iconProp
732
+ }) => {
733
+ const renderArgo = useArgoDesign();
734
+ const icon = (() => {
735
+ if (loading) return /* @__PURE__ */ jsx(Loader2, { className: "tw:animate-spin" });
736
+ if (iconProp) return iconProp;
737
+ if (variant === "default" || variant === null) return null;
738
+ return DEFAULT_VARIANT_ICON[variant];
739
+ })();
740
+ const handleActionClick = (event) => {
741
+ toast$1.dismiss(id);
742
+ action?.onClick(event);
743
+ };
744
+ return /* @__PURE__ */ jsxs(
745
+ "div",
746
+ {
747
+ "data-variant": variant,
748
+ "data-argo": renderArgo,
749
+ className: cn(
750
+ variants2({ variant }),
751
+ "tw:data-[variant=default]:data-[argo=true]:bg-background"
752
+ ),
753
+ children: [
754
+ icon && /* @__PURE__ */ jsx(
755
+ "span",
756
+ {
757
+ "data-slot": "toast-icon",
758
+ className: cn(
759
+ "tw:inline-flex",
760
+ "tw:items-center",
761
+ "tw:justify-center",
762
+ "tw:self-center",
763
+ "tw:aspect-square",
764
+ "tw:size-5",
765
+ "tw:shrink-0",
766
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-5',
767
+ "tw:text-white",
768
+ "tw:group-data-[variant=default]/toast:text-popover-foreground",
769
+ "tw:group-data-[variant=default]/toast:group-data-[argo=true]/toast:text-foreground"
770
+ ),
771
+ children: icon
772
+ }
773
+ ),
774
+ /* @__PURE__ */ jsx(ToastTitle, { children: title }),
775
+ description && /* @__PURE__ */ jsx(ToastDescription, { children: description }),
776
+ action && /* @__PURE__ */ jsx(ToastAction, { style: action?.actionButtonStyle, onClick: handleActionClick, children: action.label }),
777
+ /* @__PURE__ */ jsx(ToastDismiss, { onClick: () => toast$1.dismiss(id) }),
778
+ duration !== Infinity && /* @__PURE__ */ jsx(ToastDuration, { duration })
779
+ ]
780
+ }
781
+ );
782
+ };
783
+ var toast = ({
784
+ onAutoClose,
785
+ onDismiss,
786
+ testId,
787
+ toasterId,
788
+ dismissible = true,
789
+ position,
790
+ title: titleProp,
791
+ ...toast2
792
+ }) => {
793
+ const duration = (() => {
794
+ if (typeof toast2.duration === "number") return toast2.duration;
795
+ if (toast2.variant === "error" || toast2.variant === "warning") return Infinity;
796
+ return toast2.duration ?? 5e3;
797
+ })();
798
+ const renderCustomToast = (id) => {
799
+ const title = typeof titleProp === "function" ? titleProp({ dismiss: () => toast$1.dismiss(id) }) : titleProp;
800
+ return /* @__PURE__ */ jsx(ToastRoot, { ...toast2, id, title, duration });
801
+ };
802
+ return toast$1.custom(renderCustomToast, {
803
+ // toast generated by sonner will always have an id, but we want to allow users to specify their own id if they want to
804
+ // can not pass undefined, as it will break dismiss
805
+ ...toast2.id != null ? { id: toast2.id } : {},
806
+ unstyled: true,
807
+ position,
808
+ onAutoClose,
809
+ onDismiss,
810
+ testId,
811
+ toasterId,
812
+ dismissible,
813
+ duration,
814
+ // override default focus-visible styles to match our design
815
+ className: cn("tw:rounded-lg", "tw:focus-visible:!ring-4", "tw:focus-visible:!ring-ring/50")
816
+ });
817
+ };
818
+ toast.success = (title, options) => toast({
819
+ ...options,
820
+ title,
821
+ variant: "success"
822
+ });
823
+ toast.error = (title, options) => toast({
824
+ ...options,
825
+ title,
826
+ variant: "error",
827
+ duration: options?.duration ?? Infinity
828
+ });
829
+ toast.warning = (title, options) => toast({
830
+ ...options,
831
+ title,
832
+ variant: "warning",
833
+ duration: options?.duration ?? Infinity
834
+ });
835
+ toast.info = (title, options) => toast({
836
+ ...options,
837
+ title,
838
+ variant: "info"
839
+ });
840
+ toast.dismiss = (toastId) => toast$1.dismiss(toastId);
841
+ toast.dismissAll = () => toast$1.dismiss();
842
+
843
+ export { ButtonGroup, DropdownMenu, toast };
844
+ //# sourceMappingURL=chunk-XV3UUOYF.js.map
845
+ //# sourceMappingURL=chunk-XV3UUOYF.js.map