@rimelight/ui 0.0.41 → 0.0.43
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/README.md +4 -14
- package/package.json +20 -30
- package/src/components/3d-hover/3d-hover.theme.ts +9 -12
- package/src/components/3d-hover/RLA3dHover.astro +9 -20
- package/src/components/accordion/RLAAccordion.astro +5 -14
- package/src/components/accordion/accordion.theme.ts +34 -37
- package/src/components/app/RLAApp.astro +9 -20
- package/src/components/app/app.theme.ts +9 -12
- package/src/components/aspect-ratio/RLAAspectRatio.astro +19 -27
- package/src/components/aspect-ratio/aspect-ratio.theme.ts +8 -12
- package/src/components/audio/RLAAudio.astro +3 -14
- package/src/components/audio/audio.theme.ts +9 -12
- package/src/components/avatar/RLAAvatar.astro +9 -29
- package/src/components/avatar/avatar.theme.ts +66 -77
- package/src/components/avatar/avatar.ts +6 -11
- package/src/components/avatar-group/RLAAvatarGroup.astro +188 -23
- package/src/components/avatar-group/avatar-group.theme.ts +12 -11
- package/src/components/avatar-group/avatar-group.ts +41 -0
- package/src/components/badge/RLABadge.astro +23 -36
- package/src/components/badge/RLSBadge.tsx +41 -0
- package/src/components/badge/RLVBadge.vue +8 -16
- package/src/components/badge/badge.theme.ts +118 -160
- package/src/components/badge/badge.ts +2 -1
- package/src/components/banner/RLABanner.astro +88 -103
- package/src/components/banner/banner.theme.ts +40 -43
- package/src/components/breadcrumb/RLABreadcrumb.astro +241 -62
- package/src/components/breadcrumb/breadcrumb.theme.ts +12 -16
- package/src/components/breadcrumb/breadcrumb.ts +19 -0
- package/src/components/browser-mockup/RLABrowserMockup.astro +9 -20
- package/src/components/browser-mockup/browser-mockup.theme.ts +9 -12
- package/src/components/button/RLAButton.astro +10 -30
- package/src/components/button/RLSButton.tsx +169 -0
- package/src/components/button/RLVButton.vue +13 -26
- package/src/components/button/button.theme.ts +163 -220
- package/src/components/button/button.ts +1 -1
- package/src/components/calendar/RLACalendar.astro +9 -20
- package/src/components/calendar/calendar.theme.ts +9 -12
- package/src/components/callout/RLACallout.astro +5 -14
- package/src/components/callout/callout.theme.ts +59 -101
- package/src/components/callout/callout.ts +1 -1
- package/src/components/card/RLACard.astro +71 -77
- package/src/components/card/RLSCard.tsx +116 -0
- package/src/components/card/RLVCard.vue +6 -14
- package/src/components/card/card.theme.ts +41 -44
- package/src/components/carousel/RLACarousel.astro +43 -11
- package/src/components/carousel/carousel.theme.ts +28 -32
- package/src/components/chart/RLAChart.astro +5 -11
- package/src/components/chart/chart.theme.ts +18 -21
- package/src/components/chart/chart.ts +1 -1
- package/src/components/chat/RLAChat.astro +9 -20
- package/src/components/chat/chat.theme.ts +9 -12
- package/src/components/chat-message/RLAChatMessage.astro +9 -20
- package/src/components/chat-message/chat-message.theme.ts +9 -12
- package/src/components/chat-messages/RLAChatMessages.astro +9 -20
- package/src/components/chat-messages/chat-messages.theme.ts +9 -12
- package/src/components/chat-palette/RLAChatPalette.astro +9 -20
- package/src/components/chat-palette/chat-palette.theme.ts +9 -12
- package/src/components/chat-prompt/RLAChatPrompt.astro +9 -20
- package/src/components/chat-prompt/chat-prompt.theme.ts +9 -12
- package/src/components/chat-prompt-submit/RLAChatPromptSubmit.astro +9 -20
- package/src/components/chat-prompt-submit/chat-prompt-submit.theme.ts +9 -12
- package/src/components/chat-reasoning/RLAChatReasoning.astro +9 -20
- package/src/components/chat-reasoning/chat-reasoning.theme.ts +9 -12
- package/src/components/chat-shimmer/RLAChatShimmer.astro +9 -20
- package/src/components/chat-shimmer/chat-shimmer.theme.ts +9 -12
- package/src/components/chat-tool/RLAChatTool.astro +9 -20
- package/src/components/chat-tool/chat-tool.theme.ts +9 -12
- package/src/components/checkbox/RLACheckbox.astro +2 -17
- package/src/components/checkbox/RLSCheckbox.tsx +65 -0
- package/src/components/checkbox/checkbox.theme.ts +34 -45
- package/src/components/checkbox/checkbox.ts +1 -1
- package/src/components/chip/RLAChip.astro +32 -56
- package/src/components/chip/chip.theme.ts +66 -72
- package/src/components/chip/chip.ts +3 -1
- package/src/components/collapsible/RLACollapsible.astro +2 -12
- package/src/components/collapsible/collapsible.theme.ts +17 -20
- package/src/components/collapsible/collapsible.ts +1 -1
- package/src/components/color-area/RLAColorArea.astro +2 -13
- package/src/components/color-area/color-area.theme.ts +19 -31
- package/src/components/color-area/color-area.ts +1 -1
- package/src/components/color-field/RLAColorField.astro +3 -14
- package/src/components/color-field/color-field.theme.ts +18 -30
- package/src/components/color-field/color-field.ts +1 -1
- package/src/components/color-picker/RLAColorPicker.astro +9 -20
- package/src/components/color-picker/color-picker.theme.ts +9 -12
- package/src/components/color-slider/RLAColorSlider.astro +2 -13
- package/src/components/color-slider/color-slider.theme.ts +20 -32
- package/src/components/color-slider/color-slider.ts +1 -1
- package/src/components/command-palette/RLACommandPalette.astro +9 -20
- package/src/components/command-palette/command-palette.theme.ts +9 -12
- package/src/components/compare/RLACompare.astro +9 -20
- package/src/components/compare/compare.theme.ts +9 -12
- package/src/components/confirm/RLAConfirm.astro +114 -122
- package/src/components/confirm/confirm.theme.ts +40 -44
- package/src/components/confirm/confirm.ts +1 -0
- package/src/components/container/RLAContainer.astro +9 -20
- package/src/components/container/container.theme.ts +9 -12
- package/src/components/context-menu/RLAContextMenu.astro +9 -20
- package/src/components/context-menu/context-menu.theme.ts +9 -12
- package/src/components/dashboard-group/RLADashboardGroup.astro +17 -21
- package/src/components/dashboard-group/dashboard-group.theme.ts +9 -12
- package/src/components/dashboard-group/dashboard-group.ts +1 -6
- package/src/components/dashboard-navbar/RLADashboardNavbar.astro +61 -21
- package/src/components/dashboard-navbar/dashboard-navbar.theme.ts +26 -12
- package/src/components/dashboard-navbar/dashboard-navbar.ts +5 -6
- package/src/components/dashboard-panel/RLADashboardPanel.astro +35 -21
- package/src/components/dashboard-panel/dashboard-panel.theme.ts +22 -12
- package/src/components/dashboard-panel/dashboard-panel.ts +4 -6
- package/src/components/dashboard-resize-handle/RLADashboardResizeHandle.astro +21 -21
- package/src/components/dashboard-resize-handle/dashboard-resize-handle.theme.ts +9 -12
- package/src/components/dashboard-resize-handle/dashboard-resize-handle.ts +1 -6
- package/src/components/dashboard-search/RLADashboardSearch.astro +100 -21
- package/src/components/dashboard-search/dashboard-search.theme.ts +24 -11
- package/src/components/dashboard-search/dashboard-search.ts +2 -6
- package/src/components/dashboard-search-button/RLADashboardSearchButton.astro +45 -21
- package/src/components/dashboard-search-button/dashboard-search-button.theme.ts +20 -12
- package/src/components/dashboard-search-button/dashboard-search-button.ts +4 -6
- package/src/components/dashboard-sidebar/RLADashboardSidebar.astro +119 -21
- package/src/components/dashboard-sidebar/dashboard-sidebar.theme.ts +40 -11
- package/src/components/dashboard-sidebar/dashboard-sidebar.ts +8 -6
- package/src/components/dashboard-sidebar-collapse/RLADashboardSidebarCollapse.astro +24 -21
- package/src/components/dashboard-sidebar-collapse/dashboard-sidebar-collapse.theme.ts +16 -12
- package/src/components/dashboard-sidebar-collapse/dashboard-sidebar-collapse.ts +2 -6
- package/src/components/dashboard-sidebar-toggle/RLADashboardSidebarToggle.astro +23 -21
- package/src/components/dashboard-sidebar-toggle/dashboard-sidebar-toggle.theme.ts +16 -12
- package/src/components/dashboard-sidebar-toggle/dashboard-sidebar-toggle.ts +2 -6
- package/src/components/dashboard-toolbar/RLADashboardToolbar.astro +25 -21
- package/src/components/dashboard-toolbar/dashboard-toolbar.theme.ts +11 -12
- package/src/components/dashboard-toolbar/dashboard-toolbar.ts +1 -6
- package/src/components/dock/RLADock.astro +9 -20
- package/src/components/dock/dock.theme.ts +9 -12
- package/src/components/drawer/RLADrawer.astro +115 -126
- package/src/components/drawer/drawer.theme.ts +53 -57
- package/src/components/dropdown-menu/RLADropdownMenu.astro +180 -47
- package/src/components/dropdown-menu/RLSDropdownMenu.tsx +196 -0
- package/src/components/dropdown-menu/dropdown-menu.theme.ts +51 -27
- package/src/components/dropdown-menu/dropdown-menu.ts +47 -9
- package/src/components/editor/RLAEditor.astro +9 -20
- package/src/components/editor/blocks/AddBlockModal.vue +3 -3
- package/src/components/editor/blocks/Block.vue +4 -3
- package/src/components/editor/blocks/BlockEditor.vue +3 -3
- package/src/components/editor/blocks/BlockViewRenderer.vue +8 -2
- package/src/components/editor/blocks/editor/CalloutBlockEditor.vue +2 -2
- package/src/components/editor/blocks/editor/ParagraphBlockEditor.vue +1 -1
- package/src/components/editor/blocks/editor/SectionBlockEditor.vue +3 -3
- package/src/components/editor/blocks/renderer/CalloutBlockRenderer.vue +2 -3
- package/src/components/editor/blocks/renderer/SectionBlockRenderer.vue +2 -2
- package/src/components/editor/editor.theme.ts +9 -12
- package/src/components/empty/RLAEmpty.astro +86 -20
- package/src/components/empty/empty.theme.ts +79 -11
- package/src/components/empty/empty.ts +59 -2
- package/src/components/error/RLAError.astro +9 -20
- package/src/components/error/error.theme.ts +9 -12
- package/src/components/field-group/RLAFieldGroup.astro +2 -11
- package/src/components/field-group/field-group.theme.ts +18 -22
- package/src/components/fieldset/RLAFieldset.astro +9 -20
- package/src/components/fieldset/fieldset.theme.ts +9 -12
- package/src/components/file-upload/RLAFileUpload.astro +4 -13
- package/src/components/file-upload/file-upload.theme.ts +19 -22
- package/src/components/file-upload/file-upload.ts +1 -1
- package/src/components/floating-action/RLAFloatingAction.astro +9 -20
- package/src/components/floating-action/floating-action.theme.ts +9 -12
- package/src/components/footer/RLAFooter.astro +32 -38
- package/src/components/footer/footer.theme.ts +31 -26
- package/src/components/footer/footer.ts +4 -0
- package/src/components/form/RLAForm.astro +9 -20
- package/src/components/form/form.theme.ts +9 -12
- package/src/components/form-field/RLAFormField.astro +5 -12
- package/src/components/form-field/RLSFormField.tsx +71 -0
- package/src/components/form-field/RLVFormField.vue +5 -14
- package/src/components/form-field/form-field.theme.ts +19 -22
- package/src/components/form-field/form-field.ts +1 -0
- package/src/components/gallery/RLAGallery.astro +9 -20
- package/src/components/gallery/gallery.theme.ts +9 -12
- package/src/components/grid/RLAGrid.astro +2 -15
- package/src/components/grid/grid.theme.ts +31 -34
- package/src/components/head/UIHead.astro +298 -0
- package/src/components/head/head.theme.ts +9 -12
- package/src/components/header/HeaderLayer.astro +63 -0
- package/src/components/header/RLAHeader.astro +29 -48
- package/src/components/header/header.theme.ts +37 -40
- package/src/components/header/header.ts +4 -0
- package/src/{utils → components/header}/headerStack.ts +30 -22
- package/src/components/hover-card/RLAHoverCard.astro +24 -35
- package/src/components/hover-card/hover-card.theme.ts +23 -27
- package/src/components/icon/RLAIcon.astro +29 -36
- package/src/components/icon/RLSIcon.tsx +6 -7
- package/src/components/icon/RLVIcon.vue +5 -6
- package/src/components/icon/icon.theme.ts +18 -28
- package/src/components/icon/resolver.ts +15 -29
- package/src/components/image/RLAImage.astro +20 -23
- package/src/components/image/image.theme.ts +29 -32
- package/src/components/input/RLAInput.astro +6 -21
- package/src/components/input/RLSInput.tsx +101 -0
- package/src/components/input/RLVInput.vue +11 -20
- package/src/components/input/input.theme.ts +41 -44
- package/src/components/input/input.ts +1 -1
- package/src/components/input-date/RLAInputDate.astro +9 -20
- package/src/components/input-date/input-date.theme.ts +9 -12
- package/src/components/input-menu/RLAInputMenu.astro +2 -12
- package/src/components/input-menu/input-menu.theme.ts +29 -32
- package/src/components/input-menu/input-menu.ts +1 -1
- package/src/components/input-number/RLAInputNumber.astro +9 -20
- package/src/components/input-number/input-number.theme.ts +9 -12
- package/src/components/input-pin/RLAInputPin.astro +9 -22
- package/src/components/input-pin/input-pin.theme.ts +9 -13
- package/src/components/input-rating/RLAInputRating.astro +2 -23
- package/src/components/input-rating/input-rating.theme.ts +64 -76
- package/src/components/input-rating/input-rating.ts +1 -1
- package/src/components/input-tags/RLAInputTags.astro +174 -21
- package/src/components/input-tags/input-tags.theme.ts +37 -12
- package/src/components/input-tags/input-tags.ts +50 -0
- package/src/components/input-time/RLAInputTime.astro +9 -20
- package/src/components/input-time/input-time.theme.ts +9 -12
- package/src/components/kbd/RLAKbd.astro +17 -32
- package/src/components/kbd/kbd.theme.ts +49 -91
- package/src/components/kbd/kbd.ts +3 -0
- package/src/components/knob/RLAKnob.astro +9 -20
- package/src/components/knob/knob.theme.ts +9 -12
- package/src/components/label/RLALabel.astro +16 -27
- package/src/components/label/label.theme.ts +16 -20
- package/src/components/layout-grid/RLALayoutGrid.astro +5 -11
- package/src/components/layout-grid/layout-grid.theme.ts +12 -15
- package/src/components/link/RLALink.astro +6 -20
- package/src/components/link/RLSLink.tsx +8 -16
- package/src/components/link/RLVLink.vue +7 -16
- package/src/components/link/link.theme.ts +37 -37
- package/src/components/link/link.ts +5 -5
- package/src/components/link-group/RLALinkGroup.astro +7 -44
- package/src/components/link-group/link-group.theme.ts +21 -26
- package/src/components/link-group/link-group.ts +5 -16
- package/src/components/listbox/RLAListbox.astro +9 -20
- package/src/components/listbox/listbox.theme.ts +9 -12
- package/src/components/locale-selector/RLALocaleSelector.astro +13 -21
- package/src/components/locale-selector/locale-selector.theme.ts +49 -44
- package/src/components/locale-selector/locale-selector.ts +4 -0
- package/src/components/logo/RLALogo.astro +13 -26
- package/src/components/logo/logo.theme.ts +9 -12
- package/src/components/main/RLAMain.astro +31 -36
- package/src/components/main/main.theme.ts +9 -12
- package/src/components/marquee/RLAMarquee.astro +62 -43
- package/src/components/marquee/marquee.theme.ts +22 -26
- package/src/components/meter/RLAMeter.astro +9 -20
- package/src/components/meter/meter.theme.ts +9 -12
- package/src/components/modal/RLAModal.astro +70 -72
- package/src/components/modal/RLSModal.tsx +156 -0
- package/src/components/modal/RLVModal.vue +5 -6
- package/src/components/modal/modal.theme.ts +42 -46
- package/src/components/modal/modal.ts +1 -0
- package/src/components/navigation-menu/RLANavigationMenu.astro +7 -12
- package/src/components/navigation-menu/navigation-menu.theme.ts +36 -39
- package/src/components/navigation-menu/navigation-menu.ts +19 -18
- package/src/components/page/RLAPage.astro +9 -20
- package/src/components/page/page.theme.ts +9 -12
- package/src/components/page-aside/RLAPageAside.astro +9 -20
- package/src/components/page-aside/page-aside.theme.ts +9 -12
- package/src/components/page-body/RLAPageBody.astro +9 -20
- package/src/components/page-body/page-body.theme.ts +9 -12
- package/src/components/page-header/RLAPageHeader.astro +9 -20
- package/src/components/page-header/page-header.theme.ts +9 -12
- package/src/components/page-section/RLAPageSection.astro +11 -15
- package/src/components/page-section/page-section.theme.ts +193 -176
- package/src/components/pagination/RLAPagination.astro +91 -97
- package/src/components/pagination/pagination.theme.ts +22 -26
- package/src/components/password/RLAPassword.astro +9 -20
- package/src/components/password/password.theme.ts +9 -12
- package/src/components/phone-mockup/RLAPhoneMockup.astro +9 -20
- package/src/components/phone-mockup/phone-mockup.theme.ts +9 -12
- package/src/components/placeholder/RLAPlaceholder.astro +32 -43
- package/src/components/placeholder/placeholder.theme.ts +11 -14
- package/src/components/popover/RLAPopover.astro +205 -132
- package/src/components/popover/popover.theme.ts +23 -27
- package/src/components/post/RLAPost.astro +2 -10
- package/src/components/post/post.theme.ts +45 -48
- package/src/components/pricing-plan/RLAPricingPlan.astro +9 -20
- package/src/components/pricing-plan/pricing-plan.theme.ts +9 -12
- package/src/components/pricing-table/RLAPricingTable.astro +9 -20
- package/src/components/pricing-table/pricing-table.theme.ts +9 -12
- package/src/components/progress/RLAProgress.astro +2 -17
- package/src/components/progress/progress.theme.ts +22 -34
- package/src/components/progress/progress.ts +1 -1
- package/src/components/prose/RLAProse.astro +9 -20
- package/src/components/prose/prose.theme.ts +9 -12
- package/src/components/qr-code/RLAQrCode.astro +9 -20
- package/src/components/qr-code/qr-code.theme.ts +9 -12
- package/src/components/quote/quote.theme.ts +9 -12
- package/src/components/radio-group/RLARadioGroup.astro +9 -20
- package/src/components/radio-group/radio-group.theme.ts +9 -12
- package/src/components/rating/RLARating.astro +9 -20
- package/src/components/rating/rating.theme.ts +9 -12
- package/src/components/scroll-area/RLAScrollArea.astro +2 -10
- package/src/components/scroll-area/scroll-area.theme.ts +21 -24
- package/src/components/scroll-to-top/RLAScrollToTop.astro +67 -43
- package/src/components/scroll-to-top/RLVScrollToTop.vue +6 -10
- package/src/components/scroll-to-top/scroll-to-top.theme.ts +32 -46
- package/src/components/scroll-to-top/scroll-to-top.ts +1 -1
- package/src/{utils → components/scroll-to-top}/scroll.ts +19 -6
- package/src/components/search/RLASearch.astro +3 -9
- package/src/components/search/search.theme.ts +60 -63
- package/src/components/select/RLASelect.astro +514 -113
- package/src/components/select/RLSSelect.tsx +126 -0
- package/src/components/select/RLVSelect.vue +7 -15
- package/src/components/select/select.theme.ts +104 -25
- package/src/components/select/select.ts +58 -36
- package/src/components/separator/RLASeparator.astro +62 -83
- package/src/components/separator/separator.theme.ts +135 -138
- package/src/components/separator/separator.ts +4 -0
- package/src/components/shortcuts/RLAShortcuts.astro +3 -4
- package/src/components/sidebar/RLASidebar.astro +11 -21
- package/src/components/sidebar/sidebar.theme.ts +39 -42
- package/src/components/sidebar/sidebar.ts +2 -0
- package/src/components/skeleton/RLASkeleton.astro +13 -22
- package/src/components/skeleton/skeleton.theme.ts +16 -19
- package/src/components/slideover/RLASlideover.astro +2 -12
- package/src/components/slideover/slideover.theme.ts +51 -55
- package/src/components/slider/RLASlider.astro +2 -15
- package/src/components/slider/slider.theme.ts +20 -33
- package/src/components/slider/slider.ts +1 -1
- package/src/components/speed-dial/RLASpeedDial.astro +9 -20
- package/src/components/speed-dial/speed-dial.theme.ts +9 -12
- package/src/components/spinner/RLASpinner.astro +2 -17
- package/src/components/spinner/spinner.theme.ts +29 -30
- package/src/components/spinner/spinner.ts +1 -1
- package/src/components/splitter/RLASplitter.astro +3 -11
- package/src/components/splitter/splitter.theme.ts +18 -21
- package/src/components/spoiler/RLASpoiler.astro +9 -20
- package/src/components/spoiler/spoiler.theme.ts +9 -12
- package/src/components/stepper/RLAStepper.astro +300 -21
- package/src/components/stepper/stepper.theme.ts +214 -12
- package/src/components/stepper/stepper.ts +23 -6
- package/src/components/steps/RLASteps.astro +2 -8
- package/src/components/steps/steps.theme.ts +9 -12
- package/src/components/sticky-surface/RLAStickySurface.astro +67 -38
- package/src/components/sticky-surface/sticky-surface.theme.ts +7 -11
- package/src/components/sticky-surface/sticky-surface.ts +1 -0
- package/src/components/surround/RLASurround.astro +5 -5
- package/src/components/switch/RLASwitch.astro +2 -18
- package/src/components/switch/switch.theme.ts +50 -61
- package/src/components/switch/switch.ts +1 -1
- package/src/components/table/RLATable.astro +566 -50
- package/src/components/table/table.theme.ts +112 -31
- package/src/components/table/table.ts +207 -6
- package/src/components/table-of-contents/RLATableOfContents.astro +8 -13
- package/src/components/table-of-contents/table-of-contents.theme.ts +60 -63
- package/src/components/tabs/RLATabs.astro +195 -51
- package/src/components/tabs/tabs.theme.ts +81 -84
- package/src/components/tabs/tabs.ts +18 -1
- package/src/components/textarea/RLATextarea.astro +16 -13
- package/src/components/textarea/RLSTextarea.tsx +69 -0
- package/src/components/textarea/RLVTextarea.vue +8 -16
- package/src/components/textarea/textarea.theme.ts +21 -24
- package/src/components/textarea/textarea.ts +2 -1
- package/src/components/theme-selector/RLAThemeSelector.astro +5 -13
- package/src/components/theme-selector/theme-selector.theme.ts +11 -14
- package/src/components/timeline/RLATimeline.astro +24 -44
- package/src/components/timeline/timeline.theme.ts +302 -307
- package/src/components/toast/RLAToast.astro +44 -18
- package/src/components/toast/store.ts +97 -0
- package/src/components/toast/toast.theme.ts +31 -34
- package/src/components/toast/toast.ts +1 -1
- package/src/components/toaster/RLAToaster.astro +76 -6
- package/src/components/tooltip/RLATooltip.astro +136 -33
- package/src/components/tooltip/tooltip.theme.ts +23 -26
- package/src/components/tour/RLATour.astro +9 -20
- package/src/components/tour/tour.theme.ts +9 -12
- package/src/components/tree/RLATree.astro +9 -20
- package/src/components/tree/tree.theme.ts +9 -12
- package/src/components/user/RLAUser.astro +9 -20
- package/src/components/user/user.theme.ts +9 -12
- package/src/components/video/RLAVideo.astro +5 -10
- package/src/components/video/video.theme.ts +13 -16
- package/src/components/watermark/RLAWatermark.astro +9 -20
- package/src/components/watermark/watermark.theme.ts +9 -12
- package/src/components/window-mockup/RLAWindowMockup.astro +9 -20
- package/src/components/window-mockup/window-mockup.theme.ts +9 -12
- package/src/icons.ts +68 -0
- package/src/index.ts +31 -0
- package/src/preset.ts +146 -0
- package/src/resolver.ts +20 -0
- package/src/shortcuts.ts +172 -0
- package/src/types.ts +57 -0
- package/LICENSE +0 -21
- package/src/components/head/RLAHead.astro +0 -528
- package/src/config/color.config.ts +0 -300
- package/src/config/site.config.ts +0 -28
- package/src/config/ui.config.ts +0 -89
- package/src/env.d.ts +0 -23
- package/src/icons/defaults.ts +0 -44
- package/src/presets/index.ts +0 -577
- package/src/stores/toast.ts +0 -24
- package/src/themes.ts +0 -26
- package/src/types/component.ts +0 -28
- package/src/ui.ts +0 -159
- package/src/utils/defineTheme.ts +0 -5
- package/src/utils/merge.ts +0 -62
- package/src/utils/resolveClasses.ts +0 -39
- package/src/utils/resolveTheme.ts +0 -13
- package/src/utils/shortcuts.ts +0 -322
- package/src/utils/toast.ts +0 -36
- package/src/utils/useUi.ts +0 -33
|
@@ -1,62 +1,241 @@
|
|
|
1
|
-
---
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
1
|
+
---
|
|
2
|
+
import type { BreadcrumbProps } from "./breadcrumb"
|
|
3
|
+
import { breadcrumbTheme } from "./breadcrumb.theme"
|
|
4
|
+
import RLAIcon from "../icon/RLAIcon.astro"
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
const {
|
|
9
|
+
items,
|
|
10
|
+
maxVisible,
|
|
11
|
+
estimatedItemWidth = 120,
|
|
12
|
+
separatorIcon = "chevronRight",
|
|
13
|
+
...rest
|
|
14
|
+
} = Astro.props as BreadcrumbProps
|
|
15
|
+
|
|
16
|
+
const classes = breadcrumbTheme(Astro.props)
|
|
17
|
+
|
|
18
|
+
// ─── Responsive CSS Item Counter ─────────────────────────────────────────────
|
|
19
|
+
//
|
|
20
|
+
// Breadcrumb-specific adaptation of the CSS counter technique:
|
|
21
|
+
//
|
|
22
|
+
// • First and last items are ALWAYS visible.
|
|
23
|
+
// • Middle items (everything between first and last) get `.hidable` class.
|
|
24
|
+
// • Server-side: if `maxVisible` is set, excess middle items are pre-hidden
|
|
25
|
+
// (not rendered) and counted in --base-hidden.
|
|
26
|
+
// • Client-side: container queries progressively hide rendered middle items
|
|
27
|
+
// from left to right (oldest ancestors first), updating --hidden-items.
|
|
28
|
+
// • The overflow `<li>` always lives in the DOM between the first item and
|
|
29
|
+
// the first middle item. CSS shows/hides it based on whether any items
|
|
30
|
+
// are hidden.
|
|
31
|
+
// • CSS counter: "…+N" = counter-reset: calc(--base-hidden + --hidden-items).
|
|
32
|
+
//
|
|
33
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
34
|
+
|
|
35
|
+
const uid = Math.random().toString(36).substring(2, 9)
|
|
36
|
+
const cName = `rla-bc-${uid}`
|
|
37
|
+
|
|
38
|
+
// Restructure items into: first | midItems | last
|
|
39
|
+
const allItems = items ?? []
|
|
40
|
+
const firstItem = allItems[0]
|
|
41
|
+
const lastItem = allItems.length > 1 ? allItems[allItems.length - 1] : null
|
|
42
|
+
const allMidItems = allItems.length > 2 ? allItems.slice(1, allItems.length - 1) : []
|
|
43
|
+
|
|
44
|
+
// If maxVisible is provided, pre-truncate middle items:
|
|
45
|
+
// always keep the last (maxVisible - 2) mid items (closest to current page).
|
|
46
|
+
// The rest are base-hidden.
|
|
47
|
+
const effectiveMaxMid = maxVisible !== undefined
|
|
48
|
+
? Math.max(0, maxVisible - 2) // -2 for first + last
|
|
49
|
+
: allMidItems.length // show all at full width
|
|
50
|
+
|
|
51
|
+
// Keep mid items closest to the last page (most recent ancestors)
|
|
52
|
+
const renderedMidItems = allMidItems.slice(allMidItems.length - effectiveMaxMid)
|
|
53
|
+
const baseHiddenCount = Math.max(0, allMidItems.length - effectiveMaxMid)
|
|
54
|
+
|
|
55
|
+
// We show the overflow indicator when:
|
|
56
|
+
// a) There are already pre-hidden items (base-hidden > 0), OR
|
|
57
|
+
// b) There are rendered mid items that could be collapsed by container queries
|
|
58
|
+
const hasMidItems = renderedMidItems.length > 0
|
|
59
|
+
const needsOverflow = allItems.length > 2 // need both first AND last to have a middle
|
|
60
|
+
|
|
61
|
+
// ── Generate per-instance container-query CSS ─────────────────────────────────
|
|
62
|
+
//
|
|
63
|
+
// DOM layout (positions):
|
|
64
|
+
// 1 = first item
|
|
65
|
+
// 2 = overflow indicator (always in DOM)
|
|
66
|
+
// 3..N = rendered mid items (hidable, starting from leftmost = oldest ancestor)
|
|
67
|
+
// N+1 = last item
|
|
68
|
+
//
|
|
69
|
+
// We hide mid items from left to right (oldest ancestor first), so breakpoints
|
|
70
|
+
// target nth-child(3), then nth-child(4), etc.
|
|
71
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
72
|
+
let instanceCss = ""
|
|
73
|
+
if (needsOverflow && hasMidItems) {
|
|
74
|
+
for (let i = 0; i < renderedMidItems.length; i++) {
|
|
75
|
+
const hiddenItems = i + 1
|
|
76
|
+
// Visible items after hiding: first + (midItems - hiddenItems) + last
|
|
77
|
+
const visibleMids = renderedMidItems.length - hiddenItems
|
|
78
|
+
const visibleTotal = 2 + visibleMids // first + last always shown
|
|
79
|
+
// Min container width for the visible breadcrumb items
|
|
80
|
+
const maxWidth = visibleTotal * estimatedItemWidth + 60 // 60px for overflow indicator
|
|
81
|
+
// The mid item to newly hide at this breakpoint (nth-child position):
|
|
82
|
+
// overflow indicator is at position 2, mids start at position 3
|
|
83
|
+
// we hide from the leftmost (position 3) first
|
|
84
|
+
const hideNthChild = 3 + i
|
|
85
|
+
|
|
86
|
+
instanceCss += `\n@container ${cName} (max-width: ${maxWidth}px) {`
|
|
87
|
+
instanceCss += `\n [data-bc="${uid}"] { --hidden-items: ${hiddenItems}; }`
|
|
88
|
+
instanceCss += `\n [data-bc="${uid}"] > li.hidable:nth-child(${hideNthChild}) { display: none; }`
|
|
89
|
+
// Always show the overflow indicator when any mid item is hidden
|
|
90
|
+
instanceCss += `\n [data-bc="${uid}"] > .rla-bc-overflow { display: flex; }`
|
|
91
|
+
instanceCss += `\n}`
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
<nav class={classes.root} data-slot="breadcrumb-root" {...rest}>
|
|
97
|
+
{items ? (
|
|
98
|
+
<div
|
|
99
|
+
class="rla-bc-host"
|
|
100
|
+
style={`container-type: inline-size; container-name: ${cName};`}
|
|
101
|
+
>
|
|
102
|
+
<ol
|
|
103
|
+
class={classes.list}
|
|
104
|
+
data-slot="list"
|
|
105
|
+
data-bc={uid}
|
|
106
|
+
style={`--base-hidden: ${baseHiddenCount}; --hidden-items: 0;`}
|
|
107
|
+
>
|
|
108
|
+
{/* ── First item (always visible) ─────────────────────────────── */}
|
|
109
|
+
{firstItem && (
|
|
110
|
+
<li class={classes.item} data-slot="item">
|
|
111
|
+
{firstItem.href ? (
|
|
112
|
+
<a href={firstItem.href} class={classes.link} data-slot="link">
|
|
113
|
+
{firstItem.label}
|
|
114
|
+
</a>
|
|
115
|
+
) : (
|
|
116
|
+
<span class={classes.page} data-slot="page">{firstItem.label}</span>
|
|
117
|
+
)}
|
|
118
|
+
{(hasMidItems || lastItem) && (
|
|
119
|
+
<span class={classes.separator} data-slot="separator" aria-hidden="true">
|
|
120
|
+
<RLAIcon name={separatorIcon} />
|
|
121
|
+
</span>
|
|
122
|
+
)}
|
|
123
|
+
</li>
|
|
124
|
+
)}
|
|
125
|
+
|
|
126
|
+
{/* ── Overflow indicator (always in DOM; shown by CSS when items are hidden) */}
|
|
127
|
+
{needsOverflow && (
|
|
128
|
+
<li
|
|
129
|
+
class:list={[
|
|
130
|
+
"rla-bc-overflow",
|
|
131
|
+
// Shown by default only when there are pre-hidden base items
|
|
132
|
+
baseHiddenCount === 0 && "rla-bc-overflow-hidden"
|
|
133
|
+
]}
|
|
134
|
+
aria-hidden="true"
|
|
135
|
+
data-slot="overflow"
|
|
136
|
+
>
|
|
137
|
+
<span class="rla-bc-ellipsis">…</span>
|
|
138
|
+
<span class="rla-bc-more-count" />
|
|
139
|
+
<span class={classes.separator} data-slot="separator" aria-hidden="true">
|
|
140
|
+
<RLAIcon name={separatorIcon} />
|
|
141
|
+
</span>
|
|
142
|
+
</li>
|
|
143
|
+
)}
|
|
144
|
+
|
|
145
|
+
{/* ── Middle items (hidable — oldest ancestors first) ─────────── */}
|
|
146
|
+
{renderedMidItems.map((item) => (
|
|
147
|
+
<li class:list={[classes.item, "hidable"]} data-slot="item">
|
|
148
|
+
{item.href ? (
|
|
149
|
+
<a href={item.href} class={classes.link} data-slot="link">
|
|
150
|
+
{item.label}
|
|
151
|
+
</a>
|
|
152
|
+
) : (
|
|
153
|
+
<span class={classes.page} data-slot="page">{item.label}</span>
|
|
154
|
+
)}
|
|
155
|
+
<span class={classes.separator} data-slot="separator" aria-hidden="true">
|
|
156
|
+
<RLAIcon name={separatorIcon} />
|
|
157
|
+
</span>
|
|
158
|
+
</li>
|
|
159
|
+
))}
|
|
160
|
+
|
|
161
|
+
{/* ── Last item (always visible, current page) ─────────────────── */}
|
|
162
|
+
{lastItem && (
|
|
163
|
+
<li class={classes.item} data-slot="item">
|
|
164
|
+
<span class={classes.page} data-slot="page" aria-current="page">
|
|
165
|
+
{lastItem.label}
|
|
166
|
+
</span>
|
|
167
|
+
</li>
|
|
168
|
+
)}
|
|
169
|
+
</ol>
|
|
170
|
+
</div>
|
|
171
|
+
) : (
|
|
172
|
+
<ol class={classes.list} data-slot="list">
|
|
173
|
+
<slot />
|
|
174
|
+
</ol>
|
|
175
|
+
)}
|
|
176
|
+
</nav>
|
|
177
|
+
|
|
178
|
+
<!-- Per-instance container-query CSS scoped via data-bc attribute -->
|
|
179
|
+
<style is:inline set:html={instanceCss} />
|
|
180
|
+
|
|
181
|
+
<style>
|
|
182
|
+
.rla-bc-host {
|
|
183
|
+
display: block;
|
|
184
|
+
width: 100%;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/* Overflow indicator: shown by CSS, hidden by default when base-hidden is 0 */
|
|
188
|
+
.rla-bc-overflow {
|
|
189
|
+
display: flex;
|
|
190
|
+
align-items: center;
|
|
191
|
+
gap: 0.25rem;
|
|
192
|
+
list-style: none;
|
|
193
|
+
flex-shrink: 0;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/* When base-hidden is 0 AND no container query has fired yet */
|
|
197
|
+
.rla-bc-overflow-hidden {
|
|
198
|
+
display: none;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.rla-bc-ellipsis {
|
|
202
|
+
color: var(--color-muted-foreground, currentColor);
|
|
203
|
+
letter-spacing: 0.05em;
|
|
204
|
+
font-weight: 500;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/*
|
|
208
|
+
* CSS Counter — sums --base-hidden (render-time, from maxVisible prop) +
|
|
209
|
+
* --hidden-items (set by container queries as width shrinks).
|
|
210
|
+
*
|
|
211
|
+
* Shows nothing when the count is 0.
|
|
212
|
+
* Shows "+N" when N > 0.
|
|
213
|
+
*/
|
|
214
|
+
.rla-bc-more-count::after {
|
|
215
|
+
counter-reset: rla-bc-cnt calc(var(--base-hidden, 0) + var(--hidden-items, 0));
|
|
216
|
+
content: "+" counter(rla-bc-cnt);
|
|
217
|
+
/* Hide the "+0" case by using color:transparent when counter is 0.
|
|
218
|
+
CSS cannot conditionally suppress content based on counter value,
|
|
219
|
+
so we rely on the counter never being 0 when this element is visible
|
|
220
|
+
(the overflow li is only shown when --base-hidden > 0 or a container
|
|
221
|
+
query is active). */
|
|
222
|
+
color: var(--color-muted-foreground, currentColor);
|
|
223
|
+
font-size: 0.6875rem;
|
|
224
|
+
font-weight: 600;
|
|
225
|
+
vertical-align: super;
|
|
226
|
+
line-height: 1;
|
|
227
|
+
}
|
|
228
|
+
</style>
|
|
229
|
+
|
|
230
|
+
{items && (
|
|
231
|
+
<script type="application/ld+json" is:inline set:html={JSON.stringify({
|
|
232
|
+
"@context": "https://schema.org",
|
|
233
|
+
"@type": "BreadcrumbList",
|
|
234
|
+
"itemListElement": items.map((item, idx) => ({
|
|
235
|
+
"@type": "ListItem",
|
|
236
|
+
"position": idx + 1,
|
|
237
|
+
"name": item.label,
|
|
238
|
+
"item": item.href ? new URL(item.href, Astro.site || "https://starter.rimelight.com").toString() : undefined
|
|
239
|
+
}))
|
|
240
|
+
})} />
|
|
241
|
+
)}
|
|
@@ -1,17 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { defineTheme } from "../../utils/defineTheme"
|
|
1
|
+
import { defineTheme } from "../../resolver"
|
|
3
2
|
|
|
4
|
-
export const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
})
|
|
16
|
-
|
|
17
|
-
export default createBreadcrumbTheme()
|
|
3
|
+
export const breadcrumbTheme = defineTheme("breadcrumb", {
|
|
4
|
+
slots: ["root", "list", "item", "link", "separator", "page"],
|
|
5
|
+
base: {
|
|
6
|
+
root: "aria-label='breadcrumb'",
|
|
7
|
+
list: "flex flex-wrap items-center gap-1.5 break-words text-sm text-muted sm:gap-2.5",
|
|
8
|
+
item: "flex items-center gap-1.5",
|
|
9
|
+
link: "transition-colors hover:text-highlighted cursor-pointer decoration-none text-current",
|
|
10
|
+
separator: "flex size-3.5 items-center justify-center [&_svg]:size-3.5 opacity-60",
|
|
11
|
+
page: "font-normal text-highlighted"
|
|
12
|
+
}
|
|
13
|
+
})
|
|
@@ -8,6 +8,25 @@ export interface BreadcrumbProps {
|
|
|
8
8
|
* Quick-prop array to render breadcrumb items automatically.
|
|
9
9
|
*/
|
|
10
10
|
items?: BreadcrumbItem[]
|
|
11
|
+
/**
|
|
12
|
+
* Maximum number of items to show at full container width (including first and last which are
|
|
13
|
+
* always visible). Middle items beyond this cap are pre-hidden server-side and counted in the
|
|
14
|
+
* "…+N" overflow indicator.
|
|
15
|
+
*
|
|
16
|
+
* Example: 7 items, maxVisible=4 → shows [Home, …+3, Current]. At a narrow container the count
|
|
17
|
+
* increases further via CSS queries.
|
|
18
|
+
*
|
|
19
|
+
* When undefined, all items are shown at full width and only container queries produce the
|
|
20
|
+
* responsive collapse.
|
|
21
|
+
*/
|
|
22
|
+
maxVisible?: number
|
|
23
|
+
/**
|
|
24
|
+
* Approximate width in pixels of each breadcrumb item (text + separator). Used to compute
|
|
25
|
+
* container-query breakpoints for the responsive collapse. Increase for longer labels.
|
|
26
|
+
*
|
|
27
|
+
* @default 120
|
|
28
|
+
*/
|
|
29
|
+
estimatedItemWidth?: number
|
|
11
30
|
/**
|
|
12
31
|
* The icon separating the breadcrumbs.
|
|
13
32
|
*/
|
|
@@ -1,21 +1,10 @@
|
|
|
1
|
-
---
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const {
|
|
12
|
-
ui: uiProp,
|
|
13
|
-
class: className,
|
|
14
|
-
...rest
|
|
15
|
-
} = Astro.props as BrowserMockupProps
|
|
16
|
-
|
|
17
|
-
const classes = resolveClasses(browserMockup, {}, useUi("browserMockup", uiProp), className);
|
|
18
|
-
---
|
|
19
|
-
<div class={classes.root} data-slot="root" {...rest}>
|
|
20
|
-
<slot />
|
|
1
|
+
---
|
|
2
|
+
import { browserMockupTheme } from "./browser-mockup.theme"
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
const classes = browserMockupTheme(Astro.props)
|
|
7
|
+
---
|
|
8
|
+
<div class={classes.root} data-slot="root" {...Astro.props}>
|
|
9
|
+
<slot />
|
|
21
10
|
</div>
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
import { defineTheme } from "../../
|
|
1
|
+
import { defineTheme } from "../../resolver"
|
|
2
2
|
|
|
3
|
-
export const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
})
|
|
12
|
-
|
|
13
|
-
export default createBrowserMockupTheme()
|
|
3
|
+
export const browserMockupTheme = defineTheme("browser-mockup", {
|
|
4
|
+
slots: ["root"],
|
|
5
|
+
base: {
|
|
6
|
+
root: ""
|
|
7
|
+
},
|
|
8
|
+
variants: {},
|
|
9
|
+
defaultVariants: {}
|
|
10
|
+
})
|
|
@@ -1,18 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
import { scv } from "css-variants"
|
|
3
|
-
import { useUi } from "../../utils/useUi"
|
|
4
|
-
import { resolveClasses } from "../../utils/resolveClasses"
|
|
5
2
|
import type { ButtonProps } from "./button"
|
|
6
|
-
import {
|
|
7
|
-
import buttonThemeDefault, { createButtonTheme } from "./button.theme"
|
|
8
|
-
const buttonTheme = resolveTheme(buttonThemeDefault, createButtonTheme)
|
|
3
|
+
import { buttonTheme } from "./button.theme"
|
|
9
4
|
import RLAAvatar from "../avatar/RLAAvatar.astro"
|
|
10
5
|
import RLALink from "../link/RLALink.astro"
|
|
11
6
|
import RLAIcon from "../icon/RLAIcon.astro"
|
|
12
7
|
|
|
13
8
|
|
|
14
|
-
const button = scv(buttonTheme)
|
|
15
|
-
|
|
16
9
|
const {
|
|
17
10
|
variant = "solid",
|
|
18
11
|
color = "primary",
|
|
@@ -26,21 +19,14 @@ const {
|
|
|
26
19
|
loading = false,
|
|
27
20
|
loadingAuto = false,
|
|
28
21
|
square = false,
|
|
29
|
-
rounded = false,
|
|
30
|
-
block = false,
|
|
31
22
|
justify = "center",
|
|
32
23
|
active = false,
|
|
33
|
-
theme,
|
|
34
24
|
activeColor,
|
|
35
25
|
activeVariant,
|
|
36
|
-
ui: uiProp,
|
|
37
|
-
class: className,
|
|
38
26
|
...rest
|
|
39
|
-
} = Astro.props as ButtonProps
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
activeVariant?: string
|
|
43
|
-
}
|
|
27
|
+
} = Astro.props as ButtonProps
|
|
28
|
+
|
|
29
|
+
|
|
44
30
|
|
|
45
31
|
const isLeading = !!(leadingIcon || avatar || Astro.slots.has("leading") || loading)
|
|
46
32
|
const isTrailing = !!(trailingIcon || Astro.slots.has("trailing")) || (loading && !isLeading)
|
|
@@ -56,20 +42,14 @@ const showTrailingIcon = loading
|
|
|
56
42
|
const leadingIconClass = loading ? "animate-spin" : ""
|
|
57
43
|
const trailingIconClass = loading ? "animate-spin" : ""
|
|
58
44
|
|
|
59
|
-
const classes =
|
|
45
|
+
const classes = buttonTheme({
|
|
46
|
+
...Astro.props,
|
|
60
47
|
variant: (active && activeVariant ? activeVariant : variant) as "solid",
|
|
61
48
|
color: (active && activeColor ? activeColor : color) as "neutral",
|
|
62
|
-
size,
|
|
63
|
-
block,
|
|
64
|
-
justify,
|
|
65
49
|
square: square || (!label && !Astro.slots.has("default")),
|
|
66
|
-
rounded,
|
|
67
50
|
leading: isLeading,
|
|
68
|
-
trailing: isTrailing
|
|
69
|
-
|
|
70
|
-
active,
|
|
71
|
-
theme
|
|
72
|
-
}, useUi("button", uiProp), className);
|
|
51
|
+
trailing: isTrailing
|
|
52
|
+
});
|
|
73
53
|
|
|
74
54
|
const Tag = (href || to) ? RLALink : "button";
|
|
75
55
|
|
|
@@ -78,7 +58,7 @@ const loadingAutoProps = loadingAuto ? { 'data-loading-auto': '' } : {};
|
|
|
78
58
|
<Tag
|
|
79
59
|
class={classes.root}
|
|
80
60
|
data-slot="root"
|
|
81
|
-
{...(Tag === RLALink ? { href, to, noExternalIcon: true } : {})}
|
|
61
|
+
{...(Tag === RLALink ? { href, to, noExternalIcon: true, raw: true } : {})}
|
|
82
62
|
{...loadingAutoProps}
|
|
83
63
|
{...rest}
|
|
84
64
|
>
|
|
@@ -134,7 +114,7 @@ const loadingAutoProps = loadingAuto ? { 'data-loading-auto': '' } : {};
|
|
|
134
114
|
try {
|
|
135
115
|
button.setAttribute('data-loading', 'true');
|
|
136
116
|
button.setAttribute('disabled', 'true');
|
|
137
|
-
|
|
117
|
+
|
|
138
118
|
// To spin the icon dynamically:
|
|
139
119
|
let leadingIconSpan = button.querySelector('[data-slot="leading-icon"]');
|
|
140
120
|
let origHTML = '';
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { createMemo, splitProps, type Component, type JSX } from "solid-js"
|
|
2
|
+
import type { ButtonProps } from "./button"
|
|
3
|
+
import { buttonTheme } from "./button.theme"
|
|
4
|
+
import RLSIcon from "../icon/RLSIcon"
|
|
5
|
+
|
|
6
|
+
export interface RLSButtonProps extends ButtonProps {
|
|
7
|
+
children?: JSX.Element
|
|
8
|
+
leading?: JSX.Element
|
|
9
|
+
trailing?: JSX.Element
|
|
10
|
+
onClick?: (e: MouseEvent) => void
|
|
11
|
+
type?: "button" | "submit" | "reset"
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const RLSButton: Component<RLSButtonProps> = (allProps) => {
|
|
15
|
+
const [props, rest] = splitProps(allProps, [
|
|
16
|
+
"variant",
|
|
17
|
+
"color",
|
|
18
|
+
"size",
|
|
19
|
+
"href",
|
|
20
|
+
"label",
|
|
21
|
+
"leadingIcon",
|
|
22
|
+
"trailingIcon",
|
|
23
|
+
"loading",
|
|
24
|
+
"loadingAuto",
|
|
25
|
+
"square",
|
|
26
|
+
"block",
|
|
27
|
+
"justify",
|
|
28
|
+
"active",
|
|
29
|
+
"activeColor",
|
|
30
|
+
"activeVariant",
|
|
31
|
+
"rounded",
|
|
32
|
+
"theme",
|
|
33
|
+
"ui",
|
|
34
|
+
"class",
|
|
35
|
+
"disabled",
|
|
36
|
+
"children",
|
|
37
|
+
"leading",
|
|
38
|
+
"trailing",
|
|
39
|
+
"onClick",
|
|
40
|
+
"type",
|
|
41
|
+
"external",
|
|
42
|
+
"externalIcon",
|
|
43
|
+
"noExternalIcon",
|
|
44
|
+
"target",
|
|
45
|
+
"rel",
|
|
46
|
+
"prefetch",
|
|
47
|
+
"raw",
|
|
48
|
+
"ariaLabel",
|
|
49
|
+
"ariaCurrentValue"
|
|
50
|
+
])
|
|
51
|
+
|
|
52
|
+
const isLeading = () => !!(props.leadingIcon || props.leading) || !!props.loading
|
|
53
|
+
const isTrailing = () =>
|
|
54
|
+
!!(props.trailingIcon || props.trailing) || (!!props.loading && !isLeading())
|
|
55
|
+
|
|
56
|
+
const showLeadingIcon = () => {
|
|
57
|
+
if (props.loading) return "loaderCircle"
|
|
58
|
+
return props.leadingIcon
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const showTrailingIcon = () => {
|
|
62
|
+
if (props.loading) return "loaderCircle"
|
|
63
|
+
return props.trailingIcon
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const leadingIconClass = () => (props.loading && isLeading() ? "animate-spin" : "")
|
|
67
|
+
const trailingIconClass = () => (props.loading && isTrailing() ? "animate-spin" : "")
|
|
68
|
+
|
|
69
|
+
const classes = createMemo<Record<string, string>>(() =>
|
|
70
|
+
buttonTheme({
|
|
71
|
+
variant:
|
|
72
|
+
props.active && props.activeVariant ? props.activeVariant : (props.variant ?? "solid"),
|
|
73
|
+
color: props.active && props.activeColor ? props.activeColor : (props.color ?? "primary"),
|
|
74
|
+
size: props.size ?? "md",
|
|
75
|
+
justify: props.justify,
|
|
76
|
+
block: props.block,
|
|
77
|
+
square: props.square !== undefined ? props.square : !props.label && !props.children,
|
|
78
|
+
rounded: props.rounded,
|
|
79
|
+
leading: isLeading(),
|
|
80
|
+
trailing: isTrailing(),
|
|
81
|
+
loading: props.loading,
|
|
82
|
+
active: props.active,
|
|
83
|
+
theme: props.theme,
|
|
84
|
+
ui: props.ui,
|
|
85
|
+
class: props.class
|
|
86
|
+
})
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
if (props.href) {
|
|
90
|
+
return (
|
|
91
|
+
<a
|
|
92
|
+
href={props.href}
|
|
93
|
+
target={props.target}
|
|
94
|
+
rel={props.rel || undefined}
|
|
95
|
+
class={classes().root}
|
|
96
|
+
data-slot="root"
|
|
97
|
+
aria-label={props.ariaLabel}
|
|
98
|
+
aria-disabled={props.disabled ? "true" : undefined}
|
|
99
|
+
onClick={props.onClick}
|
|
100
|
+
{...rest}
|
|
101
|
+
>
|
|
102
|
+
{props.leading ? (
|
|
103
|
+
props.leading
|
|
104
|
+
) : isLeading() && showLeadingIcon() ? (
|
|
105
|
+
<span class={`${classes().leadingIcon} ${leadingIconClass()}`} data-slot="leading-icon">
|
|
106
|
+
<RLSIcon name={showLeadingIcon()!} size={props.size ?? "md"} aria-hidden="true" />
|
|
107
|
+
</span>
|
|
108
|
+
) : null}
|
|
109
|
+
|
|
110
|
+
{props.children !== undefined && props.children !== null ? (
|
|
111
|
+
props.children
|
|
112
|
+
) : props.label !== undefined && props.label !== null ? (
|
|
113
|
+
<span class={classes().label} data-slot="label">
|
|
114
|
+
{props.label}
|
|
115
|
+
</span>
|
|
116
|
+
) : null}
|
|
117
|
+
|
|
118
|
+
{props.trailing ? (
|
|
119
|
+
props.trailing
|
|
120
|
+
) : isTrailing() && showTrailingIcon() ? (
|
|
121
|
+
<span
|
|
122
|
+
class={`${classes().trailingIcon} ${trailingIconClass()}`}
|
|
123
|
+
data-slot="trailing-icon"
|
|
124
|
+
>
|
|
125
|
+
<RLSIcon name={showTrailingIcon()!} size={props.size ?? "md"} aria-hidden="true" />
|
|
126
|
+
</span>
|
|
127
|
+
) : null}
|
|
128
|
+
</a>
|
|
129
|
+
)
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return (
|
|
133
|
+
<button
|
|
134
|
+
type={props.type || "button"}
|
|
135
|
+
disabled={props.disabled}
|
|
136
|
+
class={classes().root}
|
|
137
|
+
data-slot="root"
|
|
138
|
+
aria-label={props.ariaLabel}
|
|
139
|
+
onClick={props.onClick}
|
|
140
|
+
{...rest}
|
|
141
|
+
>
|
|
142
|
+
{props.leading ? (
|
|
143
|
+
props.leading
|
|
144
|
+
) : isLeading() && showLeadingIcon() ? (
|
|
145
|
+
<span class={`${classes().leadingIcon} ${leadingIconClass()}`} data-slot="leading-icon">
|
|
146
|
+
<RLSIcon name={showLeadingIcon()!} size={props.size ?? "md"} aria-hidden="true" />
|
|
147
|
+
</span>
|
|
148
|
+
) : null}
|
|
149
|
+
|
|
150
|
+
{props.children !== undefined && props.children !== null ? (
|
|
151
|
+
props.children
|
|
152
|
+
) : props.label !== undefined && props.label !== null ? (
|
|
153
|
+
<span class={classes().label} data-slot="label">
|
|
154
|
+
{props.label}
|
|
155
|
+
</span>
|
|
156
|
+
) : null}
|
|
157
|
+
|
|
158
|
+
{props.trailing ? (
|
|
159
|
+
props.trailing
|
|
160
|
+
) : isTrailing() && showTrailingIcon() ? (
|
|
161
|
+
<span class={`${classes().trailingIcon} ${trailingIconClass()}`} data-slot="trailing-icon">
|
|
162
|
+
<RLSIcon name={showTrailingIcon()!} size={props.size ?? "md"} aria-hidden="true" />
|
|
163
|
+
</span>
|
|
164
|
+
) : null}
|
|
165
|
+
</button>
|
|
166
|
+
)
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
export default RLSButton
|