@sckyzo/cosmos-react 0.0.3 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { clsx } from 'clsx';
2
2
  import { jsx, jsxs, Fragment as Fragment$1 } from 'react/jsx-runtime';
3
3
  import { forwardRef, createContext, Children, Fragment, cloneElement, isValidElement, useState, useRef, useCallback, useEffect, useId, useContext, useMemo } from 'react';
4
- import { ChevronRight, Check, Copy, BellOff, Bell, CheckCircle2, Info, AlertTriangle, XCircle, ChevronDown, Sun, Moon, MoonStar, ExternalLink, Search, EyeOff, Eye, Minus, Paperclip, Clock, X, ChevronLeft, Dot as Dot$1, ArrowRight, HelpCircle, Home, Inbox, AlertCircle, CheckCircle, RefreshCw, Loader2, Save, Megaphone, Cookie, ArrowUp, ChevronUp, Plus, Maximize2, RotateCcw, Camera, Trash2, Upload, File, ChevronsUpDown, Filter, MailCheck, ArrowLeft, Mail, User, ShieldCheck, Quote, Calendar as Calendar$1 } from 'lucide-react';
4
+ import { ChevronRight, Check, Copy, BellOff, Bell, CheckCircle2, Info, AlertTriangle, XCircle, ChevronDown, Sun, Moon, MoonStar, ExternalLink, Search, EyeOff, Eye, Minus, Paperclip, Clock, X, ChevronLeft, Dot as Dot$1, ArrowRight, HelpCircle, Home, Inbox, AlertCircle, CheckCircle, RefreshCw, Loader2, Save, Megaphone, Cookie, ArrowUp, ChevronUp, Plus, Maximize2, RotateCcw, Camera, Trash2, Upload, File, ChevronsUpDown, Filter, MailCheck, ArrowLeft, Mail, User, ShieldCheck, Palette, Quote, Calendar as Calendar$1 } from 'lucide-react';
5
5
  import { createPortal } from 'react-dom';
6
6
  import Autoplay from 'embla-carousel-autoplay';
7
7
  import useEmblaCarousel from 'embla-carousel-react';
