@keboola/design 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,13 @@
1
1
  import { clsx } from 'clsx';
2
2
  import { extendTailwindMerge } from 'tailwind-merge';
3
+ import { createContext, lazy, Suspense, use, useId, useState, useRef, useEffect, forwardRef, useCallback, useMemo } from 'react';
4
+ import { keboolaLegacy } from '@keboola/brand-registry';
3
5
  import { Portal, Content, Root, Trigger } from '@radix-ui/react-tooltip';
4
6
  import { cva } from 'class-variance-authority';
5
7
  import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
6
- import { createContext, lazy, Suspense, use, useId, useState, useRef, useEffect, forwardRef, useCallback, useMemo } from 'react';
7
8
  import * as lucide_react_star from 'lucide-react';
8
9
  import { Root as Root$2, Slottable } from '@radix-ui/react-slot';
10
+ import DOMPurify from 'dompurify';
9
11
  import { renderMermaidSVG } from 'beautiful-mermaid';
10
12
  import colors from '@keboola/tailwind-config/colors';
11
13
  import { CodeNode, $isCodeNode, $createCodeNode } from '@lexical/code';
@@ -126,20 +128,62 @@ var init_keyCodes = __esm({
126
128
  };
127
129
  }
128
130
  });
131
+ var ThemeContext;
132
+ var init_themeContext = __esm({
133
+ "src/components/ThemeProvider/themeContext.ts"() {
134
+ ThemeContext = createContext(null);
135
+ }
136
+ });
137
+ var useIsLegacyBrand;
138
+ var init_useIsLegacyBrand = __esm({
139
+ "src/components/internal/useIsLegacyBrand.ts"() {
140
+ init_themeContext();
141
+ useIsLegacyBrand = () => {
142
+ const context = use(ThemeContext);
143
+ return context === null || context.brand.id === keboolaLegacy.id;
144
+ };
145
+ }
146
+ });
129
147
  var tooltipVariants, TooltipContent;
