@keboola/design 6.4.0 → 8.0.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 (49) hide show
  1. package/AGENTS.md +9 -10
  2. package/COMPONENT-API.md +162 -160
  3. package/README.md +3 -3
  4. package/dist/charts.cjs +22 -22
  5. package/dist/charts.cjs.map +1 -1
  6. package/dist/charts.d.cts +5 -5
  7. package/dist/charts.d.ts +5 -5
  8. package/dist/charts.js +22 -22
  9. package/dist/charts.js.map +1 -1
  10. package/dist/editors.cjs +594 -438
  11. package/dist/editors.cjs.map +1 -1
  12. package/dist/editors.d.cts +8 -4
  13. package/dist/editors.d.ts +8 -4
  14. package/dist/editors.js +595 -422
  15. package/dist/editors.js.map +1 -1
  16. package/dist/icons.cjs +23818 -45
  17. package/dist/icons.cjs.map +1 -1
  18. package/dist/icons.d.cts +12 -3
  19. package/dist/icons.d.ts +12 -3
  20. package/dist/icons.js +298 -40
  21. package/dist/icons.js.map +1 -1
  22. package/dist/index.cjs +11519 -11718
  23. package/dist/index.cjs.map +1 -1
  24. package/dist/index.d.cts +679 -1227
  25. package/dist/index.d.ts +679 -1227
  26. package/dist/index.js +10315 -10516
  27. package/dist/index.js.map +1 -1
  28. package/dist/markdown-editor.cjs +1015 -1134
  29. package/dist/markdown-editor.cjs.map +1 -1
  30. package/dist/markdown-editor.js +1016 -1134
  31. package/dist/markdown-editor.js.map +1 -1
  32. package/dist/mermaid.cjs +366 -452
  33. package/dist/mermaid.cjs.map +1 -1
  34. package/dist/mermaid.d.cts +5 -1
  35. package/dist/mermaid.d.ts +5 -1
  36. package/dist/mermaid.js +368 -435
  37. package/dist/mermaid.js.map +1 -1
  38. package/dist/rjsf.cjs +2540 -2419
  39. package/dist/rjsf.cjs.map +1 -1
  40. package/dist/rjsf.js +2541 -2419
  41. package/dist/rjsf.js.map +1 -1
  42. package/dist/styles.css +2 -5
  43. package/dist/testing.cjs +86 -82
  44. package/dist/testing.cjs.map +1 -1
  45. package/dist/testing.js +86 -82
  46. package/dist/testing.js.map +1 -1
  47. package/package.json +30 -22
  48. package/src/styles.css +125 -105
  49. package/src/theme.css +264 -0
@@ -7,8 +7,9 @@ var react = require('react');
7
7
  var reactTooltip = require('@radix-ui/react-tooltip');
8
8
  var classVarianceAuthority = require('class-variance-authority');
9
9
  var jsxRuntime = require('react/jsx-runtime');
10
- var lucide_react_star = require('lucide-react');
10
+ var lucideReact = require('lucide-react');
11
11
  var reactSlot = require('@radix-ui/react-slot');
12
+ var reactDom = require('react-dom');
12
13
  var DOMPurify = require('dompurify');
13
14
  var beautifulMermaid = require('beautiful-mermaid');
14
15
  var colors = require('@keboola/tailwind-config/colors');
@@ -34,7 +35,6 @@ var richText = require('@lexical/rich-text');
34
35
  var lexical = require('lexical');
35
36
  var LexicalComposerContext = require('@lexical/react/LexicalComposerContext');
36
37
  var sonner = require('sonner');
37
- var reactDom = require('react-dom');
38
38
  var utils = require('@lexical/utils');
39
39
  var DropdownMenuPrimitive3 = require('@radix-ui/react-dropdown-menu');
40
40
  var ScrollAreaPrimitive2 = require('@radix-ui/react-scroll-area');
@@ -61,7 +61,6 @@ function _interopNamespace(e) {
61
61
  return Object.freeze(n);
62
62
  }
63
63
 
64
- var lucide_react_star__namespace = /*#__PURE__*/_interopNamespace(lucide_react_star);
65
64
  var DOMPurify__default = /*#__PURE__*/_interopDefault(DOMPurify);
66
65
  var colors__default = /*#__PURE__*/_interopDefault(colors);
67
66
  var DropdownMenuPrimitive3__namespace = /*#__PURE__*/_interopNamespace(DropdownMenuPrimitive3);
@@ -70,9 +69,7 @@ var TextareaAutosize__default = /*#__PURE__*/_interopDefault(TextareaAutosize);
70
69
  var RLabel__namespace = /*#__PURE__*/_interopNamespace(RLabel);
71
70
 
72
71
  var __defProp = Object.defineProperty;
73
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
74
72
  var __getOwnPropNames = Object.getOwnPropertyNames;
75
- var __hasOwnProp = Object.prototype.hasOwnProperty;
76
73
  var __esm = (fn, res) => function __init() {
77
74
  return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
78
75
  };
@@ -80,20 +77,11 @@ var __export = (target, all) => {
80
77
  for (var name in all)
81
78
  __defProp(target, name, { get: all[name], enumerable: true });
82
79
  };
83
- var __copyProps = (to, from, except, desc) => {
84
- if (from && typeof from === "object" || typeof from === "function") {
85
- for (let key of __getOwnPropNames(from))
86
- if (!__hasOwnProp.call(to, key) && key !== except)
87
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
88
- }
89
- return to;
90
- };
91
- var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget);
92
80
  var twMerge, cn;
