@umami/react-zen 0.231.0 → 0.232.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.mjs CHANGED
@@ -194,7 +194,7 @@ tv({
194
194
  });
195
195
  var tooltip = tv({
196
196
  base: [
197
- "bg-surface-inverted text-foreground-inverted text-xs px-2 py-1 rounded",
197
+ "bg-surface-inverted text-foreground-inverted text-base px-2 py-1 rounded",
198
198
  "entering:animate-popover-in",
199
199
  "exiting:animate-popover-out"
200
200
  ]
@@ -2859,13 +2859,14 @@ function useFieldId(id) {
2859
2859
  const generatedId = useId();
2860
2860
  return id ?? generatedId;
2861
2861
  }
2862
- function Label({ size = "sm", weight = "medium", ...props }) {
2862
+ function Label({ size = "base", weight = "semibold", lineHeight = "loose", ...props }) {
2863
2863
  return /* @__PURE__ */ jsx(
2864
2864
  Text,
2865
2865
  {
2866
2866
  ...props,
2867
2867
  size,
2868
2868
  weight,
2869
+ lineHeight,
2869
2870
  render: (renderProps) => /* @__PURE__ */ jsx(Label$1, { ...renderProps })
2870
2871
  }
2871
2872
  );
@@ -4622,6 +4623,7 @@ function Select({
4622
4623
  searchValue,
4623
4624
  searchDelay,
4624
4625
  isFullscreen,
4626
+ maxHeight,
4625
4627
  onSearch,
4626
4628
  onChange,
4627
4629
  buttonProps,
@@ -4692,8 +4694,8 @@ function Select({
4692
4694
  shouldFocusOnHover: false,
4693
4695
  autoFocus: "first"
4694
4696
  },
4695
- className: cn("max-h-60 overflow-auto", listProps?.className),
4696
- style: { ...listProps?.style, display: isLoading ? "none" : void 0 },
4697
+ className: cn("overflow-auto", listProps?.className),
4698
+ style: { ...listProps?.style, maxHeight, display: isLoading ? "none" : void 0 },
4697
4699
  children
4698
4700
  }
4699
4701
  )
@@ -4963,6 +4965,70 @@ function ThemeButton({
4963
4965
  }
4964
4966
  );
4965
4967
  }
4968
+ var STORAGE_KEY2 = "theme-mode";
4969
+ function getSystemTheme() {
4970
+ if (typeof window === "undefined") return "light";
4971
+ return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
4972
+ }
4973
+ function ThemeSwitcher({ className }) {
4974
+ const { setTheme } = useTheme();
4975
+ const [mode, setMode] = useState("system");
4976
+ useEffect(() => {
4977
+ const stored = localStorage.getItem(STORAGE_KEY2);
4978
+ if (stored && ["light", "dark", "system"].includes(stored)) {
4979
+ setMode(stored);
4980
+ }
4981
+ }, []);
4982
+ useEffect(() => {
4983
+ if (mode === "system") {
4984
+ setTheme(getSystemTheme());
4985
+ } else {
4986
+ setTheme(mode);
4987
+ }
4988
+ localStorage.setItem(STORAGE_KEY2, mode);
4989
+ }, [mode, setTheme]);
4990
+ useEffect(() => {
4991
+ if (mode !== "system") return;
4992
+ const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
4993
+ const handleChange = () => {
4994
+ setTheme(getSystemTheme());
4995
+ };
4996
+ mediaQuery.addEventListener("change", handleChange);
4997
+ return () => mediaQuery.removeEventListener("change", handleChange);
4998
+ }, [mode, setTheme]);
4999
+ const options = [
5000
+ { value: "light", icon: /* @__PURE__ */ jsx(icons_exports.Sun, {}), label: "Light" },
5001
+ { value: "dark", icon: /* @__PURE__ */ jsx(icons_exports.Moon, {}), label: "Dark" },
5002
+ { value: "system", icon: /* @__PURE__ */ jsx(icons_exports.Monitor, {}), label: "System" }
5003
+ ];
5004
+ return /* @__PURE__ */ jsx(
5005
+ "div",
5006
+ {
5007
+ className: cn(
5008
+ "inline-flex items-center bg-surface-base border border-edge rounded-md overflow-hidden",
5009
+ className
5010
+ ),
5011
+ children: options.map((option) => /* @__PURE__ */ jsx(
5012
+ "button",
5013
+ {
5014
+ type: "button",
5015
+ onClick: () => setMode(option.value),
5016
+ "aria-label": option.label,
5017
+ "aria-pressed": mode === option.value,
5018
+ className: cn(
5019
+ "size-9 flex items-center justify-center cursor-pointer outline-none transition-colors",
5020
+ "[&:not(:first-child)]:border-l [&:not(:first-child)]:border-edge",
5021
+ "hover:bg-interactive",
5022
+ "focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-inset",
5023
+ mode === option.value ? "bg-interactive text-foreground-primary" : "text-foreground-muted"
5024
+ ),
5025
+ children: /* @__PURE__ */ jsx(Icon, { size: "sm", children: option.icon })
5026
+ },
5027
+ option.value
5028
+ ))
5029
+ }
5030
+ );
5031
+ }
4966
5032
  function Toggle({ label, children, className, ...props }) {
4967
5033
  const isSelected = typeof props.value !== "undefined" ? !!props.value : void 0;
4968
5034
  return /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -5051,6 +5117,6 @@ function ZenProvider({
5051
5117
  return /* @__PURE__ */ jsx(ToastProvider, { ...toast2, children });
5052
5118
  }
5053
5119
 
5054
- export { Accordion, AccordionItem, AlertBanner, AlertDialog, Blockquote, Box, Breadcrumb, Breadcrumbs, Button, Calendar, Checkbox, Code, Column, ComboBox, ConfirmationDialog, Container, CopyButton, DataCard, DataColumn, DataTable, Dialog, Dots, Flexbox, FloatingTooltip, Form, FormButtons, FormController, FormField, FormFieldArray, FormResetButton, FormSubmitButton, Grid, Heading, HoverTrigger, Icon, IconLabel, Image, Label, List, ListItem, ListSection, ListSeparator, Loading, LoadingButton, Menu, MenuItem, MenuSection, MenuSeparator, Modal, NavMenu, NavMenuGroup, NavMenuItem, Navbar, NavbarContext, NavbarItem, PasswordField, Popover, ProgressBar, ProgressCircle, Radio, RadioGroup, Row, SearchField, Select, Sidebar, SidebarHeader, SidebarItem, SidebarSection, Slider, Spinner, StatusLight, SubMenuTrigger, Switch, Tab, TabList, TabPanel, Table, TableBody, TableCell, TableColumn, TableHeader, TableRow, Tabs, Text, TextField, ThemeButton, Toast, ToastContext, ToastProvider, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipBubble, ZenProvider, removeToast, resolveRender, useBreakpoint, useDebounce, useInitTheme, useNavigationContext, useTheme, useToast };
5120
+ export { Accordion, AccordionItem, AlertBanner, AlertDialog, Blockquote, Box, Breadcrumb, Breadcrumbs, Button, Calendar, Checkbox, Code, Column, ComboBox, ConfirmationDialog, Container, CopyButton, DataCard, DataColumn, DataTable, Dialog, Dots, Flexbox, FloatingTooltip, Form, FormButtons, FormController, FormField, FormFieldArray, FormResetButton, FormSubmitButton, Grid, Heading, HoverTrigger, Icon, IconLabel, Image, Label, List, ListItem, ListSection, ListSeparator, Loading, LoadingButton, Menu, MenuItem, MenuSection, MenuSeparator, Modal, NavMenu, NavMenuGroup, NavMenuItem, Navbar, NavbarContext, NavbarItem, PasswordField, Popover, ProgressBar, ProgressCircle, Radio, RadioGroup, Row, SearchField, Select, Sidebar, SidebarHeader, SidebarItem, SidebarSection, Slider, Spinner, StatusLight, SubMenuTrigger, Switch, Tab, TabList, TabPanel, Table, TableBody, TableCell, TableColumn, TableHeader, TableRow, Tabs, Text, TextField, ThemeButton, ThemeSwitcher, Toast, ToastContext, ToastProvider, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipBubble, ZenProvider, removeToast, resolveRender, useBreakpoint, useDebounce, useInitTheme, useNavigationContext, useTheme, useToast };
5055
5121
  //# sourceMappingURL=index.mjs.map
5056
5122
  //# sourceMappingURL=index.mjs.map