@cytario/design 1.11.1 → 1.12.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.d.ts CHANGED
@@ -497,12 +497,12 @@ declare function SegmentedControlItem({ className, ...props }: SegmentedControlI
497
497
  interface StorageConnectionCardProps {
498
498
  /** Display name for the connection */
499
499
  name: string;
500
- /** Cloud provider identifier (e.g., "aws", "minio", "azure", "gcp") */
501
- provider: string;
502
- /** AWS region or equivalent */
500
+ /** Cloud provider identifier (e.g., "aws", "minio", "azure", "gcp"). When omitted, the provider badge and region are hidden. */
501
+ provider?: string;
502
+ /** AWS region or equivalent (only rendered when provider is set) */
503
503
  region?: string;
504
- /** Connection health status */
505
- status: "connected" | "error" | "loading";
504
+ /** Connection health status. When omitted, the status dot is hidden and the preview area behaves as "connected". */
505
+ status?: "connected" | "error" | "loading";
506
506
  /** Human-readable error message when status is "error" */
507
507
  errorMessage?: string;
508
508
  /** Number of viewable images in the bucket */
@@ -620,6 +620,7 @@ declare const ColorSurfaceWarning = "#fffbeb";
620
620
  declare const ColorSurfaceInfo = "#f8fafc";
621
621
  declare const ColorSurfaceOverlay = "#000000cc";
622
622
  declare const ColorSurfaceHover = "#f3f4f6";
623
+ declare const ColorSurfacePressed = "#e5e7eb";
623
624
  declare const ColorSurfaceSelected = "#edf9f9";
624
625
  declare const ColorSurfaceSelectedHover = "#d0f0f0";
625
626
  declare const ColorBorderDefault = "#e5e7eb";
@@ -632,6 +633,19 @@ declare const ColorBorderSuccess = "#16a34a";
632
633
  declare const ColorBorderInfo = "#94a3b8";
633
634
  declare const ColorBorderWarning = "#d97706";
634
635
  declare const ColorOverlayBackdrop = "#00000066";
636
+ declare const ColorStatusSuccess = "#22c55e";
637
+ declare const ColorStatusDanger = "#f43f5e";
638
+ declare const ColorStatusWarning = "#d97706";
639
+ declare const ColorBadgePurpleBg = "#ead9f5";
640
+ declare const ColorBadgePurpleText = "#5c2483";
641
+ declare const ColorBadgeTealBg = "#d0f0f0";
642
+ declare const ColorBadgeTealText = "#217d7e";
643
+ declare const ColorBadgeSlateBg = "#f1f5f9";
644
+ declare const ColorBadgeSlateText = "#334155";
645
+ declare const ColorBadgeRoseBg = "#ffe4e6";
646
+ declare const ColorBadgeRoseText = "#be123c";
647
+ declare const ColorBadgeNeutralBg = "#f3f4f6";
648
+ declare const ColorBadgeNeutralText = "#374151";
635
649
  declare const Spacing1 = "4px";
636
650
  declare const Spacing2 = "8px";
637
651
  declare const Spacing3 = "12px";
@@ -665,4 +679,4 @@ declare const LineHeightTight = 1.25;
665
679
  declare const LineHeightNormal = 1.5;
666
680
  declare const LineHeightRelaxed = 1.625;
667
681
 
668
- export { BorderRadiusFull, BorderRadiusLg, BorderRadiusMd, BorderRadiusNone, BorderRadiusSm, BorderRadiusXl, type BreadcrumbItem, Breadcrumbs, type BreadcrumbsProps, Button, ButtonLink, type ButtonLinkProps, type ButtonProps, type ButtonSize, type ButtonVariant, Cell, Checkbox, type CheckboxProps, ColorActionDanger, ColorActionDangerHover, ColorActionDefault, ColorActionDefaultHover, ColorActionInfo, ColorActionInfoHover, ColorActionPrimary, ColorActionPrimaryActive, ColorActionPrimaryHover, ColorActionSecondary, ColorActionSecondaryHover, ColorActionSuccess, ColorActionSuccessHover, ColorBorderAccent, ColorBorderBrand, ColorBorderDanger, ColorBorderDefault, ColorBorderFocus, ColorBorderInfo, ColorBorderStrong, ColorBorderSuccess, ColorBorderWarning, ColorBrandAccent, ColorBrandPrimary, ColorGreen100, ColorGreen200, ColorGreen300, ColorGreen400, ColorGreen50, ColorGreen500, ColorGreen600, ColorGreen700, ColorGreen800, ColorGreen900, ColorNeutral0, ColorNeutral100, ColorNeutral1000, ColorNeutral200, ColorNeutral300, ColorNeutral400, ColorNeutral50, ColorNeutral500, ColorNeutral600, ColorNeutral700, ColorNeutral800, ColorNeutral900, ColorNeutral950, ColorOverlayBackdrop, ColorPurple100, ColorPurple200, ColorPurple300, ColorPurple400, ColorPurple50, ColorPurple500, ColorPurple600, ColorPurple700, ColorPurple800, ColorPurple900, ColorRose100, ColorRose200, ColorRose300, ColorRose400, ColorRose50, ColorRose500, ColorRose600, ColorRose700, ColorRose800, ColorRose900, ColorSlate100, ColorSlate200, ColorSlate300, ColorSlate400, ColorSlate50, ColorSlate500, ColorSlate600, ColorSlate700, ColorSlate800, ColorSlate900, ColorSurfaceAccent, ColorSurfaceBrand, ColorSurfaceDanger, ColorSurfaceDefault, ColorSurfaceHover, ColorSurfaceInfo, ColorSurfaceMuted, ColorSurfaceOverlay, ColorSurfaceSelected, ColorSurfaceSelectedHover, ColorSurfaceSubtle, ColorSurfaceSuccess, ColorSurfaceWarning, ColorTeal100, ColorTeal200, ColorTeal300, ColorTeal400, ColorTeal50, ColorTeal500, ColorTeal600, ColorTeal700, ColorTeal800, ColorTeal900, ColorTextAccent, ColorTextBrand, ColorTextDanger, ColorTextInfo, ColorTextInverse, ColorTextPrimary, ColorTextSecondary, ColorTextSuccess, ColorTextTertiary, ColorTextWarning, Column, type DataTableProps, Dialog, type DialogProps, EmptyState, type EmptyStateProps, Field, type FieldProps, Fieldset, type FieldsetProps, FontSize2xl, FontSize3xl, FontSize4xl, FontSize5xl, FontSizeBase, FontSizeLg, FontSizeSm, FontSizeXl, FontSizeXs, FontWeightBold, FontWeightExtrabold, FontWeightLight, FontWeightMedium, FontWeightRegular, FontWeightSemibold, type GroupPosition, H1, H2, H3, Heading, type HeadingLevel, type HeadingProps, type HeadingSize, Icon, IconButton, IconButtonLink, type IconButtonLinkProps, type IconButtonProps, type IconProps, Input, InputAddon, type InputAddonProps, InputGroup, InputGroupContext, type InputGroupProps, type InputProps, Label, type LabelProps, LineHeightNormal, LineHeightRelaxed, LineHeightTight, Link, type LinkProps, type LinkVariant, Menu, type MenuItemData, type MenuProps, Popover, PopoverContent, type PopoverContentProps, type PopoverProps, PopoverTrigger, type PopoverTriggerProps, Radio, RadioButton, type RadioButtonProps, RadioGroup, type RadioGroupProps, type RadioProps, Row, SegmentedControl, SegmentedControlItem, type SegmentedControlItemProps, type SegmentedControlProps, type SegmentedControlSelectionMode, type SegmentedControlSize, Select, type SelectItem, type SelectProps, Spacing1, Spacing12, Spacing16, Spacing2, Spacing3, Spacing4, Spacing6, Spacing8, Spinner, type SpinnerProps, StorageConnectionCard, type StorageConnectionCardProps, Switch, type SwitchProps, Tab, TabList, type TabListProps, TabPanel, type TabPanelProps, type TabProps, Table, TableBody, TableHeader, type TableSize, Tabs, type TabsProps, type TabsSize, type TabsVariant, type ToastBridge, type ToastContextValue, type ToastData, ToastProvider, type ToastVariant, ToggleButton, type ToggleButtonProps, type ToggleButtonSize, type ToggleButtonVariant, Tooltip, type TooltipProps, Tree, type TreeNode, type TreeProps, createToastBridge, useInputGroup, useToast };
682
+ export { BorderRadiusFull, BorderRadiusLg, BorderRadiusMd, BorderRadiusNone, BorderRadiusSm, BorderRadiusXl, type BreadcrumbItem, Breadcrumbs, type BreadcrumbsProps, Button, ButtonLink, type ButtonLinkProps, type ButtonProps, type ButtonSize, type ButtonVariant, Cell, Checkbox, type CheckboxProps, ColorActionDanger, ColorActionDangerHover, ColorActionDefault, ColorActionDefaultHover, ColorActionInfo, ColorActionInfoHover, ColorActionPrimary, ColorActionPrimaryActive, ColorActionPrimaryHover, ColorActionSecondary, ColorActionSecondaryHover, ColorActionSuccess, ColorActionSuccessHover, ColorBadgeNeutralBg, ColorBadgeNeutralText, ColorBadgePurpleBg, ColorBadgePurpleText, ColorBadgeRoseBg, ColorBadgeRoseText, ColorBadgeSlateBg, ColorBadgeSlateText, ColorBadgeTealBg, ColorBadgeTealText, ColorBorderAccent, ColorBorderBrand, ColorBorderDanger, ColorBorderDefault, ColorBorderFocus, ColorBorderInfo, ColorBorderStrong, ColorBorderSuccess, ColorBorderWarning, ColorBrandAccent, ColorBrandPrimary, ColorGreen100, ColorGreen200, ColorGreen300, ColorGreen400, ColorGreen50, ColorGreen500, ColorGreen600, ColorGreen700, ColorGreen800, ColorGreen900, ColorNeutral0, ColorNeutral100, ColorNeutral1000, ColorNeutral200, ColorNeutral300, ColorNeutral400, ColorNeutral50, ColorNeutral500, ColorNeutral600, ColorNeutral700, ColorNeutral800, ColorNeutral900, ColorNeutral950, ColorOverlayBackdrop, ColorPurple100, ColorPurple200, ColorPurple300, ColorPurple400, ColorPurple50, ColorPurple500, ColorPurple600, ColorPurple700, ColorPurple800, ColorPurple900, ColorRose100, ColorRose200, ColorRose300, ColorRose400, ColorRose50, ColorRose500, ColorRose600, ColorRose700, ColorRose800, ColorRose900, ColorSlate100, ColorSlate200, ColorSlate300, ColorSlate400, ColorSlate50, ColorSlate500, ColorSlate600, ColorSlate700, ColorSlate800, ColorSlate900, ColorStatusDanger, ColorStatusSuccess, ColorStatusWarning, ColorSurfaceAccent, ColorSurfaceBrand, ColorSurfaceDanger, ColorSurfaceDefault, ColorSurfaceHover, ColorSurfaceInfo, ColorSurfaceMuted, ColorSurfaceOverlay, ColorSurfacePressed, ColorSurfaceSelected, ColorSurfaceSelectedHover, ColorSurfaceSubtle, ColorSurfaceSuccess, ColorSurfaceWarning, ColorTeal100, ColorTeal200, ColorTeal300, ColorTeal400, ColorTeal50, ColorTeal500, ColorTeal600, ColorTeal700, ColorTeal800, ColorTeal900, ColorTextAccent, ColorTextBrand, ColorTextDanger, ColorTextInfo, ColorTextInverse, ColorTextPrimary, ColorTextSecondary, ColorTextSuccess, ColorTextTertiary, ColorTextWarning, Column, type DataTableProps, Dialog, type DialogProps, EmptyState, type EmptyStateProps, Field, type FieldProps, Fieldset, type FieldsetProps, FontSize2xl, FontSize3xl, FontSize4xl, FontSize5xl, FontSizeBase, FontSizeLg, FontSizeSm, FontSizeXl, FontSizeXs, FontWeightBold, FontWeightExtrabold, FontWeightLight, FontWeightMedium, FontWeightRegular, FontWeightSemibold, type GroupPosition, H1, H2, H3, Heading, type HeadingLevel, type HeadingProps, type HeadingSize, Icon, IconButton, IconButtonLink, type IconButtonLinkProps, type IconButtonProps, type IconProps, Input, InputAddon, type InputAddonProps, InputGroup, InputGroupContext, type InputGroupProps, type InputProps, Label, type LabelProps, LineHeightNormal, LineHeightRelaxed, LineHeightTight, Link, type LinkProps, type LinkVariant, Menu, type MenuItemData, type MenuProps, Popover, PopoverContent, type PopoverContentProps, type PopoverProps, PopoverTrigger, type PopoverTriggerProps, Radio, RadioButton, type RadioButtonProps, RadioGroup, type RadioGroupProps, type RadioProps, Row, SegmentedControl, SegmentedControlItem, type SegmentedControlItemProps, type SegmentedControlProps, type SegmentedControlSelectionMode, type SegmentedControlSize, Select, type SelectItem, type SelectProps, Spacing1, Spacing12, Spacing16, Spacing2, Spacing3, Spacing4, Spacing6, Spacing8, Spinner, type SpinnerProps, StorageConnectionCard, type StorageConnectionCardProps, Switch, type SwitchProps, Tab, TabList, type TabListProps, TabPanel, type TabPanelProps, type TabProps, Table, TableBody, TableHeader, type TableSize, Tabs, type TabsProps, type TabsSize, type TabsVariant, type ToastBridge, type ToastContextValue, type ToastData, ToastProvider, type ToastVariant, ToggleButton, type ToggleButtonProps, type ToggleButtonSize, type ToggleButtonVariant, Tooltip, type TooltipProps, Tree, type TreeNode, type TreeProps, createToastBridge, useInputGroup, useToast };
package/dist/index.js CHANGED
@@ -24,8 +24,8 @@ var variantStyles = {
24
24
  ].join(" "),
25
25
  ghost: [
26
26
  "bg-transparent text-[var(--color-text-primary)]",
27
- "hover:bg-[var(--color-neutral-100)]",
28
- "pressed:bg-[var(--color-neutral-200)]"
27
+ "hover:bg-[var(--color-surface-hover)]",
28
+ "pressed:bg-[var(--color-surface-pressed)]"
29
29
  ].join(" "),
30
30
  destructive: [
31
31
  "bg-[var(--color-action-danger)] text-[var(--color-text-inverse)]",
@@ -232,7 +232,7 @@ function Tooltip({
232
232
  "bg-[var(--color-surface-overlay)] backdrop-blur-sm",
233
233
  "text-[var(--color-text-inverse)] text-sm",
234
234
  "px-3 py-1.5",
235
- "rounded-md",
235
+ "rounded-[var(--border-radius-md)]",
236
236
  "max-w-xs",
237
237
  "entering:animate-in entering:fade-in entering:duration-150",
238
238
  "exiting:animate-out exiting:fade-out exiting:duration-100",
@@ -555,13 +555,13 @@ function Select({
555
555
  isDisabled,
556
556
  isRequired,
557
557
  isInvalid: hasError,
558
- className: ["flex flex-col gap-1", className].filter(Boolean).join(" "),
558
+ className: ["flex flex-col gap-[var(--spacing-1)]", className].filter(Boolean).join(" "),
559
559
  children: [
560
560
  /* @__PURE__ */ jsxs5(
561
561
  Label2,
562
562
  {
563
563
  className: [
564
- "text-sm font-[var(--font-weight-medium)] text-[var(--color-text-primary)]"
564
+ "text-[length:var(--font-size-sm)] font-[var(--font-weight-medium)] text-[var(--color-text-primary)]"
565
565
  ].join(" "),
566
566
  children: [
567
567
  label,
@@ -595,7 +595,7 @@ function Select({
595
595
  ]
596
596
  }
597
597
  ),
598
- hasError && /* @__PURE__ */ jsx7("span", { className: "text-sm text-[var(--color-text-danger)]", children: errorMessage }),
598
+ hasError && /* @__PURE__ */ jsx7("span", { className: "text-[length:var(--font-size-sm)] text-[var(--color-text-danger)]", children: errorMessage }),
599
599
  /* @__PURE__ */ jsx7(
600
600
  Popover,
601
601
  {
@@ -760,7 +760,7 @@ function Dialog({
760
760
  className: [
761
761
  "w-full mx-4",
762
762
  sizeStyles2[size],
763
- "bg-[var(--color-surface-default)] rounded-lg shadow-xl max-h-[85vh] flex flex-col",
763
+ "bg-[var(--color-surface-default)] rounded-[var(--border-radius-lg)] shadow-xl max-h-[85vh] flex flex-col",
764
764
  "data-[entering]:animate-in data-[entering]:zoom-in-95 data-[entering]:fade-in",
765
765
  "data-[exiting]:animate-out data-[exiting]:zoom-out-95 data-[exiting]:fade-out",
766
766
  className
@@ -771,7 +771,7 @@ function Dialog({
771
771
  Heading,
772
772
  {
773
773
  slot: "title",
774
- className: "text-lg font-semibold text-[var(--color-text-primary)]",
774
+ className: "text-[length:var(--font-size-lg)] font-[number:var(--font-weight-semibold)] text-[var(--color-text-primary)]",
775
775
  children: title
776
776
  }
777
777
  ),
@@ -781,7 +781,7 @@ function Dialog({
781
781
  type: "button",
782
782
  onClick: close,
783
783
  className: [
784
- "inline-flex items-center justify-center rounded-md p-1",
784
+ "inline-flex items-center justify-center rounded-[var(--border-radius-sm)] p-1",
785
785
  "text-[var(--color-text-secondary)] hover:text-[var(--color-text-primary)] hover:bg-[var(--color-surface-muted)]",
786
786
  "outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2",
787
787
  "transition-colors"
@@ -860,7 +860,7 @@ function ToastItem({
860
860
  role: "status",
861
861
  "aria-live": "polite",
862
862
  className: [
863
- "flex items-start gap-3 rounded-lg border px-4 py-3 shadow-md",
863
+ "flex items-start gap-[var(--spacing-3)] rounded-[var(--border-radius-lg)] border px-[var(--spacing-4)] py-[var(--spacing-3)] shadow-md",
864
864
  "min-w-[320px] max-w-[420px]",
865
865
  "transition-all duration-200",
866
866
  isExiting ? "translate-x-full opacity-0" : "translate-x-0 opacity-100 animate-in slide-in-from-right",
@@ -868,13 +868,13 @@ function ToastItem({
868
868
  ].join(" "),
869
869
  children: [
870
870
  /* @__PURE__ */ jsx10(IconComponent, { size: 20, className: ["shrink-0 mt-0.5", config.iconClass].join(" "), "aria-hidden": "true" }),
871
- /* @__PURE__ */ jsx10("p", { className: "flex-1 text-sm font-medium", children: toast.message }),
871
+ /* @__PURE__ */ jsx10("p", { className: "flex-1 text-[length:var(--font-size-sm)] font-[number:var(--font-weight-medium)]", children: toast.message }),
872
872
  /* @__PURE__ */ jsx10(
873
873
  "button",
874
874
  {
875
875
  type: "button",
876
876
  onClick: dismiss,
877
- className: "shrink-0 rounded p-0.5 opacity-70 hover:opacity-100 transition-opacity outline-none focus-visible:ring-2 focus-visible:ring-current",
877
+ className: "shrink-0 rounded-[var(--border-radius-sm)] p-0.5 opacity-70 hover:opacity-100 transition-opacity outline-none focus-visible:ring-2 focus-visible:ring-current",
878
878
  "aria-label": "Dismiss",
879
879
  children: /* @__PURE__ */ jsx10(X2, { size: 16, "aria-hidden": "true" })
880
880
  }
@@ -947,12 +947,12 @@ function EmptyState({
947
947
  "div",
948
948
  {
949
949
  className: [
950
- "flex flex-col items-center text-center py-12 px-6",
950
+ "flex flex-col items-center text-center py-[var(--spacing-12)] px-[var(--spacing-6)]",
951
951
  className
952
952
  ].filter(Boolean).join(" "),
953
953
  children: [
954
954
  icon && /* @__PURE__ */ jsx11(Icon, { icon, size: "xl", className: "text-[var(--color-text-tertiary)]" }),
955
- /* @__PURE__ */ jsx11("h3", { className: "text-lg font-semibold text-[var(--color-text-primary)] mt-4", children: title }),
955
+ /* @__PURE__ */ jsx11("h3", { className: "text-[length:var(--font-size-lg)] font-[number:var(--font-weight-semibold)] text-[var(--color-text-primary)] mt-4", children: title }),
956
956
  description && /* @__PURE__ */ jsx11("p", { className: "text-sm text-[var(--color-text-secondary)] mt-2 max-w-sm", children: description }),
957
957
  action && /* @__PURE__ */ jsx11("div", { className: "mt-6", children: action })
958
958
  ]
@@ -1294,17 +1294,17 @@ var defaultSizeMap = {
1294
1294
  h6: "xs"
1295
1295
  };
1296
1296
  var sizeStyles3 = {
1297
- xs: "text-sm",
1298
- sm: "text-base",
1299
- md: "text-lg",
1300
- lg: "text-xl",
1301
- xl: "text-2xl",
1302
- "2xl": "text-3xl",
1303
- "3xl": "text-4xl"
1297
+ xs: "text-[length:var(--font-size-sm)]",
1298
+ sm: "text-[length:var(--font-size-base)]",
1299
+ md: "text-[length:var(--font-size-lg)]",
1300
+ lg: "text-[length:var(--font-size-xl)]",
1301
+ xl: "text-[length:var(--font-size-2xl)]",
1302
+ "2xl": "text-[length:var(--font-size-3xl)]",
1303
+ "3xl": "text-[length:var(--font-size-4xl)]"
1304
1304
  };
1305
1305
  var weightStyles = {
1306
- semibold: "font-semibold",
1307
- bold: "font-bold"
1306
+ semibold: "font-[number:var(--font-weight-semibold)]",
1307
+ bold: "font-[number:var(--font-weight-bold)]"
1308
1308
  };
1309
1309
  function Heading2({
1310
1310
  as: Tag = "h2",
@@ -1407,7 +1407,7 @@ function Breadcrumbs({ items, className }) {
1407
1407
  "flex items-center gap-1",
1408
1408
  isLast ? "min-w-0" : "shrink-0"
1409
1409
  ].join(" "),
1410
- children: isLast ? /* @__PURE__ */ jsx22("span", { className: "font-medium text-[var(--color-text-primary)] truncate", children: item.label }) : /* @__PURE__ */ jsxs16(Fragment6, { children: [
1410
+ children: isLast ? /* @__PURE__ */ jsx22("span", { className: "font-[number:var(--font-weight-medium)] text-[var(--color-text-primary)] truncate", children: item.label }) : /* @__PURE__ */ jsxs16(Fragment6, { children: [
1411
1411
  /* @__PURE__ */ jsx22(
1412
1412
  Link2,
1413
1413
  {
@@ -1536,18 +1536,18 @@ var variantStyles3 = {
1536
1536
  default: {
1537
1537
  base: [
1538
1538
  "bg-transparent text-[var(--color-text-primary)]",
1539
- "hover:bg-[var(--color-neutral-100)]",
1540
- "pressed:bg-[var(--color-neutral-200)]"
1539
+ "hover:bg-[var(--color-surface-hover)]",
1540
+ "pressed:bg-[var(--color-surface-pressed)]"
1541
1541
  ].join(" "),
1542
- selected: "bg-[var(--color-neutral-200)] text-[var(--color-text-primary)]"
1542
+ selected: "bg-[var(--color-surface-pressed)] text-[var(--color-text-primary)]"
1543
1543
  },
1544
1544
  primary: {
1545
1545
  base: [
1546
1546
  "bg-transparent text-[var(--color-text-primary)]",
1547
- "hover:bg-[var(--color-neutral-100)]",
1548
- "pressed:bg-[var(--color-neutral-200)]"
1547
+ "hover:bg-[var(--color-surface-hover)]",
1548
+ "pressed:bg-[var(--color-surface-pressed)]"
1549
1549
  ].join(" "),
1550
- selected: "bg-[var(--color-teal-500)] text-[var(--color-text-inverse)]"
1550
+ selected: "bg-[var(--color-action-primary-active)] text-[var(--color-text-inverse)]"
1551
1551
  },
1552
1552
  outlined: {
1553
1553
  base: [
@@ -1605,7 +1605,7 @@ function Menu({ items, children, className }) {
1605
1605
  Popover2,
1606
1606
  {
1607
1607
  className: [
1608
- "bg-[var(--color-surface-primary)] rounded-[var(--border-radius-md)]",
1608
+ "bg-[var(--color-surface-default)] rounded-[var(--border-radius-md)]",
1609
1609
  "shadow-lg border border-[var(--color-border-default)]",
1610
1610
  "py-1 min-w-48",
1611
1611
  "entering:animate-in entering:fade-in entering:zoom-in-95",
@@ -1631,8 +1631,8 @@ function Menu({ items, children, className }) {
1631
1631
  className: [
1632
1632
  "flex items-center gap-2 px-3 py-2 text-sm outline-none cursor-default",
1633
1633
  "transition-colors",
1634
- "focus:bg-[var(--color-neutral-100)]",
1635
- "hover:bg-[var(--color-neutral-100)]",
1634
+ "focus:bg-[var(--color-surface-muted)]",
1635
+ "hover:bg-[var(--color-surface-muted)]",
1636
1636
  "disabled:opacity-50 disabled:pointer-events-none",
1637
1637
  item.isDanger ? "text-[var(--color-text-danger)]" : "text-[var(--color-text-primary)]"
1638
1638
  ].filter(Boolean).join(" "),
@@ -1807,14 +1807,14 @@ function getTabVariantStyles(variant, state) {
1807
1807
  "text-[var(--color-teal-700)] font-[var(--font-weight-semibold)]",
1808
1808
  // Bottom indicator via pseudo-element
1809
1809
  "after:absolute after:bottom-[-1px] after:left-0 after:right-0 after:h-0.5 after:bg-[var(--color-teal-600)]"
1810
- ].join(" ") : state.isPressed ? "text-[var(--color-text-primary)] bg-[var(--color-neutral-100)]" : state.isHovered ? "text-[var(--color-text-primary)] bg-[var(--color-neutral-50)]" : "text-[var(--color-text-secondary)] bg-transparent"
1810
+ ].join(" ") : state.isPressed ? "text-[var(--color-text-primary)] bg-[var(--color-surface-muted)]" : state.isHovered ? "text-[var(--color-text-primary)] bg-[var(--color-surface-subtle)]" : "text-[var(--color-text-secondary)] bg-transparent"
1811
1811
  ];
1812
1812
  }
1813
1813
  return [
1814
1814
  // Shape
1815
1815
  "rounded-[var(--border-radius-md)]",
1816
1816
  // Color states
1817
- state.isSelected ? "text-[var(--color-text-primary)] font-[var(--font-weight-semibold)] bg-[var(--color-surface-default)] shadow-sm" : state.isPressed ? "text-[var(--color-text-primary)] bg-[var(--color-neutral-50)] shadow-none" : state.isHovered ? "text-[var(--color-text-primary)] bg-[var(--color-neutral-200)]" : "text-[var(--color-text-secondary)] bg-transparent"
1817
+ state.isSelected ? "text-[var(--color-text-primary)] font-[var(--font-weight-semibold)] bg-[var(--color-surface-default)] shadow-sm" : state.isPressed ? "text-[var(--color-text-primary)] bg-[var(--color-surface-subtle)] shadow-none" : state.isHovered ? "text-[var(--color-text-primary)] bg-[var(--color-surface-pressed)]" : "text-[var(--color-text-secondary)] bg-transparent"
1818
1818
  ];
1819
1819
  }
1820
1820
  function TabPanel({ className, ...props }) {
@@ -2146,20 +2146,20 @@ import { AlertCircle, Database, Info as Info2 } from "lucide-react";
2146
2146
  import { twMerge as twMerge7 } from "tailwind-merge";
2147
2147
  import { Fragment as Fragment8, jsx as jsx30, jsxs as jsxs20 } from "react/jsx-runtime";
2148
2148
  var statusDotStyles = {
2149
- connected: "bg-emerald-500",
2150
- error: "bg-red-500",
2151
- loading: "bg-amber-500 animate-pulse"
2149
+ connected: "bg-[var(--color-status-success)]",
2150
+ error: "border-2 border-[var(--color-status-danger)] bg-transparent",
2151
+ loading: "bg-[var(--color-status-warning)] animate-pulse"
2152
2152
  };
2153
2153
  var providerConfig = {
2154
- aws: { label: "AWS", color: "bg-orange-100 text-orange-700" },
2155
- azure: { label: "Azure", color: "bg-blue-100 text-blue-700" },
2156
- gcp: { label: "GCP", color: "bg-sky-100 text-sky-700" },
2157
- minio: { label: "MinIO", color: "bg-red-100 text-red-700" }
2154
+ aws: { label: "AWS", color: "bg-[var(--color-badge-purple-bg)] text-[var(--color-badge-purple-text)]" },
2155
+ azure: { label: "Azure", color: "bg-[var(--color-badge-teal-bg)] text-[var(--color-badge-teal-text)]" },
2156
+ gcp: { label: "GCP", color: "bg-[var(--color-badge-slate-bg)] text-[var(--color-badge-slate-text)]" },
2157
+ minio: { label: "MinIO", color: "bg-[var(--color-badge-rose-bg)] text-[var(--color-badge-rose-text)]" }
2158
2158
  };
2159
2159
  function ProviderBadge({ provider }) {
2160
2160
  const config = providerConfig[provider.toLowerCase()];
2161
2161
  const label = config?.label ?? provider;
2162
- const colorClass = config?.color ?? "bg-neutral-100 text-neutral-700";
2162
+ const colorClass = config?.color ?? "bg-[var(--color-badge-neutral-bg)] text-[var(--color-badge-neutral-text)]";
2163
2163
  return /* @__PURE__ */ jsx30(
2164
2164
  "span",
2165
2165
  {
@@ -2172,7 +2172,7 @@ function ProviderBadge({ provider }) {
2172
2172
  );
2173
2173
  }
2174
2174
  function PreviewArea({
2175
- status,
2175
+ status = "connected",
2176
2176
  errorMessage,
2177
2177
  children
2178
2178
  }) {
@@ -2180,16 +2180,16 @@ function PreviewArea({
2180
2180
  return /* @__PURE__ */ jsx30("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsx30(Spinner, { size: "lg", "aria-label": "Loading connection" }) });
2181
2181
  }
2182
2182
  if (status === "error") {
2183
- return /* @__PURE__ */ jsxs20("div", { className: "flex h-full flex-col items-center justify-center gap-2 bg-red-950/20 px-4", children: [
2183
+ return /* @__PURE__ */ jsxs20("div", { className: "flex h-full flex-col items-center justify-center gap-2 bg-[var(--color-surface-danger)] px-4", children: [
2184
2184
  /* @__PURE__ */ jsx30(
2185
2185
  Icon,
2186
2186
  {
2187
2187
  icon: AlertCircle,
2188
2188
  size: "lg",
2189
- className: "text-red-400"
2189
+ className: "text-[var(--color-text-danger)]"
2190
2190
  }
2191
2191
  ),
2192
- errorMessage && /* @__PURE__ */ jsx30("p", { className: "text-center text-xs text-red-300", children: errorMessage })
2192
+ errorMessage && /* @__PURE__ */ jsx30("p", { className: "text-center text-xs text-[var(--color-text-danger)]", children: errorMessage })
2193
2193
  ] });
2194
2194
  }
2195
2195
  if (children) {
@@ -2200,7 +2200,7 @@ function PreviewArea({
2200
2200
  {
2201
2201
  icon: Database,
2202
2202
  size: "xl",
2203
- className: "text-[var(--color-neutral-600)]"
2203
+ className: "text-[var(--color-text-secondary)]"
2204
2204
  }
2205
2205
  ) });
2206
2206
  }
@@ -2220,7 +2220,7 @@ function StorageConnectionCard({
2220
2220
  /* @__PURE__ */ jsx30("div", { className: "aspect-[4/3] bg-[var(--color-neutral-900)] overflow-hidden rounded-t-[var(--border-radius-lg)]", children: /* @__PURE__ */ jsx30(PreviewArea, { status, errorMessage, children }) }),
2221
2221
  /* @__PURE__ */ jsxs20("div", { className: "flex flex-col gap-1.5 border-t border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-2.5 rounded-b-[var(--border-radius-lg)]", children: [
2222
2222
  /* @__PURE__ */ jsxs20("div", { className: "flex items-start gap-2", children: [
2223
- /* @__PURE__ */ jsx30(
2223
+ status && /* @__PURE__ */ jsx30(
2224
2224
  "span",
2225
2225
  {
2226
2226
  className: twMerge7(
@@ -2245,10 +2245,10 @@ function StorageConnectionCard({
2245
2245
  }
2246
2246
  )
2247
2247
  ] }),
2248
- /* @__PURE__ */ jsxs20("div", { className: "flex items-center gap-2 pl-4", children: [
2249
- /* @__PURE__ */ jsx30(ProviderBadge, { provider }),
2250
- region && /* @__PURE__ */ jsx30("span", { className: "shrink-0 text-xs text-[var(--color-text-secondary)]", children: region }),
2251
- imageCount != null && status === "connected" && /* @__PURE__ */ jsxs20("span", { className: "ml-auto shrink-0 text-xs tabular-nums text-[var(--color-text-tertiary)]", children: [
2248
+ (provider || imageCount != null && (!status || status === "connected")) && /* @__PURE__ */ jsxs20("div", { className: twMerge7("flex items-center gap-2", status && "pl-4"), children: [
2249
+ provider && /* @__PURE__ */ jsx30(ProviderBadge, { provider }),
2250
+ provider && region && /* @__PURE__ */ jsx30("span", { className: "shrink-0 text-xs text-[var(--color-text-secondary)]", children: region }),
2251
+ imageCount != null && (!status || status === "connected") && /* @__PURE__ */ jsxs20("span", { className: "ml-auto shrink-0 text-xs tabular-nums text-[var(--color-text-tertiary)]", children: [
2252
2252
  imageCount,
2253
2253
  " ",
2254
2254
  imageCount === 1 ? "image" : "images"
@@ -2369,6 +2369,7 @@ var ColorSurfaceWarning = "#fffbeb";
2369
2369
  var ColorSurfaceInfo = "#f8fafc";
2370
2370
  var ColorSurfaceOverlay = "#000000cc";
2371
2371
  var ColorSurfaceHover = "#f3f4f6";
2372
+ var ColorSurfacePressed = "#e5e7eb";
2372
2373
  var ColorSurfaceSelected = "#edf9f9";
2373
2374
  var ColorSurfaceSelectedHover = "#d0f0f0";
2374
2375
  var ColorBorderDefault = "#e5e7eb";
@@ -2381,6 +2382,19 @@ var ColorBorderSuccess = "#16a34a";
2381
2382
  var ColorBorderInfo = "#94a3b8";
2382
2383
  var ColorBorderWarning = "#d97706";
2383
2384
  var ColorOverlayBackdrop = "#00000066";
2385
+ var ColorStatusSuccess = "#22c55e";
2386
+ var ColorStatusDanger = "#f43f5e";
2387
+ var ColorStatusWarning = "#d97706";
2388
+ var ColorBadgePurpleBg = "#ead9f5";
2389
+ var ColorBadgePurpleText = "#5c2483";
2390
+ var ColorBadgeTealBg = "#d0f0f0";
2391
+ var ColorBadgeTealText = "#217d7e";
2392
+ var ColorBadgeSlateBg = "#f1f5f9";
2393
+ var ColorBadgeSlateText = "#334155";
2394
+ var ColorBadgeRoseBg = "#ffe4e6";
2395
+ var ColorBadgeRoseText = "#be123c";
2396
+ var ColorBadgeNeutralBg = "#f3f4f6";
2397
+ var ColorBadgeNeutralText = "#374151";
2384
2398
  var Spacing1 = "4px";
2385
2399
  var Spacing2 = "8px";
2386
2400
  var Spacing3 = "12px";
@@ -2438,6 +2452,16 @@ export {
2438
2452
  ColorActionSecondaryHover,
2439
2453
  ColorActionSuccess,
2440
2454
  ColorActionSuccessHover,
2455
+ ColorBadgeNeutralBg,
2456
+ ColorBadgeNeutralText,
2457
+ ColorBadgePurpleBg,
2458
+ ColorBadgePurpleText,
2459
+ ColorBadgeRoseBg,
2460
+ ColorBadgeRoseText,
2461
+ ColorBadgeSlateBg,
2462
+ ColorBadgeSlateText,
2463
+ ColorBadgeTealBg,
2464
+ ColorBadgeTealText,
2441
2465
  ColorBorderAccent,
2442
2466
  ColorBorderBrand,
2443
2467
  ColorBorderDanger,
@@ -2503,6 +2527,9 @@ export {
2503
2527
  ColorSlate700,
2504
2528
  ColorSlate800,
2505
2529
  ColorSlate900,
2530
+ ColorStatusDanger,
2531
+ ColorStatusSuccess,
2532
+ ColorStatusWarning,
2506
2533
  ColorSurfaceAccent,
2507
2534
  ColorSurfaceBrand,
2508
2535
  ColorSurfaceDanger,
@@ -2511,6 +2538,7 @@ export {
2511
2538
  ColorSurfaceInfo,
2512
2539
  ColorSurfaceMuted,
2513
2540
  ColorSurfaceOverlay,
2541
+ ColorSurfacePressed,
2514
2542
  ColorSurfaceSelected,
2515
2543
  ColorSurfaceSelectedHover,
2516
2544
  ColorSurfaceSubtle,