130
148
  var init_TooltipContent = __esm({
131
149
  "src/components/Tooltip/TooltipContent.tsx"() {
150
+ init_useIsLegacyBrand();
132
151
  tooltipVariants = cva(
133
152
  [
134
153
  "tailwindcss-preflight",
135
154
  "tw-inline-block",
136
- "tw-rounded",
137
- "tw-bg-neutral-800",
138
- "tw-text-white",
139
155
  "tw-break-anywhere",
140
156
  "tw-max-h-96",
141
157
  "tw-overflow-y-auto",
142
- "tw-z-[1060]"
158
+ "tw-z-[1060]",
159
+ // legacy (dark) chrome — default
160
+ "tw-rounded",
161
+ "tw-bg-neutral-800",
162
+ "tw-text-white",
163
+ // argo chrome overrides — semantic floating-panel tokens
164
+ "data-[argo=true]:tw-rounded-2xl",
165
+ "data-[argo=true]:tw-border",
166
+ "data-[argo=true]:tw-border-solid",
167
+ "data-[argo=true]:tw-border-border",
168
+ "data-[argo=true]:tw-bg-popover",
169
+ "data-[argo=true]:tw-text-popover-foreground",
170
+ "data-[argo=true]:tw-shadow-md",
171
+ // argo open animation
172
+ "data-[argo=true]:data-[state=delayed-open]:tw-animate-in",
173
+ "data-[argo=true]:data-[state=instant-open]:tw-animate-in",
174
+ "data-[argo=true]:data-[state=delayed-open]:tw-fade-in-0",
175
+ "data-[argo=true]:data-[state=instant-open]:tw-fade-in-0",
176
+ "data-[argo=true]:data-[state=delayed-open]:tw-zoom-in-95",
177
+ "data-[argo=true]:data-[state=instant-open]:tw-zoom-in-95",
178
+ // argo closed animation
179
+ "data-[argo=true]:data-[state=closed]:tw-animate-out",
180
+ "data-[argo=true]:data-[state=closed]:tw-fade-out-0",
181
+ "data-[argo=true]:data-[state=closed]:tw-zoom-out-95",
182
+ // argo position animation
183
+ "data-[argo=true]:data-[side=bottom]:tw-slide-in-from-top-2",
184
+ "data-[argo=true]:data-[side=left]:tw-slide-in-from-right-2",
185
+ "data-[argo=true]:data-[side=right]:tw-slide-in-from-left-2",
186
+ "data-[argo=true]:data-[side=top]:tw-slide-in-from-bottom-2"
143
187
  ],
144
188
  {
145
189
  defaultVariants: {
@@ -172,6 +216,7 @@ var init_TooltipContent = __esm({
172
216
  TooltipContent = ({
173
217
  className,
174
218
  variant,
219
+ argo,
175
220
  keepOpenOnPointerDownOutside = false,
176
221
  children,
177
222
  onPointerDownOutside,
@@ -181,6 +226,8 @@ var init_TooltipContent = __esm({
181
226
  placement = "right",
182
227
  ...rest
183
228
  }) => {
229
+ const isLegacy = useIsLegacyBrand();
230
+ const renderArgo = !isLegacy || argo === true;
184
231
  const handlePointerDownOutside = (event) => {
185
232
  if (keepOpenOnPointerDownOutside) event.preventDefault();
186
233
  onPointerDownOutside?.(event);
@@ -189,7 +236,8 @@ var init_TooltipContent = __esm({
189
236
  Content,
190
237
  {
191
238
  ...rest,
192
- "data-tooltip-content": true,
239
+ "data-tooltip-content": renderArgo ? void 0 : true,
240
+ "data-argo": renderArgo,
193
241
  sideOffset,
194
242
  collisionPadding,
195
243
  onPointerDownOutside: handlePointerDownOutside,
@@ -268,6 +316,7 @@ var init_Tooltip = __esm({
268
316
  className,
269
317
  keepOpenOnTriggerClick = false,
270
318
  variant,
319
+ argo,
271
320
  placement = "right",
272
321
  forceHide = false,
273
322
  forceShow = false,
@@ -306,6 +355,7 @@ var init_Tooltip = __esm({
306
355
  {
307
356
  className,
308
357
  variant: resolvedVariant,
358
+ argo,
309
359
  placement,
310
360
  keepOpenOnPointerDownOutside: keepOpenOnTriggerClick,
311
361
  children: tooltip
@@ -394,28 +444,6 @@ var init_isMac = __esm({
394
444
  getIsMac();
395
445
  }
396
446
  });
397
-
398
- // src/utils/legacyIcon.tsx
399
- var isFAIconValue, registeredRenderer, warnedOnce, renderLegacyIcon;
400
- var init_legacyIcon = __esm({
401
- "src/utils/legacyIcon.tsx"() {
402
- isFAIconValue = (value) => typeof value === "string" || Array.isArray(value) && value.length === 2 && typeof value[0] === "string" && typeof value[1] === "string";
403
- registeredRenderer = null;
404
- warnedOnce = false;
405
- renderLegacyIcon = (value) => {
406
- if (!isFAIconValue(value)) return value;
407
- if (registeredRenderer) return registeredRenderer(value);
408
- if (!warnedOnce) {
409
- warnedOnce = true;
410
- console.warn(
411
- "[@keboola/design] renderLegacyIcon received a legacy FontAwesome icon value but no renderer is registered. Call setLegacyIconRenderer at app boot. Returning null.",
412
- value
413
- );
414
- }
415
- return null;
416
- };
417
- }
418
- });
419
447
  var init_useSHA256 = __esm({
420
448
  "src/utils/useSHA256.ts"() {
421
449
  }
@@ -455,7 +483,7 @@ var init_Skeleton = __esm({
455
483
  "tw-relative",
456
484
  "tw-overflow-hidden",
457
485
  "tw-pointer-events-none",
458
- "tw-bg-neutral-150",
486
+ "tw-bg-muted",
459
487
  // before
460
488
  'before:tw-content-[""]',
461
489
  "before:tw-opacity-100",
@@ -710,6 +738,8 @@ var init_styles = __esm({
710
738
  "tw-bg-clip-padding",
711
739
  // anchor support
712
740
  "!tw-no-underline",
741
+ "aria-disabled:tw-cursor-not-allowed",
742
+ "aria-disabled:tw-opacity-50",
713
743
  // icon
714
744
  "tw-shrink-0",
715
745
  "[&_svg]:tw-pointer-events-none",
@@ -804,6 +834,7 @@ var init_Button = __esm({
804
834
  "src/components/Button/Button.tsx"() {
805
835
  init_icons();
806
836
  init_utils();
837
+ init_useIsLegacyBrand();
807
838
  init_styles();
808
839
  Button = ({
809
840
  ref,
@@ -820,14 +851,11 @@ var init_Button = __esm({
820
851
  block = false,
821
852
  ...buttonProps
822
853
  }) => {
854
+ const isLegacy = useIsLegacyBrand();
855
+ const renderArgo = !isLegacy || argo;
823
856
  const Comp = asChild ? Root$2 : "button";
824
857
  const isIconOnly = String(size).startsWith("icon");
825
- const classNames = argo ? argoVariants({ variant, size, block, className }) : variants({
826
- size,
827
- variant,
828
- block,
829
- className
830
- });
858
+ const classNames = renderArgo ? argoVariants({ variant, size, block, className }) : variants({ size, variant, block, className });
831
859
  const handleClick = (event) => {
832
860
  const isAnchor = event.currentTarget.tagName === "A";
833
861
  if (isAnchor && disabled) {
@@ -882,11 +910,7 @@ var init_ButtonInline = __esm({
882
910
  },
883
911
  variants: {
884
912
  color: {
885
- link: [
886
- "tw-text-secondary-500",
887
- "hover:tw-text-secondary-600",
888
- "[&_svg]:tw-text-secondary-500"
889
- ],
913
+ link: ["tw-text-primary", "hover:tw-text-primary/90", "[&_svg]:tw-text-primary"],
890
914
  dark: ["tw-text-neutral-800 [&_svg]:tw-text-neutral-400"],
891
915
  danger: ["tw-text-error-500 [&_svg]:tw-text-error-500"],
892
916
  muted: ["tw-text-muted-foreground [&_svg]:tw-text-muted-foreground"],
@@ -1040,6 +1064,10 @@ var init_ZoomableSvg = __esm({
1040
1064
  MAX_SCALE = 3;
1041
1065
  ZOOM_STEP = 0.1;
1042
1066
  ZoomableSvg = ({ html, copyText, className }) => {
1067
+ const safeHtml = useMemo(
1068
+ () => DOMPurify.sanitize(html, { USE_PROFILES: { svg: true, svgFilters: true } }),
1069
+ [html]
1070
+ );
1043
1071
  const containerRef = useRef(null);
1044
1072
  const [scale, setScale] = useState(1);
1045
1073
  const [translate, setTranslate] = useState({ x: 0, y: 0 });
@@ -1135,7 +1163,7 @@ var init_ZoomableSvg = __esm({
1135
1163
  isFullscreen && "tw-h-full [&>svg]:tw-h-full"
1136
1164
  ),
1137
1165
  style: { transform: `translate(${translate.x}px, ${translate.y}px) scale(${scale})` },
1138
- dangerouslySetInnerHTML: { __html: html }
1166
+ dangerouslySetInnerHTML: { __html: safeHtml }
1139
1167
  }
1140
1168
  )
1141
1169
  }
@@ -1188,7 +1216,7 @@ var init_ZoomableSvg = __esm({
1188
1216
  "div",
1189
1217
  {
1190
1218
  role: "presentation",
1191
- className: "tw-fixed tw-inset-0 tw-z-[1060] tw-bg-neutral-50 tw-p-4",
1219
+ className: "tw-fixed tw-inset-0 tw-z-[1060] tw-bg-muted tw-p-4",
1192
1220
  onClick: stopPropagation,
1193
1221
  children: diagramContent
1194
1222
  }
@@ -1198,7 +1226,7 @@ var init_ZoomableSvg = __esm({
1198
1226
  "div",
1199
1227
  {
1200
1228
  className: cn(
1201
- "tw-overflow-hidden tw-rounded-md tw-border tw-border-neutral-150 tw-bg-neutral-50",
1229
+ "tw-overflow-hidden tw-rounded-md tw-border tw-border-border tw-bg-muted",
1202
1230
  className
1203
1231
  ),
1204
1232
  children: diagramContent
@@ -1220,12 +1248,17 @@ var MermaidDiagram_exports = {};
1220
1248
  __export(MermaidDiagram_exports, {
1221
1249
  MermaidDiagram: () => MermaidDiagram
1222
1250
  });
1223
- var mermaidPromise, getMermaid, stripFontImports, tryFastRender, makeResponsive, RENDER_DEBOUNCE_MS, svgCache, MermaidDiagram;
1251
+ var PRIMARY_FALLBACK_CHANNELS, resolvePrimary, mermaidPromise, getMermaid, stripFontImports, tryFastRender, makeResponsive, RENDER_DEBOUNCE_MS, svgCache, resolveSyncSvg, MermaidDiagram;
1224
1252
  var init_MermaidDiagram = __esm({
1225
1253
  "src/blocks/MermaidDiagram/MermaidDiagram.tsx"() {
1226
1254
  init_Skeleton();
1227
1255
  init_ZoomableSvg2();
1228
1256
  init_utils();
1257
+ PRIMARY_FALLBACK_CHANNELS = "31 143 255";
1258
+ resolvePrimary = () => {
1259
+ const channels = typeof document === "undefined" ? PRIMARY_FALLBACK_CHANNELS : getComputedStyle(document.documentElement).getPropertyValue("--color-primary").trim() || PRIMARY_FALLBACK_CHANNELS;
1260
+ return `rgb(${channels})`;
1261
+ };
1229
1262
  mermaidPromise = null;
1230
1263
  getMermaid = () => {
1231
1264
  if (!mermaidPromise) {
@@ -1274,7 +1307,7 @@ var init_MermaidDiagram = __esm({
1274
1307
  taskTextColor: colors.neutral[800],
1275
1308
  taskTextDarkColor: colors.neutral[800],
1276
1309
  taskTextLightColor: colors.neutral[800],
1277
- activeTaskBorderColor: colors.primary.DEFAULT,
1310
+ activeTaskBorderColor: resolvePrimary(),
1278
1311
  activeTaskBkgColor: colors.secondary[200],
1279
1312
  doneTaskBorderColor: colors.primary[600],
1280
1313
  doneTaskBkgColor: colors.primary[100],
@@ -1326,46 +1359,28 @@ var init_MermaidDiagram = __esm({
1326
1359
  };
1327
1360
  RENDER_DEBOUNCE_MS = 300;
1328
1361
  svgCache = /* @__PURE__ */ new Map();
1362
+ resolveSyncSvg = (code) => {
1363
+ const cached = svgCache.get(code);
1364
+ if (cached) return cached;
1365
+ const fast = tryFastRender(code);
1366
+ if (fast) svgCache.set(code, fast);
1367
+ return fast;
1368
+ };
1329
1369
  MermaidDiagram = ({ code }) => {
1330
1370
  const id = useId();
1331
- const [svg, setSvg] = useState(() => {
1332
- const cached = svgCache.get(code);
1333
- if (cached) return cached;
1334
- const fast = tryFastRender(code);
1335
- if (fast) {
1336
- svgCache.set(code, fast);
1337
- return fast;
1338
- }
1339
- return null;
1340
- });
1371
+ const [svg, setSvg] = useState(() => resolveSyncSvg(code));
1341
1372
  const [renderFailed, setRenderFailed] = useState(false);
1342
1373
  const debounceRef = useRef(null);
1343
1374
  const renderIdRef = useRef(0);
1344
1375
  const [prevCode, setPrevCode] = useState(code);
1345
1376
  if (code !== prevCode) {
1346
1377
  setPrevCode(code);
1347
- const cached = svgCache.get(code);
1348
- const fast = cached ?? tryFastRender(code);
1349
- if (fast && !cached) svgCache.set(code, fast);
1350
- setSvg(fast);
1378
+ setSvg(resolveSyncSvg(code));
1351
1379
  setRenderFailed(false);
1352
1380
  }
1353
1381
  useEffect(() => {
1354
- if (svgCache.has(code)) {
1355
- setSvg(svgCache.get(code));
1356
- setRenderFailed(false);
1357
- return;
1358
- }
1359
- const fastResult = tryFastRender(code);
1360
- if (fastResult) {
1361
- svgCache.set(code, fastResult);
1362
- setSvg(fastResult);
1363
- setRenderFailed(false);
1364
- return;
1365
- }
1366
- setSvg(null);
1382
+ if (svgCache.has(code)) return;
1367
1383
  const currentRenderId = ++renderIdRef.current;
1368
- setRenderFailed(false);
1369
1384
  if (debounceRef.current) {
1370
1385
  clearTimeout(debounceRef.current);
1371
1386
  }
@@ -1615,7 +1630,7 @@ init_utils();
1615
1630
  // src/components/Toast/ToastRoot.tsx
1616
1631
  init_icons();
1617
1632
  init_utils();
1618
- init_legacyIcon();
1633
+ init_useIsLegacyBrand();
1619
1634
 
1620
1635
  // src/components/Toast/ToastAction.tsx
1621
1636
  init_utils();
@@ -1700,6 +1715,7 @@ var ToastDismiss = ({
1700
1715
  "[&_svg]:tw-m-1",
1701
1716
  "tw-text-white",
1702
1717
  "group-data-[variant=default]/toast:[&_svg]:tw-text-popover-foreground",
1718
+ "group-data-[variant=default]/toast:group-data-[argo=true]/toast:[&_svg]:tw-text-foreground",
1703
1719
  className
1704
1720
  ),
1705
1721
  type: "button",
@@ -1727,6 +1743,7 @@ var ToastDuration = ({
1727
1743
  className: cn(
1728
1744
  "tw-bg-white/30",
1729
1745
  "group-data-[variant=default]/toast:tw-bg-popover-foreground/20",
1746
+ "group-data-[variant=default]/toast:group-data-[argo=true]/toast:tw-bg-foreground/20",
1730
1747
  "tw-rounded-bl-lg",
1731
1748
  "tw-mx-px",
1732
1749
  // positioning
@@ -1767,6 +1784,7 @@ var ToastTitle = ({
1767
1784
  "tw-self-center",
1768
1785
  "tw-text-white",
1769
1786
  "group-data-[variant=default]/toast:tw-text-popover-foreground",
1787
+ "group-data-[variant=default]/toast:group-data-[argo=true]/toast:tw-text-foreground",
1770
1788
  "tw-break-words",
1771
1789
  "tw-font-medium",
1772
1790
  className
@@ -1826,11 +1844,14 @@ var ToastRoot = ({
1826
1844
  duration = Infinity,
1827
1845
  variant = "info",
1828
1846
  loading = false,
1829
- icon: iconProp
1847
+ icon: iconProp,
1848
+ argo
1830
1849
  }) => {
1850
+ const isLegacy = useIsLegacyBrand();
1851
+ const renderArgo = !isLegacy || argo;
1831
1852
  const icon = (() => {
1832
1853
  if (loading) return /* @__PURE__ */ jsx(icons_exports.Loader2, { className: "tw-animate-spin" });
1833
- if (iconProp) return renderLegacyIcon(iconProp);
1854
+ if (iconProp) return iconProp;
1834
1855
  if (variant === "default" || variant === null) return null;
1835
1856
  return DEFAULT_VARIANT_ICON[variant];
1836
1857
  })();
@@ -1838,35 +1859,44 @@ var ToastRoot = ({
1838
1859
  toast$1.dismiss(id);
1839
1860
  action?.onClick(event);
1840
1861
  };
1841
- return /* @__PURE__ */ jsxs("div", { "data-variant": variant, className: cn(variants2({ variant })), children: [
1842
- icon && /* @__PURE__ */ jsx(
1843
- "span",
1844
- {
1845
- "data-slot": "toast-icon",
1846
- className: cn(
1847
- "tw-inline-flex",
1848
- "tw-items-center",
1849
- "tw-justify-center",
1850
- "tw-self-center",
1851
- // styles — container at 20px with no padding so the 20px Lucide
1852
- // glyph fills the slot (previous tw-size-4 + tw-p-1 clipped a
1853
- // 16px child into 8px of visible space)
1854
- "tw-aspect-square",
1855
- "tw-size-5",
1856
- "tw-shrink-0",
1857
- '[&_svg:not([class*="tw-size-"])]:tw-size-5',
1858
- "tw-text-white",
1859
- "group-data-[variant=default]/toast:tw-text-popover-foreground"
1862
+ return /* @__PURE__ */ jsxs(
1863
+ "div",
1864
+ {
1865
+ "data-variant": variant,
1866
+ "data-argo": renderArgo,
1867
+ className: cn(
1868
+ variants2({ variant }),
1869
+ "data-[variant=default]:data-[argo=true]:tw-bg-background"
1870
+ ),
1871
+ children: [
1872
+ icon && /* @__PURE__ */ jsx(
1873
+ "span",
1874
+ {
1875
+ "data-slot": "toast-icon",
1876
+ className: cn(
1877
+ "tw-inline-flex",
1878
+ "tw-items-center",
1879
+ "tw-justify-center",
1880
+ "tw-self-center",
1881
+ "tw-aspect-square",
1882
+ "tw-size-5",
1883
+ "tw-shrink-0",
1884
+ '[&_svg:not([class*="tw-size-"])]:tw-size-5',
1885
+ "tw-text-white",
1886
+ "group-data-[variant=default]/toast:tw-text-popover-foreground",
1887
+ "group-data-[variant=default]/toast:group-data-[argo=true]/toast:tw-text-foreground"
1888
+ ),
1889
+ children: icon
1890
+ }
1860
1891
  ),
1861
- children: icon
1862
- }
1863
- ),
1864
- /* @__PURE__ */ jsx(ToastTitle, { children: title }),
1865
- description && /* @__PURE__ */ jsx(ToastDescription, { children: description }),
1866
- action && /* @__PURE__ */ jsx(ToastAction, { style: action?.actionButtonStyle, onClick: handleActionClick, children: action.label }),
1867
- /* @__PURE__ */ jsx(ToastDismiss, { onClick: () => toast$1.dismiss(id) }),
1868
- duration !== Infinity && /* @__PURE__ */ jsx(ToastDuration, { duration })
1869
- ] });
1892
+ /* @__PURE__ */ jsx(ToastTitle, { children: title }),
1893
+ description && /* @__PURE__ */ jsx(ToastDescription, { children: description }),
1894
+ action && /* @__PURE__ */ jsx(ToastAction, { style: action?.actionButtonStyle, onClick: handleActionClick, children: action.label }),
1895
+ /* @__PURE__ */ jsx(ToastDismiss, { onClick: () => toast$1.dismiss(id) }),
1896
+ duration !== Infinity && /* @__PURE__ */ jsx(ToastDuration, { duration })
1897
+ ]
1898
+ }
1899
+ );
1870
1900
  };
1871
1901
  var toast = ({
1872
1902
  onAutoClose,
@@ -2257,6 +2287,9 @@ init_icons();
2257
2287
  init_icons();
2258
2288
  init_utils();
2259
2289
 
2290
+ // src/components/DropdownMenu/DropdownMenu.tsx
2291
+ init_useIsLegacyBrand();
2292
+
2260
2293
  // src/components/DropdownMenu/DropdownMenuCheckboxItem.tsx
2261
2294
  init_icons();
2262
2295
  init_utils();
@@ -2405,17 +2438,16 @@ var itemVariants = cn(
2405
2438
  "group-data-[variant=default]/dropdown-menu-content:hover:tw-bg-neutral-100",
2406
2439
  "group-data-[variant=default]/dropdown-menu-content:hover:tw-text-neutral-900",
2407
2440
  "group-data-[variant=argo]/dropdown-menu-content:tw-rounded-md",
2408
- "group-data-[variant=argo]/dropdown-menu-content:tw-text-slate-800",
2409
- "group-data-[variant=argo]/dropdown-menu-content:focus:tw-text-slate-800",
2410
- "group-data-[variant=argo]/dropdown-menu-content:focus:tw-bg-sky-100",
2411
- "group-data-[variant=argo]/dropdown-menu-content:hover:tw-text-slate-800",
2412
- "group-data-[variant=argo]/dropdown-menu-content:hover:tw-bg-sky-100"
2441
+ "group-data-[variant=argo]/dropdown-menu-content:tw-text-popover-foreground",
2442
+ "group-data-[variant=argo]/dropdown-menu-content:focus:tw-text-accent-foreground",
2443
+ "group-data-[variant=argo]/dropdown-menu-content:focus:tw-bg-accent",
2444
+ "group-data-[variant=argo]/dropdown-menu-content:hover:tw-text-accent-foreground",
2445
+ "group-data-[variant=argo]/dropdown-menu-content:hover:tw-bg-accent"
2413
2446
  );
2414
2447
  var contentVariants = cn(
2415
2448
  "tailwindcss-preflight",
2416
2449
  "tw-group/dropdown-menu-content",
2417
2450
  "tw-z-[1040]",
2418
- "tw-bg-white",
2419
2451
  // positioning
2420
2452
  "tw-flex",
2421
2453
  "tw-flex-col",
@@ -2426,8 +2458,16 @@ var contentVariants = cn(
2426
2458
  // border
2427
2459
  "tw-border",
2428
2460
  "tw-shadow-md",
2461
+ // Legacy surface — fixed white panel.
2429
2462
  "data-[variant=default]:tw-rounded-md",
2463
+ "data-[variant=default]:tw-bg-white",
2464
+ "data-[variant=default]:tw-border-neutral-100",
2465
+ "data-[variant=default]:tw-text-neutral-800",
2466
+ // Argo surface — semantic popover tokens (brand + dark aware).
2430
2467
  "data-[variant=argo]:tw-rounded-2xl",
2468
+ "data-[variant=argo]:tw-bg-popover",
2469
+ "data-[variant=argo]:tw-text-popover-foreground",
2470
+ "data-[variant=argo]:tw-border-border",
2431
2471
  // animations
2432
2472
  "data-[state=open]:tw-animate-in",
2433
2473
  "data-[state=open]:tw-fade-in-0",
@@ -2487,7 +2527,6 @@ var ScrollBar = ({ className, orientation = "vertical", ...props }) => /* @__PUR
2487
2527
  orientation,
2488
2528
  className: cn(
2489
2529
  "tw-flex tw-touch-none tw-select-none tw-transition-color",
2490
- '[data-state="hidden"]:tw-bg-pink-500',
2491
2530
  {
2492
2531
  "tw-h-full tw-w-2.5 tw-p-px": orientation === "vertical",
2493
2532
  "tw-h-2.5 tw-flex-col tw-p-px": orientation === "horizontal"
@@ -2502,8 +2541,8 @@ var ScrollBar = ({ className, orientation = "vertical", ...props }) => /* @__PUR
2502
2541
  "tw-relative",
2503
2542
  "tw-flex-1",
2504
2543
  "tw-rounded-full",
2505
- "tw-bg-neutral-200",
2506
- "hover:tw-bg-neutral-400"
2544
+ "tw-bg-border",
2545
+ "hover:tw-bg-muted-foreground"
2507
2546
  )
2508
2547
  }
2509
2548
  )
@@ -2587,7 +2626,6 @@ var DropdownMenuContent = ({
2587
2626
  // src/components/DropdownMenu/DropdownMenuItem.tsx
2588
2627
  init_icons();
2589
2628
  init_utils();
2590
- init_legacyIcon();
2591
2629
  var DropdownMenuItem = ({
2592
2630
  ref,
2593
2631
  className,
@@ -2603,7 +2641,7 @@ var DropdownMenuItem = ({
2603
2641
  ...props
2604
2642
  }) => {
2605
2643
  const Comp = asChild ? Root$2 : "div";
2606
- const adornment = isLoading ? /* @__PURE__ */ jsx(icons_exports.Loader2, { className: "tw-animate-spin" }) : renderLegacyIcon(icon);
2644
+ const adornment = isLoading ? /* @__PURE__ */ jsx(icons_exports.Loader2, { className: "tw-animate-spin" }) : icon;
2607
2645
  const handleOnSelect = (event) => {
2608
2646
  if (asModalTrigger) event.preventDefault();
2609
2647
  onSelect?.(event);
@@ -2705,7 +2743,6 @@ var DropdownMenuRadioGroup = ({
2705
2743
  // src/components/DropdownMenu/DropdownMenuRadioGroup/DropdownMenuRadioItem.tsx
2706
2744
  init_icons();
2707
2745
  init_utils();
2708
- init_legacyIcon();
2709
2746
  var DropdownMenuRadioItem = ({
2710
2747
  className,
2711
2748
  children,
@@ -2740,7 +2777,7 @@ var DropdownMenuRadioItem = ({
2740
2777
  ...props,
2741
2778
  children: [
2742
2779
  isAtStart && indicatorEle,
2743
- icon && /* @__PURE__ */ jsx(ItemIcon, { className: iconClassName, children: renderLegacyIcon(icon) }),
2780
+ icon && /* @__PURE__ */ jsx(ItemIcon, { className: iconClassName, children: icon }),
2744
2781
  /* @__PURE__ */ jsx("span", { className: "tw-flex tw-min-w-0 tw-flex-1 tw-items-center tw-gap-2", children }),
2745
2782
  !isAtStart && indicatorEle
2746
2783
  ]
@@ -2818,10 +2855,12 @@ var DropdownMenuTrigger = ({
2818
2855
  var DropdownMenu = ({
2819
2856
  // change a default value to false, for modal property, as it is not used in most cases
2820
2857
  modal = false,
2821
- variant = "default",
2858
+ variant,
2822
2859
  ...props
2823
2860
  }) => {
2824
- const contextValue = useMemo(() => ({ variant }), [variant]);
2861
+ const isLegacy = useIsLegacyBrand();
2862
+ const effectiveVariant = !isLegacy || variant === "argo" ? "argo" : "default";
2863
+ const contextValue = useMemo(() => ({ variant: effectiveVariant }), [effectiveVariant]);
2825
2864
  return /* @__PURE__ */ jsx(DropdownMenuContext, { value: contextValue, children: /* @__PURE__ */ jsx(Root$1, { ...props, modal }) });
2826
2865
  };
2827
2866
  DropdownMenu.Trigger = DropdownMenuTrigger;
@@ -3070,6 +3109,7 @@ var useFormGroupContext = () => use(FormGroupContext);
3070
3109
 
3071
3110
  // src/components/InputGroup/InputGroup.tsx
3072
3111
  init_utils();
3112
+ init_useIsLegacyBrand();
3073
3113
 
3074
3114
  // src/components/InputGroup/InputGroupAddon.tsx
3075
3115
  init_utils();
@@ -3368,7 +3408,8 @@ var inputGroupVariants = cva(
3368
3408
  "has-[:is(input,textarea):disabled]:tw-opacity-40"
3369
3409
  ],
3370
3410
  argo: [
3371
- "tw-bg-background",
3411
+ // muted filled input surface — gray, distinct from white containers; not the app-background token
3412
+ "tw-bg-muted",
3372
3413
  "tw-border-input",
3373
3414
  "tw-rounded-lg",
3374
3415
  "tw-text-foreground",
@@ -3422,15 +3463,28 @@ var InputGroupRoot = ({
3422
3463
  focusVariant,
3423
3464
  className,
3424
3465
  ...props
3425
- }) => /* @__PURE__ */ jsx(
3426
- "div",
3427
- {
3428
- ...props,
3429
- ref,
3430
- className: cn(inputGroupVariants({ state, variant, sizing, focusVariant, className })),
3431
- children
3432
- }
3433
- );
3466
+ }) => {
3467
+ const isLegacy = useIsLegacyBrand();
3468
+ const effectiveVariant = !isLegacy || variant === "argo" ? "argo" : variant;
3469
+ const effectiveSizing = effectiveVariant === "argo" ? "medium" : sizing;
3470
+ return /* @__PURE__ */ jsx(
3471
+ "div",
3472
+ {
3473
+ ...props,
3474
+ ref,
3475
+ className: cn(
3476
+ inputGroupVariants({
3477
+ state,
3478
+ variant: effectiveVariant,
3479
+ sizing: effectiveSizing,
3480
+ focusVariant,
3481
+ className
3482
+ })
3483
+ ),
3484
+ children
3485
+ }
3486
+ );
3487
+ };
3434
3488
  var InputGroup = InputGroupRoot;
3435
3489
  InputGroup.Input = InputGroupInput;
3436
3490
  InputGroup.Addon = InputGroupAddon;
@@ -3655,8 +3709,8 @@ var helpVariants = cva(["tw-m-0", "tw-text-xs"], {
3655
3709
  },
3656
3710
  variants: {
3657
3711
  state: {
3658
- default: ["tw-text-neutral-500"],
3659
- error: ["tw-text-error-500"],
3712
+ default: ["tw-text-muted-foreground"],
3713
+ error: ["tw-text-destructive"],
3660
3714
  warning: ["tw-text-warning-500"]
3661
3715
  }
3662
3716
  }
@@ -3735,7 +3789,7 @@ var Textarea = ({
3735
3789
  containerClassName,
3736
3790
  // group props
3737
3791
  state = "default",
3738
- variant = "primary",
3792
+ variant,
3739
3793
  sizing,
3740
3794
  focusVariant,
3741
3795
  ...rest
@@ -3867,7 +3921,7 @@ var Input = ({
3867
3921
  "div",
3868
3922
  {
3869
3923
  className: cn({
3870
- "tw-whitespace-nowrap tw-bg-neutral-200 tw-px-4 -tw-mr-4 tw-py-2.5": rightSuffixVariant === "addon"
3924
+ "tw-whitespace-nowrap tw-bg-muted tw-px-4 -tw-mr-4 tw-py-2.5": rightSuffixVariant === "addon"
3871
3925
  }),
3872
3926
  children: rightSuffix
3873
3927
  }
@@ -3886,6 +3940,7 @@ var TextInput = ({
3886
3940
  value,
3887
3941
  defaultValue,
3888
3942
  type = "text",
3943
+ variant,
3889
3944
  onValueChange,
3890
3945
  onChange,
3891
3946
  onValueBlur,
@@ -3908,6 +3963,7 @@ var TextInput = ({
3908
3963
  onChange: handleChange,
3909
3964
  onBlur: handleBlur,
3910
3965
  type,
3966
+ variant,
3911
3967
  value: sanitizeTextInputValue(value),
3912
3968
  defaultValue: sanitizeTextInputValue(defaultValue)
3913
3969
  }
@@ -3931,7 +3987,7 @@ FormGroup.Textarea = FormGroupTextarea;
3931
3987
 
3932
3988
  // src/components/Label/Label.tsx
3933
3989
  init_utils();
3934
- var Optional = ({ className }) => /* @__PURE__ */ jsx("span", { className: cn("tw-text-neutral-400", className), children: "(optional)" });
3990
+ var Optional = ({ className }) => /* @__PURE__ */ jsx("span", { className: cn("tw-text-muted-foreground", className), children: "(optional)" });
3935
3991
  var Label2 = ({ className, children, id, htmlFor, ...rest }) => {
3936
3992
  return /* @__PURE__ */ jsx(
3937
3993
  RLabel.Root,
@@ -3940,7 +3996,7 @@ var Label2 = ({ className, children, id, htmlFor, ...rest }) => {
3940
3996
  id: id?.toString(),
3941
3997
  htmlFor: htmlFor?.toString(),
3942
3998
  className: cn(
3943
- "tw-m-0 tw-text-neutral-800 tw-font-normal peer-disabled:tw-opacity-50",
3999
+ "tw-m-0 tw-text-foreground tw-font-normal peer-disabled:tw-opacity-50",
3944
4000
  className
3945
4001
  ),
3946
4002
  children
@@ -4331,25 +4387,25 @@ var ToolbarPlugin = () => {
4331
4387
 
4332
4388
  // src/components/MarkdownEditor/theme.ts
4333
4389
  var editorTheme = {
4334
- link: "tw-cursor-pointer !tw-text-secondary-500 tw-underline",
4390
+ link: "tw-cursor-pointer !tw-text-primary tw-underline",
4335
4391
  text: {
4336
4392
  bold: "tw-font-bold",
4337
4393
  italic: "tw-italic",
4338
4394
  strikethrough: "tw-line-through",
4339
4395
  underline: "tw-underline",
4340
- code: "tw-rounded tw-bg-neutral-100 tw-px-1 tw-py-0.5 tw-font-mono tw-text-[0.85em]"
4396
+ code: "tw-rounded tw-bg-muted tw-px-1 tw-py-0.5 tw-font-mono tw-text-[0.85em]"
4341
4397
  },
4342
4398
  list: {
4343
4399
  ol: "!tw-list-decimal",
4344
4400
  ul: "!tw-list-disc",
4345
4401
  checklist: "!tw-list-none !tw-pl-0",
4346
4402
  listitemChecked: [
4347
- "tw-relative !tw-pl-6 tw-list-none tw-outline-none tw-line-through tw-text-neutral-400",
4403
+ "tw-relative !tw-pl-6 tw-list-none tw-outline-none tw-line-through tw-text-muted-foreground",
4348
4404
  'before:tw-content-[""] before:tw-absolute before:tw-left-0 before:tw-top-[3px]',
4349
4405
  "before:tw-size-4 before:tw-rounded before:tw-border before:tw-border-solid",
4350
- "before:tw-bg-secondary-500 before:tw-border-secondary-500 before:tw-cursor-pointer",
4406
+ "before:tw-bg-primary before:tw-border-primary before:tw-cursor-pointer",
4351
4407
  'after:tw-content-[""] after:tw-absolute after:tw-left-[5.5px] after:tw-top-[5.5px]',
4352
- "after:tw-w-1 after:tw-h-2 after:tw-border-white after:tw-border-solid",
4408
+ "after:tw-w-1 after:tw-h-2 after:tw-border-primary-foreground after:tw-border-solid",
4353
4409
  "after:tw-border-r-[1.5px] after:tw-border-b-[1.5px] after:tw-border-t-0 after:tw-border-l-0",
4354
4410
  "after:tw-rotate-45"
4355
4411
  ].join(" "),
@@ -4357,7 +4413,7 @@ var editorTheme = {
4357
4413
  "tw-relative !tw-pl-6 tw-list-none tw-outline-none",
4358
4414
  'before:tw-content-[""] before:tw-absolute before:tw-left-0 before:tw-top-[3px]',
4359
4415
  "before:tw-size-4 before:tw-rounded before:tw-border before:tw-border-solid",
4360
- "before:tw-border-neutral-200 before:tw-bg-white before:tw-cursor-pointer"
4416
+ "before:tw-border-input before:tw-bg-background before:tw-cursor-pointer"
4361
4417
  ].join(" ")
4362
4418
  }
4363
4419
  };
@@ -4445,7 +4501,7 @@ var MarkdownEditor = ({
4445
4501
  // but a matching negative margin shifts the wrapper outward so the text itself stays
4446
4502
  // aligned with the parent's content edge (i.e. with where static text would render).
4447
4503
  compact ? "tw-px-1.5 tw-py-0.5 -tw-mx-1.5 -tw-my-0.5" : "tw-p-2",
4448
- editable && "tw-cursor-text hover:tw-bg-neutral-50 focus-within:tw-ring-2 focus-within:tw-ring-secondary-500/40"
4504
+ editable && "tw-cursor-text hover:tw-bg-muted focus-within:tw-ring-2 focus-within:tw-ring-primary/40"
4449
4505
  ),
4450
4506
  children: /* @__PURE__ */ jsx(
4451
4507
  RichTextPlugin,
@@ -4460,7 +4516,7 @@ var MarkdownEditor = ({
4460
4516
  "div",
4461
4517
  {
4462
4518
  className: cn(
4463
- "tw-pointer-events-none tw-absolute tw-select-none tw-text-neutral-400",
4519
+ "tw-pointer-events-none tw-absolute tw-select-none tw-text-muted-foreground",
4464
4520
  compact ? "tw-left-1.5 tw-top-0.5" : "tw-left-2 tw-top-[calc(0.5rem+0.35em)]"
4465
4521
  ),
4466
4522
  children: placeholder