@@ -320,11 +320,11 @@ var SidebarItem = ({
320
320
  const baseClass = clsx(
321
321
  "group mx-2 flex items-center gap-3 rounded-lg py-2 text-sm font-medium transition-colors",
322
322
  collapsed ? "justify-center px-2" : "px-3",
323
- active ? "bg-brand-500/10 text-brand-500" : "text-[var(--color-text-secondary)] hover:bg-black/5 hover:text-[var(--color-text-primary)] dark:hover:bg-white/5"
323
+ active ? "bg-brand-500/10 text-brand-600 dark:text-brand-400" : "text-[var(--color-text-secondary)] hover:bg-black/5 hover:text-[var(--color-text-primary)] dark:hover:bg-white/5"
324
324
  );
325
325
  const style = !collapsed && depth > 0 ? { paddingLeft: 12 + depth * 20 } : void 0;
326
326
  const content = /* @__PURE__ */ jsxs(Fragment$1, { children: [
327
- /* @__PURE__ */ jsx(Icon2, { className: clsx("h-5 w-5 shrink-0", active && "text-brand-500") }),
327
+ /* @__PURE__ */ jsx(Icon2, { className: "h-5 w-5 shrink-0" }),
328
328
  !collapsed && /* @__PURE__ */ jsxs(Fragment$1, { children: [
329
329
  /* @__PURE__ */ jsx("span", { className: "flex-1 truncate", children: label }),
330
330
  badge && /* @__PURE__ */ jsx("span", { className: "shrink-0", children: badge })
@@ -375,9 +375,9 @@ var SidebarSubMenu = ({
375
375
  title: label,
376
376
  className: clsx(
377
377
  "group mx-2 flex w-[calc(100%-1rem)] items-center justify-center rounded-lg px-2 py-2 text-sm font-medium transition-colors",
378
- active ? "bg-brand-500/10 text-brand-500" : "text-[var(--color-text-secondary)] hover:bg-black/5 hover:text-[var(--color-text-primary)] dark:hover:bg-white/5"
378
+ active ? "bg-brand-500/10 text-brand-600 dark:text-brand-400" : "text-[var(--color-text-secondary)] hover:bg-black/5 hover:text-[var(--color-text-primary)] dark:hover:bg-white/5"
379
379
  ),
380
- children: /* @__PURE__ */ jsx(Icon2, { className: clsx("h-5 w-5 shrink-0", active && "text-brand-500") })
380
+ children: /* @__PURE__ */ jsx(Icon2, { className: "h-5 w-5 shrink-0" })
381
381
  }
382
382
  );
383
383
  }
@@ -390,10 +390,10 @@ var SidebarSubMenu = ({
390
390
  "aria-expanded": open,
391
391
  className: clsx(
392
392
  "group mx-2 flex w-[calc(100%-1rem)] items-center gap-3 rounded-lg px-3 py-2 text-left text-sm font-medium transition-colors",
393
- active ? "bg-brand-500/10 text-brand-500" : "text-[var(--color-text-secondary)] hover:bg-black/5 hover:text-[var(--color-text-primary)] dark:hover:bg-white/5"
393
+ active ? "bg-brand-500/10 text-brand-600 dark:text-brand-400" : "text-[var(--color-text-secondary)] hover:bg-black/5 hover:text-[var(--color-text-primary)] dark:hover:bg-white/5"
394
394
  ),
395
395
  children: [
396
- /* @__PURE__ */ jsx(Icon2, { className: clsx("h-5 w-5 shrink-0", active && "text-brand-500") }),
396
+ /* @__PURE__ */ jsx(Icon2, { className: "h-5 w-5 shrink-0" }),
397
397
  /* @__PURE__ */ jsx("span", { className: "flex-1 truncate", children: label }),
398
398
  badge && /* @__PURE__ */ jsx("span", { className: "shrink-0", children: badge }),
399
399
  /* @__PURE__ */ jsx(
@@ -454,7 +454,7 @@ Sidebar.SubMenu = SidebarSubMenu;
454
454
  var PageBreadcrumb = ({ items, className }) => /* @__PURE__ */ jsx("nav", { "aria-label": "Breadcrumb", className, children: /* @__PURE__ */ jsx("ol", { className: "flex flex-wrap items-center gap-1 text-sm", children: items.map((item, i) => {
455
455
  const isFirst = i === 0;
456
456
  const isLast = i === items.length - 1;
457
- const linkClass = "hover:text-brand-500 dark:hover:text-brand-400 flex items-center gap-1 text-[var(--color-text-secondary)] transition-colors";
457
+ const linkClass = "hover:text-brand-600 dark:hover:text-brand-400 flex items-center gap-1 text-[var(--color-text-secondary)] transition-colors";
458
458
  const renderInner = /* @__PURE__ */ jsxs(Fragment$1, { children: [
459
459
  isFirst && /* @__PURE__ */ jsx(Home, { className: "h-4 w-4" }),
460
460
  item.label
@@ -598,7 +598,7 @@ var ErrorState = ({
598
598
  {
599
599
  type: "button",
600
600
  onClick: onRetry,
601
- className: "text-brand-500 hover:text-brand-600 text-xs font-medium hover:underline",
601
+ className: "text-brand-600 hover:text-brand-700 dark:text-brand-400 dark:hover:text-brand-300 text-xs font-medium hover:underline",
602
602
  children: "Try again"
603
603
  }
604
604
  )
@@ -3479,7 +3479,7 @@ var NotificationsPanelFooter = ({
3479
3479
  if (closeOnClick && !e.defaultPrevented) setOpen(false);
3480
3480
  },
3481
3481
  className: clsx(
3482
- "text-brand-500 w-full rounded-lg py-2 text-center text-sm font-medium transition-colors hover:bg-gray-50 dark:hover:bg-white/5",
3482
+ "text-brand-600 dark:text-brand-400 w-full rounded-lg py-2 text-center text-sm font-medium transition-colors hover:bg-gray-50 dark:hover:bg-white/5",
3483
3483
  className
3484
3484
  ),
3485
3485
  ...rest,
@@ -3812,7 +3812,7 @@ var SIZE_CLASS9 = {
3812
3812
  sm: { box: "h-8 w-8", icon: "h-4 w-4" },
3813
3813
  md: { box: "h-10 w-10", icon: "h-5 w-5" }
3814
3814
  };
3815
- var TRI_ORDER = ["light", "dark", "oled"];
3815
+ var TRI_ORDER = ["light", "dark", "deep-blue"];
3816
3816
  var nextInCycle = (current) => {
3817
3817
  const idx = TRI_ORDER.indexOf(current);
3818
3818
  return TRI_ORDER[(idx + 1) % TRI_ORDER.length];
@@ -3820,7 +3820,7 @@ var nextInCycle = (current) => {
3820
3820
  var ICON_FOR = {
3821
3821
  light: Sun,
3822
3822
  dark: Moon,
3823
- oled: MoonStar
3823
+ "deep-blue": MoonStar
3824
3824
  };
3825
3825
  var ThemeToggleTri = forwardRef(
3826
3826
  function ThemeToggleTri2({
@@ -3829,12 +3829,12 @@ var ThemeToggleTri = forwardRef(
3829
3829
  size = "md",
3830
3830
  lightLabel = "Switch to light mode",
3831
3831
  darkLabel = "Switch to dark mode",
3832
- oledLabel = "Switch to OLED mode",
3832
+ deepBlueLabel = "Switch to deep blue mode",
3833
3833
  className,
3834
3834
  ...rest
3835
3835
  }, ref) {
3836
3836
  const next = nextInCycle(theme);
3837
- const label = next === "light" ? lightLabel : next === "dark" ? darkLabel : oledLabel;
3837
+ const label = next === "light" ? lightLabel : next === "dark" ? darkLabel : deepBlueLabel;
3838
3838
  const Icon2 = ICON_FOR[theme];
3839
3839
  const { box, icon } = SIZE_CLASS9[size];
3840
3840
  return /* @__PURE__ */ jsx(
@@ -4086,9 +4086,12 @@ var PopoverRoot = ({
4086
4086
  const handler = () => refreshRect();
4087
4087
  window.addEventListener("resize", handler);
4088
4088
  window.addEventListener("scroll", handler, true);
4089
+ const observer = new ResizeObserver(handler);
4090
+ if (triggerRef.current) observer.observe(triggerRef.current, { box: "border-box" });
4089
4091
  return () => {
4090
4092
  window.removeEventListener("resize", handler);
4091
4093
  window.removeEventListener("scroll", handler, true);
4094
+ observer.disconnect();
4092
4095
  };
4093
4096
  }, [open, refreshRect]);
4094
4097
  useEffect(() => {
@@ -4127,13 +4130,18 @@ var PopoverTrigger = forwardRef(function PopoverTrigger2({ onClick, children, ..
4127
4130
  }
4128
4131
  );
4129
4132
  });
4130
- var positionStyle = (position, rect, offset) => {
4133
+ var VIEWPORT_MARGIN = 16;
4134
+ var positionStyle = (position, align, rect, offset) => {
4135
+ const left = align === "end" ? rect.right : rect.left + rect.width / 2;
4136
+ const shiftX = align === "end" ? "-100%" : "-50%";
4137
+ const maxWidth = align === "end" ? rect.right - VIEWPORT_MARGIN : void 0;
4131
4138
  switch (position) {
4132
4139
  case "top":
4133
4140
  return {
4134
4141
  top: rect.top - offset,
4135
- left: rect.left + rect.width / 2,
4136
- transform: "translate(-50%, -100%)"
4142
+ left,
4143
+ maxWidth,
4144
+ transform: `translate(${shiftX}, -100%)`
4137
4145
  };
4138
4146
  case "right":
4139
4147
  return {
@@ -4151,32 +4159,36 @@ var positionStyle = (position, rect, offset) => {
4151
4159
  default:
4152
4160
  return {
4153
4161
  top: rect.bottom + offset,
4154
- left: rect.left + rect.width / 2,
4155
- transform: "translateX(-50%)"
4162
+ left,
4163
+ maxWidth,
4164
+ transform: `translateX(${shiftX})`
4156
4165
  };
4157
4166
  }
4158
4167
  };
4159
- var arrowStyle = (position) => {
4168
+ var arrowStyle = (position, align, rect) => {
4160
4169
  const base = {
4161
4170
  position: "absolute",
4162
4171
  width: 8,
4163
4172
  height: 8,
4164
4173
  transform: "rotate(45deg)"
4165
4174
  };
4175
+ const x = align === "end" ? { right: rect.width / 2 - 1, marginRight: -4 } : { left: "50%", marginLeft: -4 };
4166
4176
  switch (position) {
4167
4177
  case "top":
4168
- return { ...base, bottom: -4, left: "50%", marginLeft: -4 };
4178
+ return { ...base, bottom: -4, ...x };
4169
4179
  case "right":
4170
4180
  return { ...base, left: -4, top: "50%", marginTop: -4 };
4171
4181
  case "left":
4172
4182
  return { ...base, right: -4, top: "50%", marginTop: -4 };
4173
4183
  case "bottom":
4174
4184
  default:
4175
- return { ...base, top: -4, left: "50%", marginLeft: -4 };
4185
+ return { ...base, top: -4, ...x };
4176
4186
  }
4177
4187
  };
4178
4188
  var PopoverContent = ({
4179
4189
  position = "bottom",
4190
+ align = "center",
4191
+ "aria-label": ariaLabel,
4180
4192
  offset = 8,
4181
4193
  arrow = false,
4182
4194
  width = "w-64",
@@ -4192,7 +4204,8 @@ var PopoverContent = ({
4192
4204
  "div",
4193
4205
  {
4194
4206
  role: "dialog",
4195
- style: positionStyle(position, triggerRect, offset),
4207
+ "aria-label": ariaLabel,
4208
+ style: positionStyle(position, align, triggerRect, offset),
4196
4209
  className: clsx(
4197
4210
  "fixed z-[9999] rounded-xl border border-gray-200 bg-white p-4 text-sm shadow-xl dark:border-gray-700 dark:bg-gray-900 dark:text-gray-100",
4198
4211
  width,
@@ -4203,7 +4216,7 @@ var PopoverContent = ({
4203
4216
  "span",
4204
4217
  {
4205
4218
  "aria-hidden": true,
4206
- style: arrowStyle(position),
4219
+ style: arrowStyle(position, align, triggerRect),
4207
4220
  className: "border border-gray-200 bg-white dark:border-gray-700 dark:bg-gray-900"
4208
4221
  }
4209
4222
  ),
@@ -7624,7 +7637,7 @@ var ColumnHeader = ({
7624
7637
  "aria-label": "Filter column",
7625
7638
  className: clsx(
7626
7639
  "flex items-center gap-1 rounded p-0.5 transition-colors hover:bg-gray-200 dark:hover:bg-white/10",
7627
- filterCount > 0 && "text-brand-500"
7640
+ filterCount > 0 && "text-brand-600 dark:text-brand-400"
7628
7641
  ),
7629
7642
  children: [
7630
7643
  /* @__PURE__ */ jsx(Filter, { className: "h-3 w-3" }),
@@ -8392,7 +8405,7 @@ var SignInForm = ({
8392
8405
  {
8393
8406
  type: "button",
8394
8407
  onClick: onForgotPassword,
8395
- className: "text-brand-500 hover:text-brand-600 text-xs font-medium transition-colors",
8408
+ className: "text-brand-600 hover:text-brand-700 dark:text-brand-400 dark:hover:text-brand-300 text-xs font-medium transition-colors",
8396
8409
  children: forgotLabel
8397
8410
  }
8398
8411
  )
@@ -8735,7 +8748,7 @@ var TwoStepVerificationForm = ({
8735
8748
  type: "button",
8736
8749
  onClick: onResend,
8737
8750
  disabled: loading,
8738
- className: "text-brand-500 hover:text-brand-600 font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50",
8751
+ className: "text-brand-600 hover:text-brand-700 dark:text-brand-400 dark:hover:text-brand-300 font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50",
8739
8752
  children: resendLabel
8740
8753
  }
8741
8754
  )
@@ -8851,7 +8864,7 @@ var PaletteCard = ({ meta, active = false, onClick, className }) => /* @__PURE__
8851
8864
  /* @__PURE__ */ jsxs(
8852
8865
  "div",
8853
8866
  {
8854
- className: "flex items-center justify-between px-2.5 py-1.5",
8867
+ className: "flex flex-1 items-center justify-between px-2.5 py-1.5",
8855
8868
  style: {
8856
8869
  backgroundColor: meta.preview.surface,
8857
8870
  borderTop: `1px solid ${meta.preview.border}`
@@ -8862,11 +8875,11 @@ var PaletteCard = ({ meta, active = false, onClick, className }) => /* @__PURE__
8862
8875
  "span",
8863
8876
  {
8864
8877
  className: "block text-xs font-semibold",
8865
- style: { color: active ? void 0 : "#6b7280" },
8878
+ style: { color: meta.preview.text ?? (active ? void 0 : "#6b7280") },
8866
8879
  children: meta.label
8867
8880
  }
8868
8881
  ),
8869
- meta.desc && /* @__PURE__ */ jsx("span", { className: "block text-[10px]", style: { color: "#9ca3af" }, children: meta.desc })
8882
+ meta.desc && /* @__PURE__ */ jsx("span", { className: "block text-[10px]", style: { color: meta.preview.text ?? "#9ca3af" }, children: meta.desc })
8870
8883
  ] }),
8871
8884
  active && /* @__PURE__ */ jsx("span", { className: "bg-brand-500 flex h-4 w-4 shrink-0 items-center justify-center rounded-full", children: /* @__PURE__ */ jsx(Check, { className: "h-2.5 w-2.5 text-white", "aria-hidden": true }) })
8872
8885
  ]
@@ -8916,7 +8929,7 @@ var OptionCard = ({
8916
8929
  {
8917
8930
  className: clsx(
8918
8931
  "text-xs font-semibold",
8919
- active ? "text-brand-500" : "text-gray-700 dark:text-gray-300"
8932
+ active ? "text-brand-600 dark:text-brand-400" : "text-gray-700 dark:text-gray-300"
8920
8933
  ),
8921
8934
  children: label
8922
8935
  }
@@ -8952,6 +8965,129 @@ var OptionPicker = ({
8952
8965
  ))
8953
8966
  }
8954
8967
  );
8968
+
8969
+ // src/settings/appearance.ts
8970
+ var COSMOS_THEMES = [
8971
+ {
8972
+ id: "light",
8973
+ label: "Light",
8974
+ dark: false,
8975
+ preview: { bg: "#f9fafb", surface: "#ffffff", border: "#e5e7eb", text: "#667085" }
8976
+ },
8977
+ {
8978
+ id: "sand",
8979
+ label: "Sand",
8980
+ dark: false,
8981
+ preview: { bg: "#f9f5eb", surface: "#fffcf7", border: "#e7dfd0", text: "#746656" }
8982
+ },
8983
+ {
8984
+ id: "dark",
8985
+ label: "Dark",
8986
+ dark: true,
8987
+ preview: { bg: "#0a0a0a", surface: "#141414", border: "#3d3d3d", text: "#a3a3a3" }
8988
+ },
8989
+ {
8990
+ id: "deep-blue",
8991
+ label: "Deep Blue",
8992
+ dark: true,
8993
+ preview: { bg: "#0c111d", surface: "#101828", border: "#344054", text: "#98a2b3" }
8994
+ }
8995
+ ];
8996
+ var COSMOS_ACCENTS = [
8997
+ { id: "blue", label: "Blue", hex: "#465fff" },
8998
+ { id: "indigo", label: "Indigo", hex: "#5963e9" },
8999
+ { id: "violet", label: "Violet", hex: "#8745f1" },
9000
+ { id: "purple", label: "Purple", hex: "#ad2ecf" },
9001
+ { id: "rose", label: "Rose", hex: "#d4166d" },
9002
+ { id: "teal", label: "Teal", hex: "#038378" },
9003
+ { id: "cyan", label: "Cyan", hex: "#017f9d" },
9004
+ { id: "graphite", label: "Graphite", hex: "#707580" },
9005
+ { id: "red", label: "Red", hex: "#db192a" },
9006
+ { id: "orange", label: "Orange", hex: "#c04f01" },
9007
+ { id: "amber", label: "Amber", hex: "#a46800" },
9008
+ { id: "green", label: "Green", hex: "#02863c" }
9009
+ ];
9010
+ var THEME_CLASSES = COSMOS_THEMES.map((t) => t.id).filter((id) => id !== "light");
9011
+ var isDarkTheme = (theme) => COSMOS_THEMES.some((t) => t.id === theme && t.dark);
9012
+ var applyAppearance = ({ theme, accent }, root) => {
9013
+ const el = root ?? (typeof document === "undefined" ? void 0 : document.documentElement);
9014
+ if (!el) return;
9015
+ el.classList.remove(...THEME_CLASSES);
9016
+ if (theme !== "light") el.classList.add(theme);
9017
+ if (accent === "blue") delete el.dataset.accent;
9018
+ else el.dataset.accent = accent;
9019
+ };
9020
+ var AppearanceSettings = ({
9021
+ theme,
9022
+ accent,
9023
+ onThemeChange,
9024
+ onAccentChange,
9025
+ themeLabel = "Theme",
9026
+ accentLabel = "Accent color",
9027
+ themes = COSMOS_THEMES,
9028
+ accents = COSMOS_ACCENTS,
9029
+ themeColumns = 4,
9030
+ className
9031
+ }) => {
9032
+ const themeHeadingId = useId();
9033
+ const accentHeadingId = useId();
9034
+ return /* @__PURE__ */ jsxs("div", { className: clsx("space-y-6", className), children: [
9035
+ /* @__PURE__ */ jsxs("div", { role: "group", "aria-labelledby": themeHeadingId, children: [
9036
+ /* @__PURE__ */ jsx("p", { id: themeHeadingId, className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: themeLabel }),
9037
+ /* @__PURE__ */ jsx(
9038
+ PalettePicker,
9039
+ {
9040
+ className: "mt-3",
9041
+ palettes: themes,
9042
+ value: theme,
9043
+ cols: themeColumns,
9044
+ onChange: (id) => onThemeChange(id)
9045
+ }
9046
+ )
9047
+ ] }),
9048
+ /* @__PURE__ */ jsxs("div", { role: "group", "aria-labelledby": accentHeadingId, children: [
9049
+ /* @__PURE__ */ jsx("p", { id: accentHeadingId, className: "text-sm font-medium text-gray-700 dark:text-gray-300", children: accentLabel }),
9050
+ /* @__PURE__ */ jsx(
9051
+ AccentPicker,
9052
+ {
9053
+ className: "mt-3",
9054
+ colors: accents,
9055
+ value: accent,
9056
+ onChange: (id) => onAccentChange(id),
9057
+ cols: 6
9058
+ }
9059
+ )
9060
+ ] })
9061
+ ] });
9062
+ };
9063
+ var SIZE_CLASS12 = {
9064
+ sm: { box: "h-8 w-8", icon: "h-4 w-4" },
9065
+ md: { box: "h-10 w-10", icon: "h-5 w-5" }
9066
+ };
9067
+ var AppearanceMenu = ({
9068
+ label = "Appearance",
9069
+ size = "md",
9070
+ className,
9071
+ ...settings
9072
+ }) => {
9073
+ const { box, icon } = SIZE_CLASS12[size];
9074
+ return /* @__PURE__ */ jsxs(Popover, { children: [
9075
+ /* @__PURE__ */ jsx(
9076
+ Popover.Trigger,
9077
+ {
9078
+ title: label,
9079
+ "aria-label": label,
9080
+ className: clsx(
9081
+ "flex items-center justify-center rounded-lg border border-gray-200 text-gray-500 transition-colors hover:bg-gray-100 hover:text-gray-700 dark:border-gray-700 dark:text-gray-400 dark:hover:bg-white/5 dark:hover:text-white",
9082
+ box,
9083
+ className
9084
+ ),
9085
+ children: /* @__PURE__ */ jsx(Palette, { className: icon, "aria-hidden": true })
9086
+ }
9087
+ ),
9088
+ /* @__PURE__ */ jsx(Popover.Content, { align: "end", width: "w-96", "aria-label": label, children: /* @__PURE__ */ jsx(AppearanceSettings, { themeColumns: 2, ...settings }) })
9089
+ ] });
9090
+ };
8955
9091
  var SIZE = {
8956
9092
  sm: "text-base leading-relaxed",
8957
9093
  md: "text-lg leading-relaxed",
@@ -9119,6 +9255,6 @@ var Figure = ({
9119
9255
  caption && /* @__PURE__ */ jsx("figcaption", { className: "mt-2 text-center text-xs text-gray-500 italic dark:text-gray-400", children: caption })
9120
9256
  ] });
9121
9257
 
9122
- export { AccentPicker, Accordion2 as Accordion, ActionPanel, ActiveFiltersBar, ActivityFeed, AlertBanner, AnnouncementBar, AuthLayout, Avatar, AvatarUploader, BackToTopFab, Backdrop, Badge, Blockquote, Breadcrumb, Button, ButtonGroup, Calendar, Card2 as Card, Carousel, CarouselRoot, Checkbox, CheckboxGroup, ClickableRow, Clipboard, CodeBlock, ColBox, ColorSwatch, ColumnFilterDropdown, ColumnHeader, Combobox, CommandPalette, ConfirmationModal, ContentNarrow, ContentStackedList, CookieBanner, DataTable, DatePicker, DescriptionList, Divider, Drawer, Dropdown, Dropzone, EmptyState, ErrorPage, ErrorState, Figure, FileInput, FilterPills, FormFooter, FormRow, GridList, HealthBadge, HealthDot, HelpOverlay, IconBox, ImageGrid, Input, IntegrationCard, Kbd2 as Kbd, KpiCard, Link, List2 as List, LoadingState, MediaObject, MiniCalendar, Modal, NarrowStackedList, Navbar, NotificationCard, NotificationsPanel, NumberInput, OptionCard, OptionPicker, OtpInput, PageActionButton, PageActionIconButton, PageBreadcrumb, PageCard, PageHeader, Pagination, PaletteCard, PalettePicker, PasswordInput, PasswordPolicyChecker, Popover, ProgressBar, REFRESH_OPTIONS, Radio, RadioGroup, RefreshButton, ResetPasswordForm, Ribbon, RowActionButton, STATUS_COLOR, STATUS_PILL, SearchInput, SectionCard, SectionLabel, SegmentedControl, Select, SelectInput, Shell, Sidebar, SignInForm, SignUpForm, SimpleRow, Sk, SkeletonList, SkeletonTable, SkeletonText, SocialAuthButtons, Spinner, StackedList, StackedListInCard, StatefulSaveButton, StatusBadge, StatusRow, Stepper, StepperInput, StepperRoot, StickyScrollNav, Tabs, Textarea, ThemeToggle, ThemeToggleTri, TimePicker, Timeline, Toaster, Toggle, Tooltip, TooltipHelp, Topbar, TwoStepVerificationForm, UnsavedIndicator, UserMenu, VerticalNavigation, VideoEmbed, ZoomBar, defaultPasswordRules, useAutoRefresh };
9258
+ export { AccentPicker, Accordion2 as Accordion, ActionPanel, ActiveFiltersBar, ActivityFeed, AlertBanner, AnnouncementBar, AppearanceMenu, AppearanceSettings, AuthLayout, Avatar, AvatarUploader, BackToTopFab, Backdrop, Badge, Blockquote, Breadcrumb, Button, ButtonGroup, COSMOS_ACCENTS, COSMOS_THEMES, Calendar, Card2 as Card, Carousel, CarouselRoot, Checkbox, CheckboxGroup, ClickableRow, Clipboard, CodeBlock, ColBox, ColorSwatch, ColumnFilterDropdown, ColumnHeader, Combobox, CommandPalette, ConfirmationModal, ContentNarrow, ContentStackedList, CookieBanner, DataTable, DatePicker, DescriptionList, Divider, Drawer, Dropdown, Dropzone, EmptyState, ErrorPage, ErrorState, Figure, FileInput, FilterPills, FormFooter, FormRow, GridList, HealthBadge, HealthDot, HelpOverlay, IconBox, ImageGrid, Input, IntegrationCard, Kbd2 as Kbd, KpiCard, Link, List2 as List, LoadingState, MediaObject, MiniCalendar, Modal, NarrowStackedList, Navbar, NotificationCard, NotificationsPanel, NumberInput, OptionCard, OptionPicker, OtpInput, PageActionButton, PageActionIconButton, PageBreadcrumb, PageCard, PageHeader, Pagination, PaletteCard, PalettePicker, PasswordInput, PasswordPolicyChecker, Popover, ProgressBar, REFRESH_OPTIONS, Radio, RadioGroup, RefreshButton, ResetPasswordForm, Ribbon, RowActionButton, STATUS_COLOR, STATUS_PILL, SearchInput, SectionCard, SectionLabel, SegmentedControl, Select, SelectInput, Shell, Sidebar, SignInForm, SignUpForm, SimpleRow, Sk, SkeletonList, SkeletonTable, SkeletonText, SocialAuthButtons, Spinner, StackedList, StackedListInCard, StatefulSaveButton, StatusBadge, StatusRow, Stepper, StepperInput, StepperRoot, StickyScrollNav, Tabs, Textarea, ThemeToggle, ThemeToggleTri, TimePicker, Timeline, Toaster, Toggle, Tooltip, TooltipHelp, Topbar, TwoStepVerificationForm, UnsavedIndicator, UserMenu, VerticalNavigation, VideoEmbed, ZoomBar, applyAppearance, defaultPasswordRules, isDarkTheme, useAutoRefresh };
9123
9259
  //# sourceMappingURL=index.js.map
9124
9260
  //# sourceMappingURL=index.js.map