93
81
  var init_classNames = __esm({
94
82
  "src/utils/classNames.ts"() {
95
83
  twMerge = tailwindMerge.extendTailwindMerge({
96
- prefix: "tw-"
84
+ prefix: "tw"
97
85
  });
98
86
  cn = (...classes) => twMerge(clsx.clsx(...classes));
99
87
  }
@@ -212,39 +200,39 @@ var init_TooltipContent = __esm({
212
200
  tooltipVariants = classVarianceAuthority.cva(
213
201
  [
214
202
  "tailwindcss-preflight",
215
- "tw-inline-block",
216
- "tw-break-anywhere",
217
- "tw-max-h-96",
218
- "tw-overflow-y-auto",
219
- "tw-z-[1060]",
203
+ "tw:inline-block",
204
+ "tw:break-anywhere",
205
+ "tw:max-h-96",
206
+ "tw:overflow-y-auto",
207
+ "tw:z-[1060]",
220
208
  // legacy (dark) chrome — default
221
- "tw-rounded",
222
- "tw-bg-neutral-800",
223
- "tw-text-white",
209
+ "tw:rounded",
210
+ "tw:bg-neutral-800",
211
+ "tw:text-white",
224
212
  // argo chrome overrides — semantic floating-panel tokens
225
- "data-[argo=true]:tw-rounded-2xl",
226
- "data-[argo=true]:tw-border",
227
- "data-[argo=true]:tw-border-solid",
228
- "data-[argo=true]:tw-border-border",
229
- "data-[argo=true]:tw-bg-popover",
230
- "data-[argo=true]:tw-text-popover-foreground",
231
- "data-[argo=true]:tw-shadow-md",
213
+ "tw:data-[argo=true]:rounded-2xl",
214
+ "tw:data-[argo=true]:border",
215
+ "tw:data-[argo=true]:border-solid",
216
+ "tw:data-[argo=true]:border-border",
217
+ "tw:data-[argo=true]:bg-popover",
218
+ "tw:data-[argo=true]:text-popover-foreground",
219
+ "tw:data-[argo=true]:shadow-md",
232
220
  // argo open animation
233
- "data-[argo=true]:data-[state=delayed-open]:tw-animate-in",
234
- "data-[argo=true]:data-[state=instant-open]:tw-animate-in",
235
- "data-[argo=true]:data-[state=delayed-open]:tw-fade-in-0",
236
- "data-[argo=true]:data-[state=instant-open]:tw-fade-in-0",
237
- "data-[argo=true]:data-[state=delayed-open]:tw-zoom-in-95",
238
- "data-[argo=true]:data-[state=instant-open]:tw-zoom-in-95",
221
+ "tw:data-[argo=true]:data-[state=delayed-open]:animate-in",
222
+ "tw:data-[argo=true]:data-[state=instant-open]:animate-in",
223
+ "tw:data-[argo=true]:data-[state=delayed-open]:fade-in-0",
224
+ "tw:data-[argo=true]:data-[state=instant-open]:fade-in-0",
225
+ "tw:data-[argo=true]:data-[state=delayed-open]:zoom-in-95",
226
+ "tw:data-[argo=true]:data-[state=instant-open]:zoom-in-95",
239
227
  // argo closed animation
240
- "data-[argo=true]:data-[state=closed]:tw-animate-out",
241
- "data-[argo=true]:data-[state=closed]:tw-fade-out-0",
242
- "data-[argo=true]:data-[state=closed]:tw-zoom-out-95",
228
+ "tw:data-[argo=true]:data-[state=closed]:animate-out",
229
+ "tw:data-[argo=true]:data-[state=closed]:fade-out-0",
230
+ "tw:data-[argo=true]:data-[state=closed]:zoom-out-95",
243
231
  // argo position animation
244
- "data-[argo=true]:data-[side=bottom]:tw-slide-in-from-top-2",
245
- "data-[argo=true]:data-[side=left]:tw-slide-in-from-right-2",
246
- "data-[argo=true]:data-[side=right]:tw-slide-in-from-left-2",
247
- "data-[argo=true]:data-[side=top]:tw-slide-in-from-bottom-2"
232
+ "tw:data-[argo=true]:data-[side=bottom]:slide-in-from-top-2",
233
+ "tw:data-[argo=true]:data-[side=left]:slide-in-from-right-2",
234
+ "tw:data-[argo=true]:data-[side=right]:slide-in-from-left-2",
235
+ "tw:data-[argo=true]:data-[side=top]:slide-in-from-bottom-2"
248
236
  ],
249
237
  {
250
238
  defaultVariants: {
@@ -253,22 +241,26 @@ var init_TooltipContent = __esm({
253
241
  variants: {
254
242
  variant: {
255
243
  action: [
256
- "tw-max-w-fit",
257
- "tw-px-3",
258
- "tw-py-2",
259
- "tw-text-center",
260
- "tw-text-xs",
261
- "tw-font-medium",
262
- "tw-uppercase",
263
- "tw-tracking-wider"
244
+ "tw:max-w-fit",
245
+ "tw:px-3",
246
+ "tw:py-2",
247
+ "tw:text-center",
248
+ "tw:text-xs",
249
+ "tw:font-medium",
250
+ // Legacy chrome uppercases the action tooltip; the Keboola V2 brand
251
+ // (`data-brand="keboola"`) renders it in standard case instead.
252
+ "tw:uppercase",
253
+ "tw:tracking-wider",
254
+ "tw:[[data-brand=keboola]_&]:normal-case",
255
+ "tw:[[data-brand=keboola]_&]:tracking-normal"
264
256
  ],
265
257
  explanatory: [
266
- "tw-max-w-80",
267
- "tw-px-4",
268
- "tw-py-3",
269
- "tw-text-left",
270
- "tw-text-sm",
271
- "tw-font-normal"
258
+ "tw:max-w-80",
259
+ "tw:px-4",
260
+ "tw:py-3",
261
+ "tw:text-left",
262
+ "tw:text-sm",
263
+ "tw:font-normal"
272
264
  ]
273
265
  }
274
266
  }
@@ -353,8 +345,8 @@ var init_TooltipTrigger = __esm({
353
345
  // (merged in via Slot) activates Tailwind's preflight inside the
354
346
  // span, which sets `svg { display: block }` — without an inline-flex
355
347
  // container that would stack any bare Lucide icon onto its own
356
- // line. `tw-inline-flex tw-items-center` keeps icon + text aligned.
357
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tw-inline-flex tw-items-center", children })
348
+ // line. `tw:inline-flex tw:items-center` keeps icon + text aligned.
349
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tw:inline-flex tw:items-center", children })
358
350
  )
359
351
  }
360
352
  );
@@ -378,6 +370,7 @@ var init_Tooltip = __esm({
378
370
  placement = "right",
379
371
  forceHide = false,
380
372
  forceShow = false,
373
+ delayDuration,
381
374
  // trigger props
382
375
  triggerAsChild = false
383
376
  }) => {
@@ -397,6 +390,7 @@ var init_Tooltip = __esm({
397
390
  {
398
391
  open: !!tooltip && (open || forceShow) && !forceHide,
399
392
  onOpenChange: setOpen,
393
+ delayDuration,
400
394
  disableHoverableContent: isActionVariant,
401
395
  children: [
402
396
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -527,31 +521,31 @@ var init_Skeleton = __esm({
527
521
  "src/components/Skeleton/Skeleton.tsx"() {
528
522
  init_utils2();
529
523
  HEIGHT_CLASS_NAME = {
530
- xxs: "tw-h-3 tw-rounded",
531
- xs: "tw-h-4 tw-rounded",
532
- sm: "tw-h-5 tw-rounded",
533
- md: "tw-h-6 tw-rounded-md",
534
- lg: "tw-h-8 tw-rounded-lg",
535
- xl: "tw-h-10 tw-rounded-lg",
536
- "2xl": "tw-h-12 tw-rounded-lg"
524
+ xxs: "tw:h-3 tw:rounded",
525
+ xs: "tw:h-4 tw:rounded",
526
+ sm: "tw:h-5 tw:rounded",
527
+ md: "tw:h-6 tw:rounded-md",
528
+ lg: "tw:h-8 tw:rounded-lg",
529
+ xl: "tw:h-10 tw:rounded-lg",
530
+ "2xl": "tw:h-12 tw:rounded-lg"
537
531
  };
538
532
  ANIMATION_CLASS_NAME = cn(
539
533
  // base styles
540
- "tw-relative",
541
- "tw-overflow-hidden",
542
- "tw-pointer-events-none",
543
- "tw-bg-skeleton",
534
+ "tw:relative",
535
+ "tw:overflow-hidden",
536
+ "tw:pointer-events-none",
537
+ "tw:bg-skeleton",
544
538
  // before
545
- 'before:tw-content-[""]',
546
- "before:tw-opacity-100",
547
- "before:tw-absolute",
548
- "before:tw-inset-0",
549
- "before:-tw-translate-x-full",
550
- "before:tw-animate-[shimmer_2s_infinite]",
551
- "before:tw-bg-gradient-to-r",
552
- "before:tw-from-transparent",
553
- "before:tw-to-transparent",
554
- "before:tw-via-white/40"
539
+ 'tw:before:content-[""]',
540
+ "tw:before:opacity-100",
541
+ "tw:before:absolute",
542
+ "tw:before:inset-0",
543
+ "tw:before:-translate-x-full",
544
+ "tw:before:animate-[shimmer_2s_infinite]",
545
+ "tw:before:bg-gradient-to-r",
546
+ "tw:before:from-transparent",
547
+ "tw:before:to-transparent",
548
+ "tw:before:via-white/40"
555
549
  );
556
550
  Skeleton = ({ height = "md", className, count = 1 }) => {
557
551
  const prefixId = react.useId();
@@ -567,128 +561,8 @@ var init_Skeleton = __esm({
567
561
  };
568
562
  }
569
563
  });
570
- var Google;
571
- var init_Google = __esm({
572
- "src/icons/Google.tsx"() {
573
- init_utils2();
574
- Google = react.forwardRef(
575
- ({ size = 24, className, children, ...rest }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
576
- "svg",
577
- {
578
- ref,
579
- xmlns: "http://www.w3.org/2000/svg",
580
- width: size,
581
- height: size,
582
- viewBox: "12 10 20 20",
583
- fill: "none",
584
- className: cn("lucide", className),
585
- ...rest,
586
- children: [
587
- /* @__PURE__ */ jsxRuntime.jsx(
588
- "path",
589
- {
590
- d: "M31.6 20.2273C31.6 19.5182 31.5364 18.8364 31.4182 18.1818H22V22.05H27.3818C27.15 23.3 26.4455 24.3591 25.3864 25.0682V27.5773H28.6182C30.5091 25.8364 31.6 23.2727 31.6 20.2273Z",
591
- fill: "#4285F4"
592
- }
593
- ),
594
- /* @__PURE__ */ jsxRuntime.jsx(
595
- "path",
596
- {
597
- d: "M22 30C24.7 30 26.9636 29.1045 28.6181 27.5773L25.3863 25.0682C24.4909 25.6682 23.3454 26.0227 22 26.0227C19.3954 26.0227 17.1909 24.2636 16.4045 21.9H13.0636V24.4909C14.7091 27.7591 18.0909 30 22 30Z",
598
- fill: "#34A853"
599
- }
600
- ),
601
- /* @__PURE__ */ jsxRuntime.jsx(
602
- "path",
603
- {
604
- d: "M16.4045 21.9C16.2045 21.3 16.0909 20.6591 16.0909 20C16.0909 19.3409 16.2045 18.7 16.4045 18.1V15.5091H13.0636C12.3864 16.8591 12 18.3864 12 20C12 21.6136 12.3864 23.1409 13.0636 24.4909L16.4045 21.9Z",
605
- fill: "#FBBC04"
606
- }
607
- ),
608
- /* @__PURE__ */ jsxRuntime.jsx(
609
- "path",
610
- {
611
- d: "M22 13.9773C23.4681 13.9773 24.7863 14.4818 25.8227 15.4727L28.6909 12.6045C26.9591 10.9909 24.6954 10 22 10C18.0909 10 14.7091 12.2409 13.0636 15.5091L16.4045 18.1C17.1909 15.7364 19.3954 13.9773 22 13.9773Z",
612
- fill: "#EA4335"
613
- }
614
- ),
615
- children
616
- ]
617
- }
618
- )
619
- );
620
- Google.displayName = "Google";
621
- }
622
- });
623
- var Keboola;
624
- var init_Keboola = __esm({
625
- "src/icons/Keboola.tsx"() {
626
- init_utils2();
627
- Keboola = react.forwardRef(
628
- ({ size = 24, color = "currentColor", className, children, ...rest }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
629
- "svg",
630
- {
631
- ref,
632
- xmlns: "http://www.w3.org/2000/svg",
633
- width: size,
634
- height: size,
635
- viewBox: "0 0 300 512",
636
- fill: color,
637
- className: cn("lucide", className),
638
- ...rest,
639
- children: [
640
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M152 320C79.7 320 24.5 233.9 24.5 124.7C24.5 15.6 70.5 0 152 0s123.6 15.6 123.6 124.7C275.5 233.9 217.7 320 152 320zm-8.7-50.5c0-11.2-9.5-20.3-21.2-20.3s-21.2 9.1-21.2 20.3c0 11.2 9.5 20.3 21.2 20.3s21.2-9.1 21.2-20.3zm55.7 0c0-11.2-9.5-20.3-21.2-20.3s-21.2 9.1-21.2 20.3c0 11.2 9.5 20.3 21.2 20.3s21.2-9.1 21.2-20.3zm68.9 115.1c10.2 9.3 20.2 20.5 29 35c5.9 9.7 2.6 22.1-7.5 27.8c-3.4 1.9-7.1 2.8-10.7 2.8c-7.2 0-14.3-3.6-18.3-10c-6.8-11.1-13.8-18.9-21.7-26.1c-7.3-6.7-15.6-12.7-24.9-19.5c-.7-.5-1.4-1-2.1-1.5c-5-3.6-10-6.8-14.9-9.4c.6 1 1.2 2.1 1.8 3.2c14.4 26.4 29.2 63.1 29.2 104.9c0 11.2-9.5 20.3-21.2 20.3c-11.7 0-21.2-9.1-21.2-20.3c.1-31.8-11.6-62.3-23.8-84.9c-4-7.4-8-13.9-11.6-19.3c-3.4 5.2-7.2 11.3-11 18.3c-12.5 22.7-24.5 53.8-24.4 86c0 11.2-9.5 20.3-21.2 20.3s-21.2-9.1-21.2-20.3c.1-41.8 14.9-78.4 29.2-104.9c.6-1.1 1.2-2.1 1.8-3.2c-5 2.7-9.9 5.8-14.9 9.4c-.6 .5-1.3 .9-1.9 1.4c-9.5 6.9-17.8 12.9-25.1 19.7c-7.9 7.2-14.9 15.1-21.7 26.1c-5.9 9.7-18.9 12.9-29 7.2C.5 441.8-2.9 429.3 3.1 419.7c8.9-14.4 18.8-25.7 29-35c9.2-8.4 18.5-15.1 27.6-21.7c1-.7 2-1.4 3-2.2c4.7-3.5 9.6-6.7 14.6-9.6c-5-2.9-9.8-6.1-14.6-9.6C39.8 325 19.9 302.5 3.1 275.1c-5.9-9.7-2.6-22.1 7.5-27.8c10.1-5.7 23.1-2.5 29 7.2c14.6 23.7 31.1 42 48.7 54.9c18.9 13.7 37.4 20.5 56.5 21.5c1.7-.1 3.5-.1 5.2-.1c1.8 0 3.5 .1 5.2 .1c0 0 0 0 0 0c19.1-1.1 37.6-7.9 56.5-21.5c17.6-12.8 34.2-31.2 48.7-54.9c6-9.7 18.9-12.9 29-7.2c10.1 5.7 13.4 18.1 7.5 27.8c-16.8 27.4-36.7 49.9-59.6 66.6c-4.7 3.5-9.6 6.7-14.5 9.6c4.9 2.9 9.8 6.1 14.5 9.6c.9 .7 1.8 1.3 2.7 2c9.2 6.7 18.5 13.5 27.9 22z" }),
641
- children
642
- ]
643
- }
644
- )
645
- );
646
- Keboola.displayName = "Keboola";
647
- }
648
- });
649
- var Microsoft;
650
- var init_Microsoft = __esm({
651
- "src/icons/Microsoft.tsx"() {
652
- init_utils2();
653
- Microsoft = react.forwardRef(
654
- ({ size = 24, className, children, ...rest }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
655
- "svg",
656
- {
657
- ref,
658
- xmlns: "http://www.w3.org/2000/svg",
659
- width: size,
660
- height: size,
661
- viewBox: "0 0 21 21",
662
- fill: "none",
663
- className: cn("lucide", className),
664
- ...rest,
665
- children: [
666
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "0", y: "0", width: "10", height: "10", fill: "#F25022" }),
667
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "11", y: "0", width: "10", height: "10", fill: "#7FBA00" }),
668
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "0", y: "11", width: "10", height: "10", fill: "#00A4EF" }),
669
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "11", y: "11", width: "10", height: "10", fill: "#FFB900" }),
670
- children
671
- ]
672
- }
673
- )
674
- );
675
- Microsoft.displayName = "Microsoft";
676
- }
677
- });
678
-
679
- // src/icons/index.ts
680
- var icons_exports = {};
681
- __export(icons_exports, {
682
- Google: () => Google,
683
- Keboola: () => Keboola,
684
- Microsoft: () => Microsoft
685
- });
686
564
  var init_icons = __esm({
687
565
  "src/icons/index.ts"() {
688
- __reExport(icons_exports, lucide_react_star__namespace);
689
- init_Google();
690
- init_Keboola();
691
- init_Microsoft();
692
566
  }
693
567
  });
694
568
  var variants, argoVariants;
@@ -697,43 +571,46 @@ var init_styles = __esm({
697
571
  variants = classVarianceAuthority.cva(
698
572
  [
699
573
  "tailwindcss-preflight",
700
- "tw-group/button",
701
- "tw-border-box",
574
+ "tw:group/button",
575
+ "tw:border-box",
702
576
  // layout
703
- "tw-relative",
704
- "tw-flex",
705
- "tw-items-center",
706
- "tw-justify-center",
707
- "tw-gap-2",
577
+ "tw:relative",
578
+ "tw:flex",
579
+ "tw:items-center",
580
+ "tw:justify-center",
581
+ "tw:gap-2",
708
582
  // text — chrome weight/tracking are brand-overridable tokens
709
- // (`--font-weight-medium` / `--letter-spacing-chrome`); casing stays `tw-uppercase`.
710
- "tw-text-xs",
711
- "tw-leading-5",
712
- "tw-font-medium",
713
- "tw-tracking-chrome",
714
- "tw-uppercase",
583
+ // (`--font-weight-medium` / `--letter-spacing-chrome`). Casing: standard case is
584
+ // the default; only legacy brands (`keboola-legacy-*`) uppercase the chrome, so
585
+ // modern brands (incl. Keboola V2) read naturally. Mirrors the V2 standard-case
586
+ // treatment shipped for Tooltip/Badge (PR 7629).
587
+ "tw:text-xs",
588
+ "tw:leading-5",
589
+ "tw:font-medium",
590
+ "tw:[[data-brand^=keboola-legacy]_&]:tracking-chrome",
591
+ "tw:[[data-brand^=keboola-legacy]_&]:uppercase",
715
592
  // border — legacy (non-argo) chrome uses a fixed radius, not the brand token.
716
- "tw-rounded",
717
- "tw-border",
718
- "tw-border-transparent",
593
+ "tw:rounded",
594
+ "tw:border",
595
+ "tw:border-transparent",
719
596
  // styling
720
- "tw-shadow-none",
721
- "[a]:tw-cursor-pointer",
597
+ "tw:shadow-none",
598
+ "tw:[a]:cursor-pointer",
722
599
  // explicitly set for anchor
723
- "focus-visible:tw-outline",
724
- "focus-visible:tw-outline-1",
725
- "focus-visible:-tw-outline-offset-1",
726
- "focus-visible:tw-outline-ring",
727
- "focus-visible:tw-ring-4",
728
- "focus-visible:tw-ring-ring/30",
600
+ "tw:focus-visible:outline",
601
+ "tw:focus-visible:outline-1",
602
+ "tw:focus-visible:-outline-offset-1",
603
+ "tw:focus-visible:outline-ring",
604
+ "tw:focus-visible:ring-4",
605
+ "tw:focus-visible:ring-ring/30",
729
606
  // disabled
730
- "disabled:tw-opacity-40",
731
- "disabled:tw-cursor-not-allowed",
607
+ "tw:disabled:opacity-40",
608
+ "tw:disabled:cursor-not-allowed",
732
609
  // anchor support
733
- "!tw-no-underline",
734
- "aria-disabled:tw-opacity-40",
735
- "aria-disabled:tw-cursor-not-allowed",
736
- "[&_svg]:tw-shrink-0"
610
+ "tw:!no-underline",
611
+ "tw:aria-disabled:opacity-40",
612
+ "tw:aria-disabled:cursor-not-allowed",
613
+ "tw:[&_svg]:shrink-0"
737
614
  ],
738
615
  {
739
616
  defaultVariants: {
@@ -743,113 +620,113 @@ var init_styles = __esm({
743
620
  },
744
621
  variants: {
745
622
  block: {
746
- true: ["tw-w-full"]
623
+ true: ["tw:w-full"]
747
624
  },
748
625
  variant: {
749
626
  primary: [
750
- "tw-text-white",
751
- "tw-bg-primary-500",
752
- "focus:tw-text-white",
753
- "hover:tw-text-white",
754
- "hover:not-disabled:tw-bg-primary-600",
755
- "active:not-disabled:tw-bg-primary-800",
627
+ "tw:text-white",
628
+ "tw:bg-primary-500",
629
+ "tw:focus:text-white",
630
+ "tw:hover:text-white",
631
+ "tw:hover:not-disabled:bg-primary-600",
632
+ "tw:active:not-disabled:bg-primary-800",
756
633
  // anchor disabled override
757
- "aria-disabled:!tw-bg-primary-500"
634
+ "tw:aria-disabled:!bg-primary-500"
758
635
  ],
759
636
  secondary: [
760
- "tw-text-white",
761
- "tw-bg-secondary-500",
762
- "focus:tw-text-white",
763
- "hover:tw-text-white",
764
- "hover:not-disabled:tw-bg-secondary-700",
765
- "active:not-disabled:tw-bg-secondary-800",
637
+ "tw:text-white",
638
+ "tw:bg-secondary-500",
639
+ "tw:focus:text-white",
640
+ "tw:hover:text-white",
641
+ "tw:hover:not-disabled:bg-secondary-700",
642
+ "tw:active:not-disabled:bg-secondary-800",
766
643
  // anchor disabled override
767
- "aria-disabled:!tw-bg-secondary-500"
644
+ "tw:aria-disabled:!bg-secondary-500"
768
645
  ],
769
646
  danger: [
770
- "tw-text-white",
771
- "tw-bg-error-500",
772
- "focus:tw-text-white",
773
- "hover:tw-text-white",
774
- "hover:not-disabled:tw-bg-error-600",
775
- "active:not-disabled:tw-bg-error-700",
647
+ "tw:text-white",
648
+ "tw:bg-error-500",
649
+ "tw:focus:text-white",
650
+ "tw:hover:text-white",
651
+ "tw:hover:not-disabled:bg-error-600",
652
+ "tw:active:not-disabled:bg-error-700",
776
653
  // anchor disabled override
777
- "aria-disabled:!tw-bg-error-500"
654
+ "tw:aria-disabled:!bg-error-500"
778
655
  ],
779
656
  invisible: [
780
- "tw-text-neutral-800",
781
- "tw-bg-transparent",
782
- "focus:tw-text-neutral-800",
783
- "hover:not-disabled:tw-bg-neutral-100",
784
- "hover:tw-text-neutral-800",
785
- "active:not-disabled:tw-bg-neutral-150",
657
+ "tw:text-neutral-800",
658
+ "tw:bg-transparent",
659
+ "tw:focus:text-neutral-800",
660
+ "tw:hover:not-disabled:bg-neutral-100",
661
+ "tw:hover:text-neutral-800",
662
+ "tw:active:not-disabled:bg-neutral-150",
786
663
  // contrasting icon on hover/active
787
- "[&_svg]:tw-text-neutral-400",
788
- "[&_svg]:hover:not-disabled:tw-text-secondary-600",
789
- "[&_svg]:active:not-disabled:tw-text-secondary-600",
664
+ "tw:[&_svg]:text-neutral-400",
665
+ "tw:hover:not-disabled:[&_svg]:text-secondary-600",
666
+ "tw:active:not-disabled:[&_svg]:text-secondary-600",
790
667
  // anchor disabled override
791
- "aria-disabled:!tw-bg-transparent"
668
+ "tw:aria-disabled:!bg-transparent"
792
669
  ],
793
670
  outline: [
794
- "tw-text-neutral-800",
795
- "tw-bg-white",
671
+ "tw:text-neutral-800",
672
+ "tw:bg-white",
796
673
  // border
797
- "!tw-border-neutral-200",
798
- "hover:tw-text-neutral-800",
799
- "focus:tw-text-neutral-800",
800
- "hover:not-disabled:!tw-border-neutral-300",
801
- "hover:not-disabled:tw-bg-neutral-100",
802
- "active:not-disabled:tw-bg-neutral-200",
674
+ "tw:!border-neutral-200",
675
+ "tw:hover:text-neutral-800",
676
+ "tw:focus:text-neutral-800",
677
+ "tw:hover:not-disabled:!border-neutral-300",
678
+ "tw:hover:not-disabled:bg-neutral-100",
679
+ "tw:active:not-disabled:bg-neutral-200",
803
680
  // contrasting icon hover, same as invisible
804
- "[&_svg]:tw-text-neutral-400",
805
- "[&_svg]:not-disabled:hover:tw-text-secondary-600",
806
- "[&_svg]:active:not-disabled:tw-text-secondary-600",
681
+ "tw:[&_svg]:text-neutral-400",
682
+ "tw:not-disabled:hover:[&_svg]:text-secondary-600",
683
+ "tw:active:not-disabled:[&_svg]:text-secondary-600",
807
684
  // anchor disabled override
808
- "aria-disabled:!tw-bg-white",
809
- "aria-disabled:!tw-border-neutral-200"
685
+ "tw:aria-disabled:!bg-white",
686
+ "tw:aria-disabled:!border-neutral-200"
810
687
  ],
811
688
  inline: [
812
- "tw-text-neutral-800",
813
- "tw-bg-transparent",
814
- "tw-rounded-full",
815
- "[&_svg]:tw-text-neutral-400",
816
- "[&_svg]:not-disabled:hover:tw-text-secondary-600",
817
- "[&_svg]:not-disabled:focus:tw-text-secondary-600"
689
+ "tw:text-neutral-800",
690
+ "tw:bg-transparent",
691
+ "tw:rounded-full",
692
+ "tw:[&_svg]:text-neutral-400",
693
+ "tw:not-disabled:hover:[&_svg]:text-secondary-600",
694
+ "tw:not-disabled:focus:[&_svg]:text-secondary-600"
818
695
  ]
819
696
  },
820
697
  size: {
821
698
  medium: [
822
- "tw-max-h-10",
823
- "tw-min-h-10",
824
- "tw-px-4",
825
- "tw-py-2.5",
826
- '[&_svg:not([class*="tw-size-"])]:tw-size-4'
699
+ "tw:max-h-10",
700
+ "tw:min-h-10",
701
+ "tw:px-4",
702
+ "tw:py-2.5",
703
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-4'
827
704
  ],
828
705
  small: [
829
- "tw-max-h-8",
830
- "tw-min-h-8",
831
- "tw-px-4",
832
- "tw-py-1.5",
833
- '[&_svg:not([class*="tw-size-"])]:tw-size-4'
706
+ "tw:max-h-8",
707
+ "tw:min-h-8",
708
+ "tw:px-4",
709
+ "tw:py-1.5",
710
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-4'
834
711
  ],
835
712
  large: [
836
- "tw-max-h-12",
837
- "tw-min-h-12",
838
- "tw-px-4",
839
- "tw-py-3.5",
840
- '[&_svg:not([class*="tw-size-"])]:tw-size-4'
713
+ "tw:max-h-12",
714
+ "tw:min-h-12",
715
+ "tw:px-4",
716
+ "tw:py-3.5",
717
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-4'
841
718
  ],
842
- "icon-lg": ["tw-size-12", "tw-p-0", '[&_svg:not([class*="tw-size-"])]:tw-size-6'],
843
- icon: ["tw-size-10", "tw-p-0", '[&_svg:not([class*="tw-size-"])]:tw-size-4'],
844
- "icon-sm": ["tw-size-8", "tw-p-0", '[&_svg:not([class*="tw-size-"])]:tw-size-4'],
845
- "icon-xs": ["tw-size-6", "tw-p-0", '[&_svg:not([class*="tw-size-"])]:tw-size-4'],
719
+ "icon-lg": ["tw:size-12", "tw:p-0", 'tw:[&_svg:not([class*="tw:size-"])]:size-6'],
720
+ icon: ["tw:size-10", "tw:p-0", 'tw:[&_svg:not([class*="tw:size-"])]:size-4'],
721
+ "icon-sm": ["tw:size-8", "tw:p-0", 'tw:[&_svg:not([class*="tw:size-"])]:size-4'],
722
+ "icon-xs": ["tw:size-6", "tw:p-0", 'tw:[&_svg:not([class*="tw:size-"])]:size-4'],
846
723
  "icon-2xs": [
847
- "!tw-inline-flex",
848
- "tw-size-5",
849
- "tw-max-h-5",
850
- '[&_svg:not([class*="tw-size-"])]:tw-size-3'
724
+ "tw:!inline-flex",
725
+ "tw:size-5",
726
+ "tw:max-h-5",
727
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-3'
851
728
  ],
852
- "icon-3xs": ["tw-h-fit", "tw-w-fit", '[&_svg:not([class*="tw-size-"])]:tw-size-4']
729
+ "icon-3xs": ["tw:h-fit", "tw:w-fit", 'tw:[&_svg:not([class*="tw:size-"])]:size-4']
853
730
  }
854
731
  }
855
732
  }
@@ -858,37 +735,37 @@ var init_styles = __esm({
858
735
  [
859
736
  "tailwindcss-preflight",
860
737
  // layout
861
- "tw-relative",
862
- "tw-inline-flex",
863
- "tw-items-center",
864
- "tw-justify-center",
865
- "tw-whitespace-nowrap",
866
- "tw-gap-2",
738
+ "tw:relative",
739
+ "tw:inline-flex",
740
+ "tw:items-center",
741
+ "tw:justify-center",
742
+ "tw:whitespace-nowrap",
743
+ "tw:gap-2",
867
744
  // border
868
- "tw-border",
869
- "tw-border-transparent",
870
- "tw-rounded-[var(--radius-lg,0.25rem)]",
745
+ "tw:border",
746
+ "tw:border-transparent",
747
+ "tw:rounded-[var(--radius-lg,0.25rem)]",
871
748
  // text
872
- "tw-font-medium",
873
- "tw-select-none",
749
+ "tw:font-medium",
750
+ "tw:select-none",
874
751
  // focus visible
875
- "!tw-outline-none",
876
- "focus-visible:tw-ring-2",
752
+ "tw:!outline-hidden",
753
+ "tw:focus-visible:ring-2",
877
754
  // disabled
878
- "disabled:tw-cursor-not-allowed",
879
- "disabled:tw-opacity-50",
880
- "active:tw-opacity-60",
881
- "tw-transition-all",
882
- "tw-bg-clip-padding",
755
+ "tw:disabled:cursor-not-allowed",
756
+ "tw:disabled:opacity-50",
757
+ "tw:active:opacity-60",
758
+ "tw:transition-all",
759
+ "tw:bg-clip-padding",
883
760
  // anchor support
884
- "!tw-no-underline",
885
- "aria-disabled:tw-cursor-not-allowed",
886
- "aria-disabled:tw-opacity-50",
761
+ "tw:!no-underline",
762
+ "tw:aria-disabled:cursor-not-allowed",
763
+ "tw:aria-disabled:opacity-50",
887
764
  // icon
888
- "tw-shrink-0",
889
- "[&_svg]:tw-pointer-events-none",
890
- "[&_svg]:tw-shrink-0",
891
- "[&_svg:not([class*='tw-size-'])]:tw-size-4"
765
+ "tw:shrink-0",
766
+ "tw:[&_svg]:pointer-events-none",
767
+ "tw:[&_svg]:shrink-0",
768
+ "tw:[&_svg:not([class*='tw:size-'])]:size-4"
892
769
  ],
893
770
  {
894
771
  defaultVariants: {
@@ -897,77 +774,77 @@ var init_styles = __esm({
897
774
  },
898
775
  variants: {
899
776
  block: {
900
- true: ["tw-w-full"]
777
+ true: ["tw:w-full"]
901
778
  },
902
779
  variant: {
903
780
  primary: [
904
- "tw-bg-primary",
905
- "tw-text-primary-foreground",
906
- "[a]:hover:tw-bg-primary/80",
907
- "hover:not-disabled:tw-bg-primary/90",
908
- "hover:tw-text-primary-foreground",
909
- "focus:tw-text-primary-foreground",
910
- "focus-visible:tw-border-primary",
911
- "focus-visible:tw-ring-ring/50"
781
+ "tw:bg-primary",
782
+ "tw:text-primary-foreground",
783
+ "tw:[a]:hover:bg-primary/80",
784
+ "tw:hover:not-disabled:bg-primary/90",
785
+ "tw:hover:text-primary-foreground",
786
+ "tw:focus:text-primary-foreground",
787
+ "tw:focus-visible:border-primary",
788
+ "tw:focus-visible:ring-ring/50"
912
789
  ],
913
790
  secondary: [
914
- "tw-bg-primary/10",
915
- "tw-text-primary",
916
- "hover:not-disabled:tw-bg-primary/20",
917
- "focus-visible:tw-border-primary",
918
- "focus-visible:tw-ring-ring/50"
791
+ "tw:bg-primary/10",
792
+ "tw:text-primary",
793
+ "tw:hover:not-disabled:bg-primary/20",
794
+ "tw:focus-visible:border-primary",
795
+ "tw:focus-visible:ring-ring/50"
919
796
  ],
920
797
  // should be called "destructive" by Figma
921
798
  danger: [
922
- "tw-bg-destructive",
923
- "tw-text-destructive-foreground",
924
- "hover:tw-text-destructive-foreground",
925
- "focus:tw-text-destructive-foreground",
926
- "focus-visible:tw-border-destructive",
927
- "focus-visible:tw-ring-destructive/20"
799
+ "tw:bg-destructive",
800
+ "tw:text-destructive-foreground",
801
+ "tw:hover:text-destructive-foreground",
802
+ "tw:focus:text-destructive-foreground",
803
+ "tw:focus-visible:border-destructive",
804
+ "tw:focus-visible:ring-destructive/20"
928
805
  ],
929
806
  outline: [
930
- "!tw-border-input",
931
- "tw-bg-background",
807
+ "tw:!border-input",
808
+ "tw:bg-background",
932
809
  // Semantic base text color so the label/icon flips in dark mode
933
810
  // (matches `invisible`); previously unset → inherited a fixed dark color.
934
- "tw-text-foreground",
811
+ "tw:text-foreground",
935
812
  // Hover follows the brand primary (translucent tint), matching the
936
813
  // `secondary` variant — not the fixed `accent` blue.
937
- "hover:not-disabled:tw-bg-primary/10",
938
- "hover:not-disabled:tw-text-primary",
939
- "hover:active:tw-bg-background",
940
- "focus-visible:!tw-border-primary",
941
- "focus-visible:tw-ring-ring/50"
814
+ "tw:hover:not-disabled:bg-primary/10",
815
+ "tw:hover:not-disabled:text-primary",
816
+ "tw:hover:active:bg-background",
817
+ "tw:focus-visible:!border-primary",
818
+ "tw:focus-visible:ring-ring/50"
942
819
  ],
943
820
  // should be called "ghost" by Figma
944
821
  invisible: [
945
- "tw-bg-transparent",
946
- "tw-text-foreground",
947
- "hover:not-disabled:tw-bg-primary/10",
948
- "hover:not-disabled:tw-text-primary",
949
- "hover:not-disabled:tw-border-primary/10",
950
- "focus-visible:tw-ring-ring/50"
822
+ "tw:bg-transparent",
823
+ "tw:text-foreground",
824
+ "tw:hover:not-disabled:bg-primary/10",
825
+ "tw:hover:not-disabled:text-primary",
826
+ "tw:hover:not-disabled:border-primary/10",
827
+ "tw:focus-visible:ring-ring/50"
951
828
  ],
952
829
  // should be called "link" by Figma
953
830
  inline: [
954
- "tw-bg-transparent",
955
- "tw-text-primary",
956
- "hover:tw-underline",
957
- "hover:active:tw-bg-transparent",
958
- "focus-visible:tw-ring-ring/50"
831
+ "tw:bg-transparent",
832
+ "tw:text-primary",
833
+ "tw:hover:underline",
834
+ "tw:hover:active:bg-transparent",
835
+ "tw:focus-visible:ring-ring/50"
959
836
  ]
960
837
  },
961
838
  size: {
962
839
  // should be called "default" by Figma
963
- medium: ["tw-max-h-9", "tw-py-2", "tw-px-4", "tw-text-sm"],
840
+ medium: ["tw:max-h-9", "tw:py-2", "tw:px-4", "tw:text-sm"],
964
841
  // should be called "small" by Figma
965
- small: ["tw-max-h-8", "tw-py-2", "tw-px-3", "tw-text-xs"],
842
+ small: ["tw:max-h-8", "tw:py-2", "tw:px-3", "tw:text-xs"],
966
843
  // should be called "large" by Figma
967
- large: ["tw-max-h-10", "tw-py-2.5", "tw-px-6", "tw-text-sm"],
968
- "icon-lg": ["tw-size-10"],
969
- icon: ["tw-size-9"],
970
- "icon-sm": ["tw-size-8"],
844
+ large: ["tw:max-h-10", "tw:py-2.5", "tw:px-6", "tw:text-sm"],
845
+ "icon-lg": ["tw:size-10"],
846
+ icon: ["tw:size-9"],
847
+ "icon-sm": ["tw:size-8"],
971
848
  // unsupported in ARGO, remove when old design is gone
972
849
  "icon-xs": [],
973
850
  "icon-2xs": [],
@@ -1024,7 +901,7 @@ var init_Button = __esm({
1024
901
  onClick: handleClick,
1025
902
  className: cn(classNames),
1026
903
  children: [
1027
- isLoading && /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Loader2, { className: "tw-size-4 tw-shrink-0 tw-animate-spin" }),
904
+ isLoading && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "tw:size-4 tw:shrink-0 tw:animate-spin" }),
1028
905
  /* @__PURE__ */ jsxRuntime.jsx(reactSlot.Slottable, { children: isLoading && isIconOnly ? null : children })
1029
906
  ]
1030
907
  }
@@ -1037,18 +914,18 @@ var init_ButtonInline = __esm({
1037
914
  classVarianceAuthority.cva(
1038
915
  [
1039
916
  "tailwindcss-preflight",
1040
- "tw-inline-flex",
1041
- "tw-items-center",
1042
- "tw-gap-2",
1043
- "tw-underline-offset-2",
1044
- "disabled:tw-opacity-40",
1045
- "disabled:tw-cursor-not-allowed",
1046
- "disabled:tw-text-neutral-500",
1047
- "disabled:tw-no-underline",
1048
- "[&_svg]:disabled:tw-text-neutral-400",
917
+ "tw:inline-flex",
918
+ "tw:items-center",
919
+ "tw:gap-2",
920
+ "tw:underline-offset-2",
921
+ "tw:disabled:opacity-40",
922
+ "tw:disabled:cursor-not-allowed",
923
+ "tw:disabled:text-neutral-500",
924
+ "tw:disabled:no-underline",
925
+ "tw:disabled:[&_svg]:text-neutral-400",
1049
926
  // Default size for nested Lucide icons; callers can override on the icon.
1050
- "[&_svg.lucide:not([class*='tw-size-'])]:tw-size-4",
1051
- "[&_svg]:tw-shrink-0"
927
+ "tw:[&_svg.lucide:not([class*='tw:size-'])]:size-4",
928
+ "tw:[&_svg]:shrink-0"
1052
929
  ],
1053
930
  {
1054
931
  defaultVariants: {
@@ -1057,15 +934,15 @@ var init_ButtonInline = __esm({
1057
934
  },
1058
935
  variants: {
1059
936
  color: {
1060
- link: ["tw-text-primary", "hover:tw-text-primary/90", "[&_svg]:tw-text-primary"],
1061
- dark: ["tw-text-neutral-800 [&_svg]:tw-text-neutral-400"],
1062
- danger: ["tw-text-error-500 [&_svg]:tw-text-error-500"],
1063
- muted: ["tw-text-muted-foreground [&_svg]:tw-text-muted-foreground"],
937
+ link: ["tw:text-primary", "tw:hover:text-primary/90", "tw:[&_svg]:text-primary"],
938
+ dark: ["tw:text-neutral-800 tw:[&_svg]:text-neutral-400"],
939
+ danger: ["tw:text-error-500 tw:[&_svg]:text-error-500"],
940
+ muted: ["tw:text-muted-foreground tw:[&_svg]:text-muted-foreground"],
1064
941
  custom: []
1065
942
  },
1066
943
  variant: {
1067
- link: ["tw-underline", "hover:tw-no-underline"],
1068
- "link-reverse": ["tw-no-underline", "", "hover:tw-underline"],
944
+ link: ["tw:underline", "tw:hover:no-underline"],
945
+ "link-reverse": ["tw:no-underline", "", "tw:hover:underline"],
1069
946
  custom: []
1070
947
  }
1071
948
  }
@@ -1081,12 +958,12 @@ var init_Button2 = __esm({
1081
958
  init_ButtonInline();
1082
959
  }
1083
960
  });
1084
- var Clipboard;
961
+ var Clipboard2;
1085
962
  var init_Clipboard = __esm({
1086
963
  "src/components/Clipboard/Clipboard.tsx"() {
1087
964
  init_utils2();
1088
965
  init_Tooltip2();
1089
- Clipboard = ({
966
+ Clipboard2 = ({
1090
967
  ref,
1091
968
  text: textProp,
1092
969
  children,
@@ -1111,6 +988,7 @@ var init_Clipboard = __esm({
1111
988
  }
1112
989
  };
1113
990
  const handleOnClick = (event) => {
991
+ setIsTooltipOpen(true);
1114
992
  if (text && state === "ready") void copy(text);
1115
993
  onClick?.(event);
1116
994
  };
@@ -1125,6 +1003,7 @@ var init_Clipboard = __esm({
1125
1003
  return tooltip;
1126
1004
  })();
1127
1005
  const tooltipVariant = state === "ready" && !!text ? tooltipVariantProp : "action";
1006
+ const hasTooltipContent = tooltipContent !== null && tooltipContent !== void 0;
1128
1007
  return /* @__PURE__ */ jsxRuntime.jsxs(Tooltip.Root, { open: isTooltipOpen, onOpenChange: handleOnOpenChange, children: [
1129
1008
  /* @__PURE__ */ jsxRuntime.jsx(
1130
1009
  Tooltip.Trigger,
@@ -1133,12 +1012,12 @@ var init_Clipboard = __esm({
1133
1012
  asChild,
1134
1013
  keepOpenOnClick: true,
1135
1014
  onClick: handleOnClick,
1136
- className: cn("tw-cursor-pointer", className),
1015
+ className: cn("tw:cursor-pointer", className),
1137
1016
  ref,
1138
1017
  children: children ?? text
1139
1018
  }
1140
1019
  ),
1141
- /* @__PURE__ */ jsxRuntime.jsx(
1020
+ hasTooltipContent && /* @__PURE__ */ jsxRuntime.jsx(
1142
1021
  Tooltip.Content,
1143
1022
  {
1144
1023
  keepOpenOnPointerDownOutside: true,
@@ -1164,7 +1043,7 @@ var init_ClipboardButton = __esm({
1164
1043
  init_Button2();
1165
1044
  init_Clipboard2();
1166
1045
  init_icons();
1167
- DEFAULT_ICON = /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Copy, {});
1046
+ DEFAULT_ICON = /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Copy, {});
1168
1047
  DEFAULT_ARIA_LABEL = "Copy";
1169
1048
  ClipboardButton = ({
1170
1049
  // clipboard props
@@ -1181,7 +1060,7 @@ var init_ClipboardButton = __esm({
1181
1060
  const defaultAriaLabel = typeof tooltip === "string" && tooltip.trim() ? tooltip : DEFAULT_ARIA_LABEL;
1182
1061
  const ariaLabel = rest["aria-label"] ?? (children == null ? defaultAriaLabel : void 0);
1183
1062
  return /* @__PURE__ */ jsxRuntime.jsx(
1184
- Clipboard,
1063
+ Clipboard2,
1185
1064
  {
1186
1065
  asChild: true,
1187
1066
  tooltip,
@@ -1215,10 +1094,19 @@ var init_ZoomableSvg = __esm({
1215
1094
  MIN_SCALE = 0.5;
1216
1095
  MAX_SCALE = 3;
1217
1096
  ZOOM_STEP = 0.1;
1218
- ZoomableSvg = ({ html, copyText, className }) => {
1097
+ ZoomableSvg = ({
1098
+ html,
1099
+ copyText,
1100
+ className,
1101
+ allowForeignObject,
1102
+ renderActions
1103
+ }) => {
1219
1104
  const safeHtml = react.useMemo(
1220
- () => DOMPurify__default.default.sanitize(html, { USE_PROFILES: { svg: true, svgFilters: true } }),
1221
- [html]
1105
+ () => DOMPurify__default.default.sanitize(html, {
1106
+ USE_PROFILES: { svg: true, svgFilters: true },
1107
+ ...allowForeignObject ? { ADD_TAGS: ["foreignObject"] } : {}
1108
+ }),
1109
+ [html, allowForeignObject]
1222
1110
  );
1223
1111
  const containerRef = react.useRef(null);
1224
1112
  const [scale, setScale] = react.useState(1);
@@ -1247,7 +1135,7 @@ var init_ZoomableSvg = __esm({
1247
1135
  };
1248
1136
  el.addEventListener("wheel", onWheel, { passive: false });
1249
1137
  return () => el.removeEventListener("wheel", onWheel);
1250
- }, []);
1138
+ }, [isFullscreen]);
1251
1139
  const didDragRef = react.useRef(false);
1252
1140
  const handleMouseDown = react.useCallback(
1253
1141
  (e) => {
@@ -1291,7 +1179,7 @@ var init_ZoomableSvg = __esm({
1291
1179
  "div",
1292
1180
  {
1293
1181
  role: "presentation",
1294
- className: cn("tw-group/zoom tw-relative", isFullscreen && "tw-h-full"),
1182
+ className: cn("tw:group/zoom tw:relative", isFullscreen && "tw:h-full"),
1295
1183
  onClick: handleClick,
1296
1184
  children: [
1297
1185
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -1300,8 +1188,8 @@ var init_ZoomableSvg = __esm({
1300
1188
  role: "presentation",
1301
1189
  ref: containerRef,
1302
1190
  className: cn(
1303
- "tw-overflow-hidden tw-cursor-grab active:tw-cursor-grabbing tw-p-3",
1304
- isFullscreen && "tw-h-full"
1191
+ "tw:overflow-hidden tw:cursor-grab tw:active:cursor-grabbing tw:p-3",
1192
+ isFullscreen && "tw:h-full"
1305
1193
  ),
1306
1194
  onMouseDown: handleMouseDown,
1307
1195
  onMouseMove: handleMouseMove,
@@ -1311,8 +1199,8 @@ var init_ZoomableSvg = __esm({
1311
1199
  "div",
1312
1200
  {
1313
1201
  className: cn(
1314
- "tw-flex tw-justify-center tw-origin-center",
1315
- isFullscreen && "tw-h-full [&>svg]:tw-h-full"
1202
+ "tw:flex tw:justify-center tw:origin-center",
1203
+ isFullscreen && "tw:h-full tw:[&>svg]:h-full"
1316
1204
  ),
1317
1205
  style: { transform: `translate(${translate.x}px, ${translate.y}px) scale(${scale})` },
1318
1206
  dangerouslySetInnerHTML: { __html: safeHtml }
@@ -1324,11 +1212,12 @@ var init_ZoomableSvg = __esm({
1324
1212
  "div",
1325
1213
  {
1326
1214
  role: "presentation",
1327
- className: "tw-absolute tw-right-1 tw-top-1 tw-flex tw-gap-1 tw-opacity-0 tw-transition-opacity group-hover/zoom:tw-opacity-100",
1215
+ className: "tw:absolute tw:right-1 tw:top-1 tw:flex tw:gap-1 tw:opacity-0 tw:transition-opacity tw:focus-within:opacity-100 tw:group-hover/zoom:opacity-100",
1328
1216
  onClick: stopPropagation,
1329
1217
  children: [
1330
1218
  isZoomed && /* @__PURE__ */ jsxRuntime.jsx(Tooltip, { tooltip: "Reset zoom", placement: "top", triggerAsChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(Button, { size: "small", variant: "outline", onClick: handleReset, children: "Reset" }) }),
1331
1219
  copyText && /* @__PURE__ */ jsxRuntime.jsx(ClipboardButton, { text: copyText, tooltip: "Copy code", size: "icon-sm", variant: "outline" }),
1220
+ renderActions?.(safeHtml),
1332
1221
  /* @__PURE__ */ jsxRuntime.jsx(
1333
1222
  Tooltip,
1334
1223
  {
@@ -1342,7 +1231,7 @@ var init_ZoomableSvg = __esm({
1342
1231
  variant: "outline",
1343
1232
  "aria-label": isFullscreen ? "Exit fullscreen" : "Fullscreen",
1344
1233
  onClick: () => setIsFullscreen((f) => !f),
1345
- children: isFullscreen ? /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Minimize2, { className: "tw-size-4" }) : /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Maximize2, { className: "tw-size-4" })
1234
+ children: isFullscreen ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Minimize2, { className: "tw:size-4" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Maximize2, { className: "tw:size-4" })
1346
1235
  }
1347
1236
  )
1348
1237
  }
@@ -1354,21 +1243,25 @@ var init_ZoomableSvg = __esm({
1354
1243
  }
1355
1244
  );
1356
1245
  if (isFullscreen) {
1357
- return /* @__PURE__ */ jsxRuntime.jsx(
1358
- "div",
1359
- {
1360
- role: "presentation",
1361
- className: "tw-fixed tw-inset-0 tw-z-[1060] tw-bg-muted tw-p-4",
1362
- onClick: stopPropagation,
1363
- children: diagramContent
1364
- }
1246
+ return reactDom.createPortal(
1247
+ /* @__PURE__ */ jsxRuntime.jsx(
1248
+ "div",
1249
+ {
1250
+ role: "presentation",
1251
+ "data-testid": "zoomable-svg-fullscreen",
1252
+ className: "tw:fixed tw:inset-0 tw:z-[1060] tw:bg-muted tw:p-4 tailwindcss-preflight",
1253
+ onClick: stopPropagation,
1254
+ children: diagramContent
1255
+ }
1256
+ ),
1257
+ document.body
1365
1258
  );
1366
1259
  }
1367
1260
  return /* @__PURE__ */ jsxRuntime.jsx(
1368
1261
  "div",
1369
1262
  {
1370
1263
  className: cn(
1371
- "tw-overflow-hidden tw-rounded-md tw-border tw-border-border tw-bg-muted",
1264
+ "tw:overflow-hidden tw:rounded-md tw:border tw:border-border tw:bg-muted",
1372
1265
  className
1373
1266
  ),
1374
1267
  children: diagramContent
@@ -1384,27 +1277,72 @@ var init_ZoomableSvg2 = __esm({
1384
1277
  init_ZoomableSvg();
1385
1278
  }
1386
1279
  });
1280
+ var DiagramSkeleton;
1281
+ var init_DiagramSkeleton = __esm({
1282
+ "src/blocks/MermaidDiagram/DiagramSkeleton.tsx"() {
1283
+ init_Skeleton();
1284
+ DiagramSkeleton = () => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "tw:my-3 tw:overflow-hidden tw:rounded-md tw:border tw:border-neutral-150 tw:bg-neutral-50 tw:p-6", children: /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "tw:h-40" }) });
1285
+ }
1286
+ });
1287
+
1288
+ // src/blocks/MermaidDiagram/svgTransforms.ts
1289
+ var HTML_TAG, FOREIGN_OBJECT, ROOT_SVG_TAG, flattenForeignObjectLabels, STYLE_ATTR, makeResponsive;
1290
+ var init_svgTransforms = __esm({
1291
+ "src/blocks/MermaidDiagram/svgTransforms.ts"() {
1292
+ HTML_TAG = /<[^>]+>/g;
1293
+ FOREIGN_OBJECT = /(<foreignObject\b[^>]*>)([\s\S]*?)(<\/foreignObject>)/g;
1294
+ ROOT_SVG_TAG = /^(\s*<svg\b)([^>]*)(>)/i;
1295
+ flattenForeignObjectLabels = (svg) => svg.replace(FOREIGN_OBJECT, (_match, open, inner, close) => {
1296
+ const text = inner.replace(HTML_TAG, " ").replace(/\s+/g, " ").trim();
1297
+ return `${open}${text}${close}`;
1298
+ });
1299
+ STYLE_ATTR = /\s+style="([^"]*)"/i;
1300
+ makeResponsive = (svgString) => {
1301
+ const viewBoxMatch = svgString.match(/viewBox="[^"]*\s([\d.]+)\s[\d.]+"/);
1302
+ const vbWidth = viewBoxMatch ? Math.round(Number(viewBoxMatch[1])) : void 0;
1303
+ return svgString.replace(ROOT_SVG_TAG, (_match, open, attrs, close) => {
1304
+ const existingStyle = attrs.match(STYLE_ATTR)?.[1] ?? "";
1305
+ const styleDecls = existingStyle.replace(/max-width:\s*[^;"]*;?\s*/gi, "").replace(/\s+/g, " ").trim().replace(/;$/, "");
1306
+ let nextAttrs = attrs.replace(/\s+width="[^"]*"/i, "").replace(/\s+height="[^"]*"/i, "").replace(STYLE_ATTR, "");
1307
+ nextAttrs += ' width="100%"';
1308
+ const styleParts = [styleDecls, vbWidth ? `max-width: ${vbWidth}px` : ""].filter(Boolean).join("; ");
1309
+ if (styleParts) nextAttrs += ` style="${styleParts}"`;
1310
+ return `${open}${nextAttrs}${close}`;
1311
+ });
1312
+ };
1313
+ }
1314
+ });
1387
1315
 
1388
1316
  // src/blocks/MermaidDiagram/MermaidDiagram.tsx
1389
1317
  var MermaidDiagram_exports = {};
1390
1318
  __export(MermaidDiagram_exports, {
1391
1319
  MermaidDiagram: () => MermaidDiagram
1392
1320
  });
1393
- var PRIMARY_FALLBACK_CHANNELS, resolvePrimary, mermaidPromise, getMermaid, stripFontImports, tryFastRender, makeResponsive, RENDER_DEBOUNCE_MS, svgCache, resolveSyncSvg, MermaidDiagram;
1321
+ var PRIMARY_FALLBACK_CHANNELS, resolvePrimary, mermaidPromise, registerLucideIconPack, getMermaid, stripFontImports, hasIconSyntax, tryFastRender, RENDER_DEBOUNCE_MS, svgCache, resolveSyncSvg, MermaidDiagram;
1394
1322
  var init_MermaidDiagram = __esm({
1395
1323
  "src/blocks/MermaidDiagram/MermaidDiagram.tsx"() {
1396
- init_Skeleton();
1397
1324
  init_ZoomableSvg2();
1398
1325
  init_utils2();
1326
+ init_DiagramSkeleton();
1327
+ init_svgTransforms();
1399
1328
  PRIMARY_FALLBACK_CHANNELS = "31 143 255";
1400
1329
  resolvePrimary = () => {
1401
- const channels = typeof document === "undefined" ? PRIMARY_FALLBACK_CHANNELS : getComputedStyle(document.documentElement).getPropertyValue("--color-primary").trim() || PRIMARY_FALLBACK_CHANNELS;
1330
+ const channels = typeof document === "undefined" ? PRIMARY_FALLBACK_CHANNELS : getComputedStyle(document.documentElement).getPropertyValue("--primary").trim() || PRIMARY_FALLBACK_CHANNELS;
1402
1331
  return `rgb(${channels})`;
1403
1332
  };
1404
1333
  mermaidPromise = null;
1334
+ registerLucideIconPack = (m) => {
1335
+ m.registerIconPacks([
1336
+ {
1337
+ name: "lucide",
1338
+ loader: () => import('@iconify-json/lucide/icons.json').then((mod) => mod.default)
1339
+ }
1340
+ ]);
1341
+ };
1405
1342
  getMermaid = () => {
1406
1343
  if (!mermaidPromise) {
1407
1344
  mermaidPromise = import('mermaid').then((m) => {
1345
+ registerLucideIconPack(m.default);
1408
1346
  m.default.initialize({
1409
1347
  startOnLoad: false,
1410
1348
  securityLevel: "strict",
@@ -1468,7 +1406,9 @@ var init_MermaidDiagram = __esm({
1468
1406
  return mermaidPromise;
1469
1407
  };
1470
1408
  stripFontImports = (svg) => svg.replace(/@import\s+url\([^)]*fonts\.googleapis\.com[^)]*\);?\s*/g, "");
1409
+ hasIconSyntax = (code) => /@\{[^}]*\bicon\s*:/.test(code) || /\b(?:icon|service|group)\b[^\n(]*\(\s*[\w-]+:/.test(code) || /\bfa[bslr]?:fa-/.test(code);
1471
1410
  tryFastRender = (code) => {
1411
+ if (hasIconSyntax(code)) return null;
1472
1412
  try {
1473
1413
  return stripFontImports(
1474
1414
  beautifulMermaid.renderMermaidSVG(code, {
@@ -1478,27 +1418,11 @@ var init_MermaidDiagram = __esm({
1478
1418
  font: "Inter, system-ui, sans-serif"
1479
1419
  })
1480
1420
  );
1481
- } catch {
1421
+ } catch (err) {
1422
+ console.debug("[MermaidDiagram] fast render unavailable, using async fallback:", err);
1482
1423
  return null;
1483
1424
  }
1484
1425
  };
1485
- makeResponsive = (svgString) => {
1486
- const viewBoxMatch = svgString.match(/viewBox="[^"]*\s([\d.]+)\s[\d.]+"/);
1487
- const vbWidth = viewBoxMatch ? Math.round(Number(viewBoxMatch[1])) : void 0;
1488
- let result = svgString.replace(/(<svg[^>]*?)\s+width="[^"]*"/i, '$1 width="100%"').replace(/(<svg[^>]*?)\s+height="[^"]*"/i, "$1");
1489
- if (!vbWidth) return result;
1490
- const hasStyle = /(<svg[^>]*?)\s+style="([^"]*)"/i.test(result);
1491
- if (hasStyle) {
1492
- result = result.replace(/(<svg[^>]*?)\s+style="([^"]*)"/i, (_m, pre, styles) => {
1493
- const cleaned = styles.replace(/max-width:\s*[^;"]*;?\s*/g, "").trim();
1494
- const combined = [cleaned, `max-width: ${vbWidth}px`].filter(Boolean).join("; ");
1495
- return `${pre} style="${combined}"`;
1496
- });
1497
- } else {
1498
- result = result.replace(/<svg/, `<svg style="max-width: ${vbWidth}px"`);
1499
- }
1500
- return result;
1501
- };
1502
1426
  RENDER_DEBOUNCE_MS = 300;
1503
1427
  svgCache = /* @__PURE__ */ new Map();
1504
1428
  resolveSyncSvg = (code) => {
@@ -1508,7 +1432,7 @@ var init_MermaidDiagram = __esm({
1508
1432
  if (fast) svgCache.set(code, fast);
1509
1433
  return fast;
1510
1434
  };
1511
- MermaidDiagram = ({ code }) => {
1435
+ MermaidDiagram = ({ code, renderActions }) => {
1512
1436
  const id = react.useId();
1513
1437
  const [svg, setSvg] = react.useState(() => resolveSyncSvg(code));
1514
1438
  const [renderFailed, setRenderFailed] = react.useState(false);
@@ -1539,8 +1463,9 @@ var init_MermaidDiagram = __esm({
1539
1463
  try {
1540
1464
  const result = await mermaidModule.default.render(rendererId, code, container);
1541
1465
  if (renderIdRef.current === currentRenderId && result) {
1542
- svgCache.set(code, result.svg);
1543
- setSvg(result.svg);
1466
+ const svgOutput = flattenForeignObjectLabels(result.svg);
1467
+ svgCache.set(code, svgOutput);
1468
+ setSvg(svgOutput);
1544
1469
  setRenderFailed(false);
1545
1470
  }
1546
1471
  } finally {
@@ -1569,11 +1494,11 @@ var init_MermaidDiagram = __esm({
1569
1494
  "pre",
1570
1495
  {
1571
1496
  className: cn(
1572
- "tw-my-3 tw-overflow-auto tw-whitespace-pre-wrap tw-break-all",
1573
- "tw-py-3 tw-px-4",
1574
- "tw-bg-neutral-50",
1575
- "tw-rounded-md tw-text-neutral-400",
1576
- "tw-text-sm tw-font-mono"
1497
+ "tw:my-3 tw:overflow-auto tw:whitespace-pre-wrap tw:break-all",
1498
+ "tw:py-3 tw:px-4",
1499
+ "tw:bg-neutral-50",
1500
+ "tw:rounded-md tw:text-neutral-400",
1501
+ "tw:text-sm tw:font-mono"
1577
1502
  ),
1578
1503
  children: /* @__PURE__ */ jsxRuntime.jsx("code", { children: code })
1579
1504
  }
@@ -1587,17 +1512,19 @@ var init_MermaidDiagram = __esm({
1587
1512
  copyText: `\`\`\`mermaid
1588
1513
  ${code}
1589
1514
  \`\`\``,
1590
- className: "tw-my-3"
1515
+ className: "tw:my-3",
1516
+ allowForeignObject: true,
1517
+ renderActions
1591
1518
  },
1592
1519
  code
1593
1520
  );
1594
1521
  }
1595
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "tw-my-3 tw-overflow-hidden tw-rounded-md tw-border tw-border-neutral-150 tw-bg-neutral-50 tw-p-6", children: /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "tw-h-40" }) });
1522
+ return /* @__PURE__ */ jsxRuntime.jsx(DiagramSkeleton, {});
1596
1523
  };
1597
1524
  }
1598
1525
  });
1599
1526
 
1600
- // src/components/MarkdownEditor/MarkdownEditor.tsx
1527
+ // src/blocks/MarkdownEditor/MarkdownEditor.tsx
1601
1528
  init_utils2();
1602
1529
  var ImageRendererContext = react.createContext(null);
1603
1530
  var ImageRendererProvider = ImageRendererContext;
@@ -1606,7 +1533,7 @@ var isPlaceholder = (src) => src.startsWith("upload-placeholder-");
1606
1533
  var ImageNodeComponent = ({ src, alt }) => {
1607
1534
  const renderer = useImageRenderer();
1608
1535
  if (isPlaceholder(src)) {
1609
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tw-inline-flex tw-items-center tw-gap-1 tw-rounded tw-bg-neutral-100 tw-px-2 tw-py-1 tw-text-xs tw-text-neutral-400", children: "Uploading image\u2026" });
1536
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tw:inline-flex tw:items-center tw:gap-1 tw:rounded tw:bg-neutral-100 tw:px-2 tw:py-1 tw:text-xs tw:text-neutral-400", children: "Uploading image\u2026" });
1610
1537
  }
1611
1538
  if (renderer) return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: renderer({ src, alt }) });
1612
1539
  return /* @__PURE__ */ jsxRuntime.jsx("img", { src, alt });
@@ -1693,7 +1620,7 @@ var $isImageNode = (node) => {
1693
1620
  return node instanceof ImageNode;
1694
1621
  };
1695
1622
 
1696
- // src/components/MarkdownEditor/nodes/MermaidNodeComponent.tsx
1623
+ // src/blocks/MarkdownEditor/nodes/MermaidNodeComponent.tsx
1697
1624
  init_Skeleton();
1698
1625
  var MermaidDiagram2 = react.lazy(
1699
1626
  () => Promise.resolve().then(() => (init_MermaidDiagram(), MermaidDiagram_exports)).then(
@@ -1710,7 +1637,7 @@ var MermaidNodeComponent = ({ code }) => {
1710
1637
  return /* @__PURE__ */ jsxRuntime.jsx(
1711
1638
  react.Suspense,
1712
1639
  {
1713
- fallback: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "tw-my-3 tw-overflow-hidden tw-rounded-card tw-border tw-border-neutral-150 tw-bg-neutral-50 tw-p-6", children: /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "tw-h-40" }) }),
1640
+ fallback: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "tw:my-3 tw:overflow-hidden tw:rounded-card tw:border tw:border-neutral-150 tw:bg-neutral-50 tw:p-6", children: /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "tw:h-40" }) }),
1714
1641
  children: /* @__PURE__ */ jsxRuntime.jsx(MermaidDiagram2, { code })
1715
1642
  }
1716
1643
  );
@@ -1776,11 +1703,7 @@ init_context();
1776
1703
 
1777
1704
  // src/components/Toast/ToastAction.tsx
1778
1705
  init_utils2();
1779
- var ToastAction = ({
1780
- ref,
1781
- className,
1782
- ...rest
1783
- }) => /* @__PURE__ */ jsxRuntime.jsx(
1706
+ var ToastAction = ({ ref, className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1784
1707
  "button",
1785
1708
  {
1786
1709
  ...rest,
@@ -1789,21 +1712,21 @@ var ToastAction = ({
1789
1712
  type: "button",
1790
1713
  className: cn(
1791
1714
  // layout
1792
- "tw-col-start-3",
1793
- "tw-row-start-1",
1794
- "tw-flex",
1795
- "tw-items-center",
1796
- "tw-justify-center",
1715
+ "tw:col-start-3",
1716
+ "tw:row-start-1",
1717
+ "tw:flex",
1718
+ "tw:items-center",
1719
+ "tw:justify-center",
1797
1720
  // font
1798
- "tw-text-xs",
1799
- "tw-font-medium",
1800
- "tw-text-primary",
1721
+ "tw:text-xs",
1722
+ "tw:font-medium",
1723
+ "tw:text-primary",
1801
1724
  // sizing
1802
- "tw-px-2",
1803
- "tw-h-6",
1725
+ "tw:px-2",
1726
+ "tw:h-6",
1804
1727
  // styles
1805
- "tw-bg-primary-foreground",
1806
- "tw-rounded",
1728
+ "tw:bg-primary-foreground",
1729
+ "tw:rounded",
1807
1730
  className
1808
1731
  )
1809
1732
  }
@@ -1811,22 +1734,17 @@ var ToastAction = ({
1811
1734
 
1812
1735
  // src/components/Toast/ToastDescription.tsx
1813
1736
  init_utils2();
1814
- var ToastDescription = ({
1815
- ref,
1816
- className,
1817
- children,
1818
- ...rest
1819
- }) => /* @__PURE__ */ jsxRuntime.jsx(
1737
+ var ToastDescription = ({ ref, className, children, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1820
1738
  "div",
1821
1739
  {
1822
1740
  ref,
1823
1741
  "data-slot": "toast-description",
1824
1742
  className: cn(
1825
- "tw-col-start-2",
1826
- "tw-font-normal",
1827
- "tw-break-words",
1828
- "tw-text-white",
1829
- "group-data-[variant=default]/toast:tw-text-muted-foreground",
1743
+ "tw:col-start-2",
1744
+ "tw:font-normal",
1745
+ "tw:break-words",
1746
+ "tw:text-white",
1747
+ "tw:group-data-[variant=default]/toast:text-muted-foreground",
1830
1748
  className
1831
1749
  ),
1832
1750
  ...rest,
@@ -1837,66 +1755,56 @@ var ToastDescription = ({
1837
1755
  // src/components/Toast/ToastDismiss.tsx
1838
1756
  init_icons();
1839
1757
  init_utils2();
1840
- var ToastDismiss = ({
1841
- ref,
1842
- className,
1843
- ...rest
1844
- }) => /* @__PURE__ */ jsxRuntime.jsxs(
1758
+ var ToastDismiss = ({ ref, className, ...rest }) => /* @__PURE__ */ jsxRuntime.jsxs(
1845
1759
  "button",
1846
1760
  {
1847
1761
  ref,
1848
1762
  "data-slot": "toast-dismiss",
1849
1763
  className: cn(
1850
- "tw-flex",
1851
- "tw-justify-center",
1852
- "tw-col-start-4",
1853
- "tw-row-start-1",
1764
+ "tw:flex",
1765
+ "tw:justify-center",
1766
+ "tw:col-start-4",
1767
+ "tw:row-start-1",
1854
1768
  "tailwindcss-preflight",
1855
- "[&_svg]:tw-aspect-square",
1856
- '[&_svg:not([class*="tw-size-"])]:tw-size-4',
1857
- "[&_svg]:tw-m-1",
1858
- "tw-text-white",
1859
- "group-data-[variant=default]/toast:[&_svg]:tw-text-popover-foreground",
1860
- "group-data-[variant=default]/toast:group-data-[argo=true]/toast:[&_svg]:tw-text-foreground",
1769
+ "tw:[&_svg]:aspect-square",
1770
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-4',
1771
+ "tw:[&_svg]:m-1",
1772
+ "tw:text-white",
1773
+ "tw:group-data-[variant=default]/toast:[&_svg]:text-popover-foreground",
1774
+ "tw:group-data-[variant=default]/toast:group-data-[argo=true]/toast:[&_svg]:text-foreground",
1861
1775
  className
1862
1776
  ),
1863
1777
  type: "button",
1864
1778
  ...rest,
1865
1779
  children: [
1866
- /* @__PURE__ */ jsxRuntime.jsx(icons_exports.X, {}),
1867
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tw-sr-only", children: "Dismiss" })
1780
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, {}),
1781
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tw:sr-only", children: "Dismiss" })
1868
1782
  ]
1869
1783
  }
1870
1784
  );
1871
1785
 
1872
1786
  // src/components/Toast/ToastDuration.tsx
1873
1787
  init_utils2();
1874
- var ToastDuration = ({
1875
- ref,
1876
- duration,
1877
- className,
1878
- style,
1879
- ...rest
1880
- }) => /* @__PURE__ */ jsxRuntime.jsx(
1788
+ var ToastDuration = ({ ref, duration, className, style, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1881
1789
  "span",
1882
1790
  {
1883
1791
  ...rest,
1884
1792
  ref,
1885
1793
  className: cn(
1886
- "tw-bg-white/30",
1887
- "group-data-[variant=default]/toast:tw-bg-popover-foreground/20",
1888
- "group-data-[variant=default]/toast:group-data-[argo=true]/toast:tw-bg-foreground/20",
1889
- "tw-rounded-bl-lg",
1890
- "tw-mx-px",
1794
+ "tw:bg-white/30",
1795
+ "tw:group-data-[variant=default]/toast:bg-popover-foreground/20",
1796
+ "tw:group-data-[variant=default]/toast:group-data-[argo=true]/toast:bg-foreground/20",
1797
+ "tw:rounded-bl-lg",
1798
+ "tw:mx-px",
1891
1799
  // positioning
1892
- "tw-absolute",
1893
- "tw-bottom-0",
1894
- "tw-left-0",
1800
+ "tw:absolute",
1801
+ "tw:bottom-0",
1802
+ "tw:left-0",
1895
1803
  // sizing
1896
- "tw-h-1",
1804
+ "tw:h-1",
1897
1805
  // animation
1898
- "tw-animate-toast-progress",
1899
- "group-hover/toast:[animation-play-state:paused]",
1806
+ "tw:animate-toast-progress",
1807
+ "tw:group-hover/toast:[animation-play-state:paused]",
1900
1808
  className
1901
1809
  ),
1902
1810
  style: {
@@ -1908,27 +1816,22 @@ var ToastDuration = ({
1908
1816
 
1909
1817
  // src/components/Toast/ToastTitle.tsx
1910
1818
  init_utils2();
1911
- var ToastTitle = ({
1912
- ref,
1913
- className,
1914
- children,
1915
- ...rest
1916
- }) => /* @__PURE__ */ jsxRuntime.jsx(
1819
+ var ToastTitle = ({ ref, className, children, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
1917
1820
  "div",
1918
1821
  {
1919
1822
  ref,
1920
1823
  "data-slot": "toast-title",
1921
1824
  className: cn(
1922
- "tw-col-start-2",
1923
- "tw-text-sm",
1924
- "tw-leading-6",
1925
- "tw-min-h-6",
1926
- "tw-self-center",
1927
- "tw-text-white",
1928
- "group-data-[variant=default]/toast:tw-text-popover-foreground",
1929
- "group-data-[variant=default]/toast:group-data-[argo=true]/toast:tw-text-foreground",
1930
- "tw-break-words",
1931
- "tw-font-medium",
1825
+ "tw:col-start-2",
1826
+ "tw:text-sm",
1827
+ "tw:leading-6",
1828
+ "tw:min-h-6",
1829
+ "tw:self-center",
1830
+ "tw:text-white",
1831
+ "tw:group-data-[variant=default]/toast:text-popover-foreground",
1832
+ "tw:group-data-[variant=default]/toast:group-data-[argo=true]/toast:text-foreground",
1833
+ "tw:break-words",
1834
+ "tw:font-medium",
1932
1835
  className
1933
1836
  ),
1934
1837
  ...rest,
@@ -1938,24 +1841,24 @@ var ToastTitle = ({
1938
1841
  var variants2 = classVarianceAuthority.cva(
1939
1842
  [
1940
1843
  "tailwindcss-preflight",
1941
- "tw-group/toast",
1942
- "tw-relative",
1844
+ "tw:group/toast",
1845
+ "tw:relative",
1943
1846
  // layout
1944
- "tw-grid",
1945
- "tw-grid-cols-[0_1fr_auto_auto]",
1946
- "tw-items-start",
1947
- "has-[[data-slot=toast-description]]:tw-grid-rows-[auto_auto]",
1948
- "has-[[data-slot=toast-icon]]:tw-grid-cols-[auto_1fr_auto_auto]",
1949
- "[&_[data-slot=toast-icon]]:tw-mr-2",
1950
- "[&_[data-slot=toast-title]]:tw-mr-2.5",
1951
- "[&_[data-slot=toast-description]]:tw-mr-2.5",
1952
- "[&_[data-slot=toast-action]]:tw-mr-2",
1953
- "[&_[data-slot=toast-description]]:tw-col-end-3",
1954
- "tw-gap-y-0",
1847
+ "tw:grid",
1848
+ "tw:grid-cols-[0_1fr_auto_auto]",
1849
+ "tw:items-start",
1850
+ "tw:has-[[data-slot=toast-description]]:grid-rows-[auto_auto]",
1851
+ "tw:has-[[data-slot=toast-icon]]:grid-cols-[auto_1fr_auto_auto]",
1852
+ "tw:[&_[data-slot=toast-icon]]:mr-2",
1853
+ "tw:[&_[data-slot=toast-title]]:mr-2.5",
1854
+ "tw:[&_[data-slot=toast-description]]:mr-2.5",
1855
+ "tw:[&_[data-slot=toast-action]]:mr-2",
1856
+ "tw:[&_[data-slot=toast-description]]:col-end-3",
1857
+ "tw:gap-y-0",
1955
1858
  // styles
1956
- "tw-p-4",
1957
- "tw-rounded-lg",
1958
- "tw-shadow-md"
1859
+ "tw:p-4",
1860
+ "tw:rounded-lg",
1861
+ "tw:shadow-md"
1959
1862
  ],
1960
1863
  {
1961
1864
  defaultVariants: {
@@ -1963,20 +1866,20 @@ var variants2 = classVarianceAuthority.cva(
1963
1866
  },
1964
1867
  variants: {
1965
1868
  variant: {
1966
- default: "tw-border tw-border-border tw-bg-popover",
1967
- error: "tw-bg-error-550",
1968
- info: "tw-bg-blue-600",
1969
- success: "tw-bg-green-700",
1970
- warning: "tw-bg-warning-550"
1869
+ default: "tw:border tw:border-border tw:bg-popover",
1870
+ error: "tw:bg-error-550",
1871
+ info: "tw:bg-blue-600",
1872
+ success: "tw:bg-green-700",
1873
+ warning: "tw:bg-warning-550"
1971
1874
  }
1972
1875
  }
1973
1876
  }
1974
1877
  );
1975
1878
  var DEFAULT_VARIANT_ICON = {
1976
- error: /* @__PURE__ */ jsxRuntime.jsx(icons_exports.AlertTriangle, {}),
1977
- info: /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Info, {}),
1978
- success: /* @__PURE__ */ jsxRuntime.jsx(icons_exports.CircleCheck, {}),
1979
- warning: /* @__PURE__ */ jsxRuntime.jsx(icons_exports.AlertCircle, {})
1879
+ error: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertTriangle, {}),
1880
+ info: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Info, {}),
1881
+ success: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CircleCheck, {}),
1882
+ warning: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.AlertCircle, {})
1980
1883
  };
1981
1884
  var ToastRoot = ({
1982
1885
  id,
@@ -1990,7 +1893,7 @@ var ToastRoot = ({
1990
1893
  }) => {
1991
1894
  const renderArgo = useArgoDesign();
1992
1895
  const icon = (() => {
1993
- if (loading) return /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Loader2, { className: "tw-animate-spin" });
1896
+ if (loading) return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "tw:animate-spin" });
1994
1897
  if (iconProp) return iconProp;
1995
1898
  if (variant === "default" || variant === null) return null;
1996
1899
  return DEFAULT_VARIANT_ICON[variant];
@@ -2006,7 +1909,7 @@ var ToastRoot = ({
2006
1909
  "data-argo": renderArgo,
2007
1910
  className: cn(
2008
1911
  variants2({ variant }),
2009
- "data-[variant=default]:data-[argo=true]:tw-bg-background"
1912
+ "tw:data-[variant=default]:data-[argo=true]:bg-background"
2010
1913
  ),
2011
1914
  children: [
2012
1915
  icon && /* @__PURE__ */ jsxRuntime.jsx(
@@ -2014,17 +1917,17 @@ var ToastRoot = ({
2014
1917
  {
2015
1918
  "data-slot": "toast-icon",
2016
1919
  className: cn(
2017
- "tw-inline-flex",
2018
- "tw-items-center",
2019
- "tw-justify-center",
2020
- "tw-self-center",
2021
- "tw-aspect-square",
2022
- "tw-size-5",
2023
- "tw-shrink-0",
2024
- '[&_svg:not([class*="tw-size-"])]:tw-size-5',
2025
- "tw-text-white",
2026
- "group-data-[variant=default]/toast:tw-text-popover-foreground",
2027
- "group-data-[variant=default]/toast:group-data-[argo=true]/toast:tw-text-foreground"
1920
+ "tw:inline-flex",
1921
+ "tw:items-center",
1922
+ "tw:justify-center",
1923
+ "tw:self-center",
1924
+ "tw:aspect-square",
1925
+ "tw:size-5",
1926
+ "tw:shrink-0",
1927
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-5',
1928
+ "tw:text-white",
1929
+ "tw:group-data-[variant=default]/toast:text-popover-foreground",
1930
+ "tw:group-data-[variant=default]/toast:group-data-[argo=true]/toast:text-foreground"
2028
1931
  ),
2029
1932
  children: icon
2030
1933
  }
@@ -2070,7 +1973,7 @@ var toast = ({
2070
1973
  dismissible,
2071
1974
  duration,
2072
1975
  // override default focus-visible styles to match our design
2073
- className: cn("tw-rounded-lg", "focus-visible:!tw-ring-4", "focus-visible:!tw-ring-ring/50")
1976
+ className: cn("tw:rounded-lg", "tw:focus-visible:!ring-4", "tw:focus-visible:!ring-ring/50")
2074
1977
  });
2075
1978
  };
2076
1979
  toast.success = (title, options) => toast({
@@ -2098,7 +2001,7 @@ toast.info = (title, options) => toast({
2098
2001
  toast.dismiss = (toastId) => sonner.toast.dismiss(toastId);
2099
2002
  toast.dismissAll = () => sonner.toast.dismiss();
2100
2003
 
2101
- // src/components/MarkdownEditor/plugins/ImagePastePlugin.tsx
2004
+ // src/blocks/MarkdownEditor/plugins/ImagePastePlugin.tsx
2102
2005
  var ACCEPTED_IMAGE_TYPES = [
2103
2006
  "image/png",
2104
2007
  "image/jpeg",
@@ -2376,7 +2279,7 @@ var postprocessMarkdown = (markdown) => {
2376
2279
  };
2377
2280
  var unescapeMarkdownText = (markdown) => markdown.replace(/\\([*_`~\\])/g, "$1");
2378
2281
 
2379
- // src/components/MarkdownEditor/plugins/MarkdownSyncPlugin.tsx
2282
+ // src/blocks/MarkdownEditor/plugins/MarkdownSyncPlugin.tsx
2380
2283
  var IMPORT_TAG = "markdown-import";
2381
2284
  var MarkdownSyncPlugin = ({
2382
2285
  value,
@@ -2422,13 +2325,9 @@ var MarkdownSyncPlugin = ({
2422
2325
  return null;
2423
2326
  };
2424
2327
 
2425
- // src/components/MarkdownEditor/plugins/ToolbarPlugin.tsx
2328
+ // src/blocks/MarkdownEditor/plugins/ToolbarPlugin.tsx
2426
2329
  init_icons();
2427
2330
 
2428
- // src/components/MarkdownEditor/plugins/toolbar/AlignmentDropdown.tsx
2429
- init_icons();
2430
- init_utils2();
2431
-
2432
2331
  // src/components/DropdownMenu/DropdownMenu.tsx
2433
2332
  init_context();
2434
2333
 
@@ -2441,59 +2340,59 @@ init_icons();
2441
2340
  var variants3 = classVarianceAuthority.cva(
2442
2341
  [
2443
2342
  "tailwindcss-preflight",
2444
- "tw-pointer-events-none",
2343
+ "tw:pointer-events-none",
2445
2344
  // sizing
2446
- "tw-size-4",
2447
- "tw-aspect-square",
2448
- "tw-shrink-0",
2345
+ "tw:size-4",
2346
+ "tw:aspect-square",
2347
+ "tw:shrink-0",
2449
2348
  // layout
2450
- "tw-flex",
2451
- "tw-items-center",
2452
- "tw-justify-center"
2349
+ "tw:flex",
2350
+ "tw:items-center",
2351
+ "tw:justify-center"
2453
2352
  ],
2454
2353
  {
2455
2354
  variants: {
2456
2355
  variant: {
2457
2356
  none: [],
2458
2357
  radio: [
2459
- "tw-border",
2460
- "tw-border-solid",
2461
- "tw-border-border",
2462
- "tw-rounded-full",
2463
- "group-data-[variant=default]/dropdown-menu-content:tw-bg-white",
2464
- "group-data-[variant=argo]/dropdown-menu-content:tw-bg-background",
2465
- '[&_svg:not([class*="tw-size-"])]:tw-size-2',
2466
- "[&_svg]:data-[state=unchecked]:tw-hidden",
2358
+ "tw:border",
2359
+ "tw:border-solid",
2360
+ "tw:border-border",
2361
+ "tw:rounded-full",
2362
+ "tw:group-data-[variant=default]/dropdown-menu-content:bg-white",
2363
+ "tw:group-data-[variant=argo]/dropdown-menu-content:bg-background",
2364
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-2',
2365
+ "tw:data-[state=unchecked]:[&_svg]:hidden",
2467
2366
  // Lucide Circle is stroke-only — force fill to match the stroke
2468
2367
  // (currentColor) so the indicator reads as a solid dot.
2469
- "[&_svg]:tw-fill-current",
2470
- "group-data-[variant=argo]/dropdown-menu-content:[&_svg]:tw-text-primary",
2471
- "group-data-[variant=default]/dropdown-menu-content:[&_svg]:tw-text-primary"
2368
+ "tw:[&_svg]:fill-current",
2369
+ "tw:group-data-[variant=argo]/dropdown-menu-content:[&_svg]:text-primary",
2370
+ "tw:group-data-[variant=default]/dropdown-menu-content:[&_svg]:text-primary"
2472
2371
  ],
2473
- check: ['[&_svg:not([class*="tw-size-"])]:tw-size-3.5', "[&_svg]:tw-text-primary"],
2372
+ check: ['tw:[&_svg:not([class*="tw:size-"])]:size-3.5', "tw:[&_svg]:text-primary"],
2474
2373
  checkbox: [
2475
- "[&_svg]:tw-text-primary-foreground",
2476
- "tw-border",
2477
- "tw-border-solid",
2478
- "tw-rounded",
2479
- "group-data-[variant=default]/dropdown-menu-content:tw-border-neutral-200",
2480
- "group-data-[variant=argo]/dropdown-menu-content:tw-border-input",
2481
- '[&_svg:not([class*="tw-size-"])]:tw-size-3',
2482
- "[&_svg]:data-[state=unchecked]:tw-hidden",
2483
- "group-data-[variant=argo]/dropdown-menu-content:data-[state=checked]:tw-border-primary",
2484
- "group-data-[variant=argo]/dropdown-menu-content:data-[state=checked]:tw-bg-primary",
2485
- "group-data-[variant=default]/dropdown-menu-content:data-[state=checked]:tw-border-primary",
2486
- "group-data-[variant=default]/dropdown-menu-content:data-[state=checked]:tw-bg-primary"
2374
+ "tw:[&_svg]:text-primary-foreground",
2375
+ "tw:border",
2376
+ "tw:border-solid",
2377
+ "tw:rounded",
2378
+ "tw:group-data-[variant=default]/dropdown-menu-content:border-neutral-200",
2379
+ "tw:group-data-[variant=argo]/dropdown-menu-content:border-input",
2380
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-3',
2381
+ "tw:data-[state=unchecked]:[&_svg]:hidden",
2382
+ "tw:group-data-[variant=argo]/dropdown-menu-content:data-[state=checked]:border-primary",
2383
+ "tw:group-data-[variant=argo]/dropdown-menu-content:data-[state=checked]:bg-primary",
2384
+ "tw:group-data-[variant=default]/dropdown-menu-content:data-[state=checked]:border-primary",
2385
+ "tw:group-data-[variant=default]/dropdown-menu-content:data-[state=checked]:bg-primary"
2487
2386
  ],
2488
2387
  switch: [
2489
- "tw-size-5",
2388
+ "tw:size-5",
2490
2389
  // Lucide SVGs default to 24×24 — constrain the rendered ToggleRight
2491
2390
  // to the indicator slot so it doesn't overflow.
2492
- '[&_svg:not([class*="tw-size-"])]:tw-size-5',
2493
- "tw-text-neutral-400",
2494
- "data-[state=unchecked]:tw-rotate-180",
2495
- "group-data-[variant=default]/dropdown-menu-content:data-[state=checked]:tw-text-primary",
2496
- "group-data-[variant=argo]/dropdown-menu-content:data-[state=checked]:tw-text-primary"
2391
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-5',
2392
+ "tw:text-neutral-400",
2393
+ "tw:data-[state=unchecked]:rotate-180",
2394
+ "tw:group-data-[variant=default]/dropdown-menu-content:data-[state=checked]:text-primary",
2395
+ "tw:group-data-[variant=argo]/dropdown-menu-content:data-[state=checked]:text-primary"
2497
2396
  ]
2498
2397
  }
2499
2398
  }
@@ -2506,9 +2405,9 @@ var DropdownMenuItemIndicator = ({
2506
2405
  ...rest
2507
2406
  }) => {
2508
2407
  const IconComp = (() => {
2509
- if (variant === "switch") return icons_exports.ToggleRight;
2510
- if (variant === "radio") return icons_exports.Circle;
2511
- return icons_exports.Check;
2408
+ if (variant === "switch") return lucideReact.ToggleRight;
2409
+ if (variant === "radio") return lucideReact.Circle;
2410
+ return lucideReact.Check;
2512
2411
  })();
2513
2412
  const forceMount = (() => {
2514
2413
  if (forceMountProp) return true;
@@ -2533,18 +2432,18 @@ var ItemIcon = ({ className, children, ...props }) => /* @__PURE__ */ jsxRuntime
2533
2432
  {
2534
2433
  ...props,
2535
2434
  className: cn(
2536
- "tw-inline-flex",
2537
- "tw-items-center",
2538
- "tw-justify-center",
2539
- "tw-aspect-square",
2435
+ "tw:inline-flex",
2436
+ "tw:items-center",
2437
+ "tw:justify-center",
2438
+ "tw:aspect-square",
2540
2439
  // 20px container fits the 16px Lucide glyph plus 2px breathing room
2541
- // each side — the previous tw-size-4 + tw-p-0.5 clipped the 16px child.
2542
- "tw-size-5",
2543
- '[&_svg:not([class*="tw-size-"])]:tw-size-4',
2544
- "group-data-[variant=default]/dropdown-menu-content:tw-text-neutral-400",
2545
- "group-data-[variant=argo]/dropdown-menu-content:tw-text-primary",
2546
- "group-data-[variant=argo]/dropdown-menu-content:group-aria-disabled:tw-text-muted-foreground",
2547
- "group-data-[variant=default]/dropdown-menu-content:group-hover:tw-text-primary",
2440
+ // each side — the previous tw:size-4 + tw:p-0.5 clipped the 16px child.
2441
+ "tw:size-5",
2442
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-4',
2443
+ "tw:group-data-[variant=default]/dropdown-menu-content:text-neutral-400",
2444
+ "tw:group-data-[variant=argo]/dropdown-menu-content:text-primary",
2445
+ "tw:group-data-[variant=argo]/dropdown-menu-content:group-aria-disabled:text-muted-foreground",
2446
+ "tw:group-data-[variant=default]/dropdown-menu-content:group-hover:text-primary",
2548
2447
  className
2549
2448
  ),
2550
2449
  children
@@ -2556,74 +2455,74 @@ init_utils2();
2556
2455
  var itemVariants = cn(
2557
2456
  // reset
2558
2457
  "tailwindcss-preflight",
2559
- "tw-outline-none",
2560
- "tw-group",
2561
- "tw-peer",
2562
- "tw-relative",
2458
+ "tw:outline-hidden",
2459
+ "tw:group",
2460
+ "tw:peer",
2461
+ "tw:relative",
2563
2462
  // positioning
2564
- "tw-flex",
2565
- "tw-flex-1",
2566
- "tw-items-center",
2567
- "tw-gap-2",
2568
- "tw-cursor-pointer",
2569
- "tw-select-none",
2570
- "tw-transition-colors",
2463
+ "tw:flex",
2464
+ "tw:flex-1",
2465
+ "tw:items-center",
2466
+ "tw:gap-2",
2467
+ "tw:cursor-pointer",
2468
+ "tw:select-none",
2469
+ "tw:transition-colors",
2571
2470
  // spacing
2572
- "tw-p-2",
2471
+ "tw:p-2",
2573
2472
  // typography
2574
- "tw-font-sans",
2575
- "tw-text-sm",
2576
- "aria-disabled:tw-pointer-events-none",
2577
- "aria-disabled:tw-opacity-50",
2578
- "focus-visible:tw-outline-none",
2579
- "group-data-[variant=default]/dropdown-menu-content:tw-rounded",
2580
- "group-data-[variant=default]/dropdown-menu-content:focus:tw-bg-neutral-100",
2581
- "group-data-[variant=default]/dropdown-menu-content:focus:tw-text-neutral-900",
2582
- "group-data-[variant=default]/dropdown-menu-content:hover:tw-bg-neutral-100",
2583
- "group-data-[variant=default]/dropdown-menu-content:hover:tw-text-neutral-900",
2584
- "group-data-[variant=argo]/dropdown-menu-content:tw-rounded-md",
2585
- "group-data-[variant=argo]/dropdown-menu-content:tw-text-popover-foreground",
2586
- "group-data-[variant=argo]/dropdown-menu-content:focus:tw-text-primary",
2587
- "group-data-[variant=argo]/dropdown-menu-content:focus:tw-bg-primary/10",
2588
- "group-data-[variant=argo]/dropdown-menu-content:hover:tw-text-primary",
2589
- "group-data-[variant=argo]/dropdown-menu-content:hover:tw-bg-primary/10"
2473
+ "tw:font-sans",
2474
+ "tw:text-sm",
2475
+ "tw:aria-disabled:pointer-events-none",
2476
+ "tw:aria-disabled:opacity-50",
2477
+ "tw:focus-visible:outline-hidden",
2478
+ "tw:group-data-[variant=default]/dropdown-menu-content:rounded",
2479
+ "tw:group-data-[variant=default]/dropdown-menu-content:focus:bg-neutral-100",
2480
+ "tw:group-data-[variant=default]/dropdown-menu-content:focus:text-neutral-900",
2481
+ "tw:group-data-[variant=default]/dropdown-menu-content:hover:bg-neutral-100",
2482
+ "tw:group-data-[variant=default]/dropdown-menu-content:hover:text-neutral-900",
2483
+ "tw:group-data-[variant=argo]/dropdown-menu-content:rounded-md",
2484
+ "tw:group-data-[variant=argo]/dropdown-menu-content:text-popover-foreground",
2485
+ "tw:group-data-[variant=argo]/dropdown-menu-content:focus:text-primary",
2486
+ "tw:group-data-[variant=argo]/dropdown-menu-content:focus:bg-primary/10",
2487
+ "tw:group-data-[variant=argo]/dropdown-menu-content:hover:text-primary",
2488
+ "tw:group-data-[variant=argo]/dropdown-menu-content:hover:bg-primary/10"
2590
2489
  );
2591
2490
  var contentVariants = cn(
2592
2491
  "tailwindcss-preflight",
2593
- "tw-group/dropdown-menu-content",
2492
+ "tw:group/dropdown-menu-content",
2594
2493
  // Sit above Modal/Sheet (z-1051), matching the other floating overlays (Popover/Select z-1055)
2595
- "tw-z-[1055]",
2494
+ "tw:z-[1055]",
2596
2495
  // positioning
2597
- "tw-flex",
2598
- "tw-flex-col",
2599
- "tw-origin-[--radix-dropdown-menu-content-transform-origin]",
2496
+ "tw:flex",
2497
+ "tw:flex-col",
2498
+ "tw:origin-(--radix-dropdown-menu-content-transform-origin)",
2600
2499
  // sizing
2601
- "tw-max-h-[var(--radix-dropdown-menu-content-available-height)]",
2602
- "tw-min-w-32",
2500
+ "tw:max-h-[var(--radix-dropdown-menu-content-available-height)]",
2501
+ "tw:min-w-32",
2603
2502
  // border
2604
- "tw-border",
2605
- "tw-shadow-md",
2503
+ "tw:border",
2504
+ "tw:shadow-md",
2606
2505
  // Legacy surface — fixed white panel.
2607
- "data-[variant=default]:tw-rounded-md",
2608
- "data-[variant=default]:tw-bg-white",
2609
- "data-[variant=default]:tw-border-neutral-100",
2610
- "data-[variant=default]:tw-text-neutral-800",
2506
+ "tw:data-[variant=default]:rounded-md",
2507
+ "tw:data-[variant=default]:bg-white",
2508
+ "tw:data-[variant=default]:border-neutral-100",
2509
+ "tw:data-[variant=default]:text-neutral-800",
2611
2510
  // Argo surface — semantic popover tokens (brand + dark aware).
2612
- "data-[variant=argo]:tw-rounded-2xl",
2613
- "data-[variant=argo]:tw-bg-popover",
2614
- "data-[variant=argo]:tw-text-popover-foreground",
2615
- "data-[variant=argo]:tw-border-border",
2511
+ "tw:data-[variant=argo]:rounded-2xl",
2512
+ "tw:data-[variant=argo]:bg-popover",
2513
+ "tw:data-[variant=argo]:text-popover-foreground",
2514
+ "tw:data-[variant=argo]:border-border",
2616
2515
  // animations
2617
- "data-[state=open]:tw-animate-in",
2618
- "data-[state=open]:tw-fade-in-0",
2619
- "data-[state=open]:tw-zoom-in-95",
2620
- "data-[state=closed]:tw-animate-out",
2621
- "data-[state=closed]:tw-fade-out-0",
2622
- "data-[state=closed]:tw-zoom-out-95",
2623
- "data-[side=bottom]:tw-slide-in-from-top-2",
2624
- "data-[side=left]:tw-slide-in-from-right-2",
2625
- "data-[side=right]:tw-slide-in-from-left-2",
2626
- "data-[side=top]:tw-slide-in-from-bottom-2"
2516
+ "tw:data-[state=open]:animate-in",
2517
+ "tw:data-[state=open]:fade-in-0",
2518
+ "tw:data-[state=open]:zoom-in-95",
2519
+ "tw:data-[state=closed]:animate-out",
2520
+ "tw:data-[state=closed]:fade-out-0",
2521
+ "tw:data-[state=closed]:zoom-out-95",
2522
+ "tw:data-[side=bottom]:slide-in-from-top-2",
2523
+ "tw:data-[side=left]:slide-in-from-right-2",
2524
+ "tw:data-[side=right]:slide-in-from-left-2",
2525
+ "tw:data-[side=top]:slide-in-from-bottom-2"
2627
2526
  );
2628
2527
  var DropdownMenuCheckboxItem = ({
2629
2528
  className,
@@ -2637,7 +2536,7 @@ var DropdownMenuCheckboxItem = ({
2637
2536
  ...props
2638
2537
  }) => {
2639
2538
  const isAtStart = indicatorAlign === "start";
2640
- const indicatorEle = isLoading ? /* @__PURE__ */ jsxRuntime.jsx(ItemIcon, { className: isAtStart ? "" : "tw-ml-auto", children: /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Loader2, { className: "tw-animate-spin" }) }) : /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuItemIndicator, { variant: indicator, className: isAtStart ? "" : "tw-ml-auto" });
2539
+ const indicatorEle = isLoading ? /* @__PURE__ */ jsxRuntime.jsx(ItemIcon, { className: isAtStart ? "" : "tw:ml-auto", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "tw:animate-spin" }) }) : /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuItemIndicator, { variant: indicator, className: isAtStart ? "" : "tw:ml-auto" });
2641
2540
  const handleSelect = (event) => {
2642
2541
  if (!closeOnSelect) event.preventDefault();
2643
2542
  onSelect?.(event);
@@ -2671,10 +2570,10 @@ var ScrollBar = ({ className, orientation = "vertical", ...props }) => /* @__PUR
2671
2570
  {
2672
2571
  orientation,
2673
2572
  className: cn(
2674
- "tw-flex tw-touch-none tw-select-none tw-transition-color",
2573
+ "tw:flex tw:touch-none tw:select-none tw:transition-color",
2675
2574
  {
2676
- "tw-h-full tw-w-2.5 tw-p-px": orientation === "vertical",
2677
- "tw-h-2.5 tw-flex-col tw-p-px": orientation === "horizontal"
2575
+ "tw:h-full tw:w-2.5 tw:p-px": orientation === "vertical",
2576
+ "tw:h-2.5 tw:flex-col tw:p-px": orientation === "horizontal"
2678
2577
  },
2679
2578
  className
2680
2579
  ),
@@ -2683,11 +2582,11 @@ var ScrollBar = ({ className, orientation = "vertical", ...props }) => /* @__PUR
2683
2582
  ScrollAreaPrimitive2__namespace.ScrollAreaThumb,
2684
2583
  {
2685
2584
  className: cn(
2686
- "tw-relative",
2687
- "tw-flex-1",
2688
- "tw-rounded-full",
2689
- "tw-bg-border",
2690
- "hover:tw-bg-muted-foreground"
2585
+ "tw:relative",
2586
+ "tw:flex-1",
2587
+ "tw:rounded-full",
2588
+ "tw:bg-border",
2589
+ "tw:hover:bg-muted-foreground"
2691
2590
  )
2692
2591
  }
2693
2592
  )
@@ -2706,7 +2605,7 @@ var ScrollArea = ({
2706
2605
  {
2707
2606
  "data-slot": "scroll-area",
2708
2607
  className: cn(
2709
- "tw-peer/scroll-area tw-relative tw-overflow-hidden focus-visible:tw-outline-none",
2608
+ "tw:peer/scroll-area tw:relative tw:overflow-hidden tw:focus-visible:outline-hidden",
2710
2609
  className
2711
2610
  ),
2712
2611
  ...props,
@@ -2716,7 +2615,7 @@ var ScrollArea = ({
2716
2615
  {
2717
2616
  ref,
2718
2617
  className: cn(
2719
- "tw-h-full tw-w-full tw-rounded-[inherit] focus-visible:tw-outline-none",
2618
+ "tw:h-full tw:w-full tw:rounded-[inherit] tw:focus-visible:outline-hidden",
2720
2619
  viewPortClassName
2721
2620
  ),
2722
2621
  children
@@ -2756,11 +2655,11 @@ var DropdownMenuContent = ({
2756
2655
  {
2757
2656
  className,
2758
2657
  viewPortClassName: cn(
2759
- "tw-p-2",
2760
- "tw-max-h-[var(--radix-dropdown-menu-content-available-height)]",
2658
+ "tw:p-2",
2659
+ "tw:max-h-[var(--radix-dropdown-menu-content-available-height)]",
2761
2660
  viewPortClassName
2762
2661
  ),
2763
- scrollBarClassName: "tw-w-1.5",
2662
+ scrollBarClassName: "tw:w-1.5",
2764
2663
  children
2765
2664
  }
2766
2665
  )
@@ -2786,7 +2685,7 @@ var DropdownMenuItem = ({
2786
2685
  ...props
2787
2686
  }) => {
2788
2687
  const Comp = asChild ? reactSlot.Root : "div";
2789
- const adornment = isLoading ? /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Loader2, { className: "tw-animate-spin" }) : icon;
2688
+ const adornment = isLoading ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "tw:animate-spin" }) : icon;
2790
2689
  const handleOnSelect = (event) => {
2791
2690
  if (asModalTrigger) event.preventDefault();
2792
2691
  onSelect?.(event);
@@ -2807,7 +2706,7 @@ var DropdownMenuItem = ({
2807
2706
  onSelect: handleOnSelect,
2808
2707
  onPointerLeave: handlePointerLeave,
2809
2708
  onPointerMove: handlePointerMove,
2810
- className: cn(itemVariants, className),
2709
+ className: cn(itemVariants, asChild && "tw:text-inherit", className),
2811
2710
  asChild: true,
2812
2711
  children: /* @__PURE__ */ jsxRuntime.jsxs(Comp, { children: [
2813
2712
  adornment && /* @__PURE__ */ jsxRuntime.jsx(ItemIcon, { className: iconClassName, children: adornment }),
@@ -2821,18 +2720,18 @@ var DropdownMenuItem = ({
2821
2720
  init_utils2();
2822
2721
  var descriptionVariants = classVarianceAuthority.cva(
2823
2722
  [
2824
- "tw-box-border",
2825
- "tw-ml-auto",
2826
- "tw-font-sans",
2827
- "tw-tracking-normal",
2828
- "tw-font-normal",
2829
- "tw-text-xs",
2830
- "tw-text-muted-foreground"
2723
+ "tw:box-border",
2724
+ "tw:ml-auto",
2725
+ "tw:font-sans",
2726
+ "tw:tracking-normal",
2727
+ "tw:font-normal",
2728
+ "tw:text-xs",
2729
+ "tw:text-muted-foreground"
2831
2730
  ],
2832
2731
  {
2833
2732
  variants: {
2834
2733
  hideOnHover: {
2835
- true: ["group-focus-within:tw-hidden", "group-hover:tw-hidden"],
2734
+ true: ["tw:group-focus-within:hidden", "tw:group-hover:hidden"],
2836
2735
  false: []
2837
2736
  }
2838
2737
  },
@@ -2855,10 +2754,10 @@ var DropdownMenuLabel = ({ className, ...props }) => {
2855
2754
  DropdownMenuPrimitive3__namespace.Label,
2856
2755
  {
2857
2756
  className: cn(
2858
- "tw-p-2",
2859
- "tw-font-medium",
2860
- "tw-text-xs",
2861
- "tw-text-muted-foreground",
2757
+ "tw:p-2",
2758
+ "tw:font-medium",
2759
+ "tw:text-xs",
2760
+ "tw:text-muted-foreground",
2862
2761
  className
2863
2762
  ),
2864
2763
  ...props
@@ -2901,7 +2800,7 @@ var DropdownMenuRadioItem = ({
2901
2800
  ...props
2902
2801
  }) => {
2903
2802
  const isAtStart = indicatorAlign === "start";
2904
- const indicatorEle = isLoading ? /* @__PURE__ */ jsxRuntime.jsx(ItemIcon, { className: iconClassName, children: /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Loader2, { className: "tw-animate-spin" }) }) : /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuItemIndicator, { variant: indicator });
2803
+ const indicatorEle = isLoading ? /* @__PURE__ */ jsxRuntime.jsx(ItemIcon, { className: iconClassName, children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Loader2, { className: "tw:animate-spin" }) }) : /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuItemIndicator, { variant: indicator });
2905
2804
  const handleSelect = (event) => {
2906
2805
  if (!closeOnSelect) event.preventDefault();
2907
2806
  onSelect?.(event);
@@ -2911,13 +2810,13 @@ var DropdownMenuRadioItem = ({
2911
2810
  {
2912
2811
  className: cn(
2913
2812
  itemVariants,
2914
- "data-[state=checked]:tw-cursor-default",
2813
+ "tw:data-[state=checked]:cursor-default",
2915
2814
  {
2916
- "data-[state=checked]:tw-bg-neutral-100": indicator === "none",
2815
+ "tw:data-[state=checked]:bg-neutral-100": indicator === "none",
2917
2816
  // Semantic brand tint (flips under `[data-theme='dark']`) instead of a
2918
- // hardcoded `tw-bg-sky-100`, which stayed light in dark mode and left the
2817
+ // hardcoded `tw:bg-sky-100`, which stayed light in dark mode and left the
2919
2818
  // checked item's text near-invisible.
2920
- "group-data-[variant=argo]/dropdown-menu-content:data-[state=checked]:tw-bg-primary/10": indicator === "check"
2819
+ "tw:group-data-[variant=argo]/dropdown-menu-content:data-[state=checked]:bg-primary/10": indicator === "check"
2921
2820
  },
2922
2821
  className
2923
2822
  ),
@@ -2926,7 +2825,7 @@ var DropdownMenuRadioItem = ({
2926
2825
  children: [
2927
2826
  isAtStart && indicatorEle,
2928
2827
  icon && /* @__PURE__ */ jsxRuntime.jsx(ItemIcon, { className: iconClassName, children: icon }),
2929
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tw-flex tw-min-w-0 tw-flex-1 tw-items-center tw-gap-2", children }),
2828
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "tw:flex tw:min-w-0 tw:flex-1 tw:items-center tw:gap-2", children }),
2930
2829
  !isAtStart && indicatorEle
2931
2830
  ]
2932
2831
  }
@@ -2939,21 +2838,21 @@ var DropdownMenuSeparator = ({ className, ...props }) => /* @__PURE__ */ jsxRunt
2939
2838
  DropdownMenuPrimitive3__namespace.Separator,
2940
2839
  {
2941
2840
  className: cn(
2942
- "tw-relative",
2943
- "tw-z-10",
2841
+ "tw:relative",
2842
+ "tw:z-10",
2944
2843
  // layout
2945
- "tw-flex",
2946
- "tw-items-center",
2947
- "tw-justify-center",
2948
- "tw-w-full",
2844
+ "tw:flex",
2845
+ "tw:items-center",
2846
+ "tw:justify-center",
2847
+ "tw:w-full",
2949
2848
  // separator line
2950
- 'before:tw-content-[""]',
2951
- "before:tw-w-full",
2952
- "before:tw-h-px",
2953
- "group-data-[variant=default]/dropdown-menu-content:tw-py-2",
2954
- "group-data-[variant=default]/dropdown-menu-content:before:tw-bg-neutral-150",
2955
- "group-data-[variant=argo]/dropdown-menu-content:tw-py-1",
2956
- "group-data-[variant=argo]/dropdown-menu-content:before:tw-bg-border",
2849
+ 'tw:before:content-[""]',
2850
+ "tw:before:w-full",
2851
+ "tw:before:h-px",
2852
+ "tw:group-data-[variant=default]/dropdown-menu-content:py-2",
2853
+ "tw:group-data-[variant=default]/dropdown-menu-content:before:bg-neutral-150",
2854
+ "tw:group-data-[variant=argo]/dropdown-menu-content:py-1",
2855
+ "tw:group-data-[variant=argo]/dropdown-menu-content:before:bg-border",
2957
2856
  className
2958
2857
  ),
2959
2858
  ...props
@@ -2969,7 +2868,7 @@ var DropdownMenuSubContent = ({ className, ...props }) => {
2969
2868
  DropdownMenuPrimitive3__namespace.SubContent,
2970
2869
  {
2971
2870
  "data-variant": variant,
2972
- className: cn(contentVariants, "tw-z-[1041]", "tw-p-2", className),
2871
+ className: cn(contentVariants, "tw:z-[1041]", "tw:p-2", className),
2973
2872
  ...props
2974
2873
  }
2975
2874
  ) });
@@ -2981,23 +2880,19 @@ init_utils2();
2981
2880
  var DropdownMenuSubTrigger = ({ className, children, ...props }) => {
2982
2881
  return /* @__PURE__ */ jsxRuntime.jsxs(DropdownMenuPrimitive3__namespace.SubTrigger, { className: cn(itemVariants, className), ...props, children: [
2983
2882
  children,
2984
- /* @__PURE__ */ jsxRuntime.jsx(icons_exports.ChevronRight, { className: "tw-ml-auto tw-size-5" })
2883
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "tw:ml-auto tw:size-5" })
2985
2884
  ] });
2986
2885
  };
2987
2886
 
2988
2887
  // src/components/DropdownMenu/DropdownMenuTrigger.tsx
2989
2888
  init_utils2();
2990
- var DropdownMenuTrigger = ({
2991
- ref,
2992
- className,
2993
- ...props
2994
- }) => /* @__PURE__ */ jsxRuntime.jsx(
2889
+ var DropdownMenuTrigger = ({ ref, className, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
2995
2890
  DropdownMenuPrimitive3.Trigger,
2996
2891
  {
2997
2892
  ...props,
2998
2893
  ref,
2999
2894
  "data-slot": "dropdown-menu-trigger",
3000
- className: cn("tw-group/dropdown-menu-trigger", className)
2895
+ className: cn("tw:group/dropdown-menu-trigger", className)
3001
2896
  }
3002
2897
  );
3003
2898
  var DropdownMenu = ({
@@ -3023,13 +2918,15 @@ DropdownMenu.RadioGroup = DropdownMenuRadioGroup;
3023
2918
  DropdownMenu.RadioItem = DropdownMenuRadioItem;
3024
2919
  DropdownMenu.ItemDescription = DropdownMenuItemDescription;
3025
2920
 
3026
- // src/components/MarkdownEditor/plugins/toolbar/AlignmentDropdown.tsx
2921
+ // src/blocks/MarkdownEditor/plugins/toolbar/AlignmentDropdown.tsx
3027
2922
  init_Tooltip2();
2923
+ init_icons();
2924
+ init_utils2();
3028
2925
  var ALIGNMENT_OPTIONS = [
3029
- { value: "left", label: "Left", icon: icons_exports.AlignLeft },
3030
- { value: "center", label: "Center", icon: icons_exports.AlignCenter },
3031
- { value: "right", label: "Right", icon: icons_exports.AlignRight },
3032
- { value: "justify", label: "Justify", icon: icons_exports.AlignJustify }
2926
+ { value: "left", label: "Left", icon: lucideReact.AlignLeft },
2927
+ { value: "center", label: "Center", icon: lucideReact.AlignCenter },
2928
+ { value: "right", label: "Right", icon: lucideReact.AlignRight },
2929
+ { value: "justify", label: "Justify", icon: lucideReact.AlignJustify }
3033
2930
  ];
3034
2931
  var ALIGNMENT_ICONS = Object.fromEntries(
3035
2932
  ALIGNMENT_OPTIONS.map(({ value, icon }) => [value, icon])
@@ -3055,32 +2952,32 @@ var AlignmentDropdown = ({
3055
2952
  editor.dispatchCommand(lexical.FORMAT_ELEMENT_COMMAND, align);
3056
2953
  });
3057
2954
  };
3058
- const CurrentAlignmentIcon = ALIGNMENT_ICONS[alignment] ?? icons_exports.AlignLeft;
2955
+ const CurrentAlignmentIcon = ALIGNMENT_ICONS[alignment] ?? lucideReact.AlignLeft;
3059
2956
  return /* @__PURE__ */ jsxRuntime.jsxs(DropdownMenu, { onOpenChange: handleOpenChange, children: [
3060
2957
  /* @__PURE__ */ jsxRuntime.jsx(Tooltip, { tooltip: "Text alignment", placement: "top", triggerAsChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(DropdownMenu.Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
3061
2958
  "button",
3062
2959
  {
3063
2960
  type: "button",
3064
2961
  className: cn(
3065
- "tw-flex tw-h-7 tw-cursor-pointer tw-items-center tw-gap-1 tw-rounded tw-border-0 tw-bg-transparent tw-px-1.5 tw-text-xs tw-text-muted-foreground",
3066
- "hover:tw-bg-accent"
2962
+ "tw:flex tw:h-7 tw:cursor-pointer tw:items-center tw:gap-1 tw:rounded tw:border-0 tw:bg-transparent tw:px-1.5 tw:text-xs tw:text-muted-foreground",
2963
+ "tw:hover:bg-accent"
3067
2964
  ),
3068
2965
  children: [
3069
- /* @__PURE__ */ jsxRuntime.jsx(CurrentAlignmentIcon, { className: "tw-size-4" }),
3070
- /* @__PURE__ */ jsxRuntime.jsx(icons_exports.ChevronDown, { className: "tw-size-3" })
2966
+ /* @__PURE__ */ jsxRuntime.jsx(CurrentAlignmentIcon, { className: "tw:size-4" }),
2967
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "tw:size-3" })
3071
2968
  ]
3072
2969
  }
3073
2970
  ) }) }),
3074
- /* @__PURE__ */ jsxRuntime.jsx(DropdownMenu.Content, { align: "start", className: "tw-min-w-32", children: ALIGNMENT_OPTIONS.map(({ value, label, icon: IconComp }) => /* @__PURE__ */ jsxRuntime.jsxs(
2971
+ /* @__PURE__ */ jsxRuntime.jsx(DropdownMenu.Content, { align: "start", className: "tw:min-w-32", children: ALIGNMENT_OPTIONS.map(({ value, label, icon: IconComp }) => /* @__PURE__ */ jsxRuntime.jsxs(
3075
2972
  DropdownMenu.Item,
3076
2973
  {
3077
2974
  onSelect: () => handleSelect(value),
3078
2975
  className: cn(
3079
- "tw-flex tw-items-center tw-gap-2",
3080
- alignment === value && "tw-bg-secondary-50 tw-text-secondary-500"
2976
+ "tw:flex tw:items-center tw:gap-2",
2977
+ alignment === value && "tw:bg-secondary-50 tw:text-secondary-500"
3081
2978
  ),
3082
2979
  children: [
3083
- /* @__PURE__ */ jsxRuntime.jsx(IconComp, { className: "tw-size-4" }),
2980
+ /* @__PURE__ */ jsxRuntime.jsx(IconComp, { className: "tw:size-4" }),
3084
2981
  label
3085
2982
  ]
3086
2983
  },
@@ -3088,20 +2985,18 @@ var AlignmentDropdown = ({
3088
2985
  )) })
3089
2986
  ] });
3090
2987
  };
3091
-
3092
- // src/components/MarkdownEditor/plugins/toolbar/BlockTypeDropdown.tsx
2988
+ init_Tooltip2();
3093
2989
  init_icons();
3094
2990
  init_utils2();
3095
- init_Tooltip2();
3096
2991
  var BLOCK_TYPE_META = {
3097
- paragraph: { label: "Normal", icon: icons_exports.Type, selectable: true },
3098
- h1: { label: "Heading 1", icon: icons_exports.Heading1, selectable: true },
3099
- h2: { label: "Heading 2", icon: icons_exports.Heading2, selectable: true },
3100
- h3: { label: "Heading 3", icon: icons_exports.Heading3, selectable: true },
3101
- bullet: { label: "Bullet List", icon: icons_exports.List, selectable: false },
3102
- number: { label: "Numbered List", icon: icons_exports.ListOrdered, selectable: false },
3103
- quote: { label: "Quote", icon: icons_exports.Quote, selectable: false },
3104
- code: { label: "Code Block", icon: icons_exports.SquareCode, selectable: false }
2992
+ paragraph: { label: "Normal", icon: lucideReact.Type, selectable: true },
2993
+ h1: { label: "Heading 1", icon: lucideReact.Heading1, selectable: true },
2994
+ h2: { label: "Heading 2", icon: lucideReact.Heading2, selectable: true },
2995
+ h3: { label: "Heading 3", icon: lucideReact.Heading3, selectable: true },
2996
+ bullet: { label: "Bullet List", icon: lucideReact.List, selectable: false },
2997
+ number: { label: "Numbered List", icon: lucideReact.ListOrdered, selectable: false },
2998
+ quote: { label: "Quote", icon: lucideReact.Quote, selectable: false },
2999
+ code: { label: "Code Block", icon: lucideReact.SquareCode, selectable: false }
3105
3000
  };
3106
3001
  var BLOCK_TYPE_OPTIONS = Object.entries(BLOCK_TYPE_META).filter(([, meta]) => meta.selectable).map(([value, { label, icon }]) => ({ value, label, icon }));
3107
3002
  var isBlockType = (value) => Object.prototype.hasOwnProperty.call(BLOCK_TYPE_META, value);
@@ -3111,7 +3006,7 @@ var BlockTypeDropdown = ({
3111
3006
  }) => {
3112
3007
  const savedSelectionRef = react.useRef(null);
3113
3008
  const currentMeta = isBlockType(blockType) ? BLOCK_TYPE_META[blockType] : null;
3114
- const CurrentBlockIcon = currentMeta?.icon ?? icons_exports.Type;
3009
+ const CurrentBlockIcon = currentMeta?.icon ?? lucideReact.Type;
3115
3010
  const handleOpenChange = (open) => {
3116
3011
  if (open) {
3117
3012
  editor.getEditorState().read(() => {
@@ -3148,26 +3043,26 @@ var BlockTypeDropdown = ({
3148
3043
  {
3149
3044
  type: "button",
3150
3045
  className: cn(
3151
- "tw-flex tw-h-7 tw-cursor-pointer tw-items-center tw-gap-1.5 tw-rounded tw-border-0 tw-bg-transparent tw-px-1.5 tw-text-xs tw-text-muted-foreground",
3152
- "hover:tw-bg-accent"
3046
+ "tw:flex tw:h-7 tw:cursor-pointer tw:items-center tw:gap-1.5 tw:rounded tw:border-0 tw:bg-transparent tw:px-1.5 tw:text-xs tw:text-muted-foreground",
3047
+ "tw:hover:bg-accent"
3153
3048
  ),
3154
3049
  children: [
3155
- /* @__PURE__ */ jsxRuntime.jsx(CurrentBlockIcon, { className: "tw-size-4" }),
3050
+ /* @__PURE__ */ jsxRuntime.jsx(CurrentBlockIcon, { className: "tw:size-4" }),
3156
3051
  currentMeta?.label ?? "Normal",
3157
- /* @__PURE__ */ jsxRuntime.jsx(icons_exports.ChevronDown, { className: "tw-size-3" })
3052
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "tw:size-3" })
3158
3053
  ]
3159
3054
  }
3160
3055
  ) }) }),
3161
- /* @__PURE__ */ jsxRuntime.jsx(DropdownMenu.Content, { align: "start", className: "tw-min-w-40", children: BLOCK_TYPE_OPTIONS.map(({ value, label, icon: IconComp }) => /* @__PURE__ */ jsxRuntime.jsxs(
3056
+ /* @__PURE__ */ jsxRuntime.jsx(DropdownMenu.Content, { align: "start", className: "tw:min-w-40", children: BLOCK_TYPE_OPTIONS.map(({ value, label, icon: IconComp }) => /* @__PURE__ */ jsxRuntime.jsxs(
3162
3057
  DropdownMenu.Item,
3163
3058
  {
3164
3059
  onSelect: () => handleSelect(value),
3165
3060
  className: cn(
3166
- "tw-flex tw-items-center tw-gap-2",
3167
- blockType === value && "tw-bg-secondary-50 tw-text-secondary-500"
3061
+ "tw:flex tw:items-center tw:gap-2",
3062
+ blockType === value && "tw:bg-secondary-50 tw:text-secondary-500"
3168
3063
  ),
3169
3064
  children: [
3170
- /* @__PURE__ */ jsxRuntime.jsx(IconComp, { className: "tw-size-4" }),
3065
+ /* @__PURE__ */ jsxRuntime.jsx(IconComp, { className: "tw:size-4" }),
3171
3066
  label
3172
3067
  ]
3173
3068
  },
@@ -3176,76 +3071,7 @@ var BlockTypeDropdown = ({
3176
3071
  ] });
3177
3072
  };
3178
3073
 
3179
- // src/components/MarkdownEditor/plugins/toolbar/LinkPanel.tsx
3180
- init_icons();
3181
- init_Button2();
3182
- var buttonGroupVariant = classVarianceAuthority.cva(
3183
- ["tailwindcss-preflight", "tw-inline-flex", "tw-items-center", "tw-group/button-group"],
3184
- {
3185
- defaultVariants: {
3186
- variant: "inline",
3187
- space: "small"
3188
- },
3189
- variants: {
3190
- variant: {
3191
- inline: [],
3192
- block: [
3193
- "tw-w-full",
3194
- "tw-flex-col",
3195
- "sm:tw-flex-row",
3196
- "[&_a]:tw-flex-1",
3197
- "[&>button:not([data-icon-only=true])]:tw-flex-1"
3198
- ]
3199
- },
3200
- space: {
3201
- "extra-small": "tw-gap-1",
3202
- "little-small": "tw-gap-2",
3203
- small: "tw-gap-3",
3204
- medium: "tw-gap-4",
3205
- large: "tw-gap-6",
3206
- compact: [
3207
- "tw-border-collapse",
3208
- "!tw-gap-0",
3209
- // ensure that focus visible outline is at the top
3210
- "[&>*:focus-visible]:!tw-z-10",
3211
- "[&>*:not(:first-child)]:tw-rounded-l-none",
3212
- "[&>*:not(:last-child)]:tw-rounded-r-none",
3213
- "[&>*:not(:last-child)]:tw-border-r-0",
3214
- "[&>*:not(:first-child)]:tw-border-l-0",
3215
- // separator
3216
- "[&>*:not(:first-child)]:before:tw-content",
3217
- "[&>*:not(:first-child)]:before:tw-absolute",
3218
- "[&>*:not(:first-child)]:before:tw-left-0",
3219
- "[&>*:not(:first-child)]:before:tw-h-full",
3220
- "[&>*:not(:first-child)]:before:tw-w-px",
3221
- "[&>*:not(:first-child)]:before:tw-bg-black/10"
3222
- ]
3223
- }
3224
- }
3225
- }
3226
- );
3227
- var ButtonGroup = ({
3228
- ref,
3229
- children,
3230
- space = "small",
3231
- className,
3232
- variant,
3233
- ...rest
3234
- }) => {
3235
- return /* @__PURE__ */ jsxRuntime.jsx(
3236
- "div",
3237
- {
3238
- ref,
3239
- ...rest,
3240
- role: "group",
3241
- "data-variant": variant,
3242
- className: buttonGroupVariant({ variant, className, space }),
3243
- children
3244
- }
3245
- );
3246
- };
3247
-
3248
- // src/components/FormGroup/FormGroup.tsx
3074
+ // src/blocks/FormGroup/FormGroup.tsx
3249
3075
  init_utils2();
3250
3076
  var FormGroupContext = react.createContext({
3251
3077
  state: "default"
@@ -3261,12 +3087,12 @@ init_context();
3261
3087
  init_utils2();
3262
3088
  var addonVariants = classVarianceAuthority.cva(
3263
3089
  [
3264
- "tw-flex",
3265
- "tw-items-center",
3266
- "tw-gap-1",
3090
+ "tw:flex",
3091
+ "tw:items-center",
3092
+ "tw:gap-1",
3267
3093
  // Default size for nested Lucide icons in prefix/suffix slots; callers can override on the icon.
3268
- "[&_svg.lucide:not([class*='tw-size-'])]:tw-size-4",
3269
- "[&_svg]:tw-shrink-0"
3094
+ "tw:[&_svg.lucide:not([class*='tw:size-'])]:size-4",
3095
+ "tw:[&_svg]:shrink-0"
3270
3096
  ],
3271
3097
  {
3272
3098
  defaultVariants: {
@@ -3274,22 +3100,22 @@ var addonVariants = classVarianceAuthority.cva(
3274
3100
  },
3275
3101
  variants: {
3276
3102
  align: {
3277
- "inline-start": ["tw-order-first", "[&:not(:empty)]:tw-pl-4"],
3278
- "inline-end": ["tw-order-last", "[&:not(:empty)]:tw-pr-4"],
3103
+ "inline-start": ["tw:order-first", "tw:[&:not(:empty)]:pl-4"],
3104
+ "inline-end": ["tw:order-last", "tw:[&:not(:empty)]:pr-4"],
3279
3105
  "block-start": [
3280
- "tw-order-first",
3281
- // `tw-w-full` needs to be empty-conditional too — when the addon
3106
+ "tw:order-first",
3107
+ // `tw:w-full` needs to be empty-conditional too — when the addon
3282
3108
  // has no content the root stays in flex-row, and a 100%-wide
3283
3109
  // empty addon would claim half of the input row beside the input.
3284
- "[&:not(:empty)]:tw-w-full",
3285
- "[&:not(:empty)]:tw-px-4",
3286
- "[&:not(:empty)]:tw-py-1.5"
3110
+ "tw:[&:not(:empty)]:w-full",
3111
+ "tw:[&:not(:empty)]:px-4",
3112
+ "tw:[&:not(:empty)]:py-1.5"
3287
3113
  ],
3288
3114
  "block-end": [
3289
- "tw-order-last",
3290
- "[&:not(:empty)]:tw-w-full",
3291
- "[&:not(:empty)]:tw-px-4",
3292
- "[&:not(:empty)]:tw-py-1.5"
3115
+ "tw:order-last",
3116
+ "tw:[&:not(:empty)]:w-full",
3117
+ "tw:[&:not(:empty)]:px-4",
3118
+ "tw:[&:not(:empty)]:py-1.5"
3293
3119
  ]
3294
3120
  }
3295
3121
  }
@@ -3305,12 +3131,7 @@ var InputGroupAddon = ({
3305
3131
  // src/components/InputGroup/InputGroupButton.tsx
3306
3132
  init_utils2();
3307
3133
  init_Button2();
3308
- var InputGroupButton = ({
3309
- ref,
3310
- className,
3311
- tabIndex = -1,
3312
- ...props
3313
- }) => /* @__PURE__ */ jsxRuntime.jsx(
3134
+ var InputGroupButton = ({ ref, className, tabIndex = -1, ...props }) => /* @__PURE__ */ jsxRuntime.jsx(
3314
3135
  Button,
3315
3136
  {
3316
3137
  ...props,
@@ -3318,33 +3139,29 @@ var InputGroupButton = ({
3318
3139
  ref,
3319
3140
  variant: "invisible",
3320
3141
  size: "icon-sm",
3321
- className: cn("tw-size-5", "[&_svg]:tw-text-muted-foreground", className)
3142
+ className: cn("tw:size-5", "tw:[&_svg]:text-muted-foreground", className)
3322
3143
  }
3323
3144
  );
3324
3145
 
3325
3146
  // src/components/InputGroup/InputGroupInput.tsx
3326
3147
  init_utils2();
3327
- var InputGroupInput = ({
3328
- ref,
3329
- className,
3330
- ...inputProps
3331
- }) => /* @__PURE__ */ jsxRuntime.jsx(
3148
+ var InputGroupInput = ({ ref, className, ...inputProps }) => /* @__PURE__ */ jsxRuntime.jsx(
3332
3149
  "input",
3333
3150
  {
3334
3151
  ...inputProps,
3335
3152
  ref,
3336
3153
  className: cn(
3337
- "tw-w-full",
3338
- "tw-bg-transparent",
3339
- "tw-outline-none",
3154
+ "tw:w-full",
3155
+ "tw:bg-transparent",
3156
+ "tw:outline-hidden",
3340
3157
  // font
3341
- "tw-font-sans",
3342
- "tw-text-sm",
3158
+ "tw:font-sans",
3159
+ "tw:text-sm",
3343
3160
  // placeholder
3344
- "placeholder:tw-text-neutral-400",
3345
- "placeholder:tw-font-normal",
3161
+ "tw:placeholder:text-neutral-400",
3162
+ "tw:placeholder:font-normal",
3346
3163
  // disabled
3347
- "disabled:tw-cursor-not-allowed",
3164
+ "tw:disabled:cursor-not-allowed",
3348
3165
  className
3349
3166
  )
3350
3167
  }
@@ -3356,13 +3173,13 @@ var InputGroupText = ({ className, ...props }) => /* @__PURE__ */ jsxRuntime.jsx
3356
3173
  "span",
3357
3174
  {
3358
3175
  className: cn(
3359
- "tw-flex",
3360
- "tw-items-center",
3361
- "tw-gap-2",
3362
- "tw-text-sm",
3363
- "tw-text-muted-foreground",
3364
- "[&_svg]:tw-pointer-events-none",
3365
- '[&_svg:not([class*="tw-size-"])]:tw-size-4',
3176
+ "tw:flex",
3177
+ "tw:items-center",
3178
+ "tw:gap-2",
3179
+ "tw:text-sm",
3180
+ "tw:text-muted-foreground",
3181
+ "tw:[&_svg]:pointer-events-none",
3182
+ 'tw:[&_svg:not([class*="tw:size-"])]:size-4',
3366
3183
  className
3367
3184
  ),
3368
3185
  ...props
@@ -3405,20 +3222,20 @@ var InputGroupTextArea = ({
3405
3222
  minRows,
3406
3223
  maxRows: maxRows === "unlimited" ? void 0 : maxRows,
3407
3224
  className: cn(
3408
- "tw-w-full",
3409
- "tw-bg-transparent",
3410
- "tw-outline-none",
3411
- "tw-px-4",
3225
+ "tw:w-full",
3226
+ "tw:bg-transparent",
3227
+ "tw:outline-hidden",
3228
+ "tw:px-4",
3412
3229
  // font
3413
- "tw-font-sans",
3414
- "tw-text-sm",
3230
+ "tw:font-sans",
3231
+ "tw:text-sm",
3415
3232
  // placeholder
3416
- "placeholder:tw-text-neutral-400",
3417
- "placeholder:tw-font-normal",
3233
+ "tw:placeholder:text-neutral-400",
3234
+ "tw:placeholder:font-normal",
3418
3235
  // disabled
3419
- "disabled:tw-cursor-not-allowed",
3236
+ "tw:disabled:cursor-not-allowed",
3420
3237
  {
3421
- "tw-resize-none": disableResize
3238
+ "tw:resize-none": disableResize
3422
3239
  },
3423
3240
  className
3424
3241
  )
@@ -3428,39 +3245,39 @@ var InputGroupTextArea = ({
3428
3245
  var inputGroupVariants = classVarianceAuthority.cva(
3429
3246
  [
3430
3247
  "tailwindcss-preflight",
3431
- "tw-group",
3432
- "tw-overflow-hidden",
3433
- "tw-box-border",
3248
+ "tw:group",
3249
+ "tw:overflow-hidden",
3250
+ "tw:box-border",
3434
3251
  // positioning
3435
- "tw-flex",
3436
- "tw-items-center",
3252
+ "tw:flex",
3253
+ "tw:items-center",
3437
3254
  // base — legacy (non-argo) chrome uses a fixed radius; argo overrides it with
3438
3255
  // the brand radius token in the `argo` variant below.
3439
- "tw-rounded",
3440
- "tw-border",
3441
- "tw-border-solid",
3442
- "tw-border-neutral-200",
3443
- "tw-text-neutral-800",
3444
- "tw-transition",
3256
+ "tw:rounded",
3257
+ "tw:border",
3258
+ "tw:border-solid",
3259
+ "tw:border-neutral-200",
3260
+ "tw:text-neutral-800",
3261
+ "tw:transition",
3445
3262
  // focus
3446
- "has-[:is(input,textarea):focus]:tw-ring-4",
3263
+ "tw:has-[:is(input,textarea):focus]:ring-4",
3447
3264
  // readonly
3448
- "has-[:is(input,textarea)[readonly]]:tw-bg-neutral-150",
3449
- "has-[:is(input,textarea)[readonly]]:focus-within:tw-ring-0",
3450
- "has-[:is(input,textarea)[readonly]]:tw-border-neutral-150",
3265
+ "tw:has-[:is(input,textarea)[readonly]]:bg-neutral-150",
3266
+ "tw:has-[:is(input,textarea)[readonly]]:focus-within:ring-0",
3267
+ "tw:has-[:is(input,textarea)[readonly]]:border-neutral-150",
3451
3268
  // disabled cursor (opacity owned by variant)
3452
- "has-[:is(input,textarea):disabled]:tw-cursor-not-allowed",
3269
+ "tw:has-[:is(input,textarea):disabled]:cursor-not-allowed",
3453
3270
  // textarea: top-align addons, allow vertical expansion, own its y-padding
3454
- "has-[textarea]:tw-items-start",
3455
- "has-[[data-align=block-start]:not(:empty)]:tw-flex-wrap",
3456
- "has-[[data-align=block-end]:not(:empty)]:tw-flex-wrap",
3457
- "[&>input]:has-[[data-align=block-start]:not(:empty)]:tw-w-auto",
3458
- "[&>input]:has-[[data-align=block-start]:not(:empty)]:tw-flex-1",
3459
- "[&>input]:has-[[data-align=block-end]:not(:empty)]:tw-w-auto",
3460
- "[&>input]:has-[[data-align=block-end]:not(:empty)]:tw-flex-1",
3461
- "[&>input]:tw-px-4",
3462
- "[&>input]:has-[[data-align=inline-start]:not(:empty)]:tw-pl-2",
3463
- "[&>input]:has-[[data-align=inline-end]:not(:empty)]:tw-pr-2"
3271
+ "tw:has-[textarea]:items-start",
3272
+ "tw:has-[[data-align=block-start]:not(:empty)]:flex-wrap",
3273
+ "tw:has-[[data-align=block-end]:not(:empty)]:flex-wrap",
3274
+ "tw:[&>input]:has-[[data-align=block-start]:not(:empty)]:w-auto",
3275
+ "tw:[&>input]:has-[[data-align=block-start]:not(:empty)]:flex-1",
3276
+ "tw:[&>input]:has-[[data-align=block-end]:not(:empty)]:w-auto",
3277
+ "tw:[&>input]:has-[[data-align=block-end]:not(:empty)]:flex-1",
3278
+ "tw:[&>input]:px-4",
3279
+ "tw:[&>input]:has-[[data-align=inline-start]:not(:empty)]:pl-2",
3280
+ "tw:[&>input]:has-[[data-align=inline-end]:not(:empty)]:pr-2"
3464
3281
  ],
3465
3282
  {
3466
3283
  defaultVariants: {
@@ -3473,153 +3290,153 @@ var inputGroupVariants = classVarianceAuthority.cva(
3473
3290
  {
3474
3291
  variant: "secondary",
3475
3292
  state: "error",
3476
- className: ["tw-bg-error-100"]
3293
+ className: ["tw:bg-error-100"]
3477
3294
  },
3478
3295
  {
3479
3296
  variant: "secondary",
3480
3297
  state: "warning",
3481
- className: ["tw-bg-warning-100"]
3298
+ className: ["tw:bg-warning-100"]
3482
3299
  },
3483
3300
  {
3484
3301
  variant: "primary",
3485
3302
  state: "default",
3486
3303
  focusVariant: "off",
3487
- className: ["has-[:is(input,textarea):focus]:tw-border-neutral-200"]
3304
+ className: ["tw:has-[:is(input,textarea):focus]:border-neutral-200"]
3488
3305
  },
3489
3306
  {
3490
3307
  variant: "secondary",
3491
3308
  state: "default",
3492
3309
  focusVariant: "off",
3493
- className: ["has-[:is(input,textarea):focus]:tw-border-neutral-100"]
3310
+ className: ["tw:has-[:is(input,textarea):focus]:border-neutral-100"]
3494
3311
  },
3495
3312
  {
3496
3313
  variant: ["primary", "secondary"],
3497
3314
  state: "error",
3498
3315
  focusVariant: "on",
3499
- className: ["!tw-border-error-500", "!tw-ring-error-200"]
3316
+ className: ["tw:!border-error-500", "tw:!ring-error-200"]
3500
3317
  },
3501
3318
  {
3502
3319
  variant: ["primary", "secondary"],
3503
3320
  state: "warning",
3504
3321
  focusVariant: "on",
3505
- className: ["!tw-border-warning-500", "!tw-ring-warning-200"]
3322
+ className: ["tw:!border-warning-500", "tw:!ring-warning-200"]
3506
3323
  },
3507
3324
  // --- argo ---
3508
3325
  {
3509
3326
  variant: "argo",
3510
3327
  state: "default",
3511
3328
  className: [
3512
- "has-[:is(input,textarea):focus]:tw-border-primary",
3513
- "has-[:is(input,textarea):focus]:tw-ring-ring/50"
3329
+ "tw:has-[:is(input,textarea):focus]:border-primary",
3330
+ "tw:has-[:is(input,textarea):focus]:ring-ring/50"
3514
3331
  ]
3515
3332
  },
3516
3333
  {
3517
3334
  variant: "argo",
3518
3335
  state: "error",
3519
3336
  className: [
3520
- "tw-border-destructive",
3521
- "has-[:is(input,textarea):focus]:tw-border-destructive",
3522
- "has-[:is(input,textarea):focus]:tw-ring-destructive/20"
3337
+ "tw:border-destructive",
3338
+ "tw:has-[:is(input,textarea):focus]:border-destructive",
3339
+ "tw:has-[:is(input,textarea):focus]:ring-destructive/20"
3523
3340
  ]
3524
3341
  },
3525
3342
  {
3526
3343
  variant: "argo",
3527
3344
  focusVariant: "on",
3528
- className: ["!tw-border-primary", "!tw-ring-ring/50"]
3345
+ className: ["tw:!border-primary", "tw:!ring-ring/50"]
3529
3346
  },
3530
3347
  {
3531
3348
  variant: "argo",
3532
3349
  state: "error",
3533
3350
  focusVariant: "on",
3534
- className: ["!tw-border-destructive", "!tw-ring-destructive/20"]
3351
+ className: ["tw:!border-destructive", "tw:!ring-destructive/20"]
3535
3352
  },
3536
3353
  {
3537
3354
  variant: "argo",
3538
3355
  state: "default",
3539
3356
  focusVariant: "off",
3540
- className: ["has-[:is(input,textarea):focus]:tw-border-input"]
3357
+ className: ["tw:has-[:is(input,textarea):focus]:border-input"]
3541
3358
  }
3542
3359
  ],
3543
3360
  variants: {
3544
3361
  focusVariant: {
3545
3362
  default: [],
3546
- on: ["!tw-border-ring", "!tw-ring-ring/30", "!tw-ring-4"],
3547
- off: ["has-[:is(input,textarea):focus]:!tw-ring-0"]
3363
+ on: ["tw:!border-ring", "tw:!ring-ring/30", "tw:!ring-4"],
3364
+ off: ["tw:has-[:is(input,textarea):focus]:!ring-0"]
3548
3365
  },
3549
3366
  variant: {
3550
3367
  primary: [
3551
- "tw-bg-white",
3552
- "has-[:is(input,textarea):disabled]:tw-opacity-40",
3368
+ "tw:bg-white",
3369
+ "tw:has-[:is(input,textarea):disabled]:opacity-40",
3553
3370
  // aria-invalid on the control surfaces the error chrome without a `state` prop — the
3554
3371
  // accessible path (mirrors the `state="error"` legacy tokens). Higher specificity than
3555
3372
  // the default focus selector, so it wins without `!important`.
3556
- "has-[:is(input,textarea)[aria-invalid=true]]:tw-border-error-500",
3557
- "has-[:is(input,textarea)[aria-invalid=true]:focus]:tw-border-error-500",
3558
- "has-[:is(input,textarea)[aria-invalid=true]:focus]:tw-ring-error-200"
3373
+ "tw:has-[:is(input,textarea)[aria-invalid=true]]:border-error-500",
3374
+ "tw:has-[:is(input,textarea)[aria-invalid=true]:focus]:border-error-500",
3375
+ "tw:has-[:is(input,textarea)[aria-invalid=true]:focus]:ring-error-200"
3559
3376
  ],
3560
3377
  secondary: [
3561
- "tw-bg-neutral-100",
3562
- "tw-border-neutral-100",
3563
- "has-[:is(input,textarea):disabled]:tw-opacity-40",
3564
- "has-[:is(input,textarea)[aria-invalid=true]]:tw-border-error-500",
3565
- "has-[:is(input,textarea)[aria-invalid=true]:focus]:tw-border-error-500",
3566
- "has-[:is(input,textarea)[aria-invalid=true]:focus]:tw-ring-error-200"
3378
+ "tw:bg-neutral-100",
3379
+ "tw:border-neutral-100",
3380
+ "tw:has-[:is(input,textarea):disabled]:opacity-40",
3381
+ "tw:has-[:is(input,textarea)[aria-invalid=true]]:border-error-500",
3382
+ "tw:has-[:is(input,textarea)[aria-invalid=true]:focus]:border-error-500",
3383
+ "tw:has-[:is(input,textarea)[aria-invalid=true]:focus]:ring-error-200"
3567
3384
  ],
3568
3385
  argo: [
3569
3386
  // argo follows the brand radius token (overrides the static base)
3570
- "tw-rounded-[var(--radius-lg,0.25rem)]",
3387
+ "tw:rounded-[var(--radius-lg,0.25rem)]",
3571
3388
  // muted filled input surface — gray, distinct from white containers; not the app-background token
3572
- "tw-bg-muted",
3573
- "tw-border-input",
3574
- "tw-text-foreground",
3575
- "has-[:is(input,textarea):disabled]:tw-opacity-50",
3389
+ "tw:bg-muted",
3390
+ "tw:border-input",
3391
+ "tw:text-foreground",
3392
+ "tw:has-[:is(input,textarea):disabled]:opacity-50",
3576
3393
  // readonly: keep the themed input surface/border. The base layer's fixed
3577
3394
  // `neutral-150` (a light grey) is correct for the legacy light chrome but
3578
3395
  // collides with argo's themed `foreground` text — light-on-light, invisible
3579
3396
  // in dark mode. Re-pin to the same `muted`/`input` tokens the editable argo
3580
3397
  // input uses (validated AA), so readonly stays legible in every scheme.
3581
- "has-[:is(input,textarea)[readonly]]:tw-bg-muted",
3582
- "has-[:is(input,textarea)[readonly]]:tw-border-input",
3398
+ "tw:has-[:is(input,textarea)[readonly]]:bg-muted",
3399
+ "tw:has-[:is(input,textarea)[readonly]]:border-input",
3583
3400
  // higher specificity than has-[:is(input,textarea):focus] — prevents focus border on readonly
3584
- "has-[:is(input,textarea)[readonly]:focus]:tw-border-input",
3401
+ "tw:has-[:is(input,textarea)[readonly]:focus]:border-input",
3585
3402
  // aria-invalid on the control surfaces the error chrome without a `state` prop — the
3586
3403
  // accessible path (uses the themeable `destructive` status token).
3587
- "has-[:is(input,textarea)[aria-invalid=true]]:tw-border-destructive",
3588
- "has-[:is(input,textarea)[aria-invalid=true]:focus]:tw-border-destructive",
3589
- "has-[:is(input,textarea)[aria-invalid=true]:focus]:tw-ring-destructive/20"
3404
+ "tw:has-[:is(input,textarea)[aria-invalid=true]]:border-destructive",
3405
+ "tw:has-[:is(input,textarea)[aria-invalid=true]:focus]:border-destructive",
3406
+ "tw:has-[:is(input,textarea)[aria-invalid=true]:focus]:ring-destructive/20"
3590
3407
  ]
3591
3408
  },
3592
3409
  sizing: {
3593
3410
  default: [
3594
- "[&>:is(input,textarea)]:tw-py-2.5",
3595
- "[&>:is(input,textarea)]:tw-leading-[18px]",
3596
- "[&>textarea]:!tw-min-h-[calc(2.5rem-2px)]"
3411
+ "tw:[&>:is(input,textarea)]:py-2.5",
3412
+ "tw:[&>:is(input,textarea)]:leading-[18px]",
3413
+ "tw:[&>textarea]:!min-h-[calc(2.5rem-2px)]"
3597
3414
  ],
3598
3415
  small: [
3599
- "[&>:is(input,textarea)]:tw-py-2",
3600
- "[&>:is(input,textarea)]:tw-leading-[16px]",
3601
- "[&>textarea]:!tw-min-h-[calc(2rem-2px)]"
3416
+ "tw:[&>:is(input,textarea)]:py-2",
3417
+ "tw:[&>:is(input,textarea)]:leading-[16px]",
3418
+ "tw:[&>textarea]:!min-h-[calc(2rem-2px)]"
3602
3419
  ],
3603
3420
  medium: [
3604
- "[&>:is(input,textarea)]:tw-py-2",
3605
- "[&>:is(input,textarea)]:tw-leading-[18px]",
3606
- "[&>textarea]:!tw-min-h-[calc(2.25rem-2px)]"
3421
+ "tw:[&>:is(input,textarea)]:py-2",
3422
+ "tw:[&>:is(input,textarea)]:leading-[18px]",
3423
+ "tw:[&>textarea]:!min-h-[calc(2.25rem-2px)]"
3607
3424
  ]
3608
3425
  },
3609
3426
  state: {
3610
3427
  default: [
3611
- "has-[:is(input,textarea):focus]:tw-border-ring",
3612
- "has-[:is(input,textarea):focus]:tw-ring-ring/30"
3428
+ "tw:has-[:is(input,textarea):focus]:border-ring",
3429
+ "tw:has-[:is(input,textarea):focus]:ring-ring/30"
3613
3430
  ],
3614
3431
  error: [
3615
- "tw-border-error-500",
3616
- "has-[:is(input,textarea):focus]:tw-border-error-500",
3617
- "has-[:is(input,textarea):focus]:tw-ring-error-200"
3432
+ "tw:border-error-500",
3433
+ "tw:has-[:is(input,textarea):focus]:border-error-500",
3434
+ "tw:has-[:is(input,textarea):focus]:ring-error-200"
3618
3435
  ],
3619
3436
  warning: [
3620
- "tw-border-warning-500",
3621
- "has-[:is(input,textarea):focus]:tw-border-warning-500",
3622
- "has-[:is(input,textarea):focus]:tw-ring-warning-200"
3437
+ "tw:border-warning-500",
3438
+ "tw:has-[:is(input,textarea):focus]:border-warning-500",
3439
+ "tw:has-[:is(input,textarea):focus]:ring-warning-200"
3623
3440
  ]
3624
3441
  }
3625
3442
  }
@@ -3662,6 +3479,29 @@ InputGroup.Addon = InputGroupAddon;
3662
3479
  InputGroup.Button = InputGroupButton;
3663
3480
  InputGroup.TextArea = InputGroupTextArea;
3664
3481
  InputGroup.Text = InputGroupText;
3482
+ var useControllableState = ({
3483
+ prop,
3484
+ defaultProp,
3485
+ onChange
3486
+ }) => {
3487
+ const [uncontrolled, setUncontrolled] = react.useState(defaultProp);
3488
+ const isControlled = prop !== void 0;
3489
+ const value = prop !== void 0 ? prop : uncontrolled;
3490
+ const valueRef = react.useRef(value);
3491
+ valueRef.current = value;
3492
+ const onChangeRef = react.useRef(onChange);
3493
+ onChangeRef.current = onChange;
3494
+ const setValue = react.useCallback(
3495
+ (next) => {
3496
+ const nextValue = typeof next === "function" ? next(valueRef.current) : next;
3497
+ valueRef.current = nextValue;
3498
+ if (!isControlled) setUncontrolled(nextValue);
3499
+ onChangeRef.current?.(nextValue);
3500
+ },
3501
+ [isControlled]
3502
+ );
3503
+ return [value, setValue];
3504
+ };
3665
3505
 
3666
3506
  // src/blocks/ColorInput/ColorInput.tsx
3667
3507
  init_icons();
@@ -3709,7 +3549,7 @@ var ColorPicker = ({ value, disabled, readOnly, ...props }) => {
3709
3549
  if (!pickerRef.current) return;
3710
3550
  showPicker(pickerRef.current);
3711
3551
  };
3712
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "tw-relative", children: [
3552
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "tw:relative", children: [
3713
3553
  /* @__PURE__ */ jsxRuntime.jsx(
3714
3554
  "input",
3715
3555
  {
@@ -3719,7 +3559,7 @@ var ColorPicker = ({ value, disabled, readOnly, ...props }) => {
3719
3559
  value: coerceColorPickerValue(value),
3720
3560
  tabIndex: -1,
3721
3561
  "aria-hidden": true,
3722
- className: "tw-pointer-events-none tw-absolute tw-left-0 tw-top-full tw-size-0 tw-opacity-0",
3562
+ className: "tw:pointer-events-none tw:absolute tw:left-0 tw:top-full tw:size-0 tw:opacity-0",
3723
3563
  disabled,
3724
3564
  readOnly
3725
3565
  }
@@ -3731,7 +3571,7 @@ var ColorPicker = ({ value, disabled, readOnly, ...props }) => {
3731
3571
  disabled: disabled || readOnly,
3732
3572
  onClick: handleOpenPicker,
3733
3573
  "aria-label": "Pick color",
3734
- children: /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Pipette, { className: "tw-size-4" })
3574
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pipette, { className: "tw:size-4" })
3735
3575
  }
3736
3576
  )
3737
3577
  ] });
@@ -3758,13 +3598,13 @@ var ColorInput = ({
3758
3598
  ...restInputProps
3759
3599
  }) => {
3760
3600
  const inputRef = react.useRef(null);
3761
- const [internalValue, setInternalValue] = react.useState(defaultValue ?? "");
3601
+ const [value, setValue] = useControllableState({
3602
+ // A `null` controlled value stays controlled (coerced to ''); `undefined` is uncontrolled.
3603
+ prop: valueProp === null ? "" : valueProp,
3604
+ defaultProp: defaultValue ?? "",
3605
+ onChange: onValueChange
3606
+ });
3762
3607
  const isControlled = valueProp !== void 0;
3763
- const value = isControlled ? valueProp ?? "" : internalValue;
3764
- const setValue = (nextValue) => {
3765
- if (!isControlled) setInternalValue(nextValue);
3766
- onValueChange?.(nextValue);
3767
- };
3768
3608
  const canClear = allowClear && !!value && !disabled && !readOnly;
3769
3609
  const swatchColor = coerceHexInputValue(value);
3770
3610
  const isValidSwatch = isCompleteHexColor(swatchColor);
@@ -3806,24 +3646,24 @@ var ColorInput = ({
3806
3646
  {
3807
3647
  align: "inline-start",
3808
3648
  className: cn(
3809
- { "-tw-ml-7 tw-opacity-0": !value },
3810
- "tw-transition-[opacity,margin]",
3811
- "tw-ease-linear",
3812
- "tw-duration-200"
3649
+ { "tw:-ml-7 tw:opacity-0": !value },
3650
+ "tw:transition-[opacity,margin]",
3651
+ "tw:ease-linear",
3652
+ "tw:duration-200"
3813
3653
  ),
3814
3654
  children: /* @__PURE__ */ jsxRuntime.jsx(
3815
3655
  "div",
3816
3656
  {
3817
3657
  style: isValidSwatch ? { background: swatchColor } : void 0,
3818
3658
  className: cn(
3819
- "tw-size-5",
3820
- "tw-shrink-0",
3821
- "tw-rounded-sm",
3822
- "tw-border",
3823
- "tw-border-solid",
3824
- "tw-border-neutral-300",
3659
+ "tw:size-5",
3660
+ "tw:shrink-0",
3661
+ "tw:rounded-sm",
3662
+ "tw:border",
3663
+ "tw:border-solid",
3664
+ "tw:border-neutral-300",
3825
3665
  {
3826
- "tw-bg-[linear-gradient(to_top_right,transparent_calc(50%_-_1px),theme(colors.red.300)_calc(50%_-_1px),theme(colors.red.300)_calc(50%_+_1px),transparent_calc(50%_+_1px))]": !isValidSwatch
3666
+ "tw:bg-[linear-gradient(to_top_right,transparent_calc(50%_-_1px),theme(colors.red.300)_calc(50%_-_1px),theme(colors.red.300)_calc(50%_+_1px),transparent_calc(50%_+_1px))]": !isValidSwatch
3827
3667
  }
3828
3668
  )
3829
3669
  }
@@ -3850,7 +3690,7 @@ var ColorInput = ({
3850
3690
  onMouseDown: (event) => event.preventDefault(),
3851
3691
  onClick: handleClear,
3852
3692
  "aria-label": "Clear color",
3853
- children: /* @__PURE__ */ jsxRuntime.jsx(icons_exports.X, { className: "tw-size-4" })
3693
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "tw:size-4" })
3854
3694
  }
3855
3695
  ),
3856
3696
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -3867,15 +3707,12 @@ var ColorInput = ({
3867
3707
  }
3868
3708
  );
3869
3709
  };
3870
- var FormGroupColorInput = ({
3871
- ref,
3872
- ...props
3873
- }) => {
3710
+ var FormGroupColorInput = ({ ref, ...props }) => {
3874
3711
  const { state } = useFormGroupContext();
3875
3712
  return /* @__PURE__ */ jsxRuntime.jsx(ColorInput, { state, ...props, ref });
3876
3713
  };
3877
3714
 
3878
- // src/components/FormGroup/FormGroupError.tsx
3715
+ // src/blocks/FormGroup/FormGroupError.tsx
3879
3716
  init_utils2();
3880
3717
  var toMessage = (entry) => typeof entry === "string" ? entry : entry?.message;
3881
3718
  var FormGroupError = ({ children, className, errors, ...rest }) => {
@@ -3884,19 +3721,19 @@ var FormGroupError = ({ children, className, errors, ...rest }) => {
3884
3721
  const messages = (errors ?? []).map(toMessage).filter((message) => !!message);
3885
3722
  if (messages.length === 0) return null;
3886
3723
  if (messages.length === 1) return messages[0];
3887
- return /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "tw-m-0 tw-flex tw-list-disc tw-flex-col tw-gap-0 tw-pl-4", children: messages.map((message, index) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: message }, index)) });
3724
+ return /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "tw:m-0 tw:flex tw:list-disc tw:flex-col tw:gap-0 tw:pl-4", children: messages.map((message, index) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: message }, index)) });
3888
3725
  }, [children, errors]);
3889
3726
  if (!content) return null;
3890
- return /* @__PURE__ */ jsxRuntime.jsx("div", { ...rest, role: "alert", className: cn("tw-m-0 tw-text-xs tw-text-destructive", className), children: content });
3727
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ...rest, role: "alert", className: cn("tw:m-0 tw:text-xs tw:text-destructive", className), children: content });
3891
3728
  };
3892
- var helpVariants = classVarianceAuthority.cva(["tw-m-0", "tw-text-xs"], {
3729
+ var helpVariants = classVarianceAuthority.cva(["tw:m-0", "tw:text-xs"], {
3893
3730
  defaultVariants: {
3894
3731
  state: "default"
3895
3732
  },
3896
3733
  variants: {
3897
3734
  state: {
3898
- default: ["tw-text-muted-foreground"],
3899
- warning: ["tw-text-warning"]
3735
+ default: ["tw:text-muted-foreground"],
3736
+ warning: ["tw:text-warning"]
3900
3737
  }
3901
3738
  }
3902
3739
  });
@@ -3962,10 +3799,7 @@ var NumberInput = ({
3962
3799
  }
3963
3800
  );
3964
3801
  };
3965
- var FormGroupNumberInput = ({
3966
- ref,
3967
- ...props
3968
- }) => {
3802
+ var FormGroupNumberInput = ({ ref, ...props }) => {
3969
3803
  const { state } = useFormGroupContext();
3970
3804
  return /* @__PURE__ */ jsxRuntime.jsx(NumberInput, { ...props, ref, state });
3971
3805
  };
@@ -3977,8 +3811,18 @@ var Textarea = ({
3977
3811
  variant,
3978
3812
  sizing,
3979
3813
  focusVariant,
3814
+ // value handling
3815
+ value: valueProp,
3816
+ defaultValue,
3817
+ onValueChange,
3980
3818
  ...rest
3981
3819
  }) => {
3820
+ const [value, setValue] = useControllableState({
3821
+ // `undefined` stays uncontrolled; any provided value (incl. `null`) is controlled, coerced to ''.
3822
+ prop: valueProp === void 0 ? void 0 : valueProp ?? "",
3823
+ defaultProp: defaultValue ?? "",
3824
+ onChange: onValueChange
3825
+ });
3982
3826
  return /* @__PURE__ */ jsxRuntime.jsx(
3983
3827
  InputGroup,
3984
3828
  {
@@ -3987,7 +3831,7 @@ var Textarea = ({
3987
3831
  focusVariant,
3988
3832
  variant,
3989
3833
  className: containerClassName,
3990
- children: /* @__PURE__ */ jsxRuntime.jsx(InputGroup.TextArea, { ...rest, ref })
3834
+ children: /* @__PURE__ */ jsxRuntime.jsx(InputGroup.TextArea, { ...rest, ref, value, onValueChange: setValue })
3991
3835
  }
3992
3836
  );
3993
3837
  };
@@ -3995,12 +3839,10 @@ var FormGroupTextarea = (props) => {
3995
3839
  const { state } = useFormGroupContext();
3996
3840
  return /* @__PURE__ */ jsxRuntime.jsx(Textarea, { state, ...props });
3997
3841
  };
3998
-
3999
- // src/components/Input/Input.tsx
4000
3842
  init_icons();
4001
3843
  init_utils2();
4002
3844
 
4003
- // src/components/Input/utils.ts
3845
+ // src/blocks/TextInput/utils.ts
4004
3846
  init_utils2();
4005
3847
  var genInputTestId = (prefix = "") => {
4006
3848
  const ps = createPrefixedString(prefix);
@@ -4011,7 +3853,11 @@ var genInputTestId = (prefix = "") => {
4011
3853
  clearButton: ps`clear-button`
4012
3854
  };
4013
3855
  };
4014
- var Input = ({
3856
+ var sanitizeTextInputValue = (value) => {
3857
+ if (typeof value === "string" && value.trim() === "") return "";
3858
+ return value;
3859
+ };
3860
+ var TextInput = ({
4015
3861
  ref: forwardedRef,
4016
3862
  state = "default",
4017
3863
  sizing = "default",
@@ -4033,23 +3879,28 @@ var Input = ({
4033
3879
  focusVariant = "default",
4034
3880
  onChange,
4035
3881
  onBlur,
4036
- value,
3882
+ onValueChange,
3883
+ onValueBlur,
3884
+ value: valueProp,
4037
3885
  defaultValue,
4038
3886
  ...inputProps
4039
3887
  }) => {
4040
- const [hasUncontrolledValue, setHasUncontrolledValue] = react.useState(() => !!defaultValue);
4041
- const hasValue = !!value || hasUncontrolledValue;
4042
3888
  const inputRef = react.useRef(null);
3889
+ const [value, setValue] = useControllableState({
3890
+ // `undefined` stays uncontrolled; any provided value (incl. `null`) is controlled and coerced
3891
+ // to a string. Whitespace-only input collapses to '' via `sanitizeTextInputValue`.
3892
+ prop: valueProp === void 0 ? void 0 : sanitizeTextInputValue(valueProp) ?? "",
3893
+ defaultProp: sanitizeTextInputValue(defaultValue) ?? "",
3894
+ onChange: onValueChange
3895
+ });
4043
3896
  const testId = genInputTestId(prefixTestId);
4044
- const isClearButtonVisible = hasValue && !disabled && !readOnly || !!onClear;
3897
+ const isClearButtonVisible = !!value && !disabled && !readOnly || !!onClear;
4045
3898
  const handleChange = (event) => {
4046
- const val = event.target.value;
4047
- setHasUncontrolledValue(val !== "");
3899
+ setValue(event.target.value);
4048
3900
  onChange?.(event);
4049
3901
  };
4050
3902
  const handleBlur = (event) => {
4051
- const val = event.target.value;
4052
- setHasUncontrolledValue(val !== "");
3903
+ onValueBlur?.(event.target.value);
4053
3904
  onBlur?.(event);
4054
3905
  };
4055
3906
  const handleClear = () => {
@@ -4057,11 +3908,8 @@ var Input = ({
4057
3908
  inputRef.current.value = "";
4058
3909
  inputRef.current.focus();
4059
3910
  onClear?.();
4060
- setHasUncontrolledValue(false);
4061
- onChange?.(createChangeInputEvent(inputRef.current));
3911
+ handleChange(createChangeInputEvent(inputRef.current));
4062
3912
  };
4063
- const isControlled = value !== void 0;
4064
- const valueProp = isControlled ? { value: value ?? "" } : { defaultValue: defaultValue ?? "" };
4065
3913
  return /* @__PURE__ */ jsxRuntime.jsxs(
4066
3914
  InputGroup,
4067
3915
  {
@@ -4077,7 +3925,7 @@ var Input = ({
4077
3925
  InputGroup.Input,
4078
3926
  {
4079
3927
  ...inputProps,
4080
- ...valueProp,
3928
+ value,
4081
3929
  autoFocus,
4082
3930
  type,
4083
3931
  onChange: handleChange,
@@ -4099,14 +3947,14 @@ var Input = ({
4099
3947
  onMouseDown: (e) => e.preventDefault(),
4100
3948
  onClick: handleClear,
4101
3949
  "data-testid": testId.clearButton,
4102
- children: /* @__PURE__ */ jsxRuntime.jsx(icons_exports.X, { className: "tw-size-4" })
3950
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "tw:size-4" })
4103
3951
  }
4104
3952
  ),
4105
3953
  rightSuffix && /* @__PURE__ */ jsxRuntime.jsx(
4106
3954
  "div",
4107
3955
  {
4108
3956
  className: cn({
4109
- "tw-whitespace-nowrap tw-bg-muted tw-px-4 -tw-mr-4 tw-py-2.5": rightSuffixVariant === "addon"
3957
+ "tw:whitespace-nowrap tw:bg-muted tw:px-4 tw:-mr-4 tw:py-2.5": rightSuffixVariant === "addon"
4110
3958
  }),
4111
3959
  children: rightSuffix
4112
3960
  }
@@ -4116,53 +3964,12 @@ var Input = ({
4116
3964
  }
4117
3965
  );
4118
3966
  };
4119
- var sanitizeTextInputValue = (value) => {
4120
- if (typeof value === "string" && value.trim() === "") return "";
4121
- return value;
4122
- };
4123
- var TextInput = ({
4124
- ref,
4125
- value,
4126
- defaultValue,
4127
- type = "text",
4128
- variant,
4129
- onValueChange,
4130
- onChange,
4131
- onValueBlur,
4132
- onBlur,
4133
- ...props
4134
- }) => {
4135
- const handleChange = (event) => {
4136
- onValueChange?.(event.target.value);
4137
- onChange?.(event);
4138
- };
4139
- const handleBlur = (event) => {
4140
- onValueBlur?.(event.target.value);
4141
- onBlur?.(event);
4142
- };
4143
- return /* @__PURE__ */ jsxRuntime.jsx(
4144
- Input,
4145
- {
4146
- ...props,
4147
- ref,
4148
- onChange: handleChange,
4149
- onBlur: handleBlur,
4150
- type,
4151
- variant,
4152
- value: sanitizeTextInputValue(value),
4153
- defaultValue: sanitizeTextInputValue(defaultValue)
4154
- }
4155
- );
4156
- };
4157
- var FormGroupTextInput = ({
4158
- ref,
4159
- ...props
4160
- }) => {
3967
+ var FormGroupTextInput = ({ ref, ...props }) => {
4161
3968
  const { state } = useFormGroupContext();
4162
3969
  return /* @__PURE__ */ jsxRuntime.jsx(TextInput, { state, ...props, ref });
4163
3970
  };
4164
3971
  var FormGroup = ({ className, children, state, ...rest }) => {
4165
- return /* @__PURE__ */ jsxRuntime.jsx(FormGroupProvider, { value: { state }, children: /* @__PURE__ */ jsxRuntime.jsx("div", { ...rest, className: cn("tw-flex tw-flex-col tw-gap-1", className), children }) });
3972
+ return /* @__PURE__ */ jsxRuntime.jsx(FormGroupProvider, { value: { state }, children: /* @__PURE__ */ jsxRuntime.jsx("div", { ...rest, className: cn("tw:flex tw:flex-col tw:gap-1", className), children }) });
4166
3973
  };
4167
3974
  FormGroup.Help = FormGroupHelp;
4168
3975
  FormGroup.Error = FormGroupError;
@@ -4171,10 +3978,81 @@ FormGroup.NumberInput = FormGroupNumberInput;
4171
3978
  FormGroup.ColorInput = FormGroupColorInput;
4172
3979
  FormGroup.Textarea = FormGroupTextarea;
4173
3980
 
3981
+ // src/blocks/MarkdownEditor/plugins/toolbar/LinkPanel.tsx
3982
+ init_Button2();
3983
+
3984
+ // src/components/ButtonGroup/ButtonGroup.tsx
3985
+ init_utils2();
3986
+ var buttonGroupVariant = classVarianceAuthority.cva(
3987
+ ["tailwindcss-preflight", "tw:inline-flex", "tw:items-center", "tw:group/button-group"],
3988
+ {
3989
+ defaultVariants: {
3990
+ variant: "inline",
3991
+ space: "small"
3992
+ },
3993
+ variants: {
3994
+ variant: {
3995
+ inline: [],
3996
+ block: [
3997
+ "tw:w-full",
3998
+ "tw:flex-col",
3999
+ "tw:sm:flex-row",
4000
+ "tw:[&_a]:flex-1",
4001
+ "tw:[&>button:not([data-icon-only=true])]:flex-1"
4002
+ ]
4003
+ },
4004
+ space: {
4005
+ "extra-small": "tw:gap-1",
4006
+ "little-small": "tw:gap-2",
4007
+ small: "tw:gap-3",
4008
+ medium: "tw:gap-4",
4009
+ large: "tw:gap-6",
4010
+ compact: [
4011
+ "tw:border-collapse",
4012
+ "tw:!gap-0",
4013
+ // ensure that focus visible outline is at the top
4014
+ "tw:[&>*:focus-visible]:!z-10",
4015
+ "tw:[&>*:not(:first-child)]:rounded-l-none",
4016
+ "tw:[&>*:not(:last-child)]:rounded-r-none",
4017
+ "tw:[&>*:not(:last-child)]:border-r-0",
4018
+ "tw:[&>*:not(:first-child)]:border-l-0",
4019
+ // separator
4020
+ "tw:[&>*:not(:first-child)]:before:content",
4021
+ "tw:[&>*:not(:first-child)]:before:absolute",
4022
+ "tw:[&>*:not(:first-child)]:before:left-0",
4023
+ "tw:[&>*:not(:first-child)]:before:h-full",
4024
+ "tw:[&>*:not(:first-child)]:before:w-px",
4025
+ "tw:[&>*:not(:first-child)]:before:bg-black/10"
4026
+ ]
4027
+ }
4028
+ }
4029
+ }
4030
+ );
4031
+ var ButtonGroup = ({
4032
+ ref,
4033
+ children,
4034
+ space = "small",
4035
+ className,
4036
+ variant,
4037
+ ...rest
4038
+ }) => {
4039
+ return /* @__PURE__ */ jsxRuntime.jsx(
4040
+ "div",
4041
+ {
4042
+ ref,
4043
+ ...rest,
4044
+ role: "group",
4045
+ "data-variant": variant,
4046
+ className: cn(buttonGroupVariant({ variant, space }), className),
4047
+ children
4048
+ }
4049
+ );
4050
+ };
4051
+
4174
4052
  // src/components/Label/Label.tsx
4175
4053
  init_utils2();
4176
- var Optional = ({ className, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("span", { ...props, "aria-hidden": true, className: cn("tw-ml-0.5", "tw-text-muted-foreground", className), children: "(optional)" });
4177
- var Required = ({ className, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("span", { ...props, "aria-hidden": true, className: cn("tw-ml-0.5", "tw-text-primary", className), children: "*" });
4054
+ var Optional = ({ className, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("span", { ...props, "aria-hidden": true, className: cn("tw:ml-0.5", "tw:text-muted-foreground", className), children: "(optional)" });
4055
+ var Required = ({ className, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("span", { ...props, "aria-hidden": true, className: cn("tw:ml-0.5", "tw:text-primary", className), children: "*" });
4178
4056
  var Label2 = ({ className, children, id, htmlFor, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
4179
4057
  RLabel__namespace.Root,
4180
4058
  {
@@ -4182,7 +4060,7 @@ var Label2 = ({ className, children, id, htmlFor, ...rest }) => /* @__PURE__ */
4182
4060
  id: id?.toString(),
4183
4061
  htmlFor: htmlFor?.toString(),
4184
4062
  className: cn(
4185
- "tw-m-0 tw-text-foreground tw-font-normal peer-disabled:tw-opacity-50",
4063
+ "tw:m-0 tw:text-foreground tw:font-normal tw:peer-disabled:opacity-50",
4186
4064
  className
4187
4065
  ),
4188
4066
  children
@@ -4191,9 +4069,12 @@ var Label2 = ({ className, children, id, htmlFor, ...rest }) => /* @__PURE__ */
4191
4069
  Label2.Optional = Optional;
4192
4070
  Label2.Required = Required;
4193
4071
 
4194
- // src/components/MarkdownEditor/plugins/toolbar/ToolbarButton.tsx
4195
- init_utils2();
4072
+ // src/blocks/MarkdownEditor/plugins/toolbar/LinkPanel.tsx
4073
+ init_icons();
4074
+
4075
+ // src/blocks/MarkdownEditor/plugins/toolbar/ToolbarButton.tsx
4196
4076
  init_Tooltip2();
4077
+ init_utils2();
4197
4078
  var ToolbarButton = ({
4198
4079
  active,
4199
4080
  disabled,
@@ -4208,9 +4089,9 @@ var ToolbarButton = ({
4208
4089
  disabled,
4209
4090
  onClick,
4210
4091
  className: cn(
4211
- "tw-flex tw-h-7 tw-min-w-7 tw-cursor-pointer tw-items-center tw-justify-center tw-rounded tw-border-0 tw-bg-transparent tw-px-1 tw-text-xs tw-text-muted-foreground",
4212
- "hover:tw-bg-accent disabled:tw-cursor-not-allowed disabled:tw-opacity-30",
4213
- active && "tw-bg-secondary-100 tw-text-secondary-500",
4092
+ "tw:flex tw:h-7 tw:min-w-7 tw:cursor-pointer tw:items-center tw:justify-center tw:rounded tw:border-0 tw:bg-transparent tw:px-1 tw:text-xs tw:text-muted-foreground",
4093
+ "tw:hover:bg-accent tw:disabled:cursor-not-allowed tw:disabled:opacity-30",
4094
+ active && "tw:bg-secondary-100 tw:text-secondary-500",
4214
4095
  extraClassName
4215
4096
  ),
4216
4097
  children
@@ -4282,20 +4163,20 @@ var LinkPanel = ({ editor, isLink }) => {
4282
4163
  active: true,
4283
4164
  onClick: () => editor.dispatchCommand(link.TOGGLE_LINK_COMMAND, null),
4284
4165
  tooltip: "Remove Link",
4285
- children: /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Link, { className: "tw-size-4" })
4166
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Link, { className: "tw:size-4" })
4286
4167
  }
4287
4168
  );
4288
4169
  }
4289
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "tw-relative", children: [
4290
- /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { active: open, onClick: handleOpen, tooltip: "Insert Link", children: /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Link, { className: "tw-size-4" }) }),
4170
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "tw:relative", children: [
4171
+ /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { active: open, onClick: handleOpen, tooltip: "Insert Link", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Link, { className: "tw:size-4" }) }),
4291
4172
  open && /* @__PURE__ */ jsxRuntime.jsx(
4292
4173
  "div",
4293
4174
  {
4294
4175
  ref: panelRef,
4295
- className: "tw-absolute tw-left-0 tw-top-full tw-z-50 tw-mt-1 tw-w-80 tw-rounded-md tw-border tw-border-border tw-bg-popover tw-p-3 tw-text-popover-foreground tw-shadow-lg",
4296
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "tw-flex tw-flex-col tw-gap-2", children: [
4176
+ className: "tw:absolute tw:left-0 tw:top-full tw:z-50 tw:mt-1 tw:w-80 tw:rounded-md tw:border tw:border-border tw:bg-popover tw:p-3 tw:text-popover-foreground tw:shadow-lg",
4177
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "tw:flex tw:flex-col tw:gap-2", children: [
4297
4178
  /* @__PURE__ */ jsxRuntime.jsxs(FormGroup, { children: [
4298
- /* @__PURE__ */ jsxRuntime.jsx(Label2, { htmlFor: "link-label", className: "tw-mb-1 tw-text-xs", children: "Label" }),
4179
+ /* @__PURE__ */ jsxRuntime.jsx(Label2, { htmlFor: "link-label", className: "tw:mb-1 tw:text-xs", children: "Label" }),
4299
4180
  /* @__PURE__ */ jsxRuntime.jsx(
4300
4181
  TextInput,
4301
4182
  {
@@ -4310,7 +4191,7 @@ var LinkPanel = ({ editor, isLink }) => {
4310
4191
  )
4311
4192
  ] }),
4312
4193
  /* @__PURE__ */ jsxRuntime.jsxs(FormGroup, { children: [
4313
- /* @__PURE__ */ jsxRuntime.jsx(Label2, { htmlFor: "link-url", className: "tw-mb-1 tw-text-xs", children: "URL" }),
4194
+ /* @__PURE__ */ jsxRuntime.jsx(Label2, { htmlFor: "link-url", className: "tw:mb-1 tw:text-xs", children: "URL" }),
4314
4195
  /* @__PURE__ */ jsxRuntime.jsx(
4315
4196
  TextInput,
4316
4197
  {
@@ -4332,7 +4213,7 @@ var LinkPanel = ({ editor, isLink }) => {
4332
4213
  )
4333
4214
  ] });
4334
4215
  };
4335
- var ToolbarDivider = () => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "tw-mx-0.5 tw-h-5 tw-w-px tw-bg-border" });
4216
+ var ToolbarDivider = () => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "tw:mx-0.5 tw:h-5 tw:w-px tw:bg-border" });
4336
4217
  var ELEMENT_FORMAT_TYPES = ["left", "center", "right", "justify", "start", "end", ""];
4337
4218
  var isElementFormatType = (value) => ELEMENT_FORMAT_TYPES.includes(value);
4338
4219
  var toElementFormatType = (value) => isElementFormatType(value) ? value : "left";
@@ -4441,7 +4322,7 @@ var ToolbarPlugin = () => {
4441
4322
  "aria-label": "Formatting options",
4442
4323
  onMouseDown: (e) => e.preventDefault(),
4443
4324
  style: { top: position.top, left: position.left },
4444
- className: "tw-absolute tw-z-[1060] tw-flex tw--translate-y-full tw-items-center tw-gap-0.5 tw-rounded-lg tw-border tw-border-border tw-bg-popover tw-px-1.5 tw-py-1 tw-text-popover-foreground tw-shadow-lg",
4325
+ className: "tw:absolute tw:z-[1060] tw:flex tw:-translate-y-full tw:items-center tw:gap-0.5 tw:rounded-lg tw:border tw:border-border tw:bg-popover tw:px-1.5 tw:py-1 tw:text-popover-foreground tw:shadow-lg",
4445
4326
  children: [
4446
4327
  /* @__PURE__ */ jsxRuntime.jsx(BlockTypeDropdown, { editor, blockType }),
4447
4328
  /* @__PURE__ */ jsxRuntime.jsx(ToolbarDivider, {}),
@@ -4451,7 +4332,7 @@ var ToolbarPlugin = () => {
4451
4332
  active: isBold,
4452
4333
  onClick: () => editor.dispatchCommand(lexical.FORMAT_TEXT_COMMAND, "bold"),
4453
4334
  tooltip: "Bold (Ctrl+B)",
4454
- children: /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Bold, { className: "tw-size-4" })
4335
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Bold, { className: "tw:size-4" })
4455
4336
  }
4456
4337
  ),
4457
4338
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -4460,7 +4341,7 @@ var ToolbarPlugin = () => {
4460
4341
  active: isItalic,
4461
4342
  onClick: () => editor.dispatchCommand(lexical.FORMAT_TEXT_COMMAND, "italic"),
4462
4343
  tooltip: "Italic (Ctrl+I)",
4463
- children: /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Italic, { className: "tw-size-4" })
4344
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Italic, { className: "tw:size-4" })
4464
4345
  }
4465
4346
  ),
4466
4347
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -4469,7 +4350,7 @@ var ToolbarPlugin = () => {
4469
4350
  active: isUnderline,
4470
4351
  onClick: () => editor.dispatchCommand(lexical.FORMAT_TEXT_COMMAND, "underline"),
4471
4352
  tooltip: "Underline (Ctrl+U)",
4472
- children: /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Underline, { className: "tw-size-4" })
4353
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Underline, { className: "tw:size-4" })
4473
4354
  }
4474
4355
  ),
4475
4356
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -4478,7 +4359,7 @@ var ToolbarPlugin = () => {
4478
4359
  active: isStrikethrough,
4479
4360
  onClick: () => editor.dispatchCommand(lexical.FORMAT_TEXT_COMMAND, "strikethrough"),
4480
4361
  tooltip: "Strikethrough",
4481
- children: /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Strikethrough, { className: "tw-size-4" })
4362
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Strikethrough, { className: "tw:size-4" })
4482
4363
  }
4483
4364
  ),
4484
4365
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -4487,7 +4368,7 @@ var ToolbarPlugin = () => {
4487
4368
  active: isCode,
4488
4369
  onClick: () => editor.dispatchCommand(lexical.FORMAT_TEXT_COMMAND, "code"),
4489
4370
  tooltip: "Inline Code",
4490
- children: /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Code, { className: "tw-size-4" })
4371
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Code, { className: "tw:size-4" })
4491
4372
  }
4492
4373
  ),
4493
4374
  /* @__PURE__ */ jsxRuntime.jsx(ToolbarDivider, {}),
@@ -4505,7 +4386,7 @@ var ToolbarPlugin = () => {
4505
4386
  }
4506
4387
  },
4507
4388
  tooltip: "Bullet List",
4508
- children: /* @__PURE__ */ jsxRuntime.jsx(icons_exports.List, { className: "tw-size-4" })
4389
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.List, { className: "tw:size-4" })
4509
4390
  }
4510
4391
  ),
4511
4392
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -4520,7 +4401,7 @@ var ToolbarPlugin = () => {
4520
4401
  }
4521
4402
  },
4522
4403
  tooltip: "Numbered List",
4523
- children: /* @__PURE__ */ jsxRuntime.jsx(icons_exports.ListOrdered, { className: "tw-size-4" })
4404
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ListOrdered, { className: "tw:size-4" })
4524
4405
  }
4525
4406
  ),
4526
4407
  /* @__PURE__ */ jsxRuntime.jsx(ToolbarDivider, {}),
@@ -4542,7 +4423,7 @@ var ToolbarPlugin = () => {
4542
4423
  });
4543
4424
  },
4544
4425
  tooltip: "Quote",
4545
- children: /* @__PURE__ */ jsxRuntime.jsx(icons_exports.Quote, { className: "tw-size-4" })
4426
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Quote, { className: "tw:size-4" })
4546
4427
  }
4547
4428
  ),
4548
4429
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -4561,7 +4442,7 @@ var ToolbarPlugin = () => {
4561
4442
  });
4562
4443
  },
4563
4444
  tooltip: "Code Block",
4564
- children: /* @__PURE__ */ jsxRuntime.jsx(icons_exports.SquareCode, { className: "tw-size-4" })
4445
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.SquareCode, { className: "tw:size-4" })
4565
4446
  }
4566
4447
  )
4567
4448
  ]
@@ -4571,35 +4452,35 @@ var ToolbarPlugin = () => {
4571
4452
  );
4572
4453
  };
4573
4454
 
4574
- // src/components/MarkdownEditor/theme.ts
4455
+ // src/blocks/MarkdownEditor/theme.ts
4575
4456
  var editorTheme = {
4576
- link: "tw-cursor-pointer !tw-text-primary tw-underline",
4457
+ link: "tw:cursor-pointer tw:!text-primary tw:underline",
4577
4458
  text: {
4578
- bold: "tw-font-bold",
4579
- italic: "tw-italic",
4580
- strikethrough: "tw-line-through",
4581
- underline: "tw-underline",
4582
- code: "tw-rounded tw-bg-muted tw-px-1 tw-py-0.5 tw-font-mono tw-text-[0.85em]"
4459
+ bold: "tw:font-bold",
4460
+ italic: "tw:italic",
4461
+ strikethrough: "tw:line-through",
4462
+ underline: "tw:underline",
4463
+ code: "tw:rounded tw:bg-muted tw:px-1 tw:py-0.5 tw:font-mono tw:text-[0.85em]"
4583
4464
  },
4584
4465
  list: {
4585
- ol: "!tw-list-decimal",
4586
- ul: "!tw-list-disc",
4587
- checklist: "!tw-list-none !tw-pl-0",
4466
+ ol: "tw:!list-decimal",
4467
+ ul: "tw:!list-disc",
4468
+ checklist: "tw:!list-none tw:!pl-0",
4588
4469
  listitemChecked: [
4589
- "tw-relative !tw-pl-6 tw-list-none tw-outline-none tw-line-through tw-text-muted-foreground",
4590
- 'before:tw-content-[""] before:tw-absolute before:tw-left-0 before:tw-top-[3px]',
4591
- "before:tw-size-4 before:tw-rounded before:tw-border before:tw-border-solid",
4592
- "before:tw-bg-primary before:tw-border-primary before:tw-cursor-pointer",
4593
- 'after:tw-content-[""] after:tw-absolute after:tw-left-[5.5px] after:tw-top-[5.5px]',
4594
- "after:tw-w-1 after:tw-h-2 after:tw-border-primary-foreground after:tw-border-solid",
4595
- "after:tw-border-r-[1.5px] after:tw-border-b-[1.5px] after:tw-border-t-0 after:tw-border-l-0",
4596
- "after:tw-rotate-45"
4470
+ "tw:relative tw:!pl-6 tw:list-none tw:outline-hidden tw:line-through tw:text-muted-foreground",
4471
+ 'tw:before:content-[""] tw:before:absolute tw:before:left-0 tw:before:top-[3px]',
4472
+ "tw:before:size-4 tw:before:rounded tw:before:border tw:before:border-solid",
4473
+ "tw:before:bg-primary tw:before:border-primary tw:before:cursor-pointer",
4474
+ 'tw:after:content-[""] tw:after:absolute tw:after:left-[5.5px] tw:after:top-[5.5px]',
4475
+ "tw:after:w-1 tw:after:h-2 tw:after:border-primary-foreground tw:after:border-solid",
4476
+ "tw:after:border-r-[1.5px] tw:after:border-b-[1.5px] tw:after:border-t-0 tw:after:border-l-0",
4477
+ "tw:after:rotate-45"
4597
4478
  ].join(" "),
4598
4479
  listitemUnchecked: [
4599
- "tw-relative !tw-pl-6 tw-list-none tw-outline-none",
4600
- 'before:tw-content-[""] before:tw-absolute before:tw-left-0 before:tw-top-[3px]',
4601
- "before:tw-size-4 before:tw-rounded before:tw-border before:tw-border-solid",
4602
- "before:tw-border-input before:tw-bg-background before:tw-cursor-pointer"
4480
+ "tw:relative tw:!pl-6 tw:list-none tw:outline-hidden",
4481
+ 'tw:before:content-[""] tw:before:absolute tw:before:left-0 tw:before:top-[3px]',
4482
+ "tw:before:size-4 tw:before:rounded tw:before:border tw:before:border-solid",
4483
+ "tw:before:border-input tw:before:bg-background tw:before:cursor-pointer"
4603
4484
  ].join(" ")
4604
4485
  }
4605
4486
  };
@@ -4663,16 +4544,16 @@ var MarkdownEditor = ({
4663
4544
  "div",
4664
4545
  {
4665
4546
  className: cn(
4666
- !compact && "tw-prose",
4667
- // Compact mode drops `tw-prose`, so Lexical's <p> wrappers fall back to the browser
4547
+ !compact && "tw:prose",
4548
+ // Compact mode drops `tw:prose`, so Lexical's <p> wrappers fall back to the browser
4668
4549
  // default `margin: 1em 0` — visually huge at heading sizes. Zero them, and use the
4669
4550
  // adjacent-sibling selector for paragraph spacing so single-paragraph blocks (titles,
4670
4551
  // short descriptions) stay tight while multi-paragraph blocks still breathe.
4671
- compact && "[&_p]:tw-m-0 [&_p+p]:tw-mt-2",
4552
+ compact && "tw:[&_p]:m-0 tw:[&_p+p]:mt-2",
4672
4553
  // Display-state clamp: 2 lines, dropped in focus-within so editing expands to full
4673
4554
  // height. line-clamp is self-gating (no effect below 3 lines), so short/empty content
4674
4555
  // renders clean; a CSS fade can't gate on overflow without JS, so it's omitted.
4675
- clampDisplay && "[&:not(:focus-within)]:tw-line-clamp-2",
4556
+ clampDisplay && "tw:[&:not(:focus-within)]:line-clamp-2",
4676
4557
  className
4677
4558
  ),
4678
4559
  onBlur: handleBlur,
@@ -4682,12 +4563,12 @@ var MarkdownEditor = ({
4682
4563
  "div",
4683
4564
  {
4684
4565
  className: cn(
4685
- "tw-relative tw-rounded-md tw-transition-colors",
4566
+ "tw:relative tw:rounded-md tw:transition-colors",
4686
4567
  // In compact mode the padding lets the hover bg / focus ring extend past the text,
4687
4568
  // but a matching negative margin shifts the wrapper outward so the text itself stays
4688
4569
  // aligned with the parent's content edge (i.e. with where static text would render).
4689
- compact ? "tw-px-1.5 tw-py-0.5 -tw-mx-1.5 -tw-my-0.5" : "tw-p-2",
4690
- editable && "tw-cursor-text hover:tw-bg-muted focus-within:tw-ring-2 focus-within:tw-ring-ring/40"
4570
+ compact ? "tw:px-1.5 tw:py-0.5 tw:-mx-1.5 tw:-my-0.5" : "tw:p-2",
4571
+ editable && "tw:cursor-text tw:hover:bg-muted tw:focus-within:ring-2 tw:focus-within:ring-ring/40"
4691
4572
  ),
4692
4573
  children: /* @__PURE__ */ jsxRuntime.jsx(
4693
4574
  LexicalRichTextPlugin.RichTextPlugin,
@@ -4695,15 +4576,15 @@ var MarkdownEditor = ({
4695
4576
  contentEditable: /* @__PURE__ */ jsxRuntime.jsx(
4696
4577
  LexicalContentEditable.ContentEditable,
4697
4578
  {
4698
- className: cn("tw-outline-none", useDefaultMinHeight && "tw-min-h-[100px]"),
4579
+ className: cn("tw:outline-hidden", useDefaultMinHeight && "tw:min-h-[100px]"),
4699
4580
  style: customMinHeight,
4700
4581
  "aria-placeholder": placeholder ?? "",
4701
4582
  placeholder: placeholder ? /* @__PURE__ */ jsxRuntime.jsx(
4702
4583
  "div",
4703
4584
  {
4704
4585
  className: cn(
4705
- "tw-pointer-events-none tw-absolute tw-select-none tw-text-muted-foreground",
4706
- compact ? "tw-left-1.5 tw-top-0.5" : "tw-left-2 tw-top-[calc(0.5rem+0.35em)]"
4586
+ "tw:pointer-events-none tw:absolute tw:select-none tw:text-muted-foreground",
4587
+ compact ? "tw:left-1.5 tw:top-0.5" : "tw:left-2 tw:top-[calc(0.5rem+0.35em)]"
4707
4588
  ),
4708
4589
  children: placeholder
4709
4590
  }