@rimelight/ui 0.0.5 → 0.0.6
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 +17 -8
- package/src/components/BlogPost.astro +181 -0
- package/src/components/DynamicShowcase.astro +681 -0
- package/src/components/ExtendedCarousel.astro +107 -0
- package/src/components/Head.astro +150 -0
- package/src/components/LanguageSwitcher.astro +128 -0
- package/src/components/ProjectPost.astro +183 -0
- package/src/components/RLHead.astro +3 -0
- package/src/components/ThemeToggle.astro +30 -42
- package/src/components/astro/RLAButton.astro +32 -42
- package/src/components/astro/RLAHeader.astro +75 -0
- package/src/components/vue/RLVButton.vue +50 -37
- package/src/components/vue/RLVHeader.vue +78 -0
- package/src/composables/index.ts +1 -1
- package/src/composables/{useComponentUI.ts → useUi.ts} +2 -2
- package/src/config/index.ts +0 -2
- package/src/config/site.config.ts +1 -1
- package/src/integrations/ui.ts +6 -0
- package/src/themes/button.theme.ts +350 -34
- package/src/themes/header.theme.ts +33 -0
- package/src/themes/index.ts +3 -1
- package/src/utils/index.ts +3 -2
- package/i18n-data.json +0 -186
- package/src/components/accordion/Accordion.astro +0 -257
- package/src/components/accordion/AccordionContent.astro +0 -34
- package/src/components/accordion/AccordionItem.astro +0 -29
- package/src/components/accordion/AccordionTrigger.astro +0 -33
- package/src/components/alert/Alert.astro +0 -34
- package/src/components/alert/AlertDescription.astro +0 -15
- package/src/components/alert/AlertTitle.astro +0 -17
- package/src/components/alert-dialog/AlertDialog.astro +0 -275
- package/src/components/alert-dialog/AlertDialogAction.astro +0 -46
- package/src/components/alert-dialog/AlertDialogCancel.astro +0 -46
- package/src/components/alert-dialog/AlertDialogContent.astro +0 -52
- package/src/components/alert-dialog/AlertDialogDescription.astro +0 -18
- package/src/components/alert-dialog/AlertDialogFooter.astro +0 -16
- package/src/components/alert-dialog/AlertDialogHeader.astro +0 -14
- package/src/components/alert-dialog/AlertDialogTitle.astro +0 -20
- package/src/components/alert-dialog/AlertDialogTrigger.astro +0 -47
- package/src/components/aspect-ratio/AspectRatio.astro +0 -32
- package/src/components/avatar/Avatar.astro +0 -29
- package/src/components/avatar/AvatarFallback.astro +0 -18
- package/src/components/avatar/AvatarImage.astro +0 -66
- package/src/components/badge/Badge.astro +0 -57
- package/src/components/breadcrumb/Breadcrumb.astro +0 -12
- package/src/components/breadcrumb/BreadcrumbEllipsis.astro +0 -29
- package/src/components/breadcrumb/BreadcrumbItem.astro +0 -15
- package/src/components/breadcrumb/BreadcrumbLink.astro +0 -24
- package/src/components/breadcrumb/BreadcrumbList.astro +0 -17
- package/src/components/breadcrumb/BreadcrumbPage.astro +0 -22
- package/src/components/breadcrumb/BreadcrumbSeparator.astro +0 -24
- package/src/components/button/Button.astro +0 -58
- package/src/components/button-group/ButtonGroup.astro +0 -64
- package/src/components/button-group/ButtonGroupSeparator.astro +0 -20
- package/src/components/button-group/ButtonGroupText.astro +0 -19
- package/src/components/card/Card.astro +0 -36
- package/src/components/card/CardAction.astro +0 -16
- package/src/components/card/CardContent.astro +0 -16
- package/src/components/card/CardDescription.astro +0 -16
- package/src/components/card/CardFooter.astro +0 -16
- package/src/components/card/CardHeader.astro +0 -19
- package/src/components/card/CardTitle.astro +0 -16
- package/src/components/carousel/Carousel.astro +0 -55
- package/src/components/carousel/CarouselContent.astro +0 -26
- package/src/components/carousel/CarouselItem.astro +0 -26
- package/src/components/carousel/CarouselNext.astro +0 -39
- package/src/components/carousel/CarouselPrevious.astro +0 -41
- package/src/components/carousel/carousel-script.ts +0 -188
- package/src/components/carousel/index.ts +0 -1
- package/src/components/checkbox/Checkbox.astro +0 -133
- package/src/components/collapsible/Collapsible.astro +0 -161
- package/src/components/collapsible/CollapsibleContent.astro +0 -22
- package/src/components/collapsible/CollapsibleTrigger.astro +0 -44
- package/src/components/dialog/Dialog.astro +0 -389
- package/src/components/dialog/DialogClose.astro +0 -35
- package/src/components/dialog/DialogContent.astro +0 -78
- package/src/components/dialog/DialogDescription.astro +0 -14
- package/src/components/dialog/DialogFooter.astro +0 -14
- package/src/components/dialog/DialogHeader.astro +0 -14
- package/src/components/dialog/DialogTitle.astro +0 -18
- package/src/components/dialog/DialogTrigger.astro +0 -47
- package/src/components/dropdown/Dropdown.astro +0 -604
- package/src/components/dropdown/DropdownContent.astro +0 -118
- package/src/components/dropdown/DropdownItem.astro +0 -48
- package/src/components/dropdown/DropdownLabel.astro +0 -29
- package/src/components/dropdown/DropdownSeparator.astro +0 -21
- package/src/components/dropdown/DropdownShortcut.astro +0 -17
- package/src/components/dropdown/DropdownSub.astro +0 -15
- package/src/components/dropdown/DropdownSubContent.astro +0 -39
- package/src/components/dropdown/DropdownSubTrigger.astro +0 -34
- package/src/components/dropdown/DropdownTrigger.astro +0 -52
- package/src/components/dropzone/Dropzone.astro +0 -236
- package/src/components/dropzone/DropzoneFilesList.astro +0 -26
- package/src/components/dropzone/DropzoneLoadingIndicator.astro +0 -10
- package/src/components/dropzone/DropzoneUploadIndicator.astro +0 -10
- package/src/components/embeds/YoutubeEmbed.astro +0 -94
- package/src/components/hero/Hero.astro +0 -166
- package/src/components/icons/Flag.astro +0 -62
- package/src/components/image/ExtendedImage.astro +0 -46
- package/src/components/image/Image.astro +0 -25
- package/src/components/input/Input.astro +0 -27
- package/src/components/input-group/InputGroup.astro +0 -28
- package/src/components/input-group/InputGroupAddon.astro +0 -76
- package/src/components/input-group/InputGroupButton.astro +0 -36
- package/src/components/input-group/InputGroupInput.astro +0 -18
- package/src/components/input-group/InputGroupText.astro +0 -17
- package/src/components/input-group/InputGroupTextarea.astro +0 -22
- package/src/components/input-otp/InputOtp.astro +0 -352
- package/src/components/input-otp/InputOtpGroup.astro +0 -16
- package/src/components/input-otp/InputOtpSeparator.astro +0 -25
- package/src/components/input-otp/InputOtpSlot.astro +0 -50
- package/src/components/input-otp/InputOtpTypes.ts +0 -6
- package/src/components/item/Item.astro +0 -52
- package/src/components/item/ItemActions.astro +0 -16
- package/src/components/item/ItemContent.astro +0 -16
- package/src/components/item/ItemDescription.astro +0 -19
- package/src/components/item/ItemFooter.astro +0 -16
- package/src/components/item/ItemGroup.astro +0 -16
- package/src/components/item/ItemHeader.astro +0 -16
- package/src/components/item/ItemMedia.astro +0 -40
- package/src/components/item/ItemSeparator.astro +0 -23
- package/src/components/item/ItemTitle.astro +0 -16
- package/src/components/kbd/Kbd.astro +0 -21
- package/src/components/kbd/KbdGroup.astro +0 -16
- package/src/components/label/Label.astro +0 -24
- package/src/components/marquee/Marquee.astro +0 -73
- package/src/components/native-select/NativeSelect.astro +0 -68
- package/src/components/native-select/NativeSelectOptGroup.astro +0 -15
- package/src/components/native-select/NativeSelectOption.astro +0 -15
- package/src/components/pagination/Pagination.astro +0 -20
- package/src/components/pagination/PaginationContent.astro +0 -16
- package/src/components/pagination/PaginationEllipsis.astro +0 -37
- package/src/components/pagination/PaginationItem.astro +0 -16
- package/src/components/pagination/PaginationLink.astro +0 -27
- package/src/components/pagination/PaginationNext.astro +0 -33
- package/src/components/pagination/PaginationPrevious.astro +0 -33
- package/src/components/popover/Popover.astro +0 -717
- package/src/components/popover/PopoverContent.astro +0 -102
- package/src/components/popover/PopoverDescription.astro +0 -14
- package/src/components/popover/PopoverHeader.astro +0 -14
- package/src/components/popover/PopoverTitle.astro +0 -14
- package/src/components/popover/PopoverTrigger.astro +0 -51
- package/src/components/progress/Progress.astro +0 -154
- package/src/components/prose/Prose.astro +0 -619
- package/src/components/radio-group/RadioGroup.astro +0 -162
- package/src/components/radio-group/RadioGroupItem.astro +0 -133
- package/src/components/radio-group/RadioGroupTypes.ts +0 -6
- package/src/components/section/Section.astro +0 -167
- package/src/components/select/Select.astro +0 -752
- package/src/components/select/SelectContent.astro +0 -94
- package/src/components/select/SelectGroup.astro +0 -9
- package/src/components/select/SelectItem.astro +0 -51
- package/src/components/select/SelectLabel.astro +0 -14
- package/src/components/select/SelectSearch.astro +0 -49
- package/src/components/select/SelectSeparator.astro +0 -12
- package/src/components/select/SelectTrigger.astro +0 -56
- package/src/components/select/SelectTypes.ts +0 -13
- package/src/components/select/SelectValue.astro +0 -19
- package/src/components/separator/Separator.astro +0 -36
- package/src/components/sheet/Sheet.astro +0 -15
- package/src/components/sheet/SheetClose.astro +0 -15
- package/src/components/sheet/SheetContent.astro +0 -89
- package/src/components/sheet/SheetDescription.astro +0 -16
- package/src/components/sheet/SheetFooter.astro +0 -16
- package/src/components/sheet/SheetHeader.astro +0 -16
- package/src/components/sheet/SheetTitle.astro +0 -16
- package/src/components/sheet/SheetTrigger.astro +0 -15
- package/src/components/sidebar/Sidebar.astro +0 -231
- package/src/components/sidebar/SidebarContent.astro +0 -25
- package/src/components/sidebar/SidebarFooter.astro +0 -22
- package/src/components/sidebar/SidebarGroup.astro +0 -22
- package/src/components/sidebar/SidebarGroupContent.astro +0 -22
- package/src/components/sidebar/SidebarGroupLabel.astro +0 -53
- package/src/components/sidebar/SidebarHeader.astro +0 -22
- package/src/components/sidebar/SidebarInput.astro +0 -24
- package/src/components/sidebar/SidebarInset.astro +0 -22
- package/src/components/sidebar/SidebarMenu.astro +0 -22
- package/src/components/sidebar/SidebarMenuAction.astro +0 -63
- package/src/components/sidebar/SidebarMenuBadge.astro +0 -31
- package/src/components/sidebar/SidebarMenuButton.astro +0 -124
- package/src/components/sidebar/SidebarMenuItem.astro +0 -22
- package/src/components/sidebar/SidebarMenuSkeleton.astro +0 -43
- package/src/components/sidebar/SidebarMenuSub.astro +0 -25
- package/src/components/sidebar/SidebarMenuSubButton.astro +0 -52
- package/src/components/sidebar/SidebarMenuSubItem.astro +0 -17
- package/src/components/sidebar/SidebarProvider.astro +0 -215
- package/src/components/sidebar/SidebarRail.astro +0 -72
- package/src/components/sidebar/SidebarSeparator.astro +0 -25
- package/src/components/sidebar/SidebarTrigger.astro +0 -69
- package/src/components/skeleton/Skeleton.astro +0 -14
- package/src/components/slider/Slider.astro +0 -425
- package/src/components/spinner/Spinner.astro +0 -23
- package/src/components/switch/Switch.astro +0 -192
- package/src/components/switch/SwitchTypes.ts +0 -6
- package/src/components/table/Table.astro +0 -20
- package/src/components/table/TableBody.astro +0 -18
- package/src/components/table/TableCaption.astro +0 -18
- package/src/components/table/TableCell.astro +0 -18
- package/src/components/table/TableFoot.astro +0 -18
- package/src/components/table/TableHead.astro +0 -18
- package/src/components/table/TableHeader.astro +0 -18
- package/src/components/table/TableRow.astro +0 -17
- package/src/components/tabs/Tabs.astro +0 -270
- package/src/components/tabs/TabsContent.astro +0 -28
- package/src/components/tabs/TabsList.astro +0 -23
- package/src/components/tabs/TabsTrigger.astro +0 -34
- package/src/components/textarea/Textarea.astro +0 -31
- package/src/components/toast/ToastDescription.astro +0 -22
- package/src/components/toast/ToastItem.astro +0 -56
- package/src/components/toast/ToastTemplate.astro +0 -27
- package/src/components/toast/ToastTitle.astro +0 -59
- package/src/components/toast/Toaster.astro +0 -981
- package/src/components/toast/index.ts +0 -1
- package/src/components/toast/toast-manager.ts +0 -234
- package/src/components/toggle/Toggle.astro +0 -174
- package/src/components/toggle/ToggleTypes.ts +0 -14
- package/src/components/tooltip/Tooltip.astro +0 -422
- package/src/components/tooltip/TooltipContent.astro +0 -83
- package/src/components/tooltip/TooltipTrigger.astro +0 -13
- package/src/components/video/Video.astro +0 -121
- package/src/config/cookies.ts +0 -5
- package/src/config/links.ts +0 -4
- package/src/domain/cms/index.ts +0 -1
- package/src/domain/cms/types.ts +0 -20
- package/src/domain/i18n/constants.ts +0 -21
- package/src/domain/i18n/cookie-storage.ts +0 -13
- package/src/domain/i18n/country-to-locale-map.ts +0 -67
- package/src/domain/i18n/fallbacks.generated.ts +0 -230
- package/src/domain/i18n/fetcher.ts +0 -278
- package/src/domain/i18n/flags.ts +0 -16
- package/src/domain/i18n/format.ts +0 -90
- package/src/domain/i18n/index.ts +0 -10
- package/src/domain/i18n/middleware/i18n.ts +0 -161
- package/src/domain/i18n/resolve-locale.ts +0 -55
- package/src/domain/i18n/runtime-constants.ts +0 -14
- package/src/domain/i18n/schema.ts +0 -29
- package/src/domain/index.ts +0 -4
- package/src/domain/seo/constants.ts +0 -6
- package/src/domain/seo/index.ts +0 -3
- package/src/domain/seo/services/index.ts +0 -3
- package/src/domain/seo/services/llms.ts +0 -56
- package/src/domain/seo/services/robots.ts +0 -12
- package/src/domain/seo/services/sitemap.ts +0 -56
- package/src/domain/seo/utils.ts +0 -36
- package/src/domain/theme/constants.ts +0 -6
- package/src/domain/theme/index.ts +0 -2
- package/src/domain/theme/schema.ts +0 -10
- package/src/i18n.generated.d.ts +0 -202
- package/src/lib/component-preview.ts +0 -73
- package/src/lib/index.ts +0 -6
- package/src/lib/remark/remark-modified-time.ts +0 -13
- package/src/lib/showcase-preview-elements.ts +0 -408
- package/src/lib/showcase-renderer.ts +0 -218
- package/src/lib/showcase-utils.ts +0 -189
- package/src/lib/turnstile.ts +0 -35
- package/src/lib/utils/starwind/positioning.ts +0 -318
- package/src/locales/de/blog.json +0 -9
- package/src/locales/de/common.json +0 -19
- package/src/locales/de/errors.json +0 -6
- package/src/locales/de/home.json +0 -20
- package/src/locales/de/messages.json +0 -8
- package/src/locales/de/nav.json +0 -13
- package/src/locales/de/projects.json +0 -9
- package/src/locales/de/services.json +0 -43
- package/src/locales/en/blog.json +0 -9
- package/src/locales/en/chat.json +0 -29
- package/src/locales/en/common.json +0 -19
- package/src/locales/en/cookie_notice.json +0 -11
- package/src/locales/en/editor.json +0 -24
- package/src/locales/en/errors.json +0 -6
- package/src/locales/en/home.json +0 -20
- package/src/locales/en/messages.json +0 -8
- package/src/locales/en/nav.json +0 -13
- package/src/locales/en/projects.json +0 -9
- package/src/locales/en/services.json +0 -43
- package/src/locales/es/blog.json +0 -9
- package/src/locales/es/common.json +0 -19
- package/src/locales/es/errors.json +0 -6
- package/src/locales/es/home.json +0 -20
- package/src/locales/es/messages.json +0 -8
- package/src/locales/es/nav.json +0 -13
- package/src/locales/es/projects.json +0 -9
- package/src/locales/es/services.json +0 -43
- package/src/locales/ja/blog.json +0 -9
- package/src/locales/ja/common.json +0 -19
- package/src/locales/ja/errors.json +0 -6
- package/src/locales/ja/home.json +0 -20
- package/src/locales/ja/messages.json +0 -8
- package/src/locales/ja/nav.json +0 -13
- package/src/locales/ja/projects.json +0 -9
- package/src/locales/ja/services.json +0 -43
- package/src/locales/pt/blog.json +0 -9
- package/src/locales/pt/chat.json +0 -29
- package/src/locales/pt/common.json +0 -19
- package/src/locales/pt/cookie_notice.json +0 -11
- package/src/locales/pt/editor.json +0 -24
- package/src/locales/pt/errors.json +0 -6
- package/src/locales/pt/home.json +0 -20
- package/src/locales/pt/messages.json +0 -8
- package/src/locales/pt/nav.json +0 -13
- package/src/locales/pt/projects.json +0 -9
- package/src/locales/pt/services.json +0 -43
- package/src/utils/server/cookies.ts +0 -98
- package/src/utils/server/index.ts +0 -1
- package/src/utils/shared/index.ts +0 -3
- /package/src/utils/{shared/deep-merge.ts → deep-merge.ts} +0 -0
- /package/src/utils/{shared/embed.ts → embed.ts} +0 -0
- /package/src/utils/{shared/parse-boolean.ts → parse-boolean.ts} +0 -0
|
@@ -1,84 +1,74 @@
|
|
|
1
1
|
---
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import { getUIConfig } from "virtual:rimelight-ui";
|
|
2
|
+
import { scv, cx } from "css-variants"
|
|
3
|
+
import { twMerge } from "tailwind-merge"
|
|
4
|
+
import defu from "defu"
|
|
5
|
+
import { buttonTheme } from "@/themes/button.theme.ts"
|
|
6
|
+
import { getUIConfig } from "virtual:rimelight-ui"
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
const button = scv({
|
|
9
|
+
slots: [...buttonTheme.slots],
|
|
10
|
+
base: buttonTheme.base,
|
|
11
|
+
variants: buttonTheme.variants,
|
|
12
|
+
compoundVariants: [...buttonTheme.compoundVariants],
|
|
13
|
+
defaultVariants: buttonTheme.defaultVariants,
|
|
12
14
|
classNameResolver: (...args) => twMerge(cx(...args)),
|
|
13
15
|
});
|
|
14
16
|
|
|
15
|
-
/**
|
|
16
|
-
* UI prop interface for overriding the base class.
|
|
17
|
-
* For multi-slot components (scv), this would have keys per slot.
|
|
18
|
-
*/
|
|
19
|
-
export interface RLAButtonUI {
|
|
20
|
-
base?: string;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Button props — uses indexed access types on the theme config
|
|
25
|
-
* (same pattern as Nuxt UI's Button['variants']['color'])
|
|
26
|
-
*/
|
|
27
17
|
export interface RLAButtonProps {
|
|
28
18
|
/**
|
|
29
19
|
* Button variant style.
|
|
30
|
-
* @default "
|
|
20
|
+
* @default "solid"
|
|
31
21
|
*/
|
|
32
22
|
variant?: keyof typeof buttonTheme.variants.variant;
|
|
23
|
+
/**
|
|
24
|
+
* Button color.
|
|
25
|
+
* @default "primary"
|
|
26
|
+
*/
|
|
27
|
+
color?: keyof typeof buttonTheme.variants.color;
|
|
33
28
|
/**
|
|
34
29
|
* Button size.
|
|
35
30
|
* @default "md"
|
|
36
31
|
*/
|
|
37
32
|
size?: keyof typeof buttonTheme.variants.size;
|
|
38
33
|
/**
|
|
39
|
-
*
|
|
40
|
-
* Higher priority than integration-level config.
|
|
34
|
+
* When provided, renders as <a> instead of <button>.
|
|
41
35
|
*/
|
|
42
|
-
|
|
36
|
+
href?: string;
|
|
43
37
|
/**
|
|
44
|
-
*
|
|
38
|
+
* UI overrides for individual slots, derived from the button theme.
|
|
45
39
|
*/
|
|
46
|
-
|
|
40
|
+
ui?: Partial<Record<keyof typeof buttonTheme.base, string>>;
|
|
47
41
|
/**
|
|
48
|
-
*
|
|
42
|
+
* External class — applied to the root element.
|
|
49
43
|
*/
|
|
50
|
-
|
|
44
|
+
class?: string;
|
|
51
45
|
/**
|
|
52
46
|
* Standard HTML attributes for <button>
|
|
53
47
|
*/
|
|
54
48
|
[key: string]: unknown;
|
|
55
49
|
}
|
|
56
50
|
|
|
57
|
-
type Props = RLAButtonProps;
|
|
58
|
-
|
|
59
51
|
const {
|
|
60
|
-
variant,
|
|
61
|
-
|
|
52
|
+
variant = "solid",
|
|
53
|
+
color = "primary",
|
|
54
|
+
size = "md",
|
|
62
55
|
class: className,
|
|
63
56
|
ui: uiProp,
|
|
64
57
|
href,
|
|
65
58
|
...rest
|
|
66
|
-
} = Astro.props
|
|
59
|
+
} = Astro.props as RLAButtonProps
|
|
67
60
|
|
|
68
|
-
// Get global config from the virtual module (populated by the Astro integration)
|
|
69
61
|
const globalConfig = getUIConfig();
|
|
70
62
|
|
|
71
|
-
|
|
72
|
-
const mergedUI = defu<Record<string, unknown>[], [Record<string, unknown>]>(
|
|
63
|
+
const mergedUI = defu(
|
|
73
64
|
uiProp ?? {},
|
|
74
65
|
(globalConfig.button as Record<string, unknown>) ?? {},
|
|
75
|
-
)
|
|
66
|
+
) as Record<keyof typeof buttonTheme.base, string | undefined>;
|
|
76
67
|
|
|
77
|
-
|
|
78
|
-
const classes = button({
|
|
68
|
+
const { root } = button({
|
|
79
69
|
variant,
|
|
70
|
+
color,
|
|
80
71
|
size,
|
|
81
|
-
className: mergedUI.base as string | undefined,
|
|
82
72
|
});
|
|
83
73
|
|
|
84
74
|
// Determine whether to render <a> or <button>
|
|
@@ -86,7 +76,7 @@ const Tag = href ? "a" : "button";
|
|
|
86
76
|
---
|
|
87
77
|
|
|
88
78
|
<Tag
|
|
89
|
-
class
|
|
79
|
+
class={twMerge(root, mergedUI.root, className)}
|
|
90
80
|
data-slot="rla-button"
|
|
91
81
|
{...(Tag === "a" ? { href } : {})}
|
|
92
82
|
{...rest}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { scv, cx } from "css-variants";
|
|
3
|
+
import { twMerge } from "tailwind-merge";
|
|
4
|
+
import defu from "defu";
|
|
5
|
+
import { headerTheme } from "@/themes/header.theme.ts";
|
|
6
|
+
import { getUIConfig } from "virtual:rimelight-ui";
|
|
7
|
+
|
|
8
|
+
const header = scv({
|
|
9
|
+
slots: [...headerTheme.slots],
|
|
10
|
+
base: headerTheme.base,
|
|
11
|
+
variants: headerTheme.variants,
|
|
12
|
+
defaultVariants: headerTheme.defaultVariants,
|
|
13
|
+
classNameResolver: (...args) => twMerge(cx(...args)),
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
export interface RLAHeaderProps {
|
|
17
|
+
/**
|
|
18
|
+
* Whether to contain the header content in a max-width container.
|
|
19
|
+
* @default true
|
|
20
|
+
*/
|
|
21
|
+
contain?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Whether the header should be sticky at the top.
|
|
24
|
+
* @default true
|
|
25
|
+
*/
|
|
26
|
+
sticky?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* UI overrides for individual slots, derived from the header theme.
|
|
29
|
+
*/
|
|
30
|
+
ui?: Partial<Record<keyof typeof headerTheme.base, string>>;
|
|
31
|
+
/**
|
|
32
|
+
* External class — applied to the root element.
|
|
33
|
+
*/
|
|
34
|
+
class?: string;
|
|
35
|
+
/**
|
|
36
|
+
* Standard HTML attributes for <header>
|
|
37
|
+
*/
|
|
38
|
+
[key: string]: unknown;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const {
|
|
42
|
+
contain = true,
|
|
43
|
+
sticky = true,
|
|
44
|
+
class: className,
|
|
45
|
+
ui: uiProp,
|
|
46
|
+
...rest
|
|
47
|
+
} = Astro.props as RLAHeaderProps
|
|
48
|
+
|
|
49
|
+
const globalConfig = getUIConfig();
|
|
50
|
+
|
|
51
|
+
const mergedUI = defu(
|
|
52
|
+
uiProp ?? {},
|
|
53
|
+
(globalConfig.header as Record<string, unknown>) ?? {},
|
|
54
|
+
) as Record<keyof typeof headerTheme.base, string | undefined>;
|
|
55
|
+
|
|
56
|
+
const { root, container, left, center, right } = header({ contain, sticky });
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
<header
|
|
60
|
+
class:list={[twMerge(root, mergedUI.root, className)]}
|
|
61
|
+
data-slot="rla-header"
|
|
62
|
+
{...rest}
|
|
63
|
+
>
|
|
64
|
+
<div class:list={[twMerge(container, mergedUI.container)]}>
|
|
65
|
+
<div class:list={[twMerge(left, mergedUI.left)]} data-slot="header-left">
|
|
66
|
+
<slot name="left" />
|
|
67
|
+
</div>
|
|
68
|
+
<div class:list={[twMerge(center, mergedUI.center)]} data-slot="header-center">
|
|
69
|
+
<slot name="center" />
|
|
70
|
+
</div>
|
|
71
|
+
<div class:list={[twMerge(right, mergedUI.right)]} data-slot="header-right">
|
|
72
|
+
<slot name="right" />
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
</header>
|
|
@@ -1,26 +1,32 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import {
|
|
3
|
-
import { cv, cx } from "css-variants"
|
|
2
|
+
import { scv, cx } from "css-variants"
|
|
4
3
|
import { twMerge } from "tailwind-merge"
|
|
5
|
-
import
|
|
4
|
+
import defu from "defu"
|
|
5
|
+
import { buttonTheme } from "@/themes/button.theme.ts"
|
|
6
|
+
import { getUIConfig } from "virtual:rimelight-ui"
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
const button = scv({
|
|
9
|
+
slots: [...buttonTheme.slots],
|
|
10
|
+
base: buttonTheme.base,
|
|
11
|
+
variants: buttonTheme.variants,
|
|
12
|
+
compoundVariants: [...buttonTheme.compoundVariants],
|
|
13
|
+
defaultVariants: buttonTheme.defaultVariants,
|
|
10
14
|
classNameResolver: (...args) => twMerge(cx(...args))
|
|
11
15
|
})
|
|
12
16
|
|
|
13
|
-
/**
|
|
14
|
-
* Button props — uses indexed access types on the theme config (same pattern as Nuxt UI's
|
|
15
|
-
* Button['variants']['color'])
|
|
16
|
-
*/
|
|
17
17
|
export interface RLVButtonProps {
|
|
18
18
|
/**
|
|
19
|
-
* Button variant
|
|
19
|
+
* Button variant.
|
|
20
20
|
*
|
|
21
|
-
* @default "
|
|
21
|
+
* @default "solid"
|
|
22
22
|
*/
|
|
23
23
|
variant?: keyof typeof buttonTheme.variants.variant
|
|
24
|
+
/**
|
|
25
|
+
* Button color.
|
|
26
|
+
*
|
|
27
|
+
* @default "primary"
|
|
28
|
+
*/
|
|
29
|
+
color?: keyof typeof buttonTheme.variants.color
|
|
24
30
|
/**
|
|
25
31
|
* Button size.
|
|
26
32
|
*
|
|
@@ -28,49 +34,56 @@ export interface RLVButtonProps {
|
|
|
28
34
|
*/
|
|
29
35
|
size?: keyof typeof buttonTheme.variants.size
|
|
30
36
|
/**
|
|
31
|
-
*
|
|
32
|
-
|
|
37
|
+
* When provided, renders as <a> instead of <button>.
|
|
38
|
+
*/
|
|
39
|
+
href?: string
|
|
40
|
+
/**
|
|
41
|
+
* UI overrides for individual slots, derived from the button theme.
|
|
33
42
|
*/
|
|
34
|
-
ui?:
|
|
43
|
+
ui?: Partial<Record<keyof typeof buttonTheme.base, string>>
|
|
35
44
|
/**
|
|
36
|
-
* External class — applied
|
|
45
|
+
* External class — applied to the root element.
|
|
37
46
|
*/
|
|
38
47
|
class?: string
|
|
39
48
|
/**
|
|
40
|
-
*
|
|
49
|
+
* Standard HTML attributes for <button>
|
|
41
50
|
*/
|
|
42
|
-
|
|
51
|
+
[key: string]: unknown
|
|
43
52
|
}
|
|
44
53
|
|
|
45
|
-
const
|
|
46
|
-
variant
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
54
|
+
const {
|
|
55
|
+
variant = "solid",
|
|
56
|
+
color = "primary",
|
|
57
|
+
size = "md",
|
|
58
|
+
class: className,
|
|
59
|
+
ui: uiProp,
|
|
60
|
+
href
|
|
61
|
+
} = defineProps<RLVButtonProps>()
|
|
62
|
+
|
|
63
|
+
const globalConfig = getUIConfig()
|
|
52
64
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
65
|
+
const mergedUI = defu(
|
|
66
|
+
uiProp ?? {},
|
|
67
|
+
(globalConfig.button as Record<string, unknown>) ?? {}
|
|
68
|
+
) as Record<keyof typeof buttonTheme.base, string | undefined>
|
|
69
|
+
|
|
70
|
+
const { root } = button({
|
|
71
|
+
variant,
|
|
72
|
+
color,
|
|
73
|
+
size
|
|
61
74
|
})
|
|
62
75
|
|
|
63
76
|
// Determine whether to render <a> or <button>
|
|
64
|
-
const
|
|
77
|
+
const Tag = href ? "a" : "button"
|
|
65
78
|
</script>
|
|
66
79
|
|
|
67
80
|
<template>
|
|
68
81
|
<component
|
|
69
|
-
|
|
82
|
+
v-bind="$attrs"
|
|
83
|
+
:is="Tag"
|
|
70
84
|
:href="href"
|
|
71
|
-
:class="
|
|
85
|
+
:class="twMerge(root, mergedUI.root, className)"
|
|
72
86
|
data-slot="rlv-button"
|
|
73
|
-
v-bind="$attrs"
|
|
74
87
|
>
|
|
75
88
|
<slot />
|
|
76
89
|
</component>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed } from "vue"
|
|
3
|
+
import { scv, cx } from "css-variants"
|
|
4
|
+
import { twMerge } from "tailwind-merge"
|
|
5
|
+
import { useUi } from "../../composables"
|
|
6
|
+
import { headerTheme } from "@/themes/header.theme.ts"
|
|
7
|
+
|
|
8
|
+
const header = scv({
|
|
9
|
+
slots: [...headerTheme.slots],
|
|
10
|
+
base: headerTheme.base,
|
|
11
|
+
variants: headerTheme.variants,
|
|
12
|
+
defaultVariants: headerTheme.defaultVariants,
|
|
13
|
+
classNameResolver: (...args) => twMerge(cx(...args))
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
export interface RLVHeaderProps {
|
|
17
|
+
/**
|
|
18
|
+
* Whether to contain the header content in a max-width container.
|
|
19
|
+
*
|
|
20
|
+
* @default true
|
|
21
|
+
*/
|
|
22
|
+
contain?: boolean
|
|
23
|
+
/**
|
|
24
|
+
* Whether the header should be sticky at the top.
|
|
25
|
+
*
|
|
26
|
+
* @default true
|
|
27
|
+
*/
|
|
28
|
+
sticky?: boolean
|
|
29
|
+
/**
|
|
30
|
+
* UI overrides for individual slots, derived from the header theme.
|
|
31
|
+
*/
|
|
32
|
+
ui?: Partial<Record<keyof typeof headerTheme.base, string>>
|
|
33
|
+
/**
|
|
34
|
+
* External class — applied to the root element.
|
|
35
|
+
*/
|
|
36
|
+
class?: string
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const {
|
|
40
|
+
contain = true,
|
|
41
|
+
sticky = true,
|
|
42
|
+
class: className,
|
|
43
|
+
ui: uiProp
|
|
44
|
+
} = defineProps<RLVHeaderProps>()
|
|
45
|
+
|
|
46
|
+
const mergedUI = useUi("header", uiProp as Record<string, unknown> | undefined)
|
|
47
|
+
|
|
48
|
+
const resolvedClasses = computed(() => {
|
|
49
|
+
const classes = header({
|
|
50
|
+
contain,
|
|
51
|
+
sticky
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
return {
|
|
55
|
+
root: twMerge(classes.root, mergedUI.value.root as string | undefined),
|
|
56
|
+
container: twMerge(classes.container, mergedUI.value.container as string | undefined),
|
|
57
|
+
left: twMerge(classes.left, mergedUI.value.left as string | undefined),
|
|
58
|
+
center: twMerge(classes.center, mergedUI.value.center as string | undefined),
|
|
59
|
+
right: twMerge(classes.right, mergedUI.value.right as string | undefined)
|
|
60
|
+
}
|
|
61
|
+
})
|
|
62
|
+
</script>
|
|
63
|
+
|
|
64
|
+
<template>
|
|
65
|
+
<header :class="[resolvedClasses.root, className]" data-slot="rlv-header" v-bind="$attrs">
|
|
66
|
+
<div :class="resolvedClasses.container">
|
|
67
|
+
<div :class="resolvedClasses.left" data-slot="header-left">
|
|
68
|
+
<slot name="left" />
|
|
69
|
+
</div>
|
|
70
|
+
<div :class="resolvedClasses.center" data-slot="header-center">
|
|
71
|
+
<slot name="center" />
|
|
72
|
+
</div>
|
|
73
|
+
<div :class="resolvedClasses.right" data-slot="header-right">
|
|
74
|
+
<slot name="right" />
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
</header>
|
|
78
|
+
</template>
|
package/src/composables/index.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { useUi } from "./useUi"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { computed, type ComputedRef } from "vue"
|
|
2
2
|
import defu from "defu"
|
|
3
3
|
import { getUIConfig } from "virtual:rimelight-ui"
|
|
4
|
-
import type { DefaultUIConfig } from "
|
|
4
|
+
import type { DefaultUIConfig } from "@/themes"
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Reactive UI config merge composable for Vue components.
|
|
@@ -13,7 +13,7 @@ import type { DefaultUIConfig } from "../themes"
|
|
|
13
13
|
* @param uiProp - The local `ui` prop from defineProps
|
|
14
14
|
* @returns ComputedRef of merged UI overrides
|
|
15
15
|
*/
|
|
16
|
-
export function
|
|
16
|
+
export function useUi<T extends keyof DefaultUIConfig>(
|
|
17
17
|
componentName: T,
|
|
18
18
|
uiProp: Record<string, unknown> | undefined
|
|
19
19
|
): ComputedRef<Record<string, unknown>> {
|
package/src/config/index.ts
CHANGED
package/src/integrations/ui.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AstroIntegration } from "astro"
|
|
2
2
|
import defu from "defu"
|
|
3
|
+
import Icons from "unplugin-icons/vite"
|
|
3
4
|
import { defaultUIConfig } from "../themes"
|
|
4
5
|
|
|
5
6
|
/**
|
|
@@ -8,6 +9,7 @@ import { defaultUIConfig } from "../themes"
|
|
|
8
9
|
*/
|
|
9
10
|
export type UIConfigOverrides = {
|
|
10
11
|
button?: Partial<(typeof defaultUIConfig)["button"]>
|
|
12
|
+
header?: Partial<(typeof defaultUIConfig)["header"]>
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
export interface UIOptions {
|
|
@@ -56,6 +58,10 @@ export function ui(options: UIOptions = {}): AstroIntegration {
|
|
|
56
58
|
updateConfig({
|
|
57
59
|
vite: {
|
|
58
60
|
plugins: [
|
|
61
|
+
Icons({
|
|
62
|
+
compiler: "astro",
|
|
63
|
+
autoInstall: true
|
|
64
|
+
}),
|
|
59
65
|
{
|
|
60
66
|
name: "vite-plugin-rimelight-ui-config",
|
|
61
67
|
enforce: "pre",
|