@schemavaults/ui 0.52.5 → 0.53.1
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/components/ui/theme-selector/index.d.ts +2 -2
- package/dist/components/ui/theme-selector/index.js +1 -1
- package/dist/components/ui/theme-selector/index.js.map +1 -1
- package/dist/components/ui/theme-selector/theme-selector.d.ts +21 -9
- package/dist/components/ui/theme-selector/theme-selector.js +58 -9
- package/dist/components/ui/theme-selector/theme-selector.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { ThemeSelector, ThemeSelector as default, themeSelectorOptionIds, themeSelectorSizeIds, } from "./theme-selector";
|
|
2
|
-
export type { ThemeSelectorProps, ThemeSelectorOptionId, ThemeSelectorSizeId, } from "./theme-selector";
|
|
1
|
+
export { ThemeSelector, ThemeSelector as default, themeSelectorOptionIds, themeSelectorSizeIds, themeSelectorVariantIds, } from "./theme-selector";
|
|
2
|
+
export type { ThemeSelectorProps, ThemeSelectorOptionId, ThemeSelectorSizeId, ThemeSelectorVariantId, } from "./theme-selector";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { ThemeSelector, ThemeSelector as default, themeSelectorOptionIds, themeSelectorSizeIds, } from "./theme-selector";
|
|
1
|
+
export { ThemeSelector, ThemeSelector as default, themeSelectorOptionIds, themeSelectorSizeIds, themeSelectorVariantIds, } from "./theme-selector";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ui/theme-selector/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,aAAa,IAAI,OAAO,EACxB,sBAAsB,EACtB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ui/theme-selector/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,aAAa,IAAI,OAAO,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC"}
|
|
@@ -3,28 +3,40 @@ export declare const themeSelectorOptionIds: readonly ["light", "system", "dark"
|
|
|
3
3
|
export type ThemeSelectorOptionId = (typeof themeSelectorOptionIds)[number];
|
|
4
4
|
export declare const themeSelectorSizeIds: readonly ["sm", "default", "lg"];
|
|
5
5
|
export type ThemeSelectorSizeId = (typeof themeSelectorSizeIds)[number];
|
|
6
|
-
export
|
|
7
|
-
|
|
6
|
+
export declare const themeSelectorVariantIds: readonly ["segmented", "compact"];
|
|
7
|
+
export type ThemeSelectorVariantId = (typeof themeSelectorVariantIds)[number];
|
|
8
|
+
export interface ThemeSelectorProps extends Omit<HTMLAttributes<HTMLElement>, "onChange" | "defaultValue"> {
|
|
9
|
+
/** Visual layout of the selector. Defaults to `"segmented"`. */
|
|
10
|
+
variant?: ThemeSelectorVariantId;
|
|
11
|
+
/** Size of the underlying control. */
|
|
8
12
|
size?: ThemeSelectorSizeId;
|
|
9
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* Render only the icons, hiding the text labels. Has no effect when
|
|
15
|
+
* `variant` is `"compact"` (the compact variant is always icon-only).
|
|
16
|
+
*/
|
|
10
17
|
iconOnly?: boolean;
|
|
11
18
|
/** Disable interaction with every option. */
|
|
12
19
|
disabled?: boolean;
|
|
13
20
|
}
|
|
14
21
|
/**
|
|
15
|
-
* A brightness theme switcher driven by {@link useBrightnessTheme}
|
|
16
|
-
*
|
|
22
|
+
* A brightness theme switcher driven by {@link useBrightnessTheme}.
|
|
23
|
+
*
|
|
24
|
+
* Two visual variants are supported:
|
|
25
|
+
* - `"segmented"` (default): a {@link SegmentedControl} with one item per
|
|
26
|
+
* available theme.
|
|
27
|
+
* - `"compact"`: a single icon-only button that displays the currently active
|
|
28
|
+
* theme; clicking it opens a dropdown menu of available themes.
|
|
17
29
|
*
|
|
18
30
|
* Must be rendered inside a `<BrightnessThemeProvider />`. The theme-aware UI
|
|
19
|
-
* is wrapped in a `<Suspense>` boundary that renders an inert
|
|
20
|
-
*
|
|
21
|
-
*
|
|
31
|
+
* is wrapped in a `<Suspense>` boundary that renders an inert fallback until
|
|
32
|
+
* the client has hydrated — this avoids the next-themes server/client
|
|
33
|
+
* hydration mismatch without any mounted-flag state.
|
|
22
34
|
*
|
|
23
35
|
* @see BrightnessThemeProvider
|
|
24
36
|
* @see useBrightnessTheme
|
|
25
37
|
* @see SegmentedControl
|
|
26
38
|
*/
|
|
27
|
-
export declare function ThemeSelector({ className, size, iconOnly, disabled, ...rest }: ThemeSelectorProps): ReactElement;
|
|
39
|
+
export declare function ThemeSelector({ className, variant, size, iconOnly, disabled, ...rest }: ThemeSelectorProps): ReactElement;
|
|
28
40
|
export declare namespace ThemeSelector {
|
|
29
41
|
var displayName: string;
|
|
30
42
|
}
|
|
@@ -4,6 +4,7 @@ import { Monitor, Moon, Sun } from "lucide-react";
|
|
|
4
4
|
import { Suspense, use, } from "react";
|
|
5
5
|
import { cn } from "../../../lib/utils";
|
|
6
6
|
import { SegmentedControl, SegmentedControlItem, } from "../../ui/segmented-control";
|
|
7
|
+
import { DropdownMenu, DropdownMenuContent, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuTrigger, } from "../../ui/dropdown-menu";
|
|
7
8
|
import { useBrightnessTheme } from "../../../providers/brightness-theme";
|
|
8
9
|
export const themeSelectorOptionIds = [
|
|
9
10
|
"light",
|
|
@@ -15,22 +16,39 @@ export const themeSelectorSizeIds = [
|
|
|
15
16
|
"default",
|
|
16
17
|
"lg",
|
|
17
18
|
];
|
|
19
|
+
export const themeSelectorVariantIds = [
|
|
20
|
+
"segmented",
|
|
21
|
+
"compact",
|
|
22
|
+
];
|
|
18
23
|
const themeOptions = [
|
|
19
24
|
{ id: "light", label: "Light", icon: Sun },
|
|
20
25
|
{ id: "system", label: "System", icon: Monitor },
|
|
21
26
|
{ id: "dark", label: "Dark", icon: Moon },
|
|
22
27
|
];
|
|
28
|
+
const themeOptionsById = themeOptions.reduce((acc, option) => {
|
|
29
|
+
acc[option.id] = option;
|
|
30
|
+
return acc;
|
|
31
|
+
}, {});
|
|
23
32
|
const iconSizeBySize = {
|
|
24
33
|
sm: "h-3.5 w-3.5",
|
|
25
34
|
default: "h-4 w-4",
|
|
26
35
|
lg: "h-[1.125rem] w-[1.125rem]",
|
|
27
36
|
};
|
|
37
|
+
const compactButtonSizeClasses = {
|
|
38
|
+
sm: "h-8 w-8",
|
|
39
|
+
default: "h-9 w-9",
|
|
40
|
+
lg: "h-11 w-11",
|
|
41
|
+
};
|
|
28
42
|
function renderThemeItems(size, iconOnly) {
|
|
29
43
|
return themeOptions.map((option) => {
|
|
30
44
|
const Icon = option.icon;
|
|
31
45
|
return (_jsxs(SegmentedControlItem, { value: option.id, "aria-label": option.label, children: [_jsx(Icon, { className: cn(iconSizeBySize[size]), "aria-hidden": "true" }), iconOnly ? null : _jsx("span", { children: option.label })] }, option.id));
|
|
32
46
|
});
|
|
33
47
|
}
|
|
48
|
+
function isThemeSelectorOptionId(value) {
|
|
49
|
+
return (value !== undefined &&
|
|
50
|
+
themeSelectorOptionIds.includes(value));
|
|
51
|
+
}
|
|
34
52
|
/**
|
|
35
53
|
* A promise used to suspend {@link ThemeSelector} until the app has hydrated on
|
|
36
54
|
* the client. On the server it never settles, so React renders the Suspense
|
|
@@ -52,29 +70,60 @@ function getHydrationPromise() {
|
|
|
52
70
|
}
|
|
53
71
|
return hydrationPromise;
|
|
54
72
|
}
|
|
55
|
-
function
|
|
73
|
+
function SegmentedThemeSelectorContent({ size, iconOnly, disabled, className, rest, }) {
|
|
56
74
|
use(getHydrationPromise());
|
|
57
75
|
const { theme, setTheme } = useBrightnessTheme();
|
|
58
76
|
return (_jsx(SegmentedControl, { value: theme ?? "", onValueChange: setTheme, variant: "outline", size: size, disabled: disabled, "aria-label": "Color theme", className: className, ...rest, children: renderThemeItems(size, iconOnly) }));
|
|
59
77
|
}
|
|
60
|
-
function
|
|
78
|
+
function SegmentedThemeSelectorFallback({ size, iconOnly, className, }) {
|
|
61
79
|
return (_jsx(SegmentedControl, { value: "", variant: "outline", size: size, disabled: true, "aria-hidden": "true", className: className, children: renderThemeItems(size, iconOnly) }));
|
|
62
80
|
}
|
|
81
|
+
const compactButtonClass = "inline-flex items-center justify-center rounded-md border border-input bg-background text-foreground ring-offset-background transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50";
|
|
82
|
+
function CompactThemeSelectorContent({ size, disabled, className, rest, }) {
|
|
83
|
+
use(getHydrationPromise());
|
|
84
|
+
const { theme, setTheme } = useBrightnessTheme();
|
|
85
|
+
const activeId = isThemeSelectorOptionId(theme)
|
|
86
|
+
? theme
|
|
87
|
+
: "system";
|
|
88
|
+
const activeOption = themeOptionsById[activeId];
|
|
89
|
+
const ActiveIcon = activeOption.icon;
|
|
90
|
+
return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx("button", { type: "button", disabled: disabled, "aria-label": `Color theme: ${activeOption.label}`, title: `Theme: ${activeOption.label}`, className: cn(compactButtonClass, compactButtonSizeClasses[size], className), ...rest, children: _jsx(ActiveIcon, { className: cn(iconSizeBySize[size]), "aria-hidden": "true" }) }) }), _jsx(DropdownMenuContent, { align: "end", children: _jsx(DropdownMenuRadioGroup, { value: activeId, onValueChange: (value) => {
|
|
91
|
+
if (isThemeSelectorOptionId(value)) {
|
|
92
|
+
setTheme(value);
|
|
93
|
+
}
|
|
94
|
+
}, children: themeOptions.map((option) => {
|
|
95
|
+
const Icon = option.icon;
|
|
96
|
+
return (_jsxs(DropdownMenuRadioItem, { value: option.id, children: [_jsx(Icon, { className: "mr-2 h-4 w-4", "aria-hidden": "true" }), _jsx("span", { children: option.label })] }, option.id));
|
|
97
|
+
}) }) })] }));
|
|
98
|
+
}
|
|
99
|
+
function CompactThemeSelectorFallback({ size, className, }) {
|
|
100
|
+
return (_jsx("button", { type: "button", disabled: true, "aria-hidden": "true", tabIndex: -1, className: cn(compactButtonClass, compactButtonSizeClasses[size], className), children: _jsx(Monitor, { className: cn(iconSizeBySize[size]), "aria-hidden": "true" }) }));
|
|
101
|
+
}
|
|
63
102
|
/**
|
|
64
|
-
* A brightness theme switcher driven by {@link useBrightnessTheme}
|
|
65
|
-
*
|
|
103
|
+
* A brightness theme switcher driven by {@link useBrightnessTheme}.
|
|
104
|
+
*
|
|
105
|
+
* Two visual variants are supported:
|
|
106
|
+
* - `"segmented"` (default): a {@link SegmentedControl} with one item per
|
|
107
|
+
* available theme.
|
|
108
|
+
* - `"compact"`: a single icon-only button that displays the currently active
|
|
109
|
+
* theme; clicking it opens a dropdown menu of available themes.
|
|
66
110
|
*
|
|
67
111
|
* Must be rendered inside a `<BrightnessThemeProvider />`. The theme-aware UI
|
|
68
|
-
* is wrapped in a `<Suspense>` boundary that renders an inert
|
|
69
|
-
*
|
|
70
|
-
*
|
|
112
|
+
* is wrapped in a `<Suspense>` boundary that renders an inert fallback until
|
|
113
|
+
* the client has hydrated — this avoids the next-themes server/client
|
|
114
|
+
* hydration mismatch without any mounted-flag state.
|
|
71
115
|
*
|
|
72
116
|
* @see BrightnessThemeProvider
|
|
73
117
|
* @see useBrightnessTheme
|
|
74
118
|
* @see SegmentedControl
|
|
75
119
|
*/
|
|
76
|
-
export function ThemeSelector({ className, size = "default", iconOnly = false, disabled = false, ...rest }) {
|
|
77
|
-
|
|
120
|
+
export function ThemeSelector({ className, variant = "segmented", size = "default", iconOnly = false, disabled = false, ...rest }) {
|
|
121
|
+
if (variant === "compact") {
|
|
122
|
+
const buttonRest = rest;
|
|
123
|
+
return (_jsx(Suspense, { fallback: _jsx(CompactThemeSelectorFallback, { size: size, className: className }), children: _jsx(CompactThemeSelectorContent, { size: size, disabled: disabled, className: className, rest: buttonRest }) }));
|
|
124
|
+
}
|
|
125
|
+
const divRest = rest;
|
|
126
|
+
return (_jsx(Suspense, { fallback: _jsx(SegmentedThemeSelectorFallback, { size: size, iconOnly: iconOnly, className: className }), children: _jsx(SegmentedThemeSelectorContent, { size: size, iconOnly: iconOnly, disabled: disabled, className: className, rest: divRest }) }));
|
|
78
127
|
}
|
|
79
128
|
ThemeSelector.displayName = "ThemeSelector";
|
|
80
129
|
export default ThemeSelector;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-selector.js","sourceRoot":"","sources":["../../../../src/components/ui/theme-selector/theme-selector.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAmB,MAAM,cAAc,CAAC;AACnE,OAAO,EACL,QAAQ,EACR,GAAG,
|
|
1
|
+
{"version":3,"file":"theme-selector.js","sourceRoot":"","sources":["../../../../src/components/ui/theme-selector/theme-selector.tsx"],"names":[],"mappings":"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"}
|