@hyunsdev/ui 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/LICENSE +674 -0
- package/README.md +89 -0
- package/SKILL.md +38 -0
- package/dist/WindowContext-DybYtZJa.d.ts +50 -0
- package/dist/_styles-BbTx89aX.d.ts +3 -0
- package/dist/chunk-23KUNTRD.js +49 -0
- package/dist/chunk-23KUNTRD.js.map +1 -0
- package/dist/chunk-3RTSANKB.js +51 -0
- package/dist/chunk-3RTSANKB.js.map +1 -0
- package/dist/chunk-4QIWBOF4.js +129 -0
- package/dist/chunk-4QIWBOF4.js.map +1 -0
- package/dist/chunk-5JCWC7IU.js +293 -0
- package/dist/chunk-5JCWC7IU.js.map +1 -0
- package/dist/chunk-6ANDNGHD.js +33 -0
- package/dist/chunk-6ANDNGHD.js.map +1 -0
- package/dist/chunk-7W7QZHEZ.js +42 -0
- package/dist/chunk-7W7QZHEZ.js.map +1 -0
- package/dist/chunk-BHO4WT2N.js +51 -0
- package/dist/chunk-BHO4WT2N.js.map +1 -0
- package/dist/chunk-BI3KKBIC.js +11 -0
- package/dist/chunk-BI3KKBIC.js.map +1 -0
- package/dist/chunk-D3SP7GL3.js +55 -0
- package/dist/chunk-D3SP7GL3.js.map +1 -0
- package/dist/chunk-D7W4RSQX.js +115 -0
- package/dist/chunk-D7W4RSQX.js.map +1 -0
- package/dist/chunk-DN2AEEA2.js +11 -0
- package/dist/chunk-DN2AEEA2.js.map +1 -0
- package/dist/chunk-ETTKFCO6.js +84 -0
- package/dist/chunk-ETTKFCO6.js.map +1 -0
- package/dist/chunk-GJT7TDBS.js +66 -0
- package/dist/chunk-GJT7TDBS.js.map +1 -0
- package/dist/chunk-HZT6RQYZ.js +109 -0
- package/dist/chunk-HZT6RQYZ.js.map +1 -0
- package/dist/chunk-JB2QZV7K.js +60 -0
- package/dist/chunk-JB2QZV7K.js.map +1 -0
- package/dist/chunk-KJJB2PVC.js +21 -0
- package/dist/chunk-KJJB2PVC.js.map +1 -0
- package/dist/chunk-NE3IVPMO.js +31 -0
- package/dist/chunk-NE3IVPMO.js.map +1 -0
- package/dist/chunk-O2BG2KSY.js +23 -0
- package/dist/chunk-O2BG2KSY.js.map +1 -0
- package/dist/chunk-OUFGNJ3V.js +1726 -0
- package/dist/chunk-OUFGNJ3V.js.map +1 -0
- package/dist/chunk-PLZMCJSL.js +351 -0
- package/dist/chunk-PLZMCJSL.js.map +1 -0
- package/dist/chunk-POG5DZBT.js +104 -0
- package/dist/chunk-POG5DZBT.js.map +1 -0
- package/dist/chunk-SECZM6JE.js +170 -0
- package/dist/chunk-SECZM6JE.js.map +1 -0
- package/dist/chunk-T64WPXSC.js +48 -0
- package/dist/chunk-T64WPXSC.js.map +1 -0
- package/dist/chunk-TU5CYBB4.js +90 -0
- package/dist/chunk-TU5CYBB4.js.map +1 -0
- package/dist/chunk-UVAI2U6X.js +153 -0
- package/dist/chunk-UVAI2U6X.js.map +1 -0
- package/dist/chunk-UXCBLYG6.js +142 -0
- package/dist/chunk-UXCBLYG6.js.map +1 -0
- package/dist/chunk-VUR4MQMH.js +53 -0
- package/dist/chunk-VUR4MQMH.js.map +1 -0
- package/dist/chunk-WIEKNG4S.js +26 -0
- package/dist/chunk-WIEKNG4S.js.map +1 -0
- package/dist/chunk-WIZ4OLOB.js +23 -0
- package/dist/chunk-WIZ4OLOB.js.map +1 -0
- package/dist/chunk-WJRJBMFN.js +21 -0
- package/dist/chunk-WJRJBMFN.js.map +1 -0
- package/dist/chunk-YUPLJP3F.js +33 -0
- package/dist/chunk-YUPLJP3F.js.map +1 -0
- package/dist/chunk-Z7ITPSUF.js +184 -0
- package/dist/chunk-Z7ITPSUF.js.map +1 -0
- package/dist/chunk-ZC76ALSI.js +75 -0
- package/dist/chunk-ZC76ALSI.js.map +1 -0
- package/dist/code-block-core-xkE94Rk5.d.ts +30 -0
- package/dist/components/accordion.d.ts +9 -0
- package/dist/components/accordion.js +98 -0
- package/dist/components/accordion.js.map +1 -0
- package/dist/components/alert-dialog.d.ts +26 -0
- package/dist/components/alert-dialog.js +341 -0
- package/dist/components/alert-dialog.js.map +1 -0
- package/dist/components/alert.d.ts +13 -0
- package/dist/components/alert.js +76 -0
- package/dist/components/alert.js.map +1 -0
- package/dist/components/aspect-ratio.d.ts +6 -0
- package/dist/components/aspect-ratio.js +12 -0
- package/dist/components/aspect-ratio.js.map +1 -0
- package/dist/components/avatar.d.ts +13 -0
- package/dist/components/avatar.js +19 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/badge.d.ts +12 -0
- package/dist/components/badge.js +11 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/breadcrumb.d.ts +13 -0
- package/dist/components/breadcrumb.js +102 -0
- package/dist/components/breadcrumb.js.map +1 -0
- package/dist/components/button-group.d.ts +16 -0
- package/dist/components/button-group.js +15 -0
- package/dist/components/button-group.js.map +1 -0
- package/dist/components/button.d.ts +14 -0
- package/dist/components/button.js +11 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/calendar.d.ts +14 -0
- package/dist/components/calendar.js +13 -0
- package/dist/components/calendar.js.map +1 -0
- package/dist/components/card.d.ts +13 -0
- package/dist/components/card.js +21 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/carousel.d.ts +32 -0
- package/dist/components/carousel.js +196 -0
- package/dist/components/carousel.js.map +1 -0
- package/dist/components/chart.d.ts +46 -0
- package/dist/components/chart.js +254 -0
- package/dist/components/chart.js.map +1 -0
- package/dist/components/checkbox.d.ts +6 -0
- package/dist/components/checkbox.js +41 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/code-block-core.d.ts +3 -0
- package/dist/components/code-block-core.js +13 -0
- package/dist/components/code-block-core.js.map +1 -0
- package/dist/components/code-block-custom.d.ts +20 -0
- package/dist/components/code-block-custom.js +16 -0
- package/dist/components/code-block-custom.js.map +1 -0
- package/dist/components/code-block-shiki.d.ts +13 -0
- package/dist/components/code-block-shiki.js +15 -0
- package/dist/components/code-block-shiki.js.map +1 -0
- package/dist/components/code-block.d.ts +5 -0
- package/dist/components/code-block.js +14 -0
- package/dist/components/code-block.js.map +1 -0
- package/dist/components/collapsible.d.ts +8 -0
- package/dist/components/collapsible.js +24 -0
- package/dist/components/collapsible.js.map +1 -0
- package/dist/components/collection.d.ts +63 -0
- package/dist/components/collection.js +598 -0
- package/dist/components/collection.js.map +1 -0
- package/dist/components/color-dot.d.ts +19 -0
- package/dist/components/color-dot.js +41 -0
- package/dist/components/color-dot.js.map +1 -0
- package/dist/components/color-picker.d.ts +12 -0
- package/dist/components/color-picker.js +142 -0
- package/dist/components/color-picker.js.map +1 -0
- package/dist/components/combobox.d.ts +74 -0
- package/dist/components/combobox.js +610 -0
- package/dist/components/combobox.js.map +1 -0
- package/dist/components/command.d.ts +21 -0
- package/dist/components/command.js +31 -0
- package/dist/components/command.js.map +1 -0
- package/dist/components/date-picker.d.ts +43 -0
- package/dist/components/date-picker.js +235 -0
- package/dist/components/date-picker.js.map +1 -0
- package/dist/components/dialog.d.ts +25 -0
- package/dist/components/dialog.js +31 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/drawer.d.ts +15 -0
- package/dist/components/drawer.js +124 -0
- package/dist/components/drawer.js.map +1 -0
- package/dist/components/dropdown-menu.d.ts +34 -0
- package/dist/components/dropdown-menu.js +248 -0
- package/dist/components/dropdown-menu.js.map +1 -0
- package/dist/components/empty.d.ts +15 -0
- package/dist/components/empty.js +104 -0
- package/dist/components/empty.js.map +1 -0
- package/dist/components/field.d.ts +29 -0
- package/dist/components/field.js +214 -0
- package/dist/components/field.js.map +1 -0
- package/dist/components/format-bytes.d.ts +12 -0
- package/dist/components/format-bytes.js +30 -0
- package/dist/components/format-bytes.js.map +1 -0
- package/dist/components/format-number.d.ts +12 -0
- package/dist/components/format-number.js +30 -0
- package/dist/components/format-number.js.map +1 -0
- package/dist/components/gauge.d.ts +11 -0
- package/dist/components/gauge.js +82 -0
- package/dist/components/gauge.js.map +1 -0
- package/dist/components/hover-card.d.ts +8 -0
- package/dist/components/hover-card.js +45 -0
- package/dist/components/hover-card.js.map +1 -0
- package/dist/components/input-group.d.ts +24 -0
- package/dist/components/input-group.js +23 -0
- package/dist/components/input-group.js.map +1 -0
- package/dist/components/input-otp.d.ts +20 -0
- package/dist/components/input-otp.js +95 -0
- package/dist/components/input-otp.js.map +1 -0
- package/dist/components/input.d.ts +9 -0
- package/dist/components/input.js +9 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/item.d.ts +27 -0
- package/dist/components/item.js +182 -0
- package/dist/components/item.js.map +1 -0
- package/dist/components/kbd.d.ts +6 -0
- package/dist/components/kbd.js +34 -0
- package/dist/components/kbd.js.map +1 -0
- package/dist/components/label.d.ts +6 -0
- package/dist/components/label.js +9 -0
- package/dist/components/label.js.map +1 -0
- package/dist/components/loading-bar.d.ts +8 -0
- package/dist/components/loading-bar.js +127 -0
- package/dist/components/loading-bar.js.map +1 -0
- package/dist/components/loading-dots.d.ts +5 -0
- package/dist/components/loading-dots.js +45 -0
- package/dist/components/loading-dots.js.map +1 -0
- package/dist/components/main-provider.d.ts +7 -0
- package/dist/components/main-provider.js +12 -0
- package/dist/components/main-provider.js.map +1 -0
- package/dist/components/mark.d.ts +11 -0
- package/dist/components/mark.js +44 -0
- package/dist/components/mark.js.map +1 -0
- package/dist/components/pagination.d.ts +21 -0
- package/dist/components/pagination.js +114 -0
- package/dist/components/pagination.js.map +1 -0
- package/dist/components/popover.d.ts +12 -0
- package/dist/components/popover.js +22 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/prev-next-navigation.d.ts +15 -0
- package/dist/components/prev-next-navigation.js +85 -0
- package/dist/components/prev-next-navigation.js.map +1 -0
- package/dist/components/progress.d.ts +6 -0
- package/dist/components/progress.js +38 -0
- package/dist/components/progress.js.map +1 -0
- package/dist/components/radio-group.d.ts +7 -0
- package/dist/components/radio-group.js +57 -0
- package/dist/components/radio-group.js.map +1 -0
- package/dist/components/relative-time.d.ts +16 -0
- package/dist/components/relative-time.js +75 -0
- package/dist/components/relative-time.js.map +1 -0
- package/dist/components/resizable.d.ts +10 -0
- package/dist/components/resizable.js +45 -0
- package/dist/components/resizable.js.map +1 -0
- package/dist/components/scroll-area.d.ts +7 -0
- package/dist/components/scroll-area.js +11 -0
- package/dist/components/scroll-area.js.map +1 -0
- package/dist/components/select.d.ts +20 -0
- package/dist/components/select.js +189 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/separator.d.ts +6 -0
- package/dist/components/separator.js +9 -0
- package/dist/components/separator.js.map +1 -0
- package/dist/components/sheet.d.ts +16 -0
- package/dist/components/sheet.js +25 -0
- package/dist/components/sheet.js.map +1 -0
- package/dist/components/show-more.d.ts +15 -0
- package/dist/components/show-more.js +79 -0
- package/dist/components/show-more.js.map +1 -0
- package/dist/components/skeleton.d.ts +5 -0
- package/dist/components/skeleton.js +8 -0
- package/dist/components/skeleton.js.map +1 -0
- package/dist/components/slider.d.ts +6 -0
- package/dist/components/slider.js +65 -0
- package/dist/components/slider.js.map +1 -0
- package/dist/components/snippet.d.ts +13 -0
- package/dist/components/snippet.js +135 -0
- package/dist/components/snippet.js.map +1 -0
- package/dist/components/sonner.d.ts +6 -0
- package/dist/components/sonner.js +10 -0
- package/dist/components/sonner.js.map +1 -0
- package/dist/components/spinner.d.ts +5 -0
- package/dist/components/spinner.js +8 -0
- package/dist/components/spinner.js.map +1 -0
- package/dist/components/stat.d.ts +17 -0
- package/dist/components/stat.js +71 -0
- package/dist/components/stat.js.map +1 -0
- package/dist/components/steps.d.ts +17 -0
- package/dist/components/steps.js +133 -0
- package/dist/components/steps.js.map +1 -0
- package/dist/components/switch.d.ts +8 -0
- package/dist/components/switch.js +44 -0
- package/dist/components/switch.js.map +1 -0
- package/dist/components/table.d.ts +12 -0
- package/dist/components/table.js +101 -0
- package/dist/components/table.js.map +1 -0
- package/dist/components/tabs.d.ts +14 -0
- package/dist/components/tabs.js +88 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/textarea.d.ts +5 -0
- package/dist/components/textarea.js +9 -0
- package/dist/components/textarea.js.map +1 -0
- package/dist/components/theme-provider.d.ts +10 -0
- package/dist/components/theme-provider.js +14 -0
- package/dist/components/theme-provider.js.map +1 -0
- package/dist/components/time-picker.d.ts +17 -0
- package/dist/components/time-picker.js +219 -0
- package/dist/components/time-picker.js.map +1 -0
- package/dist/components/timeline.d.ts +17 -0
- package/dist/components/timeline.js +138 -0
- package/dist/components/timeline.js.map +1 -0
- package/dist/components/toggle-group.d.ts +14 -0
- package/dist/components/toggle-group.js +82 -0
- package/dist/components/toggle-group.js.map +1 -0
- package/dist/components/toggle.d.ts +12 -0
- package/dist/components/toggle.js +11 -0
- package/dist/components/toggle.js.map +1 -0
- package/dist/components/tooltip.d.ts +9 -0
- package/dist/components/tooltip.js +15 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/components/typography.d.ts +17 -0
- package/dist/components/typography.js +91 -0
- package/dist/components/typography.js.map +1 -0
- package/dist/hooks/use-mobile.d.ts +3 -0
- package/dist/hooks/use-mobile.js +7 -0
- package/dist/hooks/use-mobile.js.map +1 -0
- package/dist/hooks/use-theme.d.ts +3 -0
- package/dist/hooks/use-theme.js +8 -0
- package/dist/hooks/use-theme.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/layouts/center/index.d.ts +18 -0
- package/dist/layouts/center/index.js +73 -0
- package/dist/layouts/center/index.js.map +1 -0
- package/dist/layouts/chat/index.d.ts +42 -0
- package/dist/layouts/chat/index.js +191 -0
- package/dist/layouts/chat/index.js.map +1 -0
- package/dist/layouts/command/index.d.ts +2 -0
- package/dist/layouts/command/index.js +1 -0
- package/dist/layouts/command/index.js.map +1 -0
- package/dist/layouts/panel/index.d.ts +55 -0
- package/dist/layouts/panel/index.js +513 -0
- package/dist/layouts/panel/index.js.map +1 -0
- package/dist/layouts/presentation/index.d.ts +14 -0
- package/dist/layouts/presentation/index.js +100 -0
- package/dist/layouts/presentation/index.js.map +1 -0
- package/dist/layouts/site/index.d.ts +17 -0
- package/dist/layouts/site/index.js +82 -0
- package/dist/layouts/site/index.js.map +1 -0
- package/dist/layouts/window/index.d.ts +223 -0
- package/dist/layouts/window/index.js +127 -0
- package/dist/layouts/window/index.js.map +1 -0
- package/dist/layouts/workbench/index.d.ts +281 -0
- package/dist/layouts/workbench/index.js +2457 -0
- package/dist/layouts/workbench/index.js.map +1 -0
- package/dist/lib/format.d.ts +15 -0
- package/dist/lib/format.js +9 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/theme.d.ts +22 -0
- package/dist/lib/theme.js +25 -0
- package/dist/lib/theme.js.map +1 -0
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.js +7 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/styles/fonts.css +1 -0
- package/dist/styles/globals.css +717 -0
- package/dist/styles/tokens.css +693 -0
- package/package.json +137 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ACCENT_PRESET_STORAGE_KEY,
|
|
3
|
+
DEFAULT_ACCENT_PRESET,
|
|
4
|
+
THEME_STORAGE_KEY,
|
|
5
|
+
normalizeStoredAccentPreset,
|
|
6
|
+
normalizeStoredTheme,
|
|
7
|
+
resolveThemeMode
|
|
8
|
+
} from "./chunk-3RTSANKB.js";
|
|
9
|
+
|
|
10
|
+
// src/components/theme-provider.tsx
|
|
11
|
+
import * as React from "react";
|
|
12
|
+
import { jsx } from "react/jsx-runtime";
|
|
13
|
+
var THEME_MEDIA_QUERY = "(prefers-color-scheme: dark)";
|
|
14
|
+
var ThemeContext = React.createContext(null);
|
|
15
|
+
function getSystemResolvedTheme() {
|
|
16
|
+
return window.matchMedia(THEME_MEDIA_QUERY).matches ? "dark" : "light";
|
|
17
|
+
}
|
|
18
|
+
function getStoredTheme() {
|
|
19
|
+
const storedTheme = window.localStorage.getItem(THEME_STORAGE_KEY);
|
|
20
|
+
return normalizeStoredTheme(storedTheme) ?? "system";
|
|
21
|
+
}
|
|
22
|
+
function getStoredAccentPreset() {
|
|
23
|
+
const storedAccentPreset = window.localStorage.getItem(ACCENT_PRESET_STORAGE_KEY);
|
|
24
|
+
return normalizeStoredAccentPreset(storedAccentPreset) ?? DEFAULT_ACCENT_PRESET;
|
|
25
|
+
}
|
|
26
|
+
function getInitialThemeState() {
|
|
27
|
+
if (typeof window === "undefined") {
|
|
28
|
+
return {
|
|
29
|
+
accentPreset: DEFAULT_ACCENT_PRESET,
|
|
30
|
+
resolvedTheme: "light",
|
|
31
|
+
theme: "system"
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const accentPreset = getStoredAccentPreset();
|
|
35
|
+
const theme = getStoredTheme();
|
|
36
|
+
const resolvedTheme = resolveThemeMode(theme, getSystemResolvedTheme() === "dark");
|
|
37
|
+
return {
|
|
38
|
+
accentPreset,
|
|
39
|
+
resolvedTheme,
|
|
40
|
+
theme
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function applyAccentPreset(accentPreset) {
|
|
44
|
+
const root = document.documentElement;
|
|
45
|
+
root.setAttribute("data-accent", accentPreset);
|
|
46
|
+
}
|
|
47
|
+
function applyTheme(theme) {
|
|
48
|
+
const resolvedTheme = resolveThemeMode(theme, getSystemResolvedTheme() === "dark");
|
|
49
|
+
const root = document.documentElement;
|
|
50
|
+
root.classList.remove("light", "dark");
|
|
51
|
+
root.classList.add(resolvedTheme);
|
|
52
|
+
if (theme === "system") {
|
|
53
|
+
root.removeAttribute("data-theme");
|
|
54
|
+
} else {
|
|
55
|
+
root.setAttribute("data-theme", theme);
|
|
56
|
+
}
|
|
57
|
+
root.style.colorScheme = resolvedTheme;
|
|
58
|
+
return resolvedTheme;
|
|
59
|
+
}
|
|
60
|
+
function ThemeProvider({ children }) {
|
|
61
|
+
const [themeState, setThemeState] = React.useState(getInitialThemeState);
|
|
62
|
+
React.useEffect(() => {
|
|
63
|
+
applyAccentPreset(themeState.accentPreset);
|
|
64
|
+
window.localStorage.setItem(ACCENT_PRESET_STORAGE_KEY, themeState.accentPreset);
|
|
65
|
+
}, [themeState.accentPreset]);
|
|
66
|
+
React.useEffect(() => {
|
|
67
|
+
const resolvedTheme = applyTheme(themeState.theme);
|
|
68
|
+
setThemeState((currentThemeState) => {
|
|
69
|
+
if (currentThemeState.resolvedTheme === resolvedTheme) {
|
|
70
|
+
return currentThemeState;
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
...currentThemeState,
|
|
74
|
+
resolvedTheme
|
|
75
|
+
};
|
|
76
|
+
});
|
|
77
|
+
window.localStorage.setItem(THEME_STORAGE_KEY, themeState.theme);
|
|
78
|
+
}, [themeState.theme]);
|
|
79
|
+
React.useEffect(() => {
|
|
80
|
+
if (themeState.theme !== "system") {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const mediaQueryList = window.matchMedia(THEME_MEDIA_QUERY);
|
|
84
|
+
const syncAutoTheme = () => {
|
|
85
|
+
const resolvedTheme = applyTheme("system");
|
|
86
|
+
setThemeState((currentThemeState) => {
|
|
87
|
+
if (currentThemeState.resolvedTheme === resolvedTheme) {
|
|
88
|
+
return currentThemeState;
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
...currentThemeState,
|
|
92
|
+
resolvedTheme
|
|
93
|
+
};
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
mediaQueryList.addEventListener("change", syncAutoTheme);
|
|
97
|
+
return () => {
|
|
98
|
+
mediaQueryList.removeEventListener("change", syncAutoTheme);
|
|
99
|
+
};
|
|
100
|
+
}, [themeState.theme]);
|
|
101
|
+
const value = {
|
|
102
|
+
accentPreset: themeState.accentPreset,
|
|
103
|
+
resolvedTheme: themeState.resolvedTheme,
|
|
104
|
+
setAccentPreset: (accentPreset) => {
|
|
105
|
+
setThemeState((currentThemeState) => {
|
|
106
|
+
if (currentThemeState.accentPreset === accentPreset) {
|
|
107
|
+
return currentThemeState;
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
...currentThemeState,
|
|
111
|
+
accentPreset
|
|
112
|
+
};
|
|
113
|
+
});
|
|
114
|
+
},
|
|
115
|
+
setTheme: (theme) => {
|
|
116
|
+
setThemeState((currentThemeState) => {
|
|
117
|
+
if (currentThemeState.theme === theme) {
|
|
118
|
+
return currentThemeState;
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
...currentThemeState,
|
|
122
|
+
theme
|
|
123
|
+
};
|
|
124
|
+
});
|
|
125
|
+
},
|
|
126
|
+
theme: themeState.theme
|
|
127
|
+
};
|
|
128
|
+
return /* @__PURE__ */ jsx(ThemeContext.Provider, { value, children });
|
|
129
|
+
}
|
|
130
|
+
function useTheme() {
|
|
131
|
+
const context = React.useContext(ThemeContext);
|
|
132
|
+
if (!context) {
|
|
133
|
+
throw new Error("useTheme must be used within a ThemeProvider.");
|
|
134
|
+
}
|
|
135
|
+
return context;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export {
|
|
139
|
+
ThemeProvider,
|
|
140
|
+
useTheme
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=chunk-UXCBLYG6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/theme-provider.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport {\n ACCENT_PRESET_STORAGE_KEY,\n DEFAULT_ACCENT_PRESET,\n getThemeInitScript,\n normalizeStoredAccentPreset,\n normalizeStoredTheme,\n resolveThemeMode,\n THEME_STORAGE_KEY,\n type AccentPreset,\n type ResolvedTheme,\n type ThemeContextValue,\n type ThemeMode,\n} from \"../lib/theme\"\n\nconst THEME_MEDIA_QUERY = \"(prefers-color-scheme: dark)\"\n\nconst ThemeContext = React.createContext<ThemeContextValue | null>(null)\n\ntype ThemeState = {\n accentPreset: AccentPreset\n resolvedTheme: ResolvedTheme\n theme: ThemeMode\n}\n\nfunction getSystemResolvedTheme(): ResolvedTheme {\n return window.matchMedia(THEME_MEDIA_QUERY).matches ? \"dark\" : \"light\"\n}\n\nfunction getStoredTheme(): ThemeMode {\n const storedTheme = window.localStorage.getItem(THEME_STORAGE_KEY)\n return normalizeStoredTheme(storedTheme) ?? \"system\"\n}\n\nfunction getStoredAccentPreset(): AccentPreset {\n const storedAccentPreset = window.localStorage.getItem(ACCENT_PRESET_STORAGE_KEY)\n return normalizeStoredAccentPreset(storedAccentPreset) ?? DEFAULT_ACCENT_PRESET\n}\n\nfunction getInitialThemeState(): ThemeState {\n if (typeof window === \"undefined\") {\n return {\n accentPreset: DEFAULT_ACCENT_PRESET,\n resolvedTheme: \"light\",\n theme: \"system\",\n }\n }\n\n const accentPreset = getStoredAccentPreset()\n const theme = getStoredTheme()\n const resolvedTheme = resolveThemeMode(theme, getSystemResolvedTheme() === \"dark\")\n\n return {\n accentPreset,\n resolvedTheme,\n theme,\n }\n}\n\nfunction applyAccentPreset(accentPreset: AccentPreset) {\n const root = document.documentElement\n root.setAttribute(\"data-accent\", accentPreset)\n}\n\nfunction applyTheme(theme: ThemeMode) {\n const resolvedTheme = resolveThemeMode(theme, getSystemResolvedTheme() === \"dark\")\n const root = document.documentElement\n\n root.classList.remove(\"light\", \"dark\")\n root.classList.add(resolvedTheme)\n\n if (theme === \"system\") {\n root.removeAttribute(\"data-theme\")\n } else {\n root.setAttribute(\"data-theme\", theme)\n }\n\n root.style.colorScheme = resolvedTheme\n\n return resolvedTheme\n}\n\nexport function ThemeProvider({ children }: { children: React.ReactNode }) {\n const [themeState, setThemeState] = React.useState(getInitialThemeState)\n\n React.useEffect(() => {\n applyAccentPreset(themeState.accentPreset)\n window.localStorage.setItem(ACCENT_PRESET_STORAGE_KEY, themeState.accentPreset)\n }, [themeState.accentPreset])\n\n React.useEffect(() => {\n const resolvedTheme = applyTheme(themeState.theme)\n\n setThemeState((currentThemeState) => {\n if (currentThemeState.resolvedTheme === resolvedTheme) {\n return currentThemeState\n }\n\n return {\n ...currentThemeState,\n resolvedTheme,\n }\n })\n\n window.localStorage.setItem(THEME_STORAGE_KEY, themeState.theme)\n }, [themeState.theme])\n\n React.useEffect(() => {\n if (themeState.theme !== \"system\") {\n return\n }\n\n const mediaQueryList = window.matchMedia(THEME_MEDIA_QUERY)\n const syncAutoTheme = () => {\n const resolvedTheme = applyTheme(\"system\")\n\n setThemeState((currentThemeState) => {\n if (currentThemeState.resolvedTheme === resolvedTheme) {\n return currentThemeState\n }\n\n return {\n ...currentThemeState,\n resolvedTheme,\n }\n })\n }\n\n mediaQueryList.addEventListener(\"change\", syncAutoTheme)\n\n return () => {\n mediaQueryList.removeEventListener(\"change\", syncAutoTheme)\n }\n }, [themeState.theme])\n\n const value: ThemeContextValue = {\n accentPreset: themeState.accentPreset,\n resolvedTheme: themeState.resolvedTheme,\n setAccentPreset: (accentPreset) => {\n setThemeState((currentThemeState) => {\n if (currentThemeState.accentPreset === accentPreset) {\n return currentThemeState\n }\n\n return {\n ...currentThemeState,\n accentPreset,\n }\n })\n },\n setTheme: (theme) => {\n setThemeState((currentThemeState) => {\n if (currentThemeState.theme === theme) {\n return currentThemeState\n }\n\n return {\n ...currentThemeState,\n theme,\n }\n })\n },\n theme: themeState.theme,\n }\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\n}\n\nexport function useTheme() {\n const context = React.useContext(ThemeContext)\n\n if (!context) {\n throw new Error(\"useTheme must be used within a ThemeProvider.\")\n }\n\n return context\n}\n\nexport { getThemeInitScript }\nexport type { AccentPreset, ResolvedTheme, ThemeContextValue, ThemeMode }\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import {
|
|
2
|
+
fieldInvalidClass
|
|
3
|
+
} from "./chunk-O2BG2KSY.js";
|
|
4
|
+
import {
|
|
5
|
+
cn
|
|
6
|
+
} from "./chunk-DN2AEEA2.js";
|
|
7
|
+
|
|
8
|
+
// src/components/badge.tsx
|
|
9
|
+
import "react";
|
|
10
|
+
import * as Slot from "@radix-ui/react-slot";
|
|
11
|
+
import { cva } from "class-variance-authority";
|
|
12
|
+
import { jsx } from "react/jsx-runtime";
|
|
13
|
+
var badgeVariants = cva(
|
|
14
|
+
"group/badge inline-flex h-6 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-focus-ring focus-visible:ring-[3px] focus-visible:ring-focus-ring has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&>svg]:pointer-events-none [&>svg]:size-3!",
|
|
15
|
+
{
|
|
16
|
+
variants: {
|
|
17
|
+
variant: {
|
|
18
|
+
accent: "bg-interactive-accent text-text-on-accent hover:bg-interactive-accent-hover active:bg-interactive-accent-active-hover [a]:hover:bg-interactive-accent-hover",
|
|
19
|
+
normal: "border-border bg-interactive-normal text-text-normal hover:bg-interactive-hover active:bg-interactive-active-hover [a]:hover:bg-interactive-hover",
|
|
20
|
+
destructive: "bg-background-error text-text-error hover:bg-background-error-hover active:bg-background-error-hover [a]:hover:bg-background-error-hover",
|
|
21
|
+
outline: "border-border bg-transparent text-text-normal hover:bg-background-modifier-hover active:bg-background-modifier-active-hover [a]:hover:bg-background-modifier-hover",
|
|
22
|
+
ghost: "bg-transparent text-text-normal hover:bg-background-modifier-hover active:bg-background-modifier-active-hover [a]:hover:bg-background-modifier-hover",
|
|
23
|
+
link: "bg-transparent text-text-accent underline-offset-4 hover:text-text-accent-hover hover:underline [a]:hover:text-text-accent-hover [a]:hover:underline"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
defaultVariants: {
|
|
27
|
+
variant: "accent"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
function Badge({
|
|
32
|
+
className,
|
|
33
|
+
variant = "normal",
|
|
34
|
+
asChild = false,
|
|
35
|
+
...props
|
|
36
|
+
}) {
|
|
37
|
+
const Comp = asChild ? Slot.Root : "span";
|
|
38
|
+
return /* @__PURE__ */ jsx(
|
|
39
|
+
Comp,
|
|
40
|
+
{
|
|
41
|
+
"data-slot": "badge",
|
|
42
|
+
"data-variant": variant,
|
|
43
|
+
className: cn(badgeVariants({ variant }), fieldInvalidClass, className),
|
|
44
|
+
...props
|
|
45
|
+
}
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export {
|
|
50
|
+
badgeVariants,
|
|
51
|
+
Badge
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=chunk-VUR4MQMH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/badge.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport * as Slot from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nimport { fieldInvalidClass } from \"./_styles\"\n\nconst badgeVariants = cva(\n \"group/badge inline-flex h-6 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-focus-ring focus-visible:ring-[3px] focus-visible:ring-focus-ring has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&>svg]:pointer-events-none [&>svg]:size-3!\",\n {\n variants: {\n variant: {\n accent:\n \"bg-interactive-accent text-text-on-accent hover:bg-interactive-accent-hover active:bg-interactive-accent-active-hover [a]:hover:bg-interactive-accent-hover\",\n normal:\n \"border-border bg-interactive-normal text-text-normal hover:bg-interactive-hover active:bg-interactive-active-hover [a]:hover:bg-interactive-hover\",\n destructive:\n \"bg-background-error text-text-error hover:bg-background-error-hover active:bg-background-error-hover [a]:hover:bg-background-error-hover\",\n outline:\n \"border-border bg-transparent text-text-normal hover:bg-background-modifier-hover active:bg-background-modifier-active-hover [a]:hover:bg-background-modifier-hover\",\n ghost:\n \"bg-transparent text-text-normal hover:bg-background-modifier-hover active:bg-background-modifier-active-hover [a]:hover:bg-background-modifier-hover\",\n link: \"bg-transparent text-text-accent underline-offset-4 hover:text-text-accent-hover hover:underline [a]:hover:text-text-accent-hover [a]:hover:underline\",\n },\n },\n defaultVariants: {\n variant: \"accent\",\n },\n },\n)\n\nfunction Badge({\n className,\n variant = \"normal\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : \"span\"\n\n return (\n <Comp\n data-slot=\"badge\"\n data-variant={variant}\n className={cn(badgeVariants({ variant }), fieldInvalidClass, className)}\n {...props}\n />\n )\n}\n\nexport { Badge, badgeVariants }\n"],"mappings":";;;;;;;;AAAA,OAAuB;AAEvB,YAAY,UAAU;AACtB,SAAS,WAA8B;AAuCnC;AAjCJ,IAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,QACE;AAAA,QACF,QACE;AAAA,QACF,aACE;AAAA,QACF,SACE;AAAA,QACF,OACE;AAAA,QACF,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAEA,SAAS,MAAM;AAAA,EACb;AAAA,EACA,UAAU;AAAA,EACV,UAAU;AAAA,EACV,GAAG;AACL,GAA8F;AAC5F,QAAM,OAAO,UAAe,YAAO;AAEnC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,mBAAmB,SAAS;AAAA,MACrE,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cn
|
|
3
|
+
} from "./chunk-DN2AEEA2.js";
|
|
4
|
+
|
|
5
|
+
// src/components/label.tsx
|
|
6
|
+
import "react";
|
|
7
|
+
import * as LabelPrimitive from "@radix-ui/react-label";
|
|
8
|
+
import { jsx } from "react/jsx-runtime";
|
|
9
|
+
function Label({ className, ...props }) {
|
|
10
|
+
return /* @__PURE__ */ jsx(
|
|
11
|
+
LabelPrimitive.Root,
|
|
12
|
+
{
|
|
13
|
+
"data-slot": "label",
|
|
14
|
+
className: cn(
|
|
15
|
+
"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
|
|
16
|
+
className
|
|
17
|
+
),
|
|
18
|
+
...props
|
|
19
|
+
}
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export {
|
|
24
|
+
Label
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=chunk-WIEKNG4S.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/label.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\n\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nfunction Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Label }\n"],"mappings":";;;;;AAEA,OAAuB;AAEvB,YAAY,oBAAoB;AAM5B;AAFJ,SAAS,MAAM,EAAE,WAAW,GAAG,MAAM,GAAqD;AACxF,SACE;AAAA,IAAgB;AAAA,IAAf;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Toaster
|
|
3
|
+
} from "./chunk-23KUNTRD.js";
|
|
4
|
+
import {
|
|
5
|
+
TooltipProvider
|
|
6
|
+
} from "./chunk-D3SP7GL3.js";
|
|
7
|
+
import {
|
|
8
|
+
ThemeProvider
|
|
9
|
+
} from "./chunk-UXCBLYG6.js";
|
|
10
|
+
|
|
11
|
+
// src/components/main-provider.tsx
|
|
12
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
13
|
+
function MainProvider({ children }) {
|
|
14
|
+
return /* @__PURE__ */ jsxs(ThemeProvider, { children: [
|
|
15
|
+
/* @__PURE__ */ jsx(TooltipProvider, { children }),
|
|
16
|
+
/* @__PURE__ */ jsx(Toaster, {})
|
|
17
|
+
] });
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export {
|
|
21
|
+
MainProvider
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=chunk-WIZ4OLOB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/main-provider.tsx"],"sourcesContent":["import { Toaster } from \"./sonner\"\nimport { ThemeProvider } from \"./theme-provider\"\nimport { TooltipProvider } from \"./tooltip\"\n\nexport function MainProvider({ children }: { children: React.ReactNode }) {\n return (\n <ThemeProvider>\n <TooltipProvider>{children}</TooltipProvider>\n <Toaster />\n </ThemeProvider>\n )\n}\n"],"mappings":";;;;;;;;;;;AAMI,SACE,KADF;AAFG,SAAS,aAAa,EAAE,SAAS,GAAkC;AACxE,SACE,qBAAC,iBACC;AAAA,wBAAC,mBAAiB,UAAS;AAAA,IAC3B,oBAAC,WAAQ;AAAA,KACX;AAEJ;","names":[]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// src/hooks/use-mobile.ts
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
var MOBILE_BREAKPOINT = 768;
|
|
4
|
+
function useIsMobile() {
|
|
5
|
+
const [isMobile, setIsMobile] = React.useState(void 0);
|
|
6
|
+
React.useEffect(() => {
|
|
7
|
+
const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
|
|
8
|
+
const onChange = () => {
|
|
9
|
+
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
|
|
10
|
+
};
|
|
11
|
+
mql.addEventListener("change", onChange);
|
|
12
|
+
setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
|
|
13
|
+
return () => mql.removeEventListener("change", onChange);
|
|
14
|
+
}, []);
|
|
15
|
+
return !!isMobile;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export {
|
|
19
|
+
useIsMobile
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=chunk-WJRJBMFN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/use-mobile.ts"],"sourcesContent":["import * as React from \"react\"\n\nconst MOBILE_BREAKPOINT = 768\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n }\n mql.addEventListener(\"change\", onChange)\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)\n return () => mql.removeEventListener(\"change\", onChange)\n }, [])\n\n return !!isMobile\n}\n"],"mappings":";AAAA,YAAY,WAAW;AAEvB,IAAM,oBAAoB;AAEnB,SAAS,cAAc;AAC5B,QAAM,CAAC,UAAU,WAAW,IAAU,eAA8B,MAAS;AAE7E,EAAM,gBAAU,MAAM;AACpB,UAAM,MAAM,OAAO,WAAW,eAAe,oBAAoB,CAAC,KAAK;AACvE,UAAM,WAAW,MAAM;AACrB,kBAAY,OAAO,aAAa,iBAAiB;AAAA,IACnD;AACA,QAAI,iBAAiB,UAAU,QAAQ;AACvC,gBAAY,OAAO,aAAa,iBAAiB;AACjD,WAAO,MAAM,IAAI,oBAAoB,UAAU,QAAQ;AAAA,EACzD,GAAG,CAAC,CAAC;AAEL,SAAO,CAAC,CAAC;AACX;","names":[]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import {
|
|
2
|
+
fieldFocusClass,
|
|
3
|
+
fieldInvalidClass
|
|
4
|
+
} from "./chunk-O2BG2KSY.js";
|
|
5
|
+
import {
|
|
6
|
+
cn
|
|
7
|
+
} from "./chunk-DN2AEEA2.js";
|
|
8
|
+
|
|
9
|
+
// src/components/input.tsx
|
|
10
|
+
import "react";
|
|
11
|
+
import { jsx } from "react/jsx-runtime";
|
|
12
|
+
function Input({ className, type, size = "default", ...props }) {
|
|
13
|
+
return /* @__PURE__ */ jsx(
|
|
14
|
+
"input",
|
|
15
|
+
{
|
|
16
|
+
type,
|
|
17
|
+
"data-slot": "input",
|
|
18
|
+
"data-size": size,
|
|
19
|
+
className: cn(
|
|
20
|
+
"border-field-border bg-field-background text-field-text file:text-field-text placeholder:text-field-placeholder disabled:bg-field-background-disabled h-8 w-full min-w-0 rounded-lg border px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),12px)] md:text-sm",
|
|
21
|
+
fieldFocusClass,
|
|
22
|
+
fieldInvalidClass,
|
|
23
|
+
className
|
|
24
|
+
),
|
|
25
|
+
...props
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export {
|
|
31
|
+
Input
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=chunk-YUPLJP3F.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/input.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nimport { fieldFocusClass, fieldInvalidClass, type FieldControlSize } from \"./_styles\"\n\ntype InputProps = Omit<React.ComponentProps<\"input\">, \"size\"> & {\n size?: FieldControlSize\n}\n\nfunction Input({ className, type, size = \"default\", ...props }: InputProps) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n data-size={size}\n className={cn(\n \"border-field-border bg-field-background text-field-text file:text-field-text placeholder:text-field-placeholder disabled:bg-field-background-disabled h-8 w-full min-w-0 rounded-lg border px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),12px)] md:text-sm\",\n fieldFocusClass,\n fieldInvalidClass,\n className,\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n"],"mappings":";;;;;;;;;AAAA,OAAuB;AAYnB;AAFJ,SAAS,MAAM,EAAE,WAAW,MAAM,OAAO,WAAW,GAAG,MAAM,GAAe;AAC1E,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,aAAU;AAAA,MACV,aAAW;AAAA,MACX,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;","names":[]}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Dialog,
|
|
3
|
+
DialogContent,
|
|
4
|
+
DialogDescription,
|
|
5
|
+
DialogHeader,
|
|
6
|
+
DialogTitle
|
|
7
|
+
} from "./chunk-PLZMCJSL.js";
|
|
8
|
+
import {
|
|
9
|
+
InputGroup,
|
|
10
|
+
InputGroupAddon
|
|
11
|
+
} from "./chunk-UVAI2U6X.js";
|
|
12
|
+
import {
|
|
13
|
+
floatingItemAccentStateClass
|
|
14
|
+
} from "./chunk-O2BG2KSY.js";
|
|
15
|
+
import {
|
|
16
|
+
cn
|
|
17
|
+
} from "./chunk-DN2AEEA2.js";
|
|
18
|
+
|
|
19
|
+
// src/components/command.tsx
|
|
20
|
+
import "react";
|
|
21
|
+
import { Command as CommandPrimitive } from "cmdk";
|
|
22
|
+
import { SearchIcon, CheckIcon } from "lucide-react";
|
|
23
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
24
|
+
function Command({ className, ...props }) {
|
|
25
|
+
return /* @__PURE__ */ jsx(
|
|
26
|
+
CommandPrimitive,
|
|
27
|
+
{
|
|
28
|
+
"data-slot": "command",
|
|
29
|
+
className: cn(
|
|
30
|
+
"text-dialog-text flex size-full flex-col overflow-hidden rounded-[var(--radius-dialog)]! p-1",
|
|
31
|
+
className
|
|
32
|
+
),
|
|
33
|
+
...props
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
function CommandDialog({
|
|
38
|
+
title = "Command Palette",
|
|
39
|
+
description = "Search for a command to run...",
|
|
40
|
+
children,
|
|
41
|
+
className,
|
|
42
|
+
showCloseButton = false,
|
|
43
|
+
...props
|
|
44
|
+
}) {
|
|
45
|
+
return /* @__PURE__ */ jsxs(Dialog, { ...props, children: [
|
|
46
|
+
/* @__PURE__ */ jsxs(DialogHeader, { className: "sr-only", children: [
|
|
47
|
+
/* @__PURE__ */ jsx(DialogTitle, { children: title }),
|
|
48
|
+
/* @__PURE__ */ jsx(DialogDescription, { children: description })
|
|
49
|
+
] }),
|
|
50
|
+
/* @__PURE__ */ jsx(
|
|
51
|
+
DialogContent,
|
|
52
|
+
{
|
|
53
|
+
className: cn(
|
|
54
|
+
"top-1/6 translate-y-0 overflow-hidden rounded-xl! p-0 sm:max-w-xl",
|
|
55
|
+
className
|
|
56
|
+
),
|
|
57
|
+
showCloseButton,
|
|
58
|
+
children
|
|
59
|
+
}
|
|
60
|
+
)
|
|
61
|
+
] });
|
|
62
|
+
}
|
|
63
|
+
function CommandInput({
|
|
64
|
+
className,
|
|
65
|
+
...props
|
|
66
|
+
}) {
|
|
67
|
+
return /* @__PURE__ */ jsx("div", { "data-slot": "command-input-wrapper", className: "p-1 pb-0", children: /* @__PURE__ */ jsxs(InputGroup, { className: "h-8! rounded-lg! shadow-none! *:data-[slot=input-group-addon]:pl-2!", children: [
|
|
68
|
+
/* @__PURE__ */ jsx(
|
|
69
|
+
CommandPrimitive.Input,
|
|
70
|
+
{
|
|
71
|
+
"data-slot": "command-input",
|
|
72
|
+
className: cn(
|
|
73
|
+
"w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50",
|
|
74
|
+
className
|
|
75
|
+
),
|
|
76
|
+
...props
|
|
77
|
+
}
|
|
78
|
+
),
|
|
79
|
+
/* @__PURE__ */ jsx(InputGroupAddon, { children: /* @__PURE__ */ jsx(SearchIcon, { className: "size-4 shrink-0 opacity-50" }) })
|
|
80
|
+
] }) });
|
|
81
|
+
}
|
|
82
|
+
function CommandList({ className, ...props }) {
|
|
83
|
+
return /* @__PURE__ */ jsx(
|
|
84
|
+
CommandPrimitive.List,
|
|
85
|
+
{
|
|
86
|
+
"data-slot": "command-list",
|
|
87
|
+
className: cn(
|
|
88
|
+
"no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none",
|
|
89
|
+
className
|
|
90
|
+
),
|
|
91
|
+
...props
|
|
92
|
+
}
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
function CommandEmpty({
|
|
96
|
+
className,
|
|
97
|
+
...props
|
|
98
|
+
}) {
|
|
99
|
+
return /* @__PURE__ */ jsx(
|
|
100
|
+
CommandPrimitive.Empty,
|
|
101
|
+
{
|
|
102
|
+
"data-slot": "command-empty",
|
|
103
|
+
className: cn("py-6 text-center text-sm", className),
|
|
104
|
+
...props
|
|
105
|
+
}
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
function CommandGroup({
|
|
109
|
+
className,
|
|
110
|
+
...props
|
|
111
|
+
}) {
|
|
112
|
+
return /* @__PURE__ */ jsx(
|
|
113
|
+
CommandPrimitive.Group,
|
|
114
|
+
{
|
|
115
|
+
"data-slot": "command-group",
|
|
116
|
+
className: cn(
|
|
117
|
+
"text-dialog-text **:[[cmdk-group-heading]]:text-text-muted overflow-hidden p-1 **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium",
|
|
118
|
+
className
|
|
119
|
+
),
|
|
120
|
+
...props
|
|
121
|
+
}
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
function CommandSeparator({
|
|
125
|
+
className,
|
|
126
|
+
...props
|
|
127
|
+
}) {
|
|
128
|
+
return /* @__PURE__ */ jsx(
|
|
129
|
+
CommandPrimitive.Separator,
|
|
130
|
+
{
|
|
131
|
+
"data-slot": "command-separator",
|
|
132
|
+
className: cn("bg-border -mx-1 h-px", className),
|
|
133
|
+
...props
|
|
134
|
+
}
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
function CommandItem({
|
|
138
|
+
className,
|
|
139
|
+
children,
|
|
140
|
+
...props
|
|
141
|
+
}) {
|
|
142
|
+
return /* @__PURE__ */ jsxs(
|
|
143
|
+
CommandPrimitive.Item,
|
|
144
|
+
{
|
|
145
|
+
"data-slot": "command-item",
|
|
146
|
+
className: cn(
|
|
147
|
+
'group/command-item text-dialog-text relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:text-current [&_svg:not([class*="size-"])]:size-4',
|
|
148
|
+
floatingItemAccentStateClass,
|
|
149
|
+
className
|
|
150
|
+
),
|
|
151
|
+
...props,
|
|
152
|
+
children: [
|
|
153
|
+
children,
|
|
154
|
+
/* @__PURE__ */ jsx(CheckIcon, { className: "ml-auto text-current opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100" })
|
|
155
|
+
]
|
|
156
|
+
}
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
function CommandShortcut({ className, ...props }) {
|
|
160
|
+
return /* @__PURE__ */ jsx(
|
|
161
|
+
"span",
|
|
162
|
+
{
|
|
163
|
+
"data-slot": "command-shortcut",
|
|
164
|
+
className: cn(
|
|
165
|
+
"text-text-muted group-data-selected/command-item:text-text-on-accent ml-auto text-xs tracking-widest",
|
|
166
|
+
className
|
|
167
|
+
),
|
|
168
|
+
...props
|
|
169
|
+
}
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
export {
|
|
174
|
+
Command,
|
|
175
|
+
CommandDialog,
|
|
176
|
+
CommandInput,
|
|
177
|
+
CommandList,
|
|
178
|
+
CommandEmpty,
|
|
179
|
+
CommandGroup,
|
|
180
|
+
CommandSeparator,
|
|
181
|
+
CommandItem,
|
|
182
|
+
CommandShortcut
|
|
183
|
+
};
|
|
184
|
+
//# sourceMappingURL=chunk-Z7ITPSUF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/command.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { SearchIcon, CheckIcon } from \"lucide-react\"\n\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"@hyunsdev/ui/components/dialog\"\nimport { InputGroup, InputGroupAddon } from \"@hyunsdev/ui/components/input-group\"\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nimport { floatingItemAccentStateClass } from \"./_styles\"\n\nfunction Command({ className, ...props }: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n \"text-dialog-text flex size-full flex-col overflow-hidden rounded-[var(--radius-dialog)]! p-1\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = false,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn(\n \"top-1/6 translate-y-0 overflow-hidden rounded-xl! p-0 sm:max-w-xl\",\n className,\n )}\n showCloseButton={showCloseButton}\n >\n {children}\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div data-slot=\"command-input-wrapper\" className=\"p-1 pb-0\">\n <InputGroup className=\"h-8! rounded-lg! shadow-none! *:data-[slot=input-group-addon]:pl-2!\">\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n \"w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n <InputGroupAddon>\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\n </InputGroupAddon>\n </InputGroup>\n </div>\n )\n}\n\nfunction CommandList({ className, ...props }: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn(\n \"no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CommandEmpty({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className={cn(\"py-6 text-center text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n \"text-dialog-text **:[[cmdk-group-heading]]:text-text-muted overflow-hidden p-1 **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium\",\n className,\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn(\"bg-border -mx-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction CommandItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n 'group/command-item text-dialog-text relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:text-current [&_svg:not([class*=\"size-\"])]:size-4',\n floatingItemAccentStateClass,\n className,\n )}\n {...props}\n >\n {children}\n <CheckIcon className=\"ml-auto text-current opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100\" />\n </CommandPrimitive.Item>\n )\n}\n\nfunction CommandShortcut({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n \"text-text-muted group-data-selected/command-item:text-text-on-accent ml-auto text-xs tracking-widest\",\n className,\n )}\n {...props}\n />\n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import {
|
|
2
|
+
floatingSurfaceClass
|
|
3
|
+
} from "./chunk-O2BG2KSY.js";
|
|
4
|
+
import {
|
|
5
|
+
cn
|
|
6
|
+
} from "./chunk-DN2AEEA2.js";
|
|
7
|
+
|
|
8
|
+
// src/components/popover.tsx
|
|
9
|
+
import "react";
|
|
10
|
+
import * as PopoverPrimitive from "@radix-ui/react-popover";
|
|
11
|
+
import { jsx } from "react/jsx-runtime";
|
|
12
|
+
function Popover({ ...props }) {
|
|
13
|
+
return /* @__PURE__ */ jsx(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
|
|
14
|
+
}
|
|
15
|
+
function PopoverTrigger({ ...props }) {
|
|
16
|
+
return /* @__PURE__ */ jsx(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
|
|
17
|
+
}
|
|
18
|
+
function PopoverContent({
|
|
19
|
+
className,
|
|
20
|
+
align = "center",
|
|
21
|
+
sideOffset = 4,
|
|
22
|
+
...props
|
|
23
|
+
}) {
|
|
24
|
+
return /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
|
|
25
|
+
PopoverPrimitive.Content,
|
|
26
|
+
{
|
|
27
|
+
"data-slot": "popover-content",
|
|
28
|
+
align,
|
|
29
|
+
sideOffset,
|
|
30
|
+
className: cn(
|
|
31
|
+
"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 z-[var(--layer-popover)] flex w-72 origin-(--radix-popover-content-transform-origin) flex-col gap-2.5 rounded-[var(--radius-floating)] p-2.5 text-sm outline-hidden duration-100",
|
|
32
|
+
floatingSurfaceClass,
|
|
33
|
+
className
|
|
34
|
+
),
|
|
35
|
+
...props
|
|
36
|
+
}
|
|
37
|
+
) });
|
|
38
|
+
}
|
|
39
|
+
function PopoverAnchor({ ...props }) {
|
|
40
|
+
return /* @__PURE__ */ jsx(PopoverPrimitive.Anchor, { "data-slot": "popover-anchor", ...props });
|
|
41
|
+
}
|
|
42
|
+
function PopoverHeader({ className, ...props }) {
|
|
43
|
+
return /* @__PURE__ */ jsx(
|
|
44
|
+
"div",
|
|
45
|
+
{
|
|
46
|
+
"data-slot": "popover-header",
|
|
47
|
+
className: cn("flex flex-col gap-0.5 text-sm", className),
|
|
48
|
+
...props
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
function PopoverTitle({ className, ...props }) {
|
|
53
|
+
return /* @__PURE__ */ jsx(
|
|
54
|
+
"div",
|
|
55
|
+
{
|
|
56
|
+
"data-slot": "popover-title",
|
|
57
|
+
className: cn("font-heading font-medium", className),
|
|
58
|
+
...props
|
|
59
|
+
}
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
function PopoverDescription({ className, ...props }) {
|
|
63
|
+
return /* @__PURE__ */ jsx("p", { "data-slot": "popover-description", className: cn("text-text-muted", className), ...props });
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export {
|
|
67
|
+
Popover,
|
|
68
|
+
PopoverTrigger,
|
|
69
|
+
PopoverContent,
|
|
70
|
+
PopoverAnchor,
|
|
71
|
+
PopoverHeader,
|
|
72
|
+
PopoverTitle,
|
|
73
|
+
PopoverDescription
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=chunk-ZC76ALSI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/popover.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\n\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"@hyunsdev/ui/lib/utils\"\n\nimport { floatingSurfaceClass } from \"./_styles\"\n\nfunction Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 z-[var(--layer-popover)] flex w-72 origin-(--radix-popover-content-transform-origin) flex-col gap-2.5 rounded-[var(--radius-floating)] p-2.5 text-sm outline-hidden duration-100\",\n floatingSurfaceClass,\n className,\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"popover-header\"\n className={cn(\"flex flex-col gap-0.5 text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <div\n data-slot=\"popover-title\"\n className={cn(\"font-heading font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p data-slot=\"popover-description\" className={cn(\"text-text-muted\", className)} {...props} />\n )\n}\n\nexport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n PopoverDescription,\n PopoverHeader,\n PopoverTitle,\n PopoverTrigger,\n}\n"],"mappings":";;;;;;;;AAEA,OAAuB;AAEvB,YAAY,sBAAsB;AAOzB;AADT,SAAS,QAAQ,EAAE,GAAG,MAAM,GAAuD;AACjF,SAAO,oBAAkB,uBAAjB,EAAsB,aAAU,WAAW,GAAG,OAAO;AAC/D;AAEA,SAAS,eAAe,EAAE,GAAG,MAAM,GAA0D;AAC3F,SAAO,oBAAkB,0BAAjB,EAAyB,aAAU,mBAAmB,GAAG,OAAO;AAC1E;AAEA,SAAS,eAAe;AAAA,EACtB;AAAA,EACA,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,GAAG;AACL,GAA0D;AACxD,SACE,oBAAkB,yBAAjB,EACC;AAAA,IAAkB;AAAA,IAAjB;AAAA,MACC,aAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN,GACF;AAEJ;AAEA,SAAS,cAAc,EAAE,GAAG,MAAM,GAAyD;AACzF,SAAO,oBAAkB,yBAAjB,EAAwB,aAAU,kBAAkB,GAAG,OAAO;AACxE;AAEA,SAAS,cAAc,EAAE,WAAW,GAAG,MAAM,GAAgC;AAC3E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,iCAAiC,SAAS;AAAA,MACvD,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,aAAa,EAAE,WAAW,GAAG,MAAM,GAA+B;AACzE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,4BAA4B,SAAS;AAAA,MAClD,GAAG;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,mBAAmB,EAAE,WAAW,GAAG,MAAM,GAA8B;AAC9E,SACE,oBAAC,OAAE,aAAU,uBAAsB,WAAW,GAAG,mBAAmB,SAAS,GAAI,GAAG,OAAO;AAE/F;","names":[]}
|