@keboola/design 6.1.0 → 6.3.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.
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ import { clsx } from 'clsx';
6
6
  import { extendTailwindMerge } from 'tailwind-merge';
7
7
  import { Root as Root$6, Trigger, Portal, Content, Provider } from '@radix-ui/react-tooltip';
8
8
  import { cva } from 'class-variance-authority';
9
- import { keboolaLegacySidebar, keboolaLegacyTopnav } from '@keboola/brand-registry';
9
+ import { keboolaLegacySidebar, keboolaLegacyTopnav, keboola } from '@keboola/brand-registry';
10
10
  export { brandSchema, exampleCustomer, keboola, keboolaLegacySidebar, keboolaLegacyTopnav } from '@keboola/brand-registry';
11
11
  import { jsxs, jsx, Fragment as Fragment$1 } from 'react/jsx-runtime';
12
12
  import * as DropdownMenuPrimitive3 from '@radix-ui/react-dropdown-menu';
@@ -263,7 +263,7 @@ var require_react_is_development = __commonJS({
263
263
  var ContextProvider = REACT_PROVIDER_TYPE;
264
264
  var Element = REACT_ELEMENT_TYPE;
265
265
  var ForwardRef = REACT_FORWARD_REF_TYPE;
266
- var Fragment16 = REACT_FRAGMENT_TYPE;
266
+ var Fragment17 = REACT_FRAGMENT_TYPE;
267
267
  var Lazy = REACT_LAZY_TYPE;
268
268
  var Memo = REACT_MEMO_TYPE;
269
269
  var Portal10 = REACT_PORTAL_TYPE;
@@ -322,7 +322,7 @@ var require_react_is_development = __commonJS({
322
322
  exports$1.ContextProvider = ContextProvider;
323
323
  exports$1.Element = Element;
324
324
  exports$1.ForwardRef = ForwardRef;
325
- exports$1.Fragment = Fragment16;
325
+ exports$1.Fragment = Fragment17;
326
326
  exports$1.Lazy = Lazy;
327
327
  exports$1.Memo = Memo;
328
328
  exports$1.Portal = Portal10;
@@ -1047,6 +1047,7 @@ var require_es = __commonJS({
1047
1047
  // src/icons/index.ts
1048
1048
  var icons_exports = {};
1049
1049
  __export(icons_exports, {
1050
+ Google: () => Google,
1050
1051
  Keboola: () => Keboola
1051
1052
  });
1052
1053
  __reExport(icons_exports, lucide_react_star);
@@ -1407,6 +1408,53 @@ var useSHA256 = (text) => {
1407
1408
  }, [text]);
1408
1409
  return text ? hash : "";
1409
1410
  };
1411
+ var Google = forwardRef(
1412
+ ({ size = 24, className, children, ...rest }, ref) => /* @__PURE__ */ jsxs(
1413
+ "svg",
1414
+ {
1415
+ ref,
1416
+ xmlns: "http://www.w3.org/2000/svg",
1417
+ width: size,
1418
+ height: size,
1419
+ viewBox: "12 10 20 20",
1420
+ fill: "none",
1421
+ className: cn("lucide", className),
1422
+ ...rest,
1423
+ children: [
1424
+ /* @__PURE__ */ jsx(
1425
+ "path",
1426
+ {
1427
+ 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",
1428
+ fill: "#4285F4"
1429
+ }
1430
+ ),
1431
+ /* @__PURE__ */ jsx(
1432
+ "path",
1433
+ {
1434
+ 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",
1435
+ fill: "#34A853"
1436
+ }
1437
+ ),
1438
+ /* @__PURE__ */ jsx(
1439
+ "path",
1440
+ {
1441
+ 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",
1442
+ fill: "#FBBC04"
1443
+ }
1444
+ ),
1445
+ /* @__PURE__ */ jsx(
1446
+ "path",
1447
+ {
1448
+ 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",
1449
+ fill: "#EA4335"
1450
+ }
1451
+ ),
1452
+ children
1453
+ ]
1454
+ }
1455
+ )
1456
+ );
1457
+ Google.displayName = "Google";
1410
1458
  var Keboola = forwardRef(
1411
1459
  ({ size = 24, color = "currentColor", className, children, ...rest }, ref) => /* @__PURE__ */ jsxs(
1412
1460
  "svg",
@@ -3080,6 +3128,115 @@ var CopyField = {
3080
3128
  /** Small helper text below the box. */
3081
3129
  Footer: CopyFooter
3082
3130
  };
3131
+ var LABELS = {
3132
+ signin: "Sign in with Google",
3133
+ signup: "Sign up with Google",
3134
+ continue: "Continue with Google",
3135
+ "signin-short": "Sign in"
3136
+ };
3137
+ var GOOGLE_FONT_STACK = "'Roboto', arial, sans-serif";
3138
+ var variants3 = cva(
3139
+ [
3140
+ "tailwindcss-preflight",
3141
+ "tw-inline-flex",
3142
+ "tw-items-center",
3143
+ "tw-justify-center",
3144
+ "tw-h-10",
3145
+ "tw-border",
3146
+ "tw-text-sm",
3147
+ "tw-font-medium",
3148
+ "tw-leading-none",
3149
+ "tw-whitespace-nowrap",
3150
+ "tw-select-none",
3151
+ "tw-cursor-pointer",
3152
+ "tw-transition-shadow",
3153
+ "[&_svg]:tw-shrink-0",
3154
+ // focus — a neutral Google-blue ring, independent of the active brand.
3155
+ "focus-visible:tw-outline-none",
3156
+ "focus-visible:tw-ring-2",
3157
+ "focus-visible:tw-ring-[#4285f4]/60",
3158
+ // disabled
3159
+ "disabled:tw-cursor-not-allowed",
3160
+ "disabled:tw-opacity-60",
3161
+ // dark treatment — auto-applied under html[data-theme=dark], overriding
3162
+ // whichever `variant` is active (the ancestor selector out-specifies the
3163
+ // variant's plain color classes).
3164
+ "[[data-theme=dark]_&]:tw-bg-[#131314]",
3165
+ "[[data-theme=dark]_&]:tw-text-[#e3e3e3]",
3166
+ "[[data-theme=dark]_&]:tw-border-[#8e918f]",
3167
+ "[[data-theme=dark]_&]:hover:not-disabled:tw-bg-[#1e1f20]",
3168
+ "[[data-theme=dark]_&]:hover:not-disabled:tw-shadow-none"
3169
+ ],
3170
+ {
3171
+ defaultVariants: {
3172
+ variant: "default",
3173
+ shape: "rectangular",
3174
+ size: "default"
3175
+ },
3176
+ variants: {
3177
+ // Google's approved light-scheme treatments; dark (above) overrides both.
3178
+ variant: {
3179
+ default: [
3180
+ "tw-bg-white",
3181
+ "tw-text-[#1f1f1f]",
3182
+ "tw-border-[#747775]",
3183
+ "hover:not-disabled:tw-bg-[#f7f8f8]",
3184
+ "hover:not-disabled:tw-shadow-[0_1px_2px_0_rgba(60,64,67,0.30),0_1px_3px_1px_rgba(60,64,67,0.15)]"
3185
+ ],
3186
+ neutral: [
3187
+ "tw-bg-[#f2f2f2]",
3188
+ "tw-text-[#1f1f1f]",
3189
+ "tw-border-transparent",
3190
+ "hover:not-disabled:tw-bg-[#e8eaed]"
3191
+ ]
3192
+ },
3193
+ shape: {
3194
+ rectangular: ["tw-rounded"],
3195
+ circle: ["tw-rounded-full"]
3196
+ },
3197
+ size: {
3198
+ default: ["tw-gap-2.5", "tw-px-3"],
3199
+ icon: ["tw-w-10", "tw-p-0"]
3200
+ }
3201
+ }
3202
+ }
3203
+ );
3204
+ var GoogleButton = ({
3205
+ ref,
3206
+ variant = "default",
3207
+ shape = "rectangular",
3208
+ size = "default",
3209
+ label = "signin",
3210
+ isLoading = false,
3211
+ disabled = false,
3212
+ type = "button",
3213
+ className,
3214
+ children,
3215
+ style,
3216
+ ...buttonProps
3217
+ }) => /* @__PURE__ */ jsxs(
3218
+ "button",
3219
+ {
3220
+ ...buttonProps,
3221
+ ref,
3222
+ type,
3223
+ disabled,
3224
+ style: { ...style, fontFamily: GOOGLE_FONT_STACK },
3225
+ className: cn(variants3({ variant, shape, size }), className),
3226
+ children: [
3227
+ isLoading ? /* @__PURE__ */ jsx(icons_exports.Loader2, { className: "tw-size-5 tw-shrink-0 tw-animate-spin", "aria-hidden": "true" }) : /* @__PURE__ */ jsx(Google, { className: "tw-size-5" }),
3228
+ /* @__PURE__ */ jsx(
3229
+ "span",
3230
+ {
3231
+ className: cn({
3232
+ "tw-sr-only": size === "icon"
3233
+ }),
3234
+ children: children ?? LABELS[label]
3235
+ }
3236
+ )
3237
+ ]
3238
+ }
3239
+ );
3083
3240
  var Link = ({
3084
3241
  ref,
3085
3242
  children,
@@ -4036,8 +4193,8 @@ var FullScreenModalHeader = ({
4036
4193
  {
4037
4194
  text: previousTitle,
4038
4195
  className: cn(
4039
- "tw-relative tw-top-0 tw-cursor-pointer tw-text-base tw-font-normal tw-text-neutral-400 tw-underline",
4040
- "hover:tw-text-neutral-800 hover:tw-no-underline",
4196
+ "tw-relative tw-top-0 tw-cursor-pointer tw-text-base tw-font-normal tw-text-muted-foreground tw-underline",
4197
+ "hover:tw-text-foreground hover:tw-no-underline",
4041
4198
  isTitleWithIcon && "tw-ml-14"
4042
4199
  )
4043
4200
  }
@@ -4285,7 +4442,7 @@ Sheet.Title = SheetTitle;
4285
4442
  Sheet.Header = SheetHeader;
4286
4443
  Sheet.Footer = SheetFooter;
4287
4444
  Sheet.Body = SheetBody;
4288
- var variants3 = cva(
4445
+ var variants4 = cva(
4289
4446
  [
4290
4447
  "tailwindcss-preflight",
4291
4448
  "tw-group/popover-content",
@@ -4357,7 +4514,7 @@ var PopoverContent = ({
4357
4514
  ref,
4358
4515
  align: matchTriggerWidth ? "start" : align,
4359
4516
  sideOffset,
4360
- className: cn(variants3({ className, matchTriggerWidth, variant: effectiveVariant })),
4517
+ className: cn(variants4({ className, matchTriggerWidth, variant: effectiveVariant })),
4361
4518
  onEscapeKeyDown: (event) => {
4362
4519
  event.stopPropagation();
4363
4520
  onEscapeKeyDown?.(event);
@@ -10990,8 +11147,8 @@ var ClearButton = ({ onClick, testId }) => {
10990
11147
  "tw-flex",
10991
11148
  "tw-items-center",
10992
11149
  "tw-cursor-pointer",
10993
- "tw-text-neutral-300",
10994
- "hover:tw-text-neutral-800"
11150
+ "tw-text-muted-foreground",
11151
+ "hover:tw-text-foreground"
10995
11152
  ),
10996
11153
  "data-testid": testId,
10997
11154
  children: /* @__PURE__ */ jsx(icons_exports.X, { className: "tw-size-4" })
@@ -11373,7 +11530,7 @@ var SelectSeparator = ({ className, ...props }) => /* @__PURE__ */ jsx(
11373
11530
  className: cn("tw-mx-2 tw-my-1 tw-h-px tw-bg-border", className)
11374
11531
  }
11375
11532
  );
11376
- var variants4 = cva(
11533
+ var variants5 = cva(
11377
11534
  [
11378
11535
  "tailwindcss-preflight",
11379
11536
  "tw-group",
@@ -11536,7 +11693,7 @@ var SelectTrigger = ({
11536
11693
  SelectPrimitive.Trigger,
11537
11694
  {
11538
11695
  ref,
11539
- className: cn(variants4({ variant: effectiveVariant, state, sizing }), className),
11696
+ className: cn(variants5({ variant: effectiveVariant, state, sizing }), className),
11540
11697
  ...props,
11541
11698
  children: [
11542
11699
  /* @__PURE__ */ jsx(SelectPrimitive.Value, { placeholder }),
@@ -11832,23 +11989,23 @@ var BadgeLabel = ({
11832
11989
  var badgeColors = {
11833
11990
  gray: "tw-bg-neutral-400 tw-text-white tw-decoration-neutral-400",
11834
11991
  "gray-darker": "tw-bg-neutral-500 tw-text-white tw-decoration-neutral-500",
11835
- "gray-inverse": "tw-bg-neutral-100 tw-text-neutral-400 tw-decoration-neutral-100",
11992
+ "gray-inverse": "tw-bg-neutral-100 tw-text-neutral-500 tw-decoration-neutral-100 [[data-theme=dark]_&]:tw-bg-neutral-800 [[data-theme=dark]_&]:tw-text-neutral-300 [[data-theme=dark]_&]:tw-decoration-neutral-800",
11836
11993
  green: "tw-bg-green-500 tw-text-white tw-decoration-green-500",
11837
11994
  "green-darker": "tw-bg-green-600 tw-text-white tw-decoration-green-600",
11838
- "green-inverse": "tw-bg-green-100 tw-text-green-900 tw-decoration-green-100",
11995
+ "green-inverse": "tw-bg-green-100 tw-text-green-900 tw-decoration-green-100 [[data-theme=dark]_&]:tw-bg-green-900 [[data-theme=dark]_&]:tw-text-green-200 [[data-theme=dark]_&]:tw-decoration-green-900",
11839
11996
  blue: "tw-bg-blue-500 tw-text-white tw-decoration-blue-500",
11840
- "blue-inverse": "tw-bg-blue-100 tw-text-blue-600 tw-decoration-blue-100",
11997
+ "blue-inverse": "tw-bg-blue-100 tw-text-blue-600 tw-decoration-blue-100 [[data-theme=dark]_&]:tw-bg-blue-900 [[data-theme=dark]_&]:tw-text-blue-200 [[data-theme=dark]_&]:tw-decoration-blue-900",
11841
11998
  red: "tw-bg-error-500 tw-text-white tw-decoration-error-500",
11842
11999
  orange: "tw-bg-warning-500 tw-text-white tw-decoration-warning-500",
11843
- "orange-inverse": "tw-bg-warning-100 tw-text-warning-500 tw-decoration-warning-100",
12000
+ "orange-inverse": "tw-bg-warning-100 tw-text-warning-500 tw-decoration-warning-100 [[data-theme=dark]_&]:tw-bg-warning-900 [[data-theme=dark]_&]:tw-text-warning-200 [[data-theme=dark]_&]:tw-decoration-warning-900",
11844
12001
  amber: "tw-bg-warning-300 tw-text-warning-800 tw-decoration-warning-300",
11845
12002
  "amber-inverse": "tw-bg-warning-100 tw-text-warning-700 tw-decoration-warning-100",
11846
12003
  teal: "tw-bg-teal-500 tw-text-white tw-decoration-teal-500",
11847
- "teal-inverse": "tw-bg-teal-100 tw-text-teal-800 tw-decoration-teal-100",
12004
+ "teal-inverse": "tw-bg-teal-100 tw-text-teal-800 tw-decoration-teal-100 [[data-theme=dark]_&]:tw-bg-teal-900 [[data-theme=dark]_&]:tw-text-teal-200 [[data-theme=dark]_&]:tw-decoration-teal-900",
11848
12005
  purple: "tw-bg-purple-500 tw-text-white tw-decoration-purple-500",
11849
- "purple-inverse": "tw-bg-purple-100 tw-text-purple-800 tw-decoration-purple-100",
12006
+ "purple-inverse": "tw-bg-purple-100 tw-text-purple-800 tw-decoration-purple-100 [[data-theme=dark]_&]:tw-bg-purple-900 [[data-theme=dark]_&]:tw-text-purple-200 [[data-theme=dark]_&]:tw-decoration-purple-900",
11850
12007
  cyan: "tw-bg-cyan-500 tw-text-white tw-decoration-cyan-500",
11851
- "cyan-inverse": "tw-bg-cyan-100 tw-text-cyan-800 tw-decoration-cyan-100",
12008
+ "cyan-inverse": "tw-bg-cyan-100 tw-text-cyan-800 tw-decoration-cyan-100 [[data-theme=dark]_&]:tw-bg-cyan-900 [[data-theme=dark]_&]:tw-text-cyan-200 [[data-theme=dark]_&]:tw-decoration-cyan-900",
11852
12009
  "sidebar-primary": "tw-bg-sidebar-primary tw-text-white tw-decoration-sidebar-primary",
11853
12010
  white: "tw-bg-white/90 tw-text-neutral-600 tw-decoration-white/90"
11854
12011
  };
@@ -15616,7 +15773,7 @@ var TableHeader = ({
15616
15773
  "thead",
15617
15774
  {
15618
15775
  className: cn(
15619
- "tw-sticky tw-top-0 tw-z-10 [&_tr]:tw-bg-muted [&_tr]:tw-border-b [&_tr]:tw-border-border",
15776
+ "tw-sticky tw-top-0 tw-z-10 [&_tr]:tw-bg-table-header [&_tr]:tw-border-b [&_tr]:tw-border-border",
15620
15777
  { "tw-shadow-table": withShadow },
15621
15778
  className
15622
15779
  ),
@@ -16841,7 +16998,7 @@ var PromptInput = ({
16841
16998
  ) : formEl });
16842
16999
  };
16843
17000
  PromptInput.Action = PromptInputAction;
16844
- var variants5 = cva(
17001
+ var variants6 = cva(
16845
17002
  ["tw-relative", "tw-flex", "tw-items-center", "tw-z-0", "tw-overflow-x-hidden", "tw-w-full"],
16846
17003
  {
16847
17004
  defaultVariants: {
@@ -16867,7 +17024,7 @@ var Progress = ({
16867
17024
  variant,
16868
17025
  size,
16869
17026
  ...props
16870
- }) => /* @__PURE__ */ jsx(Root$c, { ...props, ref, className: cn(variants5({ variant, size, className })), value, children: /* @__PURE__ */ jsx(
17027
+ }) => /* @__PURE__ */ jsx(Root$c, { ...props, ref, className: cn(variants6({ variant, size, className })), value, children: /* @__PURE__ */ jsx(
16871
17028
  Indicator$1,
16872
17029
  {
16873
17030
  "data-slot": "progress-indicator",
@@ -17860,7 +18017,7 @@ var ToastTitle = ({
17860
18017
  children
17861
18018
  }
17862
18019
  );
17863
- var variants6 = cva(
18020
+ var variants7 = cva(
17864
18021
  [
17865
18022
  "tailwindcss-preflight",
17866
18023
  "tw-group/toast",
@@ -17930,7 +18087,7 @@ var ToastRoot = ({
17930
18087
  "data-variant": variant,
17931
18088
  "data-argo": renderArgo,
17932
18089
  className: cn(
17933
- variants6({ variant }),
18090
+ variants7({ variant }),
17934
18091
  "data-[variant=default]:data-[argo=true]:tw-bg-background"
17935
18092
  ),
17936
18093
  children: [
@@ -18421,9 +18578,7 @@ var headerVariants = cva(
18421
18578
  variants: {
18422
18579
  variant: {
18423
18580
  default: "tw-bg-muted",
18424
- // White surface kept literal until a `card` token exists (UT-4396);
18425
- // `background` is the page base, not an elevated panel surface.
18426
- white: "tw-bg-white"
18581
+ white: "tw-bg-card"
18427
18582
  },
18428
18583
  isDisabled: {
18429
18584
  true: "tw-cursor-not-allowed tw-opacity-50",
@@ -18488,7 +18643,7 @@ var CollapsiblePanel = ({
18488
18643
  {
18489
18644
  open,
18490
18645
  className: cn(
18491
- "tw-rounded !tw-border !tw-border-solid !tw-border-border tw-bg-white",
18646
+ "tw-rounded !tw-border !tw-border-solid !tw-border-border tw-bg-card",
18492
18647
  className
18493
18648
  ),
18494
18649
  header: /* @__PURE__ */ jsxs(
@@ -18696,6 +18851,18 @@ var tokensToCssVars = ({
18696
18851
  vars.set("--font-weight-semibold", typography?.weight?.semibold);
18697
18852
  vars.set("--font-weight-bold", typography?.weight?.bold);
18698
18853
  vars.set("--letter-spacing-chrome", typography?.letterSpacing?.chrome);
18854
+ vars.set("--type-display-size", typography?.typeScale?.display?.size);
18855
+ vars.set("--type-display-weight", typography?.typeScale?.display?.weight);
18856
+ vars.set("--type-display-leading", typography?.typeScale?.display?.leading);
18857
+ vars.set("--type-display-tracking", typography?.typeScale?.display?.tracking);
18858
+ vars.set("--type-heading-size", typography?.typeScale?.heading?.size);
18859
+ vars.set("--type-heading-weight", typography?.typeScale?.heading?.weight);
18860
+ vars.set("--type-heading-leading", typography?.typeScale?.heading?.leading);
18861
+ vars.set("--type-heading-tracking", typography?.typeScale?.heading?.tracking);
18862
+ vars.set("--type-body-size", typography?.typeScale?.body?.size);
18863
+ vars.set("--type-body-weight", typography?.typeScale?.body?.weight);
18864
+ vars.set("--type-body-leading", typography?.typeScale?.body?.leading);
18865
+ vars.set("--type-body-tracking", typography?.typeScale?.body?.tracking);
18699
18866
  vars.set("--radius-sm", radii?.sm);
18700
18867
  vars.set("--radius-md", radii?.md);
18701
18868
  vars.set("--radius-lg", radii?.lg);
@@ -20813,7 +20980,7 @@ var NavbarHeader = ({ children, className, ...rest }) => (
20813
20980
  // renders null when the active brand ships no logo, so no provider gate needed.
20814
20981
  /* @__PURE__ */ jsx("div", { ...rest, className: cn("tw-overflow-hidden", "tw-py-1.5", className), children: children ?? /* @__PURE__ */ jsx(BrandLogo, { variant: "wordmark", className: "tw-h-7" }) })
20815
20982
  );
20816
- var variants7 = cva(["tw-p-0", "tw-flex", "tw-items-center", "tw-justify-center", "tw-gap-2"], {
20983
+ var variants8 = cva(["tw-p-0", "tw-flex", "tw-items-center", "tw-justify-center", "tw-gap-2"], {
20817
20984
  variants: {
20818
20985
  marker: {
20819
20986
  none: [],
@@ -20833,7 +21000,7 @@ var variants7 = cva(["tw-p-0", "tw-flex", "tw-items-center", "tw-justify-center"
20833
21000
  marker: "none"
20834
21001
  }
20835
21002
  });
20836
- var NavbarMenu = ({ className, marker, ...rest }) => /* @__PURE__ */ jsx("ul", { ...rest, className: variants7({ marker, className }) });
21003
+ var NavbarMenu = ({ className, marker, ...rest }) => /* @__PURE__ */ jsx("ul", { ...rest, className: variants8({ marker, className }) });
20837
21004
  var NavbarMenuAvatar = ({
20838
21005
  ref,
20839
21006
  className,
@@ -20885,7 +21052,7 @@ var NavbarMenuAvatar = ({
20885
21052
  }
20886
21053
  );
20887
21054
  };
20888
- var variants8 = cva(
21055
+ var variants9 = cva(
20889
21056
  [
20890
21057
  "tw-flex",
20891
21058
  "tw-justify-center",
@@ -20936,9 +21103,9 @@ var NavbarMenuItemAdornment = ({
20936
21103
  ...props
20937
21104
  }) => {
20938
21105
  const Comp = asChild ? Slot : "span";
20939
- return /* @__PURE__ */ jsx(Comp, { ...props, ref, className: variants8({ variant, className }) });
21106
+ return /* @__PURE__ */ jsx(Comp, { ...props, ref, className: variants9({ variant, className }) });
20940
21107
  };
20941
- var variants9 = cva(
21108
+ var variants10 = cva(
20942
21109
  [
20943
21110
  "tw-group/navbar-menu-button",
20944
21111
  "tw-box-border",
@@ -21036,7 +21203,7 @@ var NavbarMenuButton = ({
21036
21203
  ref,
21037
21204
  type,
21038
21205
  "data-variant": variant,
21039
- className: cn(variants9({ className, variant })),
21206
+ className: cn(variants10({ className, variant })),
21040
21207
  children: [
21041
21208
  adornment && /* @__PURE__ */ jsx(NavbarMenuItemAdornment, { variant: adornmentVariant, children: adornment }),
21042
21209
  /* @__PURE__ */ jsx(Slottable, { children })
@@ -22300,7 +22467,7 @@ Pagination.Button = PaginationButton;
22300
22467
  Pagination.Previous = PaginationPrevious;
22301
22468
  Pagination.Next = PaginationNext;
22302
22469
  Pagination.Ellipsis = PaginationEllipsis;
22303
- var variants10 = cva(["tw-p-0.5", "tw-text-inherit", "tw-inline-flex"], {
22470
+ var variants11 = cva(["tw-p-0.5", "tw-text-inherit", "tw-inline-flex"], {
22304
22471
  variants: {
22305
22472
  diff: {
22306
22473
  added: ["tw-bg-green-200"],
@@ -22308,8 +22475,8 @@ var variants10 = cva(["tw-p-0.5", "tw-text-inherit", "tw-inline-flex"], {
22308
22475
  }
22309
22476
  }
22310
22477
  });
22311
- var DiffViewMark = ({ diff, children, className, ...props }) => /* @__PURE__ */ jsx("mark", { ...props, className: cn(variants10({ diff, className })), children });
22312
- var variants11 = cva(
22478
+ var DiffViewMark = ({ diff, children, className, ...props }) => /* @__PURE__ */ jsx("mark", { ...props, className: cn(variants11({ diff, className })), children });
22479
+ var variants12 = cva(
22313
22480
  [
22314
22481
  // reset global styles
22315
22482
  "[&_pre]:tw-p-0",
@@ -22377,7 +22544,7 @@ var variants11 = cva(
22377
22544
  );
22378
22545
  var DiffViewTd = ({ diff, variant = "default", children, className, ...props }) => {
22379
22546
  const needsCodeFormatting = variant === "code" || variant === "gutter";
22380
- return /* @__PURE__ */ jsx("td", { ...props, className: cn(variants11({ variant, className, diff })), children: needsCodeFormatting ? /* @__PURE__ */ jsx("pre", { children }) : children });
22547
+ return /* @__PURE__ */ jsx("td", { ...props, className: cn(variants12({ variant, className, diff })), children: needsCodeFormatting ? /* @__PURE__ */ jsx("pre", { children }) : children });
22381
22548
  };
22382
22549
  var DiffViewTh = ({ variant = "default", children, className, ...props }) => /* @__PURE__ */ jsx(
22383
22550
  "th",
@@ -23201,6 +23368,150 @@ var pairChunksIntoConflicts = (chunks) => {
23201
23368
  }
23202
23369
  return conflicts;
23203
23370
  };
23371
+ var DashboardHeroRoot = ({ className, children, ...rest }) => /* @__PURE__ */ jsx(
23372
+ "section",
23373
+ {
23374
+ className: cn(
23375
+ "tw-flex tw-flex-col tw-gap-6 tw-rounded-lg tw-border tw-border-solid tw-border-border tw-bg-card tw-p-8 tw-text-card-foreground",
23376
+ "md:tw-flex-row md:tw-items-center md:tw-justify-between",
23377
+ className
23378
+ ),
23379
+ ...rest,
23380
+ children
23381
+ }
23382
+ );
23383
+ var DashboardHeroBody = ({ className, children, ...rest }) => /* @__PURE__ */ jsx("div", { className: cn("tw-flex tw-flex-col tw-gap-3", className), ...rest, children });
23384
+ var DashboardHeroEyebrow = ({ className, children, ...rest }) => /* @__PURE__ */ jsx(
23385
+ "p",
23386
+ {
23387
+ className: cn(
23388
+ "tw-m-0 tw-text-sm tw-font-semibold tw-uppercase tw-tracking-wide tw-text-primary",
23389
+ className
23390
+ ),
23391
+ ...rest,
23392
+ children
23393
+ }
23394
+ );
23395
+ var DashboardHeroTitle = ({ className, children, ...rest }) => /* @__PURE__ */ jsx(
23396
+ "h1",
23397
+ {
23398
+ className: cn(
23399
+ "tw-m-0 tw-text-3xl tw-font-semibold tw-leading-tight tw-tracking-tight tw-text-foreground",
23400
+ className
23401
+ ),
23402
+ ...rest,
23403
+ children
23404
+ }
23405
+ );
23406
+ var DashboardHeroDescription = ({ className, children, ...rest }) => /* @__PURE__ */ jsx(
23407
+ "p",
23408
+ {
23409
+ className: cn("tw-m-0 tw-max-w-prose tw-text-base tw-text-muted-foreground", className),
23410
+ ...rest,
23411
+ children
23412
+ }
23413
+ );
23414
+ var DashboardHeroActions = ({ className, children, ...rest }) => /* @__PURE__ */ jsx("div", { className: cn("tw-mt-2 tw-flex tw-flex-wrap tw-items-center tw-gap-3", className), ...rest, children });
23415
+ var DashboardHeroAside = ({ className, children, ...rest }) => /* @__PURE__ */ jsx("div", { className: cn("tw-flex tw-shrink-0 tw-flex-col tw-gap-2", className), ...rest, children });
23416
+ var DashboardHero = DashboardHeroRoot;
23417
+ DashboardHero.Body = DashboardHeroBody;
23418
+ DashboardHero.Eyebrow = DashboardHeroEyebrow;
23419
+ DashboardHero.Title = DashboardHeroTitle;
23420
+ DashboardHero.Description = DashboardHeroDescription;
23421
+ DashboardHero.Actions = DashboardHeroActions;
23422
+ DashboardHero.Aside = DashboardHeroAside;
23423
+ var trendClassnames = cva(
23424
+ ["tw-inline-flex", "tw-items-center", "tw-gap-1", "tw-text-sm", "tw-font-medium"],
23425
+ {
23426
+ variants: {
23427
+ direction: {
23428
+ up: "tw-text-success",
23429
+ down: "tw-text-destructive",
23430
+ flat: "tw-text-muted-foreground"
23431
+ }
23432
+ },
23433
+ defaultVariants: {
23434
+ direction: "flat"
23435
+ }
23436
+ }
23437
+ );
23438
+ var StatCardRoot = ({ className, children, bordered = true, ...rest }) => /* @__PURE__ */ jsx(Card, { bordered, className: cn("tw-gap-2", className), role: "group", ...rest, children });
23439
+ var StatCardIcon = ({ className, children, ...rest }) => /* @__PURE__ */ jsx(
23440
+ "div",
23441
+ {
23442
+ className: cn(
23443
+ "tw-flex tw-size-9 tw-items-center tw-justify-center tw-rounded-md tw-bg-accent tw-text-accent-foreground",
23444
+ '[&_svg:not([class*="tw-size-"])]:tw-size-5',
23445
+ className
23446
+ ),
23447
+ ...rest,
23448
+ children
23449
+ }
23450
+ );
23451
+ var StatCardLabel = ({ className, children, ...rest }) => /* @__PURE__ */ jsx(
23452
+ "p",
23453
+ {
23454
+ className: cn("tw-m-0 tw-text-sm tw-font-medium tw-text-muted-foreground", className),
23455
+ ...rest,
23456
+ children
23457
+ }
23458
+ );
23459
+ var StatCardValue = ({ className, children, ...rest }) => /* @__PURE__ */ jsx(
23460
+ "p",
23461
+ {
23462
+ className: cn(
23463
+ "tw-m-0 tw-text-3xl tw-font-semibold tw-leading-tight tw-tracking-tight tw-text-foreground",
23464
+ className
23465
+ ),
23466
+ ...rest,
23467
+ children
23468
+ }
23469
+ );
23470
+ var StatCardTrend = ({ className, direction = "flat", icon, children, ...rest }) => /* @__PURE__ */ jsxs("span", { className: trendClassnames({ direction, className }), ...rest, children: [
23471
+ icon,
23472
+ children
23473
+ ] });
23474
+ var StatCardFootnote = ({ className, children, ...rest }) => /* @__PURE__ */ jsx("p", { className: cn("tw-m-0 tw-text-xs tw-text-muted-foreground", className), ...rest, children });
23475
+ var StatCard = StatCardRoot;
23476
+ StatCard.Icon = StatCardIcon;
23477
+ StatCard.Label = StatCardLabel;
23478
+ StatCard.Value = StatCardValue;
23479
+ StatCard.Trend = StatCardTrend;
23480
+ StatCard.Footnote = StatCardFootnote;
23481
+ var gridClassnames = cva(["tw-grid", "tw-gap-4"], {
23482
+ variants: {
23483
+ columns: {
23484
+ 2: "tw-grid-cols-1 sm:tw-grid-cols-2",
23485
+ 3: "tw-grid-cols-1 sm:tw-grid-cols-2 lg:tw-grid-cols-3",
23486
+ 4: "tw-grid-cols-1 sm:tw-grid-cols-2 lg:tw-grid-cols-4"
23487
+ }
23488
+ },
23489
+ defaultVariants: {
23490
+ columns: 4
23491
+ }
23492
+ });
23493
+ var StatCardGrid = ({ className, columns = 4, children, ...rest }) => /* @__PURE__ */ jsx("div", { className: gridClassnames({ columns, className }), ...rest, children });
23494
+ var ChartPanel = ({
23495
+ title,
23496
+ description,
23497
+ titleAs = "h3",
23498
+ toolbar,
23499
+ footer,
23500
+ className,
23501
+ bordered = true,
23502
+ children,
23503
+ ...rest
23504
+ }) => /* @__PURE__ */ jsxs(Card, { bordered, className: cn("tw-gap-4", className), ...rest, children: [
23505
+ /* @__PURE__ */ jsxs(Card.Header, { className: "tw-flex tw-items-start tw-justify-between tw-gap-4", children: [
23506
+ /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-flex-col tw-gap-1", children: [
23507
+ /* @__PURE__ */ jsx(Card.Title, { as: titleAs, children: title }),
23508
+ description ? /* @__PURE__ */ jsx("p", { className: "tw-m-0 tw-text-sm tw-text-muted-foreground", children: description }) : null
23509
+ ] }),
23510
+ toolbar ? /* @__PURE__ */ jsx("div", { className: "tw-flex tw-shrink-0 tw-items-center tw-gap-2", children: toolbar }) : null
23511
+ ] }),
23512
+ /* @__PURE__ */ jsx(Card.Content, { children }),
23513
+ footer ? /* @__PURE__ */ jsx("div", { className: "tw-border-0 tw-border-t tw-border-solid tw-border-border tw-pt-3 tw-text-sm tw-text-muted-foreground", children: footer }) : null
23514
+ ] });
23204
23515
  var { fieldContext, useFieldContext, formContext, useFormContext } = createFormHookContexts();
23205
23516
  var FormBody = ({ children, className, ...formProps }) => {
23206
23517
  const form = useFormContext();
@@ -23640,6 +23951,686 @@ function useAutosizeInput({
23640
23951
  ] });
23641
23952
  return { inputRef, inputStyle, sizerElement };
23642
23953
  }
23954
+
23955
+ // src/blocks/BrandEditor/color.ts
23956
+ var hexToChannels = (hex) => {
23957
+ let h = hex.trim().replace(/^#/, "");
23958
+ if (h.length === 3 || h.length === 4) {
23959
+ h = h.slice(0, 3).split("").map((c) => c + c).join("");
23960
+ } else if (h.length === 8) {
23961
+ h = h.slice(0, 6);
23962
+ }
23963
+ if (!/^[0-9a-fA-F]{6}$/.test(h)) return "0 0 0";
23964
+ const n = parseInt(h, 16);
23965
+ return `${n >> 16 & 255} ${n >> 8 & 255} ${n & 255}`;
23966
+ };
23967
+ var channelsToHex = (channels) => {
23968
+ const [r = 0, g = 0, b = 0] = channels.trim().split(/\s+/).map((n) => Number(n) || 0);
23969
+ const to2 = (v) => Math.max(0, Math.min(255, v)).toString(16).padStart(2, "0");
23970
+ return `#${to2(r)}${to2(g)}${to2(b)}`;
23971
+ };
23972
+ var COMPLETE_HEX = /^([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;
23973
+ var ColorField = ({ id, label, channels, onChange }) => {
23974
+ const hex = channelsToHex(channels);
23975
+ return /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-items-center tw-justify-between tw-gap-2", children: [
23976
+ /* @__PURE__ */ jsx(Label2, { htmlFor: id, className: "tw-text-xs tw-font-normal tw-text-foreground", children: label }),
23977
+ /* @__PURE__ */ jsx(
23978
+ ColorInput,
23979
+ {
23980
+ id,
23981
+ sizing: "medium",
23982
+ value: hex,
23983
+ className: "tw-w-36",
23984
+ onValueChange: (next) => {
23985
+ const clean = next.trim().replace(/^#/, "");
23986
+ if (COMPLETE_HEX.test(clean)) onChange(hexToChannels(`#${clean}`));
23987
+ }
23988
+ }
23989
+ )
23990
+ ] });
23991
+ };
23992
+
23993
+ // src/blocks/BrandEditor/contrast.ts
23994
+ var clampChannel = (n) => Number.isFinite(n) ? Math.min(255, Math.max(0, n)) : 0;
23995
+ var parseChannels = (channels) => {
23996
+ const [r = 0, g = 0, b = 0] = channels.trim().split(/\s+/).map((n) => clampChannel(Number(n)));
23997
+ return [r, g, b];
23998
+ };
23999
+ var relativeLuminance = (channels) => {
24000
+ const [r = 0, g = 0, b = 0] = parseChannels(channels).map((c) => {
24001
+ const s = c / 255;
24002
+ return s <= 0.03928 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;
24003
+ });
24004
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b;
24005
+ };
24006
+ var contrastRatio = (fg, bg) => {
24007
+ const l1 = relativeLuminance(fg);
24008
+ const l2 = relativeLuminance(bg);
24009
+ const [lighter, darker] = l1 >= l2 ? [l1, l2] : [l2, l1];
24010
+ return (lighter + 0.05) / (darker + 0.05);
24011
+ };
24012
+ var wcagLevel = (ratio) => ratio >= 7 ? "AAA" : ratio >= 4.5 ? "AA" : "fail";
24013
+ var ControlSection = ({ title, children }) => /* @__PURE__ */ jsxs("section", { className: "tw-flex tw-flex-col tw-gap-3 tw-border-b tw-border-border tw-p-4", children: [
24014
+ /* @__PURE__ */ jsx("h3", { className: "tw-m-0 tw-text-xs tw-font-semibold tw-uppercase tw-tracking-wide tw-text-muted-foreground", children: title }),
24015
+ children
24016
+ ] });
24017
+ var LogoField = ({ id, label, value, onChange }) => /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-flex-col tw-gap-1", children: [
24018
+ /* @__PURE__ */ jsx(Label2, { htmlFor: id, className: "tw-text-xs tw-font-normal tw-text-foreground", children: label }),
24019
+ /* @__PURE__ */ jsx(
24020
+ Textarea,
24021
+ {
24022
+ id,
24023
+ value,
24024
+ onValueChange: onChange,
24025
+ maxRows: 4,
24026
+ placeholder: "<svg\u2026>, a data: URI, or an https:// URL",
24027
+ className: "tw-font-mono tw-text-xs"
24028
+ }
24029
+ )
24030
+ ] });
24031
+ var TextField2 = ({ id, label, value, onChange, placeholder }) => /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-flex-col tw-gap-1", children: [
24032
+ /* @__PURE__ */ jsx(Label2, { htmlFor: id, className: "tw-text-xs tw-font-normal tw-text-foreground", children: label }),
24033
+ /* @__PURE__ */ jsx(
24034
+ TextInput,
24035
+ {
24036
+ id,
24037
+ sizing: "small",
24038
+ value,
24039
+ onValueChange: onChange,
24040
+ placeholder,
24041
+ className: "tw-font-mono tw-text-xs"
24042
+ }
24043
+ )
24044
+ ] });
24045
+ var DEFAULT_FALLBACK_FONT = "'Inter', system-ui, sans-serif";
24046
+ var DEFAULT_FONT_OPTIONS = [
24047
+ { value: DEFAULT_FALLBACK_FONT, label: "Inter (default)" },
24048
+ { value: "'Space Grotesk', system-ui, sans-serif", label: "Space Grotesk" },
24049
+ { value: "'Poppins', system-ui, sans-serif", label: "Poppins" },
24050
+ { value: "'Manrope', system-ui, sans-serif", label: "Manrope" },
24051
+ { value: "'Quicksand', system-ui, sans-serif", label: "Quicksand" },
24052
+ { value: "'Baloo 2', system-ui, sans-serif", label: "Baloo 2" },
24053
+ { value: "'Fraunces', Georgia, serif", label: "Fraunces (serif)" },
24054
+ { value: "Georgia, 'Times New Roman', serif", label: "Georgia (serif)" },
24055
+ { value: "'JetBrains Mono', ui-monospace, monospace", label: "JetBrains Mono" },
24056
+ { value: "system-ui, sans-serif", label: "System UI" }
24057
+ ];
24058
+ var COLOR_LABELS = {
24059
+ primary: "Primary",
24060
+ primaryForeground: "Primary foreground",
24061
+ background: "Background",
24062
+ foreground: "Foreground",
24063
+ card: "Card",
24064
+ cardForeground: "Card foreground",
24065
+ popover: "Popover",
24066
+ popoverForeground: "Popover foreground",
24067
+ secondary: "Secondary",
24068
+ secondaryForeground: "Secondary foreground",
24069
+ muted: "Muted",
24070
+ mutedForeground: "Muted foreground",
24071
+ accent: "Accent",
24072
+ accentForeground: "Accent foreground",
24073
+ border: "Border",
24074
+ input: "Input",
24075
+ ring: "Ring",
24076
+ ringOffset: "Ring offset",
24077
+ destructive: "Destructive",
24078
+ destructiveForeground: "Destructive foreground",
24079
+ success: "Success",
24080
+ successForeground: "Success foreground",
24081
+ warning: "Warning",
24082
+ warningForeground: "Warning foreground",
24083
+ info: "Info",
24084
+ infoForeground: "Info foreground"
24085
+ };
24086
+ var SIDEBAR_LABELS = {
24087
+ sidebar: "Sidebar",
24088
+ sidebarForeground: "Foreground",
24089
+ sidebarPrimary: "Primary",
24090
+ sidebarPrimaryForeground: "Primary foreground",
24091
+ sidebarAccent: "Accent",
24092
+ sidebarAccentForeground: "Accent foreground",
24093
+ sidebarBorder: "Border",
24094
+ sidebarRing: "Ring"
24095
+ };
24096
+ var CHART_LABELS = {
24097
+ chart1: "Chart 1",
24098
+ chart2: "Chart 2",
24099
+ chart3: "Chart 3",
24100
+ chart4: "Chart 4",
24101
+ chart5: "Chart 5"
24102
+ };
24103
+ var WEIGHT_LABELS = {
24104
+ normal: "Normal",
24105
+ medium: "Medium",
24106
+ semibold: "Semibold",
24107
+ bold: "Bold"
24108
+ };
24109
+ var SHADOW_LABELS = {
24110
+ sm: "Small",
24111
+ md: "Medium",
24112
+ lg: "Large",
24113
+ lift: "Lift (raised)"
24114
+ };
24115
+ var SPACING_LABELS = {
24116
+ gutter: "Gutter (between sections)",
24117
+ inset: "Inset (in-container)"
24118
+ };
24119
+ var MOTION_LABELS = {
24120
+ duration: "Duration",
24121
+ easing: "Easing"
24122
+ };
24123
+ var COLOR_SLOTS = Object.keys(COLOR_LABELS);
24124
+ var SIDEBAR_SLOTS = Object.keys(SIDEBAR_LABELS);
24125
+ var CHART_SLOTS = Object.keys(CHART_LABELS);
24126
+ var WEIGHT_SLOTS = Object.keys(WEIGHT_LABELS);
24127
+ var SHADOW_SLOTS = Object.keys(SHADOW_LABELS);
24128
+ var SPACING_SLOTS = Object.keys(SPACING_LABELS);
24129
+ var MOTION_SLOTS = Object.keys(MOTION_LABELS);
24130
+ var RADIUS_SIZES = ["sm", "md", "lg"];
24131
+ var A11Y_PAIRS = [
24132
+ { label: "Text on background", fg: "foreground", bg: "background" },
24133
+ { label: "Text on card", fg: "cardForeground", bg: "card" },
24134
+ { label: "Primary button", fg: "primaryForeground", bg: "primary" },
24135
+ { label: "Muted text", fg: "mutedForeground", bg: "muted" },
24136
+ { label: "Accent", fg: "accentForeground", bg: "accent" }
24137
+ ];
24138
+ var DEFAULT_SIDEBAR = {
24139
+ light: {
24140
+ sidebar: "255 255 255",
24141
+ sidebarForeground: "30 41 59",
24142
+ sidebarPrimary: "31 143 255",
24143
+ sidebarPrimaryForeground: "255 255 255",
24144
+ sidebarAccent: "219 234 254",
24145
+ sidebarAccentForeground: "30 41 59",
24146
+ sidebarBorder: "229 231 235",
24147
+ sidebarRing: "31 143 255"
24148
+ },
24149
+ dark: {
24150
+ sidebar: "14 14 18",
24151
+ sidebarForeground: "229 230 236",
24152
+ sidebarPrimary: "31 143 255",
24153
+ sidebarPrimaryForeground: "255 255 255",
24154
+ sidebarAccent: "38 38 45",
24155
+ sidebarAccentForeground: "229 230 236",
24156
+ sidebarBorder: "48 49 57",
24157
+ sidebarRing: "31 143 255"
24158
+ }
24159
+ };
24160
+ var DEFAULT_RADII = {
24161
+ sm: "0.25rem",
24162
+ md: "0.375rem",
24163
+ lg: "0.5rem"
24164
+ };
24165
+ var DEFAULT_CHART = {
24166
+ light: {
24167
+ chart1: "31 143 255",
24168
+ chart2: "0 194 135",
24169
+ chart3: "146 92 255",
24170
+ chart4: "245 147 0",
24171
+ chart5: "237 94 223"
24172
+ },
24173
+ dark: {
24174
+ chart1: "92 173 255",
24175
+ chart2: "0 230 161",
24176
+ chart3: "173 133 255",
24177
+ chart4: "255 190 92",
24178
+ chart5: "242 140 232"
24179
+ }
24180
+ };
24181
+ var DEFAULT_FONT_WEIGHTS = {
24182
+ normal: "400",
24183
+ medium: "500",
24184
+ semibold: "600",
24185
+ bold: "700"
24186
+ };
24187
+ var DEFAULT_LETTER_SPACING = "1px";
24188
+ var MONO_FALLBACK = "'JetBrains Mono', ui-monospace, monospace";
24189
+ var DEFAULT_SHADOWS = {
24190
+ sm: "0 1px 2px 0 rgb(0 0 0 / 0.05)",
24191
+ md: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
24192
+ lg: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",
24193
+ lift: "0 10px 30px -12px rgb(0 0 0 / 0.28), 0 2px 6px rgb(0 0 0 / 0.06)"
24194
+ };
24195
+ var DEFAULT_SPACING = {
24196
+ gutter: "1.5rem",
24197
+ inset: "1.5rem"
24198
+ };
24199
+ var DEFAULT_MOTION = {
24200
+ duration: "200ms",
24201
+ easing: "cubic-bezier(0.2, 0.7, 0.2, 1)"
24202
+ };
24203
+ var DEFAULT_GRADIENT = "linear-gradient(135deg, rgb(var(--color-primary)), rgb(var(--color-accent, var(--color-primary))))";
24204
+ var numOf = (value, fallback) => {
24205
+ const n = Number.parseFloat(value);
24206
+ return Number.isFinite(n) ? n : fallback;
24207
+ };
24208
+ var letterSpacingToPx = (value) => {
24209
+ const n = Number.parseFloat(value);
24210
+ if (!Number.isFinite(n)) return 0;
24211
+ return value.trim().endsWith("em") ? n * 16 : n;
24212
+ };
24213
+ var pxToLetterSpacing = (px, currentValue) => currentValue.trim().endsWith("em") ? `${Number((px / 16).toFixed(3))}em` : `${px}px`;
24214
+ var lengthToPx = (value) => {
24215
+ const n = Number.parseFloat(value);
24216
+ if (!Number.isFinite(n)) return 0;
24217
+ return Math.round(value.trim().endsWith("rem") ? n * 16 : n);
24218
+ };
24219
+ var pxToLength = (px, currentValue) => {
24220
+ const trimmed = currentValue.trim();
24221
+ if (trimmed.endsWith("rem")) return `${px / 16}rem`;
24222
+ if (/^-?\d*\.?\d+$/.test(trimmed)) return `${px}`;
24223
+ return `${px}px`;
24224
+ };
24225
+ var isSvgMarkup = (source) => source.trimStart().startsWith("<");
24226
+ var isImageSource = (source) => /^(data:|https?:\/\/)/.test(source.trim());
24227
+ var LogoPreviewImage = ({ source, className }) => {
24228
+ const safeSvg = useMemo(
24229
+ () => isSvgMarkup(source) ? DOMPurify.sanitize(source, { USE_PROFILES: { svg: true, svgFilters: true } }) : null,
24230
+ [source]
24231
+ );
24232
+ if (safeSvg !== null) {
24233
+ return /* @__PURE__ */ jsx("span", { "aria-hidden": true, className, dangerouslySetInnerHTML: { __html: safeSvg } });
24234
+ }
24235
+ if (isImageSource(source)) {
24236
+ return /* @__PURE__ */ jsx("img", { src: source, alt: "", className });
24237
+ }
24238
+ return null;
24239
+ };
24240
+ var BrandEditor = ({
24241
+ value,
24242
+ onChange,
24243
+ colorScheme = "light",
24244
+ onColorSchemeChange,
24245
+ fontOptions = DEFAULT_FONT_OPTIONS
24246
+ }) => {
24247
+ const baseId = useId();
24248
+ const { theme } = value;
24249
+ const coreColors = colorScheme === "light" ? theme.colors : theme.colorsDark;
24250
+ const sidebarColors = colorScheme === "light" ? theme.colors?.sidebar : theme.colorsDark?.sidebar;
24251
+ const chartColors = colorScheme === "light" ? theme.colors?.chart : theme.colorsDark?.chart;
24252
+ const defaultColors = colorScheme === "light" ? keboola.theme.colors : keboola.theme.colorsDark;
24253
+ const radii = theme.radii ?? DEFAULT_RADII;
24254
+ const typography = theme.typography;
24255
+ const setColor = (slot, channels) => {
24256
+ if (colorScheme === "light") {
24257
+ onChange({ ...value, theme: { ...theme, colors: { ...theme.colors, [slot]: channels } } });
24258
+ return;
24259
+ }
24260
+ onChange({
24261
+ ...value,
24262
+ theme: { ...theme, colorsDark: { ...theme.colorsDark, [slot]: channels } }
24263
+ });
24264
+ };
24265
+ const setSidebarColor = (slot, channels) => {
24266
+ if (colorScheme === "light") {
24267
+ const base = theme.colors?.sidebar ?? DEFAULT_SIDEBAR.light;
24268
+ onChange({
24269
+ ...value,
24270
+ theme: { ...theme, colors: { ...theme.colors, sidebar: { ...base, [slot]: channels } } }
24271
+ });
24272
+ return;
24273
+ }
24274
+ const sidebarBase = theme.colorsDark?.sidebar ?? DEFAULT_SIDEBAR.dark;
24275
+ onChange({
24276
+ ...value,
24277
+ theme: {
24278
+ ...theme,
24279
+ colorsDark: { ...theme.colorsDark, sidebar: { ...sidebarBase, [slot]: channels } }
24280
+ }
24281
+ });
24282
+ };
24283
+ const setChart = (slot, channels) => {
24284
+ const base = chartColors ?? DEFAULT_CHART[colorScheme];
24285
+ const chart = { ...base, [slot]: channels };
24286
+ if (colorScheme === "light") {
24287
+ onChange({ ...value, theme: { ...theme, colors: { ...theme.colors, chart } } });
24288
+ return;
24289
+ }
24290
+ onChange({ ...value, theme: { ...theme, colorsDark: { ...theme.colorsDark, chart } } });
24291
+ };
24292
+ const setRadius = (size, radius) => onChange({
24293
+ ...value,
24294
+ theme: { ...theme, radii: { ...theme.radii ?? DEFAULT_RADII, [size]: radius } }
24295
+ });
24296
+ const patchTypography = (patch) => onChange({ ...value, theme: { ...theme, typography: { ...theme.typography, ...patch } } });
24297
+ const setFontFace = (face, font) => patchTypography({ [face]: font.trim() || void 0 });
24298
+ const setFontWeight = (slot, weight) => patchTypography({ weight: { ...theme.typography?.weight, [slot]: weight || void 0 } });
24299
+ const setLetterSpacing = (chrome) => patchTypography({ letterSpacing: { chrome: chrome.trim() || void 0 } });
24300
+ const setShadow = (slot, shadow) => onChange({
24301
+ ...value,
24302
+ theme: { ...theme, shadows: { ...theme.shadows, [slot]: shadow.trim() || void 0 } }
24303
+ });
24304
+ const setSpacing = (slot, length) => onChange({
24305
+ ...value,
24306
+ theme: { ...theme, spacing: { ...theme.spacing, [slot]: length.trim() || void 0 } }
24307
+ });
24308
+ const setMotion = (slot, token) => onChange({
24309
+ ...value,
24310
+ theme: { ...theme, motion: { ...theme.motion, [slot]: token.trim() || void 0 } }
24311
+ });
24312
+ const setGradient = (gradient) => onChange({
24313
+ ...value,
24314
+ theme: { ...theme, gradient: { brand: gradient.trim() || void 0 } }
24315
+ });
24316
+ const setLogo = (slot, source) => {
24317
+ const trimmed = source.trim();
24318
+ const nextLogo = { ...value.logo };
24319
+ if (trimmed) nextLogo[slot] = trimmed;
24320
+ else delete nextLogo[slot];
24321
+ const { logo: _drop, ...rest } = value;
24322
+ onChange(Object.keys(nextLogo).length > 0 ? { ...value, logo: nextLogo } : rest);
24323
+ };
24324
+ return /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-flex-col", children: [
24325
+ /* @__PURE__ */ jsxs(ControlSection, { title: "Colors", children: [
24326
+ onColorSchemeChange ? /* @__PURE__ */ jsxs(
24327
+ ToggleGroup,
24328
+ {
24329
+ type: "single",
24330
+ value: colorScheme,
24331
+ onValueChange: (next) => {
24332
+ if (next === "light" || next === "dark") onColorSchemeChange(next);
24333
+ },
24334
+ "aria-label": "Color scheme",
24335
+ className: "tw-w-full",
24336
+ children: [
24337
+ /* @__PURE__ */ jsx(ToggleGroup.Item, { value: "light", className: "tw-flex-1", children: "Light" }),
24338
+ /* @__PURE__ */ jsx(ToggleGroup.Item, { value: "dark", className: "tw-flex-1", children: "Dark" })
24339
+ ]
24340
+ }
24341
+ ) : null,
24342
+ /* @__PURE__ */ jsx("div", { className: "tw-flex tw-flex-col tw-gap-2", children: COLOR_SLOTS.map((slot) => /* @__PURE__ */ jsx(
24343
+ ColorField,
24344
+ {
24345
+ id: `${baseId}color-${colorScheme}-${slot}`,
24346
+ label: COLOR_LABELS[slot],
24347
+ channels: coreColors?.[slot] ?? defaultColors?.[slot] ?? "0 0 0",
24348
+ onChange: (channels) => setColor(slot, channels)
24349
+ },
24350
+ slot
24351
+ )) })
24352
+ ] }),
24353
+ /* @__PURE__ */ jsxs(ControlSection, { title: "Accessibility", children: [
24354
+ /* @__PURE__ */ jsxs("p", { className: "tw-m-0 tw-text-xs tw-text-muted-foreground", children: [
24355
+ "WCAG contrast for the ",
24356
+ colorScheme,
24357
+ " palette (AA needs 4.5:1)."
24358
+ ] }),
24359
+ /* @__PURE__ */ jsx("div", { className: "tw-flex tw-flex-col tw-gap-1.5", children: A11Y_PAIRS.map((pair) => {
24360
+ const fg = coreColors?.[pair.fg] ?? defaultColors?.[pair.fg] ?? "0 0 0";
24361
+ const bg = coreColors?.[pair.bg] ?? defaultColors?.[pair.bg] ?? "255 255 255";
24362
+ const ratio = contrastRatio(fg, bg);
24363
+ const level = wcagLevel(ratio);
24364
+ return /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-items-center tw-justify-between tw-gap-2", children: [
24365
+ /* @__PURE__ */ jsx("span", { className: "tw-text-xs tw-text-foreground", children: pair.label }),
24366
+ /* @__PURE__ */ jsxs("span", { className: "tw-flex tw-items-center tw-gap-1.5", children: [
24367
+ /* @__PURE__ */ jsxs("span", { className: "tw-text-xs tw-tabular-nums tw-text-muted-foreground", children: [
24368
+ ratio.toFixed(1),
24369
+ ":1"
24370
+ ] }),
24371
+ /* @__PURE__ */ jsx(Badge, { color: level === "fail" ? "red" : "green", children: level === "fail" ? "Fail" : level })
24372
+ ] })
24373
+ ] }, pair.label);
24374
+ }) })
24375
+ ] }),
24376
+ /* @__PURE__ */ jsx(ControlSection, { title: "Sidebar colors", children: /* @__PURE__ */ jsxs(Collapsible, { className: "tw-flex tw-flex-col tw-gap-2", children: [
24377
+ /* @__PURE__ */ jsx(Collapsible.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(Button, { variant: "outline", size: "small", className: "tw-w-full", children: [
24378
+ "Toggle sidebar tokens (",
24379
+ colorScheme,
24380
+ ")"
24381
+ ] }) }),
24382
+ /* @__PURE__ */ jsx(Collapsible.Content, { className: "tw-flex tw-flex-col tw-gap-2", children: SIDEBAR_SLOTS.map((slot) => /* @__PURE__ */ jsx(
24383
+ ColorField,
24384
+ {
24385
+ id: `${baseId}sidebar-${colorScheme}-${slot}`,
24386
+ label: SIDEBAR_LABELS[slot],
24387
+ channels: sidebarColors?.[slot] ?? DEFAULT_SIDEBAR[colorScheme][slot],
24388
+ onChange: (channels) => setSidebarColor(slot, channels)
24389
+ },
24390
+ slot
24391
+ )) })
24392
+ ] }) }),
24393
+ /* @__PURE__ */ jsxs(ControlSection, { title: "Chart palette", children: [
24394
+ /* @__PURE__ */ jsxs("p", { className: "tw-m-0 tw-text-xs tw-text-muted-foreground", children: [
24395
+ "Categorical series colours for the ",
24396
+ colorScheme,
24397
+ " palette (`--color-chart-1\u20265`)."
24398
+ ] }),
24399
+ /* @__PURE__ */ jsx("div", { className: "tw-flex tw-flex-col tw-gap-2", children: CHART_SLOTS.map((slot) => /* @__PURE__ */ jsx(
24400
+ ColorField,
24401
+ {
24402
+ id: `${baseId}chart-${colorScheme}-${slot}`,
24403
+ label: CHART_LABELS[slot],
24404
+ channels: chartColors?.[slot] ?? DEFAULT_CHART[colorScheme][slot],
24405
+ onChange: (channels) => setChart(slot, channels)
24406
+ },
24407
+ slot
24408
+ )) })
24409
+ ] }),
24410
+ /* @__PURE__ */ jsx(ControlSection, { title: "Radius", children: RADIUS_SIZES.map((size) => {
24411
+ const current = radii[size];
24412
+ const px = lengthToPx(current);
24413
+ return /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-flex-col tw-gap-1", children: [
24414
+ /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-items-center tw-justify-between", children: [
24415
+ /* @__PURE__ */ jsx(Label2, { className: "tw-text-xs tw-font-normal tw-uppercase tw-text-foreground", children: size }),
24416
+ /* @__PURE__ */ jsx("span", { className: "tw-text-xs tw-tabular-nums tw-text-muted-foreground", children: radii[size] })
24417
+ ] }),
24418
+ /* @__PURE__ */ jsx(
24419
+ Slider,
24420
+ {
24421
+ min: 0,
24422
+ max: 24,
24423
+ step: 1,
24424
+ value: [px],
24425
+ onValueChange: (values) => setRadius(size, pxToLength(values[0] ?? 0, current))
24426
+ }
24427
+ )
24428
+ ] }, size);
24429
+ }) }),
24430
+ /* @__PURE__ */ jsxs(ControlSection, { title: "Typography", children: [
24431
+ /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-flex-col tw-gap-1", children: [
24432
+ /* @__PURE__ */ jsx(
24433
+ Label2,
24434
+ {
24435
+ htmlFor: `${baseId}font-family`,
24436
+ className: "tw-text-xs tw-font-normal tw-text-foreground",
24437
+ children: "Font family"
24438
+ }
24439
+ ),
24440
+ /* @__PURE__ */ jsx(
24441
+ Select2,
24442
+ {
24443
+ id: `${baseId}font-family`,
24444
+ value: typography?.fontFamily ?? DEFAULT_FALLBACK_FONT,
24445
+ onValueChange: (font) => setFontFace("fontFamily", font),
24446
+ items: fontOptions
24447
+ }
24448
+ )
24449
+ ] }),
24450
+ /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-flex-col tw-gap-1", children: [
24451
+ /* @__PURE__ */ jsx(
24452
+ Label2,
24453
+ {
24454
+ htmlFor: `${baseId}font-display`,
24455
+ className: "tw-text-xs tw-font-normal tw-text-foreground",
24456
+ children: "Display font (headings)"
24457
+ }
24458
+ ),
24459
+ /* @__PURE__ */ jsx(
24460
+ Select2,
24461
+ {
24462
+ id: `${baseId}font-display`,
24463
+ value: typography?.fontDisplay ?? typography?.fontFamily ?? DEFAULT_FALLBACK_FONT,
24464
+ onValueChange: (font) => setFontFace("fontDisplay", font),
24465
+ items: fontOptions
24466
+ }
24467
+ )
24468
+ ] }),
24469
+ /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-flex-col tw-gap-1", children: [
24470
+ /* @__PURE__ */ jsx(
24471
+ Label2,
24472
+ {
24473
+ htmlFor: `${baseId}font-mono`,
24474
+ className: "tw-text-xs tw-font-normal tw-text-foreground",
24475
+ children: "Monospace font"
24476
+ }
24477
+ ),
24478
+ /* @__PURE__ */ jsx(
24479
+ Select2,
24480
+ {
24481
+ id: `${baseId}font-mono`,
24482
+ value: typography?.fontMono ?? MONO_FALLBACK,
24483
+ onValueChange: (font) => setFontFace("fontMono", font),
24484
+ items: fontOptions
24485
+ }
24486
+ )
24487
+ ] }),
24488
+ /* @__PURE__ */ jsx("span", { className: "tw-text-xs tw-text-muted-foreground", children: "Chrome font weights" }),
24489
+ WEIGHT_SLOTS.map((slot) => {
24490
+ const current = typography?.weight?.[slot] ?? DEFAULT_FONT_WEIGHTS[slot];
24491
+ return /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-flex-col tw-gap-1", children: [
24492
+ /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-items-center tw-justify-between", children: [
24493
+ /* @__PURE__ */ jsx(Label2, { className: "tw-text-xs tw-font-normal tw-text-foreground", children: WEIGHT_LABELS[slot] }),
24494
+ /* @__PURE__ */ jsx("span", { className: "tw-text-xs tw-tabular-nums tw-text-muted-foreground", children: current })
24495
+ ] }),
24496
+ /* @__PURE__ */ jsx(
24497
+ Slider,
24498
+ {
24499
+ min: 100,
24500
+ max: 900,
24501
+ step: 25,
24502
+ value: [numOf(current, 400)],
24503
+ onValueChange: (values) => setFontWeight(slot, String(values[0] ?? 400))
24504
+ }
24505
+ )
24506
+ ] }, slot);
24507
+ }),
24508
+ /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-flex-col tw-gap-1", children: [
24509
+ /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-items-center tw-justify-between", children: [
24510
+ /* @__PURE__ */ jsx(Label2, { className: "tw-text-xs tw-font-normal tw-text-foreground", children: "Chrome letter spacing" }),
24511
+ /* @__PURE__ */ jsx("span", { className: "tw-text-xs tw-tabular-nums tw-text-muted-foreground", children: typography?.letterSpacing?.chrome ?? DEFAULT_LETTER_SPACING })
24512
+ ] }),
24513
+ /* @__PURE__ */ jsx(
24514
+ Slider,
24515
+ {
24516
+ min: -2,
24517
+ max: 4,
24518
+ step: 0.25,
24519
+ value: [letterSpacingToPx(typography?.letterSpacing?.chrome ?? DEFAULT_LETTER_SPACING)],
24520
+ onValueChange: (values) => setLetterSpacing(
24521
+ pxToLetterSpacing(
24522
+ values[0] ?? 0,
24523
+ typography?.letterSpacing?.chrome ?? DEFAULT_LETTER_SPACING
24524
+ )
24525
+ )
24526
+ }
24527
+ )
24528
+ ] })
24529
+ ] }),
24530
+ /* @__PURE__ */ jsxs(ControlSection, { title: "Elevation", children: [
24531
+ /* @__PURE__ */ jsx("p", { className: "tw-m-0 tw-text-xs tw-text-muted-foreground", children: "Box-shadow scale (`--shadow-*`), shared across light & dark. Empty inherits the default." }),
24532
+ SHADOW_SLOTS.map((slot) => /* @__PURE__ */ jsx(
24533
+ TextField2,
24534
+ {
24535
+ id: `${baseId}shadow-${slot}`,
24536
+ label: SHADOW_LABELS[slot],
24537
+ value: theme.shadows?.[slot] ?? "",
24538
+ placeholder: DEFAULT_SHADOWS[slot],
24539
+ onChange: (next) => setShadow(slot, next)
24540
+ },
24541
+ slot
24542
+ ))
24543
+ ] }),
24544
+ /* @__PURE__ */ jsxs(ControlSection, { title: "Density", children: [
24545
+ /* @__PURE__ */ jsx("p", { className: "tw-m-0 tw-text-xs tw-text-muted-foreground", children: "Semantic spacing (`--space-*`), as CSS lengths." }),
24546
+ SPACING_SLOTS.map((slot) => /* @__PURE__ */ jsx(
24547
+ TextField2,
24548
+ {
24549
+ id: `${baseId}spacing-${slot}`,
24550
+ label: SPACING_LABELS[slot],
24551
+ value: theme.spacing?.[slot] ?? "",
24552
+ placeholder: DEFAULT_SPACING[slot],
24553
+ onChange: (next) => setSpacing(slot, next)
24554
+ },
24555
+ slot
24556
+ ))
24557
+ ] }),
24558
+ /* @__PURE__ */ jsxs(ControlSection, { title: "Motion", children: [
24559
+ /* @__PURE__ */ jsx("p", { className: "tw-m-0 tw-text-xs tw-text-muted-foreground", children: "Base transition `duration` + `easing` (`--motion-*`)." }),
24560
+ MOTION_SLOTS.map((slot) => /* @__PURE__ */ jsx(
24561
+ TextField2,
24562
+ {
24563
+ id: `${baseId}motion-${slot}`,
24564
+ label: MOTION_LABELS[slot],
24565
+ value: theme.motion?.[slot] ?? "",
24566
+ placeholder: DEFAULT_MOTION[slot],
24567
+ onChange: (next) => setMotion(slot, next)
24568
+ },
24569
+ slot
24570
+ ))
24571
+ ] }),
24572
+ /* @__PURE__ */ jsx(ControlSection, { title: "Gradient", children: /* @__PURE__ */ jsx(
24573
+ TextField2,
24574
+ {
24575
+ id: `${baseId}gradient-brand`,
24576
+ label: "Brand gradient",
24577
+ value: theme.gradient?.brand ?? "",
24578
+ placeholder: DEFAULT_GRADIENT,
24579
+ onChange: setGradient
24580
+ }
24581
+ ) }),
24582
+ /* @__PURE__ */ jsxs(ControlSection, { title: "Logo", children: [
24583
+ /* @__PURE__ */ jsx(
24584
+ LogoField,
24585
+ {
24586
+ id: `${baseId}logo-mark`,
24587
+ label: "Mark (icon)",
24588
+ value: value.logo?.mark ?? "",
24589
+ onChange: (source) => setLogo("mark", source)
24590
+ }
24591
+ ),
24592
+ /* @__PURE__ */ jsx(
24593
+ LogoField,
24594
+ {
24595
+ id: `${baseId}logo-wordmark`,
24596
+ label: "Wordmark (full)",
24597
+ value: value.logo?.wordmark ?? "",
24598
+ onChange: (source) => setLogo("wordmark", source)
24599
+ }
24600
+ ),
24601
+ /* @__PURE__ */ jsxs(Collapsible, { className: "tw-flex tw-flex-col tw-gap-2", children: [
24602
+ /* @__PURE__ */ jsx(Collapsible.Trigger, { asChild: true, children: /* @__PURE__ */ jsx(Button, { variant: "outline", size: "small", className: "tw-w-full", children: "Toggle dark-mode logos" }) }),
24603
+ /* @__PURE__ */ jsxs(Collapsible.Content, { className: "tw-flex tw-flex-col tw-gap-2", children: [
24604
+ /* @__PURE__ */ jsx(
24605
+ LogoField,
24606
+ {
24607
+ id: `${baseId}logo-mark-dark`,
24608
+ label: "Mark (dark)",
24609
+ value: value.logo?.markDark ?? "",
24610
+ onChange: (source) => setLogo("markDark", source)
24611
+ }
24612
+ ),
24613
+ /* @__PURE__ */ jsx(
24614
+ LogoField,
24615
+ {
24616
+ id: `${baseId}logo-wordmark-dark`,
24617
+ label: "Wordmark (dark)",
24618
+ value: value.logo?.wordmarkDark ?? "",
24619
+ onChange: (source) => setLogo("wordmarkDark", source)
24620
+ }
24621
+ )
24622
+ ] })
24623
+ ] }),
24624
+ /* @__PURE__ */ jsxs("div", { className: "tw-flex tw-flex-col tw-gap-1", children: [
24625
+ /* @__PURE__ */ jsx("span", { className: "tw-text-xs tw-text-muted-foreground", children: "Preview" }),
24626
+ /* @__PURE__ */ jsx("div", { className: "tw-flex tw-min-h-12 tw-items-center tw-gap-4 tw-rounded-md tw-border tw-border-border tw-bg-background tw-p-3", children: value.logo?.mark || value.logo?.wordmark ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
24627
+ value.logo.mark ? /* @__PURE__ */ jsx(LogoPreviewImage, { source: value.logo.mark, className: "tw-h-8" }) : null,
24628
+ value.logo.wordmark ? /* @__PURE__ */ jsx(LogoPreviewImage, { source: value.logo.wordmark, className: "tw-h-8" }) : null
24629
+ ] }) : /* @__PURE__ */ jsx("span", { className: "tw-text-xs tw-text-muted-foreground", children: "No logo set" }) })
24630
+ ] })
24631
+ ] })
24632
+ ] });
24633
+ };
23643
24634
  /*! Bundled license information:
23644
24635
 
23645
24636
  react-is/cjs/react-is.production.min.js:
@@ -23670,6 +24661,6 @@ object-assign/index.js:
23670
24661
  *)
23671
24662
  */
23672
24663
 
23673
- export { Alert, AlertModal, AnswerSummary, AppShell, ArgoDesignContext, AutoSaveTextarea, Avatar, Badge, BrandLogo, Breadcrumb, Button, ButtonGroup, ButtonInline, Calendar, Card, Checkbox, Clipboard, ClipboardButton, ClipboardInline, Collapse, Collapsible, CollapsiblePanel, CollapsibleStepHeader, ColorInput, ColorModeSwitch, Combobox, Command, CommandGroup, CommandInput, CommandItem, CommandList, ConflictStatusIndicator, CopyField, DEFAULT_COLOR_SCHEME, DEFAULT_BRAND_ID as DEFAULT_KEBOOLA_BRAND_ID, DateInput, DatePicker, DateRangeInput, DateRangePicker, DiffType, DiffView, DotsLoader, DropdownMenu, EmptyConfigurationActionCard, EmptySearchContent, EmptyState, ErrorState, FileUpload, FormGroup, FullScreenModal, FullScreenModalBody, FullScreenModalHeader, HelpBlock, HoverCard, InlineStepDetail, InlineStepLabel, InputGroup, Kbd, Label2 as Label, Link, Markdown, MarkedText, MessageBubble, Modal, MultiActionButtonGroup, MultiCombobox, Navbar, NumberInput, OtpInput, PageHeader, PageLayout, PageToolbar, Pagination, PaneHeader, PanelWithDetails, PasswordInput, PlanApproval, PlanRewritingIndicator, Popconfirm, Popover, Progress, PromptInput, Question, QuestionBlock, RadioGroup2 as RadioGroup, ResizableHandle, ResizablePanelGroup, ScrollArea, ScrollBar, Search, SearchForm, SearchInput, SearchInputWithNavigation, Select2 as Select, Separator2 as Separator, Sheet, Sidebar, SidebarProvider, Skeleton, SkeletonList, Slider, SplitButton, SpotlightBackdrop, Stepper, SuggestedPrompt, Switch, Table, Tabs2 as Tabs, TabsContent, Tagger, TextInput, Textarea, ThemeProvider, ThinkingIndicator, TimeInput, TimePicker, Timeline, Toaster, Toggle, ToggleGroup, ToolCallApproval, ToolCallChip, Tooltip, TooltipProvider, Truncated, UsageStats, UsageStatsRing, ZoomableSvg, argoVariants, cn, computeDiffRows, computeLineInformation, copyToClipboard, isMac, kbdVariants, keys, mergeRefs, setServerFieldErrors, toast, useAppForm, useArgoDesign, useAutosizeInput, useMergeDiff, useNotification, useScrollbarPosition, useSidebar, useTargetRect, useTheme, withForm };
24664
+ export { Alert, AlertModal, AnswerSummary, AppShell, ArgoDesignContext, AutoSaveTextarea, Avatar, Badge, BrandEditor, BrandLogo, Breadcrumb, Button, ButtonGroup, ButtonInline, Calendar, Card, ChartPanel, Checkbox, Clipboard, ClipboardButton, ClipboardInline, Collapse, Collapsible, CollapsiblePanel, CollapsibleStepHeader, ColorInput, ColorModeSwitch, Combobox, Command, CommandGroup, CommandInput, CommandItem, CommandList, ConflictStatusIndicator, CopyField, DEFAULT_COLOR_SCHEME, DEFAULT_FALLBACK_FONT, DEFAULT_FONT_OPTIONS, DEFAULT_BRAND_ID as DEFAULT_KEBOOLA_BRAND_ID, DashboardHero, DateInput, DatePicker, DateRangeInput, DateRangePicker, DiffType, DiffView, DotsLoader, DropdownMenu, EmptyConfigurationActionCard, EmptySearchContent, EmptyState, ErrorState, FileUpload, FormGroup, FullScreenModal, FullScreenModalBody, FullScreenModalHeader, GoogleButton, HelpBlock, HoverCard, InlineStepDetail, InlineStepLabel, InputGroup, Kbd, Label2 as Label, Link, Markdown, MarkedText, MessageBubble, Modal, MultiActionButtonGroup, MultiCombobox, Navbar, NumberInput, OtpInput, PageHeader, PageLayout, PageToolbar, Pagination, PaneHeader, PanelWithDetails, PasswordInput, PlanApproval, PlanRewritingIndicator, Popconfirm, Popover, Progress, PromptInput, Question, QuestionBlock, RadioGroup2 as RadioGroup, ResizableHandle, ResizablePanelGroup, ScrollArea, ScrollBar, Search, SearchForm, SearchInput, SearchInputWithNavigation, Select2 as Select, Separator2 as Separator, Sheet, Sidebar, SidebarProvider, Skeleton, SkeletonList, Slider, SplitButton, SpotlightBackdrop, StatCard, StatCardGrid, Stepper, SuggestedPrompt, Switch, Table, Tabs2 as Tabs, TabsContent, Tagger, TextInput, Textarea, ThemeProvider, ThinkingIndicator, TimeInput, TimePicker, Timeline, Toaster, Toggle, ToggleGroup, ToolCallApproval, ToolCallChip, Tooltip, TooltipProvider, Truncated, UsageStats, UsageStatsRing, ZoomableSvg, argoVariants, channelsToHex, cn, computeDiffRows, computeLineInformation, contrastRatio, copyToClipboard, hexToChannels, isMac, kbdVariants, keys, mergeRefs, setServerFieldErrors, toast, useAppForm, useArgoDesign, useAutosizeInput, useMergeDiff, useNotification, useScrollbarPosition, useSidebar, useTargetRect, useTheme, wcagLevel, withForm };
23674
24665
  //# sourceMappingURL=index.js.map
23675
24666
  //# sourceMappingURL=index.js.map