@rimelight/ui 0.0.33 → 0.0.34
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 +157 -157
- package/package.json +105 -105
- package/src/components/astro/RLAAspectRatio.astro +2 -2
- package/src/components/astro/RLAButton.astro +141 -139
- package/src/components/astro/RLAChart.astro +19 -34
- package/src/components/astro/RLAHead.astro +427 -196
- package/src/components/astro/RLAHeader.astro +66 -59
- package/src/components/astro/RLAImage.astro +61 -19
- package/src/components/astro/RLALink.astro +22 -23
- package/src/components/astro/RLALinkGroup.astro +66 -4
- package/src/components/astro/RLALocaleSelector.astro +136 -113
- package/src/components/astro/RLAMain.astro +8 -3
- package/src/components/astro/RLAMarquee.astro +9 -2
- package/src/components/astro/RLANavigationMenu.astro +245 -56
- package/src/components/astro/RLAPagination.astro +2 -4
- package/src/components/astro/RLAProgress.astro +8 -2
- package/src/components/astro/RLASelect.astro +38 -24
- package/src/components/astro/RLASlideover.astro +66 -1
- package/src/components/astro/RLASlider.astro +14 -14
- package/src/components/astro/RLASplitter.astro +14 -2
- package/src/components/astro/RLAStickySurface.astro +9 -2
- package/src/components/vue/RLVCheckbox.vue +68 -68
- package/src/components/vue/RLVForm.vue +44 -44
- package/src/components/vue/RLVFormField.vue +58 -58
- package/src/components/vue/RLVInput.vue +93 -93
- package/src/components/vue/RLVPost.vue +63 -63
- package/src/components/vue/RLVPosts.vue +21 -21
- package/src/components/vue/RLVToast.vue +68 -68
- package/src/components/vue/RLVToaster.vue +29 -29
- package/src/composables/index.ts +3 -3
- package/src/composables/useHeaderStore.ts +13 -14
- package/src/composables/useScrollToTop.ts +62 -62
- package/src/composables/useToast.ts +43 -42
- package/src/config/index.ts +1 -0
- package/src/config/security.ts +220 -0
- package/src/integrations/ui.ts +199 -199
- package/src/middleware/security.ts +75 -15
- package/src/plugins/index.ts +2 -2
- package/src/plugins/starlightDocsApi/index.ts +272 -272
- package/src/presets/defaults.ts +297 -297
- package/src/presets/index.ts +683 -637
- package/src/styles/index.css +160 -160
- package/src/themes/3d-hover.theme.ts +13 -13
- package/src/themes/accordion.theme.ts +13 -13
- package/src/themes/alert.theme.ts +131 -125
- package/src/themes/app.theme.ts +13 -13
- package/src/themes/audio.theme.ts +13 -13
- package/src/themes/avatar.theme.ts +84 -84
- package/src/themes/badge.theme.ts +169 -163
- package/src/themes/banner.theme.ts +13 -13
- package/src/themes/browser-mockup.theme.ts +13 -13
- package/src/themes/button.theme.ts +224 -202
- package/src/themes/calendar.theme.ts +13 -13
- package/src/themes/card.theme.ts +42 -42
- package/src/themes/changelog.theme.ts +13 -13
- package/src/themes/chart.theme.ts +22 -22
- package/src/themes/chat-message.theme.ts +13 -13
- package/src/themes/chat-messages.theme.ts +13 -13
- package/src/themes/chat-palette.theme.ts +13 -13
- package/src/themes/chat-prompt-submit.theme.ts +13 -13
- package/src/themes/chat-prompt.theme.ts +13 -13
- package/src/themes/chat-reasoning.theme.ts +13 -13
- package/src/themes/chat-shimmer.theme.ts +13 -13
- package/src/themes/chat-tool.theme.ts +13 -13
- package/src/themes/chat.theme.ts +13 -13
- package/src/themes/checkbox.theme.ts +50 -50
- package/src/themes/chip.theme.ts +74 -74
- package/src/themes/color-picker.theme.ts +13 -13
- package/src/themes/command-palette.theme.ts +13 -13
- package/src/themes/compare.theme.ts +13 -13
- package/src/themes/confirm.theme.ts +48 -48
- package/src/themes/container.theme.ts +13 -13
- package/src/themes/context-menu.theme.ts +13 -13
- package/src/themes/dashboard-group.theme.ts +13 -13
- package/src/themes/dashboard-navbar.theme.ts +13 -13
- package/src/themes/dashboard-panel.theme.ts +13 -13
- package/src/themes/dashboard-resize-handle.theme.ts +13 -13
- package/src/themes/dashboard-search-button.theme.ts +13 -13
- package/src/themes/dashboard-search.theme.ts +13 -13
- package/src/themes/dashboard-sidebar-collapse.theme.ts +13 -13
- package/src/themes/dashboard-sidebar-toggle.theme.ts +13 -13
- package/src/themes/dashboard-sidebar.theme.ts +13 -13
- package/src/themes/dashboard-toolbar.theme.ts +13 -13
- package/src/themes/dock.theme.ts +13 -13
- package/src/themes/drawer.theme.ts +61 -61
- package/src/themes/dropdown-menu.theme.ts +29 -29
- package/src/themes/editor.theme.ts +13 -13
- package/src/themes/empty.theme.ts +13 -13
- package/src/themes/error.theme.ts +13 -13
- package/src/themes/field-group.theme.ts +24 -24
- package/src/themes/fieldset.theme.ts +13 -13
- package/src/themes/floating-action.theme.ts +13 -13
- package/src/themes/footer.theme.ts +30 -30
- package/src/themes/form.theme.ts +13 -13
- package/src/themes/gallery.theme.ts +13 -13
- package/src/themes/head.theme.ts +13 -13
- package/src/themes/header.theme.ts +45 -46
- package/src/themes/icon.theme.ts +23 -23
- package/src/themes/image.theme.ts +23 -19
- package/src/themes/input-date.theme.ts +13 -13
- package/src/themes/input-menu.theme.ts +35 -35
- package/src/themes/input-number.theme.ts +13 -13
- package/src/themes/input-tags.theme.ts +13 -13
- package/src/themes/input-time.theme.ts +13 -13
- package/src/themes/input.theme.ts +42 -42
- package/src/themes/kbd.theme.ts +95 -89
- package/src/themes/knob.theme.ts +13 -13
- package/src/themes/link-group.theme.ts +32 -32
- package/src/themes/link.theme.ts +13 -13
- package/src/themes/listbox.theme.ts +13 -13
- package/src/themes/locale-selector.theme.ts +49 -49
- package/src/themes/logo.theme.ts +13 -13
- package/src/themes/main.theme.ts +13 -13
- package/src/themes/megamenu.theme.ts +13 -13
- package/src/themes/meter.theme.ts +13 -13
- package/src/themes/navigation-menu.theme.ts +44 -27
- package/src/themes/page-aside.theme.ts +13 -13
- package/src/themes/page-body.theme.ts +13 -13
- package/src/themes/page-header.theme.ts +13 -13
- package/src/themes/page-section.theme.ts +187 -187
- package/src/themes/page.theme.ts +13 -13
- package/src/themes/password.theme.ts +13 -13
- package/src/themes/phone-mockup.theme.ts +13 -13
- package/src/themes/placeholder.theme.ts +15 -15
- package/src/themes/post.theme.ts +33 -33
- package/src/themes/pricing-plan.theme.ts +13 -13
- package/src/themes/pricing-table.theme.ts +13 -13
- package/src/themes/progress.theme.ts +38 -38
- package/src/themes/prose.theme.ts +13 -13
- package/src/themes/qr-code.theme.ts +13 -13
- package/src/themes/quote.theme.ts +13 -13
- package/src/themes/radio-group.theme.ts +13 -13
- package/src/themes/rating.theme.ts +13 -13
- package/src/themes/scroll-area.theme.ts +26 -26
- package/src/themes/scroll-to-top.theme.ts +52 -52
- package/src/themes/select.theme.ts +29 -29
- package/src/themes/separator.theme.ts +147 -147
- package/src/themes/sidebar.theme.ts +38 -38
- package/src/themes/skeleton.theme.ts +21 -21
- package/src/themes/slideover.theme.ts +4 -4
- package/src/themes/slider.theme.ts +36 -36
- package/src/themes/speed-dial.theme.ts +13 -13
- package/src/themes/spinner.theme.ts +34 -34
- package/src/themes/splitter.theme.ts +23 -23
- package/src/themes/spoiler.theme.ts +13 -13
- package/src/themes/stepper.theme.ts +13 -13
- package/src/themes/switch.theme.ts +67 -67
- package/src/themes/table-of-contents.theme.ts +48 -48
- package/src/themes/tabs.theme.ts +52 -52
- package/src/themes/textarea.theme.ts +27 -27
- package/src/themes/theme-selector.theme.ts +15 -15
- package/src/themes/timeline.theme.ts +13 -13
- package/src/themes/toast.theme.ts +31 -31
- package/src/themes/tooltip.theme.ts +28 -28
- package/src/themes/tour.theme.ts +13 -13
- package/src/themes/tree.theme.ts +13 -13
- package/src/themes/user.theme.ts +13 -13
- package/src/themes/video.theme.ts +17 -17
- package/src/themes/watermark.theme.ts +13 -13
- package/src/themes/window-mockup.theme.ts +13 -13
- package/src/types/components/3d-hover.ts +11 -11
- package/src/types/components/alert.ts +2 -2
- package/src/types/components/app.ts +11 -11
- package/src/types/components/audio.ts +11 -11
- package/src/types/components/avatar-group.ts +11 -11
- package/src/types/components/avatar.ts +60 -60
- package/src/types/components/badge.ts +2 -2
- package/src/types/components/banner.ts +11 -11
- package/src/types/components/browser-mockup.ts +11 -11
- package/src/types/components/button.ts +74 -81
- package/src/types/components/calendar.ts +11 -11
- package/src/types/components/changelog.ts +11 -11
- package/src/types/components/chart.ts +2 -1
- package/src/types/components/chat-message.ts +11 -11
- package/src/types/components/chat-messages.ts +11 -11
- package/src/types/components/chat-palette.ts +11 -11
- package/src/types/components/chat-prompt-submit.ts +11 -11
- package/src/types/components/chat-prompt.ts +11 -11
- package/src/types/components/chat-reasoning.ts +11 -11
- package/src/types/components/chat-shimmer.ts +11 -11
- package/src/types/components/chat-tool.ts +11 -11
- package/src/types/components/chat.ts +11 -11
- package/src/types/components/checkbox.ts +2 -2
- package/src/types/components/chip.ts +17 -17
- package/src/types/components/collapsible.ts +2 -1
- package/src/types/components/color-picker.ts +11 -11
- package/src/types/components/command-palette.ts +11 -11
- package/src/types/components/compare.ts +11 -11
- package/src/types/components/container.ts +17 -17
- package/src/types/components/context-menu.ts +11 -11
- package/src/types/components/dashboard-group.ts +11 -11
- package/src/types/components/dashboard-navbar.ts +11 -11
- package/src/types/components/dashboard-panel.ts +11 -11
- package/src/types/components/dashboard-resize-handle.ts +11 -11
- package/src/types/components/dashboard-search-button.ts +11 -11
- package/src/types/components/dashboard-search.ts +11 -11
- package/src/types/components/dashboard-sidebar-collapse.ts +11 -11
- package/src/types/components/dashboard-sidebar-toggle.ts +11 -11
- package/src/types/components/dashboard-sidebar.ts +11 -11
- package/src/types/components/dashboard-toolbar.ts +11 -11
- package/src/types/components/dock.ts +11 -11
- package/src/types/components/dropdown-menu.ts +2 -1
- package/src/types/components/editor.ts +11 -11
- package/src/types/components/empty.ts +11 -11
- package/src/types/components/error.ts +11 -11
- package/src/types/components/fieldset.ts +11 -11
- package/src/types/components/file-upload.ts +2 -1
- package/src/types/components/floating-action.ts +11 -11
- package/src/types/components/form.ts +19 -19
- package/src/types/components/gallery.ts +11 -11
- package/src/types/components/icon.ts +19 -19
- package/src/types/components/image.ts +32 -28
- package/src/types/components/index.ts +134 -135
- package/src/types/components/input-date.ts +11 -11
- package/src/types/components/input-menu.ts +44 -43
- package/src/types/components/input-number.ts +11 -11
- package/src/types/components/input-pin.ts +36 -35
- package/src/types/components/input-tags.ts +11 -11
- package/src/types/components/input-time.ts +11 -11
- package/src/types/components/input.ts +2 -2
- package/src/types/components/knob.ts +11 -11
- package/src/types/components/link-group.ts +45 -23
- package/src/types/components/link.ts +4 -0
- package/src/types/components/listbox.ts +11 -11
- package/src/types/components/locale-selector.ts +33 -33
- package/src/types/components/logo.ts +32 -31
- package/src/types/components/main.ts +17 -17
- package/src/types/components/megamenu.ts +11 -11
- package/src/types/components/meter.ts +11 -11
- package/src/types/components/modal.ts +39 -39
- package/src/types/components/navigation-menu.ts +59 -54
- package/src/types/components/page-aside.ts +11 -11
- package/src/types/components/page-body.ts +11 -11
- package/src/types/components/page-header.ts +11 -11
- package/src/types/components/page.ts +11 -11
- package/src/types/components/password.ts +11 -11
- package/src/types/components/phone-mockup.ts +5 -5
- package/src/types/components/pin-input.ts +11 -11
- package/src/types/components/popover.ts +23 -23
- package/src/types/components/post.ts +35 -35
- package/src/types/components/pricing-plan.ts +11 -11
- package/src/types/components/pricing-table.ts +11 -11
- package/src/types/components/progress.ts +33 -33
- package/src/types/components/prose.ts +11 -11
- package/src/types/components/qr-code.ts +11 -11
- package/src/types/components/radio-group.ts +11 -11
- package/src/types/components/rating.ts +11 -11
- package/src/types/components/scroll-area.ts +23 -23
- package/src/types/components/scroll-to-top.ts +2 -2
- package/src/types/components/select.ts +2 -1
- package/src/types/components/separator.ts +19 -19
- package/src/types/components/sidebar.ts +87 -72
- package/src/types/components/slideover.ts +31 -31
- package/src/types/components/slider.ts +2 -2
- package/src/types/components/speed-dial.ts +11 -11
- package/src/types/components/spinner.ts +25 -25
- package/src/types/components/splitter.ts +19 -19
- package/src/types/components/spoiler.ts +11 -11
- package/src/types/components/stepper.ts +11 -11
- package/src/types/components/sticky-surface.ts +19 -19
- package/src/types/components/switch.ts +41 -41
- package/src/types/components/table-of-contents.ts +17 -17
- package/src/types/components/tabs.ts +2 -1
- package/src/types/components/textarea.ts +2 -1
- package/src/types/components/theme-selector.ts +15 -15
- package/src/types/components/timeline.ts +11 -11
- package/src/types/components/toast.ts +2 -1
- package/src/types/components/tooltip.ts +23 -23
- package/src/types/components/tour.ts +11 -11
- package/src/types/components/tree.ts +11 -11
- package/src/types/components/user.ts +11 -11
- package/src/types/components/watermark.ts +11 -11
- package/src/types/components/window-mockup.ts +11 -11
- package/src/types/theme.ts +10 -0
- package/src/utils/docs.ts +215 -189
- package/src/utils/headerStack.ts +95 -95
- package/src/utils/index.ts +5 -5
- package/src/components/astro/RLABlogPost.astro +0 -7
- package/src/components/astro/RLABlogPosts.astro +0 -9
- package/src/components/astro/RLAPosts.astro +0 -23
- package/src/themes/posts.theme.ts +0 -13
- package/src/types/components/posts.ts +0 -11
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export interface TimelineProps {
|
|
2
|
-
/**
|
|
3
|
-
* Slot-specific CSS class overrides.
|
|
4
|
-
*/
|
|
5
|
-
ui?: any
|
|
6
|
-
/**
|
|
7
|
-
* Additional CSS classes to apply to the root element.
|
|
8
|
-
*/
|
|
9
|
-
class?: any
|
|
10
|
-
[key: string]: unknown
|
|
11
|
-
}
|
|
1
|
+
export interface TimelineProps {
|
|
2
|
+
/**
|
|
3
|
+
* Slot-specific CSS class overrides.
|
|
4
|
+
*/
|
|
5
|
+
ui?: any
|
|
6
|
+
/**
|
|
7
|
+
* Additional CSS classes to apply to the root element.
|
|
8
|
+
*/
|
|
9
|
+
class?: any
|
|
10
|
+
[key: string]: unknown
|
|
11
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ThemeColor } from "../theme"
|
|
1
2
|
export interface ToastProps {
|
|
2
3
|
/**
|
|
3
4
|
* Main toast title.
|
|
@@ -22,7 +23,7 @@ export interface ToastProps {
|
|
|
22
23
|
/**
|
|
23
24
|
* Color theme.
|
|
24
25
|
*/
|
|
25
|
-
color?:
|
|
26
|
+
color?: ThemeColor
|
|
26
27
|
/**
|
|
27
28
|
* Slot-specific CSS class overrides.
|
|
28
29
|
*/
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
export interface TooltipProps {
|
|
2
|
-
/**
|
|
3
|
-
* The text content to display inside the tooltip.
|
|
4
|
-
*/
|
|
5
|
-
content?: string
|
|
6
|
-
/**
|
|
7
|
-
* Controlled open state.
|
|
8
|
-
*/
|
|
9
|
-
open?: boolean
|
|
10
|
-
/**
|
|
11
|
-
* Placement of the tooltip relative to the trigger.
|
|
12
|
-
*/
|
|
13
|
-
placement?: "top" | "bottom" | "left" | "right"
|
|
14
|
-
/**
|
|
15
|
-
* Slot-specific CSS class overrides.
|
|
16
|
-
*/
|
|
17
|
-
ui?: any
|
|
18
|
-
/**
|
|
19
|
-
* Additional CSS classes to apply to the root element.
|
|
20
|
-
*/
|
|
21
|
-
class?: any
|
|
22
|
-
[key: string]: unknown
|
|
23
|
-
}
|
|
1
|
+
export interface TooltipProps {
|
|
2
|
+
/**
|
|
3
|
+
* The text content to display inside the tooltip.
|
|
4
|
+
*/
|
|
5
|
+
content?: string
|
|
6
|
+
/**
|
|
7
|
+
* Controlled open state.
|
|
8
|
+
*/
|
|
9
|
+
open?: boolean
|
|
10
|
+
/**
|
|
11
|
+
* Placement of the tooltip relative to the trigger.
|
|
12
|
+
*/
|
|
13
|
+
placement?: "top" | "bottom" | "left" | "right"
|
|
14
|
+
/**
|
|
15
|
+
* Slot-specific CSS class overrides.
|
|
16
|
+
*/
|
|
17
|
+
ui?: any
|
|
18
|
+
/**
|
|
19
|
+
* Additional CSS classes to apply to the root element.
|
|
20
|
+
*/
|
|
21
|
+
class?: any
|
|
22
|
+
[key: string]: unknown
|
|
23
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export interface TourProps {
|
|
2
|
-
/**
|
|
3
|
-
* Slot-specific CSS class overrides.
|
|
4
|
-
*/
|
|
5
|
-
ui?: any
|
|
6
|
-
/**
|
|
7
|
-
* Additional CSS classes to apply to the root element.
|
|
8
|
-
*/
|
|
9
|
-
class?: any
|
|
10
|
-
[key: string]: unknown
|
|
11
|
-
}
|
|
1
|
+
export interface TourProps {
|
|
2
|
+
/**
|
|
3
|
+
* Slot-specific CSS class overrides.
|
|
4
|
+
*/
|
|
5
|
+
ui?: any
|
|
6
|
+
/**
|
|
7
|
+
* Additional CSS classes to apply to the root element.
|
|
8
|
+
*/
|
|
9
|
+
class?: any
|
|
10
|
+
[key: string]: unknown
|
|
11
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export interface TreeProps {
|
|
2
|
-
/**
|
|
3
|
-
* Slot-specific CSS class overrides.
|
|
4
|
-
*/
|
|
5
|
-
ui?: any
|
|
6
|
-
/**
|
|
7
|
-
* Additional CSS classes to apply to the root element.
|
|
8
|
-
*/
|
|
9
|
-
class?: any
|
|
10
|
-
[key: string]: unknown
|
|
11
|
-
}
|
|
1
|
+
export interface TreeProps {
|
|
2
|
+
/**
|
|
3
|
+
* Slot-specific CSS class overrides.
|
|
4
|
+
*/
|
|
5
|
+
ui?: any
|
|
6
|
+
/**
|
|
7
|
+
* Additional CSS classes to apply to the root element.
|
|
8
|
+
*/
|
|
9
|
+
class?: any
|
|
10
|
+
[key: string]: unknown
|
|
11
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export interface UserProps {
|
|
2
|
-
/**
|
|
3
|
-
* Slot-specific CSS class overrides.
|
|
4
|
-
*/
|
|
5
|
-
ui?: any
|
|
6
|
-
/**
|
|
7
|
-
* Additional CSS classes to apply to the root element.
|
|
8
|
-
*/
|
|
9
|
-
class?: any
|
|
10
|
-
[key: string]: unknown
|
|
11
|
-
}
|
|
1
|
+
export interface UserProps {
|
|
2
|
+
/**
|
|
3
|
+
* Slot-specific CSS class overrides.
|
|
4
|
+
*/
|
|
5
|
+
ui?: any
|
|
6
|
+
/**
|
|
7
|
+
* Additional CSS classes to apply to the root element.
|
|
8
|
+
*/
|
|
9
|
+
class?: any
|
|
10
|
+
[key: string]: unknown
|
|
11
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export interface WatermarkProps {
|
|
2
|
-
/**
|
|
3
|
-
* Slot-specific CSS class overrides.
|
|
4
|
-
*/
|
|
5
|
-
ui?: any
|
|
6
|
-
/**
|
|
7
|
-
* Additional CSS classes to apply to the root element.
|
|
8
|
-
*/
|
|
9
|
-
class?: any
|
|
10
|
-
[key: string]: unknown
|
|
11
|
-
}
|
|
1
|
+
export interface WatermarkProps {
|
|
2
|
+
/**
|
|
3
|
+
* Slot-specific CSS class overrides.
|
|
4
|
+
*/
|
|
5
|
+
ui?: any
|
|
6
|
+
/**
|
|
7
|
+
* Additional CSS classes to apply to the root element.
|
|
8
|
+
*/
|
|
9
|
+
class?: any
|
|
10
|
+
[key: string]: unknown
|
|
11
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export interface WindowMockupProps {
|
|
2
|
-
/**
|
|
3
|
-
* Slot-specific CSS class overrides.
|
|
4
|
-
*/
|
|
5
|
-
ui?: any
|
|
6
|
-
/**
|
|
7
|
-
* Additional CSS classes to apply to the root element.
|
|
8
|
-
*/
|
|
9
|
-
class?: any
|
|
10
|
-
[key: string]: unknown
|
|
11
|
-
}
|
|
1
|
+
export interface WindowMockupProps {
|
|
2
|
+
/**
|
|
3
|
+
* Slot-specific CSS class overrides.
|
|
4
|
+
*/
|
|
5
|
+
ui?: any
|
|
6
|
+
/**
|
|
7
|
+
* Additional CSS classes to apply to the root element.
|
|
8
|
+
*/
|
|
9
|
+
class?: any
|
|
10
|
+
[key: string]: unknown
|
|
11
|
+
}
|
package/src/types/theme.ts
CHANGED
package/src/utils/docs.ts
CHANGED
|
@@ -1,189 +1,215 @@
|
|
|
1
|
-
import type { DocsConfig, BadgeConfig } from "../types"
|
|
2
|
-
|
|
3
|
-
export function defineDocsConfig(config: DocsConfig): DocsConfig {
|
|
4
|
-
return config
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
|
|
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
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
)
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
}
|
|
189
|
-
|
|
1
|
+
import type { DocsConfig, BadgeConfig } from "../types"
|
|
2
|
+
|
|
3
|
+
export function defineDocsConfig(config: DocsConfig): DocsConfig {
|
|
4
|
+
return config
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Strip a leading numeric sort prefix from a filename id, e.g. "01.getting-started" →
|
|
9
|
+
* "getting-started"
|
|
10
|
+
*/
|
|
11
|
+
function stripNumericPrefix(id: string): string {
|
|
12
|
+
return id.replace(/^(\d+\.)+/, "")
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Extract a numeric sort key from a doc id for numeric-prefix sorting
|
|
17
|
+
*/
|
|
18
|
+
function numericPrefixOrder(id: string): number {
|
|
19
|
+
const segment = id.split("/").pop() ?? id
|
|
20
|
+
const m = segment.match(/^(\d+)\./)
|
|
21
|
+
return m ? parseInt(m[1], 10) : Infinity
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface ResolvedSidebarItem {
|
|
25
|
+
label: string
|
|
26
|
+
href?: string
|
|
27
|
+
icon?: string
|
|
28
|
+
badge?: string | BadgeConfig
|
|
29
|
+
active?: boolean
|
|
30
|
+
children?: ResolvedSidebarItem[]
|
|
31
|
+
collapsed?: boolean
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface ResolvedScope {
|
|
35
|
+
id: string
|
|
36
|
+
label: string
|
|
37
|
+
href: string
|
|
38
|
+
icon?: string
|
|
39
|
+
active?: boolean
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export async function getDocsSidebar(
|
|
43
|
+
config: DocsConfig,
|
|
44
|
+
locale: string,
|
|
45
|
+
currentPath: string,
|
|
46
|
+
getCollection: (name: string) => Promise<any[]>
|
|
47
|
+
): Promise<{
|
|
48
|
+
items: ResolvedSidebarItem[]
|
|
49
|
+
scopes: ResolvedScope[]
|
|
50
|
+
activeScope?: ResolvedScope
|
|
51
|
+
}> {
|
|
52
|
+
const docs = await getCollection("docs")
|
|
53
|
+
const normPath = currentPath.replace(/\/$/, "").toLowerCase()
|
|
54
|
+
const docsBase = `/${locale}/docs`
|
|
55
|
+
|
|
56
|
+
const sidebarScopes: import("../types").SidebarScope[] = Array.isArray(config.sidebar)
|
|
57
|
+
? config.sidebar.filter(
|
|
58
|
+
(item): item is import("../types").SidebarScope => "id" in item || "scopes" in item
|
|
59
|
+
)
|
|
60
|
+
: (config.sidebar as any)?.scopes || []
|
|
61
|
+
|
|
62
|
+
const scopes: ResolvedScope[] = sidebarScopes.map((scope) => {
|
|
63
|
+
const id = scope.id || scope.label
|
|
64
|
+
let href = scope.href || ""
|
|
65
|
+
if (!href && scope.items && scope.items.length > 0) {
|
|
66
|
+
href = scope.items[0].href || ""
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
id,
|
|
70
|
+
label: scope.label,
|
|
71
|
+
href: href.replace("{locale}", locale),
|
|
72
|
+
icon: scope.icon
|
|
73
|
+
}
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
function isDocInItems(
|
|
77
|
+
items: import("../types").SidebarItem[],
|
|
78
|
+
docId: string | undefined,
|
|
79
|
+
href: string
|
|
80
|
+
): boolean {
|
|
81
|
+
for (const item of items) {
|
|
82
|
+
if (item.href && item.href.toLowerCase().replace(/\/$/, "") === href) return true
|
|
83
|
+
if (item.autogenerate && docId) {
|
|
84
|
+
const dir = item.autogenerate.directory.replace(/\/$/, "")
|
|
85
|
+
if (dir === "") {
|
|
86
|
+
if (!docId.includes("/")) return true
|
|
87
|
+
} else if (docId.startsWith(dir + "/") || docId === dir) {
|
|
88
|
+
return true
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const childItems = item.children || item.items
|
|
92
|
+
if (childItems && isDocInItems(childItems, docId, href)) return true
|
|
93
|
+
}
|
|
94
|
+
return false
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Find active scope — most-specific prefix match, fallback to scanning scope items
|
|
98
|
+
let activeScope = scopes.find((s) => normPath === s.href.replace(/\/$/, "").toLowerCase())
|
|
99
|
+
if (!activeScope) {
|
|
100
|
+
const currentDoc = docs.find((d) => `${docsBase}/${d.id}`.toLowerCase() === normPath)
|
|
101
|
+
const scopeMatch = sidebarScopes.find((s) => {
|
|
102
|
+
return isDocInItems(s.items || [], currentDoc?.id, normPath)
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
if (scopeMatch) {
|
|
106
|
+
const matchId = scopeMatch.id || scopeMatch.label
|
|
107
|
+
activeScope = scopes.find((s) => s.id === matchId)
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (!activeScope) {
|
|
111
|
+
activeScope = [...scopes]
|
|
112
|
+
.toSorted((a, b) => b.href.length - a.href.length)
|
|
113
|
+
.find((s) => normPath.startsWith(s.href.toLowerCase()))
|
|
114
|
+
}
|
|
115
|
+
if (activeScope) activeScope.active = true
|
|
116
|
+
|
|
117
|
+
const sidebarConfig = sidebarScopes.find(
|
|
118
|
+
(item) => activeScope && (item.id === activeScope.id || item.label === activeScope.id)
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
const items = sidebarConfig?.items || []
|
|
122
|
+
|
|
123
|
+
async function resolveItem(item: import("../types").SidebarItem): Promise<ResolvedSidebarItem[]> {
|
|
124
|
+
if (item.autogenerate) {
|
|
125
|
+
const dir = item.autogenerate.directory
|
|
126
|
+
// Match docs whose id starts with the directory
|
|
127
|
+
const prefix = dir.replace(/\/$/, "")
|
|
128
|
+
const filteredDocs = docs.filter((d) => {
|
|
129
|
+
if (d.data.sidebar?.hidden === true) return false
|
|
130
|
+
if (prefix === "") return !d.id.includes("/")
|
|
131
|
+
return d.id.startsWith(prefix + "/") || d.id === prefix
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
filteredDocs.sort((a, b) => {
|
|
135
|
+
// 1. Frontmatter `order` takes priority
|
|
136
|
+
const aOrder = a.data.sidebar?.order ?? a.data.order ?? numericPrefixOrder(a.id)
|
|
137
|
+
const bOrder = b.data.sidebar?.order ?? b.data.order ?? numericPrefixOrder(b.id)
|
|
138
|
+
if (aOrder !== bOrder) return aOrder - bOrder
|
|
139
|
+
// 2. Fall back to alphabetical by stripped label
|
|
140
|
+
const aLabel = a.data.sidebar?.label ?? a.data.title
|
|
141
|
+
const bLabel = b.data.sidebar?.label ?? b.data.title
|
|
142
|
+
return stripNumericPrefix(aLabel).localeCompare(stripNumericPrefix(bLabel))
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
return filteredDocs.map((doc) => {
|
|
146
|
+
const href = `${docsBase}/${doc.id}/`
|
|
147
|
+
const badge =
|
|
148
|
+
doc.data.sidebar?.badge ?? (doc.data.badge as string | BadgeConfig | undefined)
|
|
149
|
+
return {
|
|
150
|
+
label: doc.data.sidebar?.label ?? doc.data.title,
|
|
151
|
+
href,
|
|
152
|
+
badge,
|
|
153
|
+
active: normPath === href.replace(/\/$/, "").toLowerCase()
|
|
154
|
+
}
|
|
155
|
+
})
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const resolved: ResolvedSidebarItem = {
|
|
159
|
+
label: item.label,
|
|
160
|
+
href: item.href ? item.href.replace("{locale}", locale) : undefined,
|
|
161
|
+
icon: item.icon,
|
|
162
|
+
badge: item.badge,
|
|
163
|
+
collapsed: item.collapsed
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
if (resolved.href) {
|
|
167
|
+
resolved.active = normPath === resolved.href.replace(/\/$/, "").toLowerCase()
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const childItems = item.children || item.items
|
|
171
|
+
if (childItems) {
|
|
172
|
+
const children: ResolvedSidebarItem[] = []
|
|
173
|
+
for (const child of childItems) {
|
|
174
|
+
children.push(...(await resolveItem(child)))
|
|
175
|
+
}
|
|
176
|
+
resolved.children = children
|
|
177
|
+
if (!resolved.active) {
|
|
178
|
+
resolved.active = children.some((c) => c.active)
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return [resolved]
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const resolvedItems: ResolvedSidebarItem[] = []
|
|
186
|
+
for (const item of items) {
|
|
187
|
+
resolvedItems.push(...(await resolveItem(item)))
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return { items: resolvedItems, scopes, activeScope }
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export function getSurroundItems(sidebar: ResolvedSidebarItem[], currentPath: string) {
|
|
194
|
+
const flatItems: { label: string; href: string }[] = []
|
|
195
|
+
|
|
196
|
+
function flatten(items: ResolvedSidebarItem[]) {
|
|
197
|
+
for (const item of items) {
|
|
198
|
+
if (item.href) flatItems.push({ label: item.label, href: item.href })
|
|
199
|
+
if (item.children) flatten(item.children)
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
flatten(sidebar)
|
|
204
|
+
|
|
205
|
+
const normPath = currentPath.replace(/\/$/, "").toLowerCase()
|
|
206
|
+
const currentIndex = flatItems.findIndex(
|
|
207
|
+
(item) => item.href.replace(/\/$/, "").toLowerCase() === normPath
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
return {
|
|
211
|
+
prev: currentIndex > 0 ? flatItems[currentIndex - 1] : null,
|
|
212
|
+
next:
|
|
213
|
+
currentIndex >= 0 && currentIndex < flatItems.length - 1 ? flatItems[currentIndex + 1] : null
|
|
214
|
+
}
|
|
215
|
+
}
|