@rimelight/ui 0.0.29 → 0.0.31
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/package.json +1 -1
- package/src/components/astro/RLAAlert.astro +60 -0
- package/src/components/astro/RLAAlertDialog.astro +86 -0
- package/src/components/astro/RLAAspectRatio.astro +23 -0
- package/src/components/astro/RLAAvatar.astro +56 -0
- package/src/components/astro/RLAAvatarGroup.astro +19 -0
- package/src/components/astro/RLABadge.astro +31 -0
- package/src/components/astro/RLABreadcrumb.astro +44 -0
- package/src/components/astro/RLACard.astro +74 -0
- package/src/components/astro/RLACarousel.astro +71 -0
- package/src/components/astro/RLAChart.astro +215 -0
- package/src/components/astro/RLACheckbox.astro +51 -0
- package/src/components/astro/RLACollapsible.astro +38 -0
- package/src/components/astro/RLACombobox.astro +131 -0
- package/src/components/astro/RLADialog.astro +95 -0
- package/src/components/astro/RLADrawer.astro +74 -0
- package/src/components/astro/RLADropdownMenu.astro +82 -0
- package/src/components/astro/RLADropzone.astro +134 -0
- package/src/components/astro/RLAField.astro +43 -0
- package/src/components/{Head.astro → astro/RLAHead.astro} +181 -199
- package/src/components/astro/RLAHoverCard.astro +31 -0
- package/src/components/astro/RLAInput.astro +60 -0
- package/src/components/astro/RLAInputGroup.astro +35 -0
- package/src/components/astro/RLAKbd.astro +22 -0
- package/src/components/astro/RLALabel.astro +23 -0
- package/src/components/astro/RLALocaleSelector.astro +110 -0
- package/src/components/astro/RLAMain.astro +28 -0
- package/src/components/astro/RLAMarquee.astro +32 -0
- package/src/components/astro/RLANativeSelect.astro +51 -0
- package/src/components/astro/RLANavigationMenu.astro +136 -0
- package/src/components/astro/RLAPagination.astro +94 -0
- package/src/components/astro/RLAPopover.astro +31 -0
- package/src/components/astro/RLAProgress.astro +43 -0
- package/src/components/astro/RLAResizable.astro +177 -0
- package/src/components/astro/RLAScrollArea.astro +157 -0
- package/src/components/astro/RLASection.astro +0 -1
- package/src/components/astro/RLASelect.astro +109 -0
- package/src/components/astro/RLASeparator.astro +27 -0
- package/src/components/astro/RLASheet.astro +72 -0
- package/src/components/astro/RLASidebar.astro +135 -0
- package/src/components/astro/RLASkeleton.astro +20 -0
- package/src/components/astro/RLASlider.astro +53 -0
- package/src/components/astro/RLASpinner.astro +25 -0
- package/src/components/astro/RLAStickySurface.astro +27 -0
- package/src/components/astro/RLASwitch.astro +49 -0
- package/src/components/astro/RLATable.astro +60 -0
- package/src/components/astro/RLATabs.astro +92 -0
- package/src/components/astro/RLATextarea.astro +42 -0
- package/src/components/astro/RLAThemeSelector.astro +73 -0
- package/src/components/astro/RLAToast.astro +107 -0
- package/src/components/astro/RLAToggle.astro +38 -0
- package/src/components/astro/RLAToggleGroup.astro +30 -0
- package/src/components/astro/RLATooltip.astro +31 -0
- package/src/integrations/ui.ts +1 -0
- package/src/themes/alert.theme.ts +51 -0
- package/src/themes/alertDialog.theme.ts +33 -0
- package/src/themes/aspectRatio.theme.ts +11 -0
- package/src/themes/avatar.theme.ts +28 -0
- package/src/themes/avatarGroup.theme.ts +10 -0
- package/src/themes/badge.theme.ts +61 -0
- package/src/themes/breadcrumb.theme.ts +15 -0
- package/src/themes/card.theme.ts +34 -0
- package/src/themes/carousel.theme.ts +32 -0
- package/src/themes/chart.theme.ts +21 -0
- package/src/themes/checkbox.theme.ts +42 -0
- package/src/themes/collapsible.theme.ts +22 -0
- package/src/themes/combobox.theme.ts +28 -0
- package/src/themes/dialog.theme.ts +37 -0
- package/src/themes/drawer.theme.ts +44 -0
- package/src/themes/dropdownMenu.theme.ts +27 -0
- package/src/themes/dropzone.theme.ts +24 -0
- package/src/themes/field.theme.ts +24 -0
- package/src/themes/hoverCard.theme.ts +27 -0
- package/src/themes/input.theme.ts +36 -0
- package/src/themes/inputGroup.theme.ts +23 -0
- package/src/themes/kbd.theme.ts +24 -0
- package/src/themes/label.theme.ts +20 -0
- package/src/themes/localeSelector.theme.ts +50 -0
- package/src/themes/main.theme.ts +12 -0
- package/src/themes/marquee.theme.ts +27 -0
- package/src/themes/nativeSelect.theme.ts +24 -0
- package/src/themes/navigationMenu.theme.ts +19 -0
- package/src/themes/pagination.theme.ts +26 -0
- package/src/themes/popover.theme.ts +28 -0
- package/src/themes/progress.theme.ts +26 -0
- package/src/themes/resizable.theme.ts +22 -0
- package/src/themes/scrollArea.theme.ts +24 -0
- package/src/themes/section.theme.ts +1 -2
- package/src/themes/select.theme.ts +27 -0
- package/src/themes/separator.theme.ts +19 -0
- package/src/themes/sheet.theme.ts +43 -0
- package/src/themes/sidebar.theme.ts +33 -0
- package/src/themes/skeleton.theme.ts +20 -0
- package/src/themes/slider.theme.ts +28 -0
- package/src/themes/spinner.theme.ts +30 -0
- package/src/themes/stickySurface.theme.ts +10 -0
- package/src/themes/switch.theme.ts +59 -0
- package/src/themes/table.theme.ts +36 -0
- package/src/themes/tabs.theme.ts +44 -0
- package/src/themes/textarea.theme.ts +26 -0
- package/src/themes/themeSelector.theme.ts +16 -0
- package/src/themes/toast.theme.ts +25 -0
- package/src/themes/toggle.theme.ts +42 -0
- package/src/themes/toggleGroup.theme.ts +21 -0
- package/src/themes/tooltip.theme.ts +27 -0
- package/src/types/components/alert-dialog.ts +35 -0
- package/src/types/components/alert.ts +31 -0
- package/src/types/components/aspect-ratio.ts +15 -0
- package/src/types/components/avatar.ts +47 -0
- package/src/types/components/badge.ts +27 -0
- package/src/types/components/breadcrumb.ts +24 -0
- package/src/types/components/card.ts +31 -0
- package/src/types/components/carousel.ts +25 -0
- package/src/types/components/chart.ts +38 -0
- package/src/types/components/checkbox.ts +35 -0
- package/src/types/components/collapsible.ts +31 -0
- package/src/types/components/combobox.ts +43 -0
- package/src/types/components/dialog.ts +39 -0
- package/src/types/components/drawer.ts +31 -0
- package/src/types/components/dropdown-menu.ts +42 -0
- package/src/types/components/dropzone.ts +39 -0
- package/src/types/components/field.ts +31 -0
- package/src/types/components/hover-card.ts +19 -0
- package/src/types/components/index.ts +51 -3
- package/src/types/components/input-group.ts +23 -0
- package/src/types/components/input.ts +59 -0
- package/src/types/components/kbd.ts +15 -0
- package/src/types/components/label.ts +19 -0
- package/src/types/components/localeSelector.ts +33 -0
- package/src/types/components/main.ts +17 -0
- package/src/types/components/marquee.ts +23 -0
- package/src/types/components/native-select.ts +39 -0
- package/src/types/components/navigation-menu.ts +27 -0
- package/src/types/components/pagination.ts +23 -0
- package/src/types/components/popover.ts +23 -0
- package/src/types/components/progress.ts +27 -0
- package/src/types/components/resizable.ts +19 -0
- package/src/types/components/scroll-area.ts +23 -0
- package/src/types/components/select.ts +43 -0
- package/src/types/components/separator.ts +19 -0
- package/src/types/components/sheet.ts +31 -0
- package/src/types/components/sidebar.ts +36 -0
- package/src/types/components/skeleton.ts +15 -0
- package/src/types/components/slider.ts +35 -0
- package/src/types/components/spinner.ts +19 -0
- package/src/types/components/sticky-surface.ts +19 -0
- package/src/types/components/switch.ts +35 -0
- package/src/types/components/table.ts +31 -0
- package/src/types/components/tabs.ts +43 -0
- package/src/types/components/textarea.ts +51 -0
- package/src/types/components/themeSelector.ts +15 -0
- package/src/types/components/toast.ts +35 -0
- package/src/types/components/toggle-group.ts +23 -0
- package/src/types/components/toggle.ts +27 -0
- package/src/types/components/tooltip.ts +23 -0
- package/src/components/ThemeToggle.astro +0 -57
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { defineTheme } from "../utils/defineTheme"
|
|
2
|
+
|
|
3
|
+
export const kbdTheme = defineTheme({
|
|
4
|
+
slots: ["root"],
|
|
5
|
+
base: {
|
|
6
|
+
root: [
|
|
7
|
+
"inline-flex items-center justify-center font-sans font-medium select-none pointer-events-none rounded border border-border bg-muted",
|
|
8
|
+
"shadow-[0_1px_0px_0px_rgba(0,0,0,0.1)] dark:shadow-[0_1px_0px_0px_rgba(255,255,255,0.05)]",
|
|
9
|
+
"text-muted-foreground"
|
|
10
|
+
]
|
|
11
|
+
},
|
|
12
|
+
variants: {
|
|
13
|
+
size: {
|
|
14
|
+
sm: { root: "h-5 min-w-[20px] px-1 text-3xs" },
|
|
15
|
+
md: { root: "h-6 min-w-[24px] px-1.5 text-2xs" },
|
|
16
|
+
lg: { root: "h-7 min-w-[28px] px-2 text-xs" }
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
defaultVariants: {
|
|
20
|
+
size: "md"
|
|
21
|
+
}
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
export default kbdTheme
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineTheme } from "../utils/defineTheme"
|
|
2
|
+
|
|
3
|
+
export const labelTheme = defineTheme({
|
|
4
|
+
slots: ["root"],
|
|
5
|
+
base: {
|
|
6
|
+
root: "font-medium leading-none text-foreground peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
|
|
7
|
+
},
|
|
8
|
+
variants: {
|
|
9
|
+
size: {
|
|
10
|
+
sm: { root: "text-xs" },
|
|
11
|
+
md: { root: "text-sm" },
|
|
12
|
+
lg: { root: "text-base" }
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
defaultVariants: {
|
|
16
|
+
size: "md"
|
|
17
|
+
}
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
export default labelTheme
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { defineTheme } from "../utils/defineTheme"
|
|
2
|
+
export default defineTheme({
|
|
3
|
+
slots: [
|
|
4
|
+
"root",
|
|
5
|
+
"label",
|
|
6
|
+
"wrapper",
|
|
7
|
+
"select",
|
|
8
|
+
"option",
|
|
9
|
+
"iconWrapper"
|
|
10
|
+
],
|
|
11
|
+
base: {
|
|
12
|
+
root: "inline-flex flex-col gap-1.5",
|
|
13
|
+
label: "text-xs font-semibold text-muted select-none",
|
|
14
|
+
wrapper: "relative inline-block w-full",
|
|
15
|
+
select: "w-full appearance-none font-medium rounded-lg transition-all focus:outline-none focus:ring-2 focus:ring-emerald-500/40 cursor-pointer pr-10",
|
|
16
|
+
option: "bg-neutral-900 text-white selection:bg-neutral-800",
|
|
17
|
+
iconWrapper: "pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3 text-current group-hover:text-default"
|
|
18
|
+
},
|
|
19
|
+
variants: {
|
|
20
|
+
variant: {
|
|
21
|
+
default: {
|
|
22
|
+
select: "bg-gray-100 text-gray-800 hover:bg-gray-200 border border-transparent"
|
|
23
|
+
},
|
|
24
|
+
outline: {
|
|
25
|
+
select: "bg-transparent border border-neutral-800 text-white hover:bg-neutral-900 hover:border-neutral-700"
|
|
26
|
+
},
|
|
27
|
+
ghost: {
|
|
28
|
+
select: "bg-transparent border border-transparent text-white hover:bg-neutral-900"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
size: {
|
|
32
|
+
sm: {
|
|
33
|
+
label: "text-xxs",
|
|
34
|
+
select: "text-xs px-3 py-1.5 pr-8"
|
|
35
|
+
},
|
|
36
|
+
md: {
|
|
37
|
+
label: "text-xs",
|
|
38
|
+
select: "text-sm px-4 py-2 pr-9"
|
|
39
|
+
},
|
|
40
|
+
lg: {
|
|
41
|
+
label: "text-sm",
|
|
42
|
+
select: "text-base px-5 py-2.5 pr-10"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
defaultVariants: {
|
|
47
|
+
variant: "default",
|
|
48
|
+
size: "md"
|
|
49
|
+
}
|
|
50
|
+
})
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { defineTheme } from "../utils/defineTheme"
|
|
2
|
+
|
|
3
|
+
export const marqueeTheme = defineTheme({
|
|
4
|
+
slots: ["root", "track"],
|
|
5
|
+
base: {
|
|
6
|
+
root: "relative w-full overflow-hidden flex gap-4 mask-gradient-to-r",
|
|
7
|
+
track: "flex shrink-0 gap-4 min-w-full justify-around animate-marquee"
|
|
8
|
+
},
|
|
9
|
+
variants: {
|
|
10
|
+
direction: {
|
|
11
|
+
left: { track: "flex-row animate-marquee-left" },
|
|
12
|
+
right: { track: "flex-row animate-marquee-right" },
|
|
13
|
+
up: { root: "flex-col h-80", track: "flex-col animate-marquee-up" },
|
|
14
|
+
down: { root: "flex-col h-80", track: "flex-col animate-marquee-down" }
|
|
15
|
+
},
|
|
16
|
+
pauseOnHover: {
|
|
17
|
+
true: { track: "hover:[animation-play-state:paused]" },
|
|
18
|
+
false: { track: "" }
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
defaultVariants: {
|
|
22
|
+
direction: "left",
|
|
23
|
+
pauseOnHover: true
|
|
24
|
+
}
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
export default marqueeTheme
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { defineTheme } from "../utils/defineTheme"
|
|
2
|
+
|
|
3
|
+
export const createNativeSelectTheme = () =>
|
|
4
|
+
defineTheme({
|
|
5
|
+
slots: ["root", "label", "select", "icon"],
|
|
6
|
+
base: {
|
|
7
|
+
root: "relative w-full flex flex-col gap-1.5",
|
|
8
|
+
label: "text-sm font-medium text-foreground",
|
|
9
|
+
select: "flex h-9 w-full rounded-md border border-input bg-background px-3 py-2 text-sm shadow-sm transition-all focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 appearance-none pr-10",
|
|
10
|
+
icon: "pointer-events-none absolute right-3 top-[calc(50%+4px)] size-4 text-muted-foreground transform -translate-y-1/2"
|
|
11
|
+
},
|
|
12
|
+
variants: {
|
|
13
|
+
size: {
|
|
14
|
+
sm: { select: "h-8 text-xs px-2 pr-8" },
|
|
15
|
+
md: { select: "h-9 text-sm px-3 pr-10" },
|
|
16
|
+
lg: { select: "h-10 text-base px-4 pr-12" }
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
defaultVariants: {
|
|
20
|
+
size: "md"
|
|
21
|
+
}
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
export default createNativeSelectTheme()
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineTheme } from "../utils/defineTheme"
|
|
2
|
+
|
|
3
|
+
export const createNavigationMenuTheme = () =>
|
|
4
|
+
defineTheme({
|
|
5
|
+
slots: ["root", "list", "item", "link", "trigger", "content", "viewport"],
|
|
6
|
+
base: {
|
|
7
|
+
root: "relative z-10 flex max-w-max flex-1 items-center justify-center",
|
|
8
|
+
list: "group flex flex-1 list-none items-center justify-center space-x-1",
|
|
9
|
+
item: "relative",
|
|
10
|
+
link: "group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50",
|
|
11
|
+
trigger: "group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 gap-1",
|
|
12
|
+
content: "absolute left-0 top-full z-50 mt-1.5 w-56 rounded-md border bg-popover p-1 text-popover-foreground shadow-md origin-top-left",
|
|
13
|
+
viewport: "absolute left-0 top-full flex justify-center w-full"
|
|
14
|
+
},
|
|
15
|
+
variants: {},
|
|
16
|
+
defaultVariants: {}
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
export default createNavigationMenuTheme()
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { defineTheme } from "../utils/defineTheme"
|
|
2
|
+
|
|
3
|
+
export const paginationTheme = defineTheme({
|
|
4
|
+
slots: ["root", "list", "item", "link", "ellipsis"],
|
|
5
|
+
base: {
|
|
6
|
+
root: "mx-auto flex w-full justify-center",
|
|
7
|
+
list: "flex flex-row items-center gap-1",
|
|
8
|
+
item: "",
|
|
9
|
+
link: [
|
|
10
|
+
"inline-flex items-center justify-center rounded-md text-sm font-medium transition-all size-9 cursor-pointer border border-border bg-background hover:bg-muted text-foreground decoration-none",
|
|
11
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50"
|
|
12
|
+
],
|
|
13
|
+
ellipsis: "flex size-9 items-center justify-center text-muted-foreground"
|
|
14
|
+
},
|
|
15
|
+
variants: {
|
|
16
|
+
active: {
|
|
17
|
+
true: { link: "border-primary bg-primary text-primary-foreground hover:bg-primary/95" },
|
|
18
|
+
false: { link: "" }
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
defaultVariants: {
|
|
22
|
+
active: false
|
|
23
|
+
}
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
export default paginationTheme
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { defineTheme } from "../utils/defineTheme"
|
|
2
|
+
|
|
3
|
+
export const popoverTheme = defineTheme({
|
|
4
|
+
slots: ["root", "trigger", "content"],
|
|
5
|
+
base: {
|
|
6
|
+
root: "relative inline-block group/popover",
|
|
7
|
+
trigger: "",
|
|
8
|
+
content: [
|
|
9
|
+
"absolute z-50 w-72 rounded-lg border border-border bg-popover p-4 text-popover-foreground shadow-md outline-none",
|
|
10
|
+
"transition-all duration-200 invisible opacity-0 scale-95 origin-center",
|
|
11
|
+
"group-hover/popover:visible group-hover/popover:opacity-100 group-hover/popover:scale-100",
|
|
12
|
+
"focus-within:visible focus-within:opacity-100 focus-within:scale-100"
|
|
13
|
+
]
|
|
14
|
+
},
|
|
15
|
+
variants: {
|
|
16
|
+
placement: {
|
|
17
|
+
top: { content: "bottom-full left-1/2 -translate-x-1/2 mb-2" },
|
|
18
|
+
bottom: { content: "top-full left-1/2 -translate-x-1/2 mt-2" },
|
|
19
|
+
left: { content: "right-full top-1/2 -translate-y-1/2 mr-2" },
|
|
20
|
+
right: { content: "left-full top-1/2 -translate-y-1/2 ml-2" }
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
defaultVariants: {
|
|
24
|
+
placement: "bottom"
|
|
25
|
+
}
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
export default popoverTheme
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { defineTheme } from "../utils/defineTheme"
|
|
2
|
+
|
|
3
|
+
const defaultColors = ["primary", "secondary", "info", "success", "warning", "error"]
|
|
4
|
+
|
|
5
|
+
export const createProgressTheme = (colors: string[] = defaultColors) =>
|
|
6
|
+
defineTheme({
|
|
7
|
+
slots: ["root", "indicator"],
|
|
8
|
+
base: {
|
|
9
|
+
root: "relative w-full overflow-hidden rounded-full bg-muted shadow-inner",
|
|
10
|
+
indicator: "h-full w-full flex-1 transition-all duration-300 ease-in-out"
|
|
11
|
+
},
|
|
12
|
+
variants: {
|
|
13
|
+
color: Object.fromEntries(colors.map((color) => [color, { indicator: `bg-${color}-500` }])),
|
|
14
|
+
size: {
|
|
15
|
+
sm: { root: "h-1.5" },
|
|
16
|
+
md: { root: "h-3" },
|
|
17
|
+
lg: { root: "h-5" }
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
defaultVariants: {
|
|
21
|
+
color: "primary",
|
|
22
|
+
size: "md"
|
|
23
|
+
}
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
export default createProgressTheme()
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { defineTheme } from "../utils/defineTheme"
|
|
2
|
+
|
|
3
|
+
export const createResizableTheme = () =>
|
|
4
|
+
defineTheme({
|
|
5
|
+
slots: ["root", "panel", "handle"],
|
|
6
|
+
base: {
|
|
7
|
+
root: "flex w-full h-full",
|
|
8
|
+
panel: "overflow-auto transition-all",
|
|
9
|
+
handle: "flex items-center justify-center bg-border hover:bg-primary/50 transition-colors cursor-col-resize select-none"
|
|
10
|
+
},
|
|
11
|
+
variants: {
|
|
12
|
+
direction: {
|
|
13
|
+
horizontal: { root: "flex-row", handle: "w-1.5 h-full cursor-col-resize" },
|
|
14
|
+
vertical: { root: "flex-col", handle: "h-1.5 w-full cursor-row-resize" }
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
defaultVariants: {
|
|
18
|
+
direction: "horizontal"
|
|
19
|
+
}
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
export default createResizableTheme()
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { defineTheme } from "../utils/defineTheme"
|
|
2
|
+
|
|
3
|
+
export const createScrollAreaTheme = () =>
|
|
4
|
+
defineTheme({
|
|
5
|
+
slots: ["root", "viewport", "scrollbar", "thumb"],
|
|
6
|
+
base: {
|
|
7
|
+
root: "relative overflow-hidden w-full",
|
|
8
|
+
viewport: "h-full w-full rounded-[inherit] overflow-auto [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden",
|
|
9
|
+
scrollbar: "absolute flex user-select-none touch-action-none p-0.5 bg-transparent transition-colors duration-150 ease-out hover:bg-muted/10",
|
|
10
|
+
thumb: "relative flex-1 rounded-full bg-border transition-colors hover:bg-muted-foreground/45"
|
|
11
|
+
},
|
|
12
|
+
variants: {
|
|
13
|
+
orientation: {
|
|
14
|
+
vertical: { scrollbar: "right-0 top-0 bottom-0 w-2.5 flex-col" },
|
|
15
|
+
horizontal: { scrollbar: "bottom-0 left-0 right-0 h-2.5 flex-row" },
|
|
16
|
+
both: { scrollbar: "" }
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
defaultVariants: {
|
|
20
|
+
orientation: "vertical"
|
|
21
|
+
}
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
export default createScrollAreaTheme()
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { defineTheme } from "../utils/defineTheme"
|
|
2
|
+
|
|
3
|
+
export const createSelectTheme = () =>
|
|
4
|
+
defineTheme({
|
|
5
|
+
slots: ["root", "label", "trigger", "content", "item", "itemText", "itemIcon"],
|
|
6
|
+
base: {
|
|
7
|
+
root: "relative w-full flex flex-col gap-1.5",
|
|
8
|
+
label: "text-sm font-medium text-foreground",
|
|
9
|
+
trigger: "flex h-9 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm shadow-sm transition-all focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
|
|
10
|
+
content: "absolute z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md transition-all w-full mt-1 max-h-60 overflow-y-auto",
|
|
11
|
+
item: "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 px-2 text-sm outline-none hover:bg-accent hover:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
12
|
+
itemText: "truncate",
|
|
13
|
+
itemIcon: "ml-auto size-4"
|
|
14
|
+
},
|
|
15
|
+
variants: {
|
|
16
|
+
size: {
|
|
17
|
+
sm: { trigger: "h-8 px-2 text-xs", item: "py-1 px-1.5 text-xs" },
|
|
18
|
+
md: { trigger: "h-9 px-3 text-sm", item: "py-1.5 px-2 text-sm" },
|
|
19
|
+
lg: { trigger: "h-10 px-4 text-base", item: "py-2 px-2.5 text-base" }
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
defaultVariants: {
|
|
23
|
+
size: "md"
|
|
24
|
+
}
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
export default createSelectTheme()
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineTheme } from "../utils/defineTheme"
|
|
2
|
+
|
|
3
|
+
export const separatorTheme = defineTheme({
|
|
4
|
+
slots: ["root"],
|
|
5
|
+
base: {
|
|
6
|
+
root: "shrink-0 bg-border"
|
|
7
|
+
},
|
|
8
|
+
variants: {
|
|
9
|
+
orientation: {
|
|
10
|
+
horizontal: { root: "h-[1px] w-full" },
|
|
11
|
+
vertical: { root: "h-full w-[1px]" }
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
defaultVariants: {
|
|
15
|
+
orientation: "horizontal"
|
|
16
|
+
}
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
export default separatorTheme
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { defineTheme } from "../utils/defineTheme"
|
|
2
|
+
|
|
3
|
+
export const sheetTheme = defineTheme({
|
|
4
|
+
slots: ["root", "trigger", "backdrop", "content", "header", "title", "description", "footer", "closeButton"],
|
|
5
|
+
base: {
|
|
6
|
+
root: "relative inline-block",
|
|
7
|
+
trigger: "",
|
|
8
|
+
backdrop: "fixed inset-0 z-50 bg-black/60 backdrop-blur-sm transition-all duration-300",
|
|
9
|
+
content: [
|
|
10
|
+
"fixed z-50 bg-background p-6 shadow-xl border-border transition-all duration-300 outline-none",
|
|
11
|
+
"data-[state=open]:animate-in data-[state=closed]:animate-out"
|
|
12
|
+
],
|
|
13
|
+
header: "flex flex-col gap-1.5 mb-4",
|
|
14
|
+
title: "text-lg font-semibold leading-none tracking-tight text-foreground",
|
|
15
|
+
description: "text-sm text-muted-foreground leading-relaxed",
|
|
16
|
+
footer: "flex flex-col sm:flex-row sm:justify-end gap-2 mt-6",
|
|
17
|
+
closeButton: [
|
|
18
|
+
"absolute right-4 top-4 rounded-sm opacity-70 transition-opacity hover:opacity-100",
|
|
19
|
+
"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none"
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
variants: {
|
|
23
|
+
side: {
|
|
24
|
+
top: {
|
|
25
|
+
content: "inset-x-0 top-0 border-b data-[state=open]:slide-in-from-top data-[state=closed]:slide-out-to-top"
|
|
26
|
+
},
|
|
27
|
+
bottom: {
|
|
28
|
+
content: "inset-x-0 bottom-0 border-t data-[state=open]:slide-in-from-bottom data-[state=closed]:slide-out-to-bottom"
|
|
29
|
+
},
|
|
30
|
+
left: {
|
|
31
|
+
content: "inset-y-0 left-0 h-full w-3/4 max-w-sm border-r data-[state=open]:slide-in-from-left data-[state=closed]:slide-out-to-left"
|
|
32
|
+
},
|
|
33
|
+
right: {
|
|
34
|
+
content: "inset-y-0 right-0 h-full w-3/4 max-w-sm border-l data-[state=open]:slide-in-from-right data-[state=closed]:slide-out-to-right"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
defaultVariants: {
|
|
39
|
+
side: "right"
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
export default sheetTheme
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { defineTheme } from "../utils/defineTheme"
|
|
2
|
+
|
|
3
|
+
export const createSidebarTheme = () =>
|
|
4
|
+
defineTheme({
|
|
5
|
+
slots: ["root", "header", "content", "footer", "item", "itemLink", "itemIcon", "itemBadge"],
|
|
6
|
+
base: {
|
|
7
|
+
root: "flex flex-col h-full w-64 bg-background border-r border-border shadow-sm transition-all duration-300",
|
|
8
|
+
header: "flex h-16 items-center px-6 border-b border-border gap-2 font-semibold text-lg text-foreground",
|
|
9
|
+
content: "flex-1 overflow-y-auto p-4 flex flex-col gap-1.5",
|
|
10
|
+
footer: "p-4 border-t border-border flex items-center justify-between",
|
|
11
|
+
item: "relative",
|
|
12
|
+
itemLink: "flex items-center gap-3 rounded-md px-3 py-2 text-sm font-medium text-muted-foreground hover:bg-muted hover:text-foreground transition-colors cursor-pointer",
|
|
13
|
+
itemIcon: "size-4 text-current",
|
|
14
|
+
itemBadge: "ml-auto flex size-5 items-center justify-center rounded-full bg-primary/10 text-primary text-[10px] font-bold"
|
|
15
|
+
},
|
|
16
|
+
variants: {
|
|
17
|
+
side: {
|
|
18
|
+
left: { root: "left-0 border-r" },
|
|
19
|
+
right: { root: "right-0 border-l" }
|
|
20
|
+
},
|
|
21
|
+
collapsible: {
|
|
22
|
+
icon: { root: "w-16 [&_[data-slot=item-text]]:hidden [&_[data-slot=item-badge]]:hidden [&_[data-slot=sidebar-logo]]:hidden" },
|
|
23
|
+
offcanvas: { root: "-translate-x-full" },
|
|
24
|
+
none: {}
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
defaultVariants: {
|
|
28
|
+
side: "left",
|
|
29
|
+
collapsible: "none"
|
|
30
|
+
}
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
export default createSidebarTheme()
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineTheme } from "../utils/defineTheme"
|
|
2
|
+
|
|
3
|
+
export const skeletonTheme = defineTheme({
|
|
4
|
+
slots: ["root"],
|
|
5
|
+
base: {
|
|
6
|
+
root: "animate-pulse bg-muted shrink-0"
|
|
7
|
+
},
|
|
8
|
+
variants: {
|
|
9
|
+
shape: {
|
|
10
|
+
circle: { root: "rounded-full" },
|
|
11
|
+
rectangle: { root: "rounded-none" },
|
|
12
|
+
rounded: { root: "rounded-md" }
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
defaultVariants: {
|
|
16
|
+
shape: "rounded"
|
|
17
|
+
}
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
export default skeletonTheme
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { defineTheme } from "../utils/defineTheme"
|
|
2
|
+
|
|
3
|
+
const defaultColors = ["primary", "secondary", "info", "success", "warning", "error"]
|
|
4
|
+
|
|
5
|
+
export const createSliderTheme = (colors: string[] = defaultColors) =>
|
|
6
|
+
defineTheme({
|
|
7
|
+
slots: ["root", "track", "range", "thumb"],
|
|
8
|
+
base: {
|
|
9
|
+
root: "relative flex w-full touch-none select-none items-center",
|
|
10
|
+
track: "relative h-1.5 w-full grow overflow-hidden rounded-full bg-muted",
|
|
11
|
+
range: "absolute h-full",
|
|
12
|
+
thumb: "block size-4.5 rounded-full border border-border bg-background shadow transition-all focus-visible:outline-none focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 cursor-pointer"
|
|
13
|
+
},
|
|
14
|
+
variants: {
|
|
15
|
+
color: Object.fromEntries(colors.map((color) => [
|
|
16
|
+
color,
|
|
17
|
+
{
|
|
18
|
+
range: `bg-${color}-500`,
|
|
19
|
+
thumb: `focus-visible:ring-${color}-500/50 hover:border-${color}-500`
|
|
20
|
+
}
|
|
21
|
+
]))
|
|
22
|
+
},
|
|
23
|
+
defaultVariants: {
|
|
24
|
+
color: "primary"
|
|
25
|
+
}
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
export default createSliderTheme()
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { defineTheme } from "../utils/defineTheme"
|
|
2
|
+
|
|
3
|
+
const defaultColors = ["primary", "secondary", "info", "success", "warning", "error"]
|
|
4
|
+
|
|
5
|
+
export const createSpinnerTheme = (colors: string[] = defaultColors) =>
|
|
6
|
+
defineTheme({
|
|
7
|
+
slots: ["root"],
|
|
8
|
+
base: {
|
|
9
|
+
root: "animate-spin shrink-0 rounded-full border-2 border-t-transparent border-current"
|
|
10
|
+
},
|
|
11
|
+
variants: {
|
|
12
|
+
size: {
|
|
13
|
+
xs: { root: "size-3" },
|
|
14
|
+
sm: { root: "size-4" },
|
|
15
|
+
md: { root: "size-6" },
|
|
16
|
+
lg: { root: "size-8" },
|
|
17
|
+
xl: { root: "size-10" }
|
|
18
|
+
},
|
|
19
|
+
color: Object.fromEntries([
|
|
20
|
+
["current", { root: "text-current" }],
|
|
21
|
+
...colors.map((color) => [color, { root: `text-${color}-500` }])
|
|
22
|
+
])
|
|
23
|
+
},
|
|
24
|
+
defaultVariants: {
|
|
25
|
+
size: "md",
|
|
26
|
+
color: "current"
|
|
27
|
+
}
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
export default createSpinnerTheme()
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { defineTheme } from "../utils/defineTheme"
|
|
2
|
+
|
|
3
|
+
const defaultColors = ["primary", "secondary", "info", "success", "warning", "error"]
|
|
4
|
+
|
|
5
|
+
export const createSwitchTheme = (colors: string[] = defaultColors) =>
|
|
6
|
+
defineTheme({
|
|
7
|
+
slots: ["root", "input", "track", "thumb", "label"],
|
|
8
|
+
base: {
|
|
9
|
+
root: "inline-flex items-center gap-2 cursor-pointer select-none",
|
|
10
|
+
input: "absolute opacity-0 size-0 pointer-events-none peer",
|
|
11
|
+
track: [
|
|
12
|
+
"inline-flex h-5 w-9 shrink-0 items-center rounded-full border-2 border-transparent bg-muted transition-all focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2",
|
|
13
|
+
"peer-disabled:cursor-not-allowed peer-disabled:opacity-50"
|
|
14
|
+
],
|
|
15
|
+
thumb: "pointer-events-none block size-4 rounded-full bg-background shadow-lg ring-0 transition-transform duration-200 translate-x-0",
|
|
16
|
+
label: "text-sm text-foreground leading-none"
|
|
17
|
+
},
|
|
18
|
+
variants: {
|
|
19
|
+
color: Object.fromEntries(colors.map((color) => [
|
|
20
|
+
color,
|
|
21
|
+
{
|
|
22
|
+
track: `peer-checked:bg-${color}-500 focus-within:ring-${color}-500/50`
|
|
23
|
+
}
|
|
24
|
+
])),
|
|
25
|
+
size: {
|
|
26
|
+
sm: { track: "h-4 w-7", thumb: "size-3", label: "text-xs" },
|
|
27
|
+
md: { track: "h-5 w-9", thumb: "size-4", label: "text-sm" },
|
|
28
|
+
lg: { track: "h-6 w-11", thumb: "size-5", label: "text-base" }
|
|
29
|
+
},
|
|
30
|
+
checked: {
|
|
31
|
+
true: { thumb: "translate-x-full" },
|
|
32
|
+
false: { thumb: "translate-x-0" }
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
compoundVariants: [
|
|
36
|
+
{
|
|
37
|
+
size: "sm",
|
|
38
|
+
checked: true,
|
|
39
|
+
classNames: { thumb: "translate-x-3" }
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
size: "md",
|
|
43
|
+
checked: true,
|
|
44
|
+
classNames: { thumb: "translate-x-4" }
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
size: "lg",
|
|
48
|
+
checked: true,
|
|
49
|
+
classNames: { thumb: "translate-x-5" }
|
|
50
|
+
}
|
|
51
|
+
],
|
|
52
|
+
defaultVariants: {
|
|
53
|
+
color: "primary",
|
|
54
|
+
size: "md",
|
|
55
|
+
checked: false
|
|
56
|
+
}
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
export default createSwitchTheme()
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { defineTheme } from "../utils/defineTheme"
|
|
2
|
+
|
|
3
|
+
export const createTableTheme = () =>
|
|
4
|
+
defineTheme({
|
|
5
|
+
slots: ["root", "table", "thead", "tbody", "tfoot", "tr", "th", "td", "caption"],
|
|
6
|
+
base: {
|
|
7
|
+
root: "relative w-full overflow-auto rounded-lg border border-border shadow-sm",
|
|
8
|
+
table: "w-full text-sm text-left border-collapse",
|
|
9
|
+
thead: "bg-muted/50 border-b border-border",
|
|
10
|
+
tbody: "divide-y divide-border",
|
|
11
|
+
tfoot: "bg-muted/30 border-t border-border font-medium",
|
|
12
|
+
tr: "transition-colors hover:bg-muted/30",
|
|
13
|
+
th: "p-4 text-xs font-semibold uppercase text-muted-foreground",
|
|
14
|
+
td: "p-4 text-foreground align-middle",
|
|
15
|
+
caption: "p-4 text-xs text-muted-foreground text-center"
|
|
16
|
+
},
|
|
17
|
+
variants: {
|
|
18
|
+
striped: {
|
|
19
|
+
true: { tr: "odd:bg-background even:bg-muted/20 hover:bg-muted/35" }
|
|
20
|
+
},
|
|
21
|
+
bordered: {
|
|
22
|
+
true: {
|
|
23
|
+
root: "border-2 border-border",
|
|
24
|
+
tr: "border-b border-border",
|
|
25
|
+
th: "border-r border-border last:border-r-0",
|
|
26
|
+
td: "border-r border-border last:border-r-0"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
defaultVariants: {
|
|
31
|
+
striped: false,
|
|
32
|
+
bordered: false
|
|
33
|
+
}
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
export default createTableTheme()
|