@poodle64/ui 2026.8.7
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 +624 -0
- package/dist/components/ui/alert/alert-description.svelte +23 -0
- package/dist/components/ui/alert/alert-description.svelte.d.ts +9 -0
- package/dist/components/ui/alert/alert-title.svelte +23 -0
- package/dist/components/ui/alert/alert-title.svelte.d.ts +9 -0
- package/dist/components/ui/alert/alert.svelte +46 -0
- package/dist/components/ui/alert/alert.svelte.d.ts +28 -0
- package/dist/components/ui/alert/index.d.ts +4 -0
- package/dist/components/ui/alert/index.js +4 -0
- package/dist/components/ui/alert-dialog/alert-dialog-action.svelte +27 -0
- package/dist/components/ui/alert-dialog/alert-dialog-action.svelte.d.ts +9 -0
- package/dist/components/ui/alert-dialog/alert-dialog-cancel.svelte +27 -0
- package/dist/components/ui/alert-dialog/alert-dialog-cancel.svelte.d.ts +9 -0
- package/dist/components/ui/alert-dialog/alert-dialog-content.svelte +39 -0
- package/dist/components/ui/alert-dialog/alert-dialog-content.svelte.d.ts +11 -0
- package/dist/components/ui/alert-dialog/alert-dialog-description.svelte +20 -0
- package/dist/components/ui/alert-dialog/alert-dialog-description.svelte.d.ts +4 -0
- package/dist/components/ui/alert-dialog/alert-dialog-footer.svelte +23 -0
- package/dist/components/ui/alert-dialog/alert-dialog-footer.svelte.d.ts +5 -0
- package/dist/components/ui/alert-dialog/alert-dialog-header.svelte +23 -0
- package/dist/components/ui/alert-dialog/alert-dialog-header.svelte.d.ts +5 -0
- package/dist/components/ui/alert-dialog/alert-dialog-media.svelte +23 -0
- package/dist/components/ui/alert-dialog/alert-dialog-media.svelte.d.ts +5 -0
- package/dist/components/ui/alert-dialog/alert-dialog-overlay.svelte +20 -0
- package/dist/components/ui/alert-dialog/alert-dialog-overlay.svelte.d.ts +4 -0
- package/dist/components/ui/alert-dialog/alert-dialog-portal.svelte +7 -0
- package/dist/components/ui/alert-dialog/alert-dialog-portal.svelte.d.ts +3 -0
- package/dist/components/ui/alert-dialog/alert-dialog-title.svelte +20 -0
- package/dist/components/ui/alert-dialog/alert-dialog-title.svelte.d.ts +4 -0
- package/dist/components/ui/alert-dialog/alert-dialog-trigger.svelte +7 -0
- package/dist/components/ui/alert-dialog/alert-dialog-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/alert-dialog/alert-dialog.svelte +7 -0
- package/dist/components/ui/alert-dialog/alert-dialog.svelte.d.ts +3 -0
- package/dist/components/ui/alert-dialog/index.d.ts +13 -0
- package/dist/components/ui/alert-dialog/index.js +15 -0
- package/dist/components/ui/app-dialog/app-dialog.svelte +111 -0
- package/dist/components/ui/app-dialog/app-dialog.svelte.d.ts +41 -0
- package/dist/components/ui/app-dialog/index.d.ts +2 -0
- package/dist/components/ui/app-dialog/index.js +2 -0
- package/dist/components/ui/app-shell/app-nav.svelte +299 -0
- package/dist/components/ui/app-shell/app-nav.svelte.d.ts +22 -0
- package/dist/components/ui/app-shell/app-shell.svelte +675 -0
- package/dist/components/ui/app-shell/app-shell.svelte.d.ts +157 -0
- package/dist/components/ui/app-shell/index.d.ts +6 -0
- package/dist/components/ui/app-shell/index.js +6 -0
- package/dist/components/ui/app-shell/measure.d.ts +28 -0
- package/dist/components/ui/app-shell/measure.js +21 -0
- package/dist/components/ui/app-shell/texture.d.ts +32 -0
- package/dist/components/ui/app-shell/texture.js +27 -0
- package/dist/components/ui/app-shell/types.d.ts +134 -0
- package/dist/components/ui/app-shell/types.js +88 -0
- package/dist/components/ui/arc-gauge/arc-gauge.svelte +112 -0
- package/dist/components/ui/arc-gauge/arc-gauge.svelte.d.ts +15 -0
- package/dist/components/ui/arc-gauge/index.d.ts +3 -0
- package/dist/components/ui/arc-gauge/index.js +2 -0
- package/dist/components/ui/avatar/avatar-fallback.svelte +26 -0
- package/dist/components/ui/avatar/avatar-fallback.svelte.d.ts +4 -0
- package/dist/components/ui/avatar/avatar-image.svelte +17 -0
- package/dist/components/ui/avatar/avatar-image.svelte.d.ts +4 -0
- package/dist/components/ui/avatar/avatar.svelte +31 -0
- package/dist/components/ui/avatar/avatar.svelte.d.ts +4 -0
- package/dist/components/ui/avatar/index.d.ts +4 -0
- package/dist/components/ui/avatar/index.js +6 -0
- package/dist/components/ui/badge/badge.svelte +50 -0
- package/dist/components/ui/badge/badge.svelte.d.ts +38 -0
- package/dist/components/ui/badge/index.d.ts +2 -0
- package/dist/components/ui/badge/index.js +2 -0
- package/dist/components/ui/bar-row/bar-row.svelte +42 -0
- package/dist/components/ui/bar-row/bar-row.svelte.d.ts +12 -0
- package/dist/components/ui/bar-row/index.d.ts +2 -0
- package/dist/components/ui/bar-row/index.js +2 -0
- package/dist/components/ui/button/button.svelte +89 -0
- package/dist/components/ui/button/button.svelte.d.ts +70 -0
- package/dist/components/ui/button/index.d.ts +2 -0
- package/dist/components/ui/button/index.js +4 -0
- package/dist/components/ui/card/card-action.svelte +23 -0
- package/dist/components/ui/card/card-action.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-content.svelte +20 -0
- package/dist/components/ui/card/card-content.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-description.svelte +20 -0
- package/dist/components/ui/card/card-description.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-footer.svelte +23 -0
- package/dist/components/ui/card/card-footer.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-header.svelte +23 -0
- package/dist/components/ui/card/card-header.svelte.d.ts +5 -0
- package/dist/components/ui/card/card-title.svelte +52 -0
- package/dist/components/ui/card/card-title.svelte.d.ts +8 -0
- package/dist/components/ui/card/card.svelte +25 -0
- package/dist/components/ui/card/card.svelte.d.ts +8 -0
- package/dist/components/ui/card/index.d.ts +8 -0
- package/dist/components/ui/card/index.js +10 -0
- package/dist/components/ui/checkbox/checkbox.svelte +36 -0
- package/dist/components/ui/checkbox/checkbox.svelte.d.ts +8 -0
- package/dist/components/ui/checkbox/index.d.ts +2 -0
- package/dist/components/ui/checkbox/index.js +2 -0
- package/dist/components/ui/command/command-dialog.svelte +42 -0
- package/dist/components/ui/command/command-dialog.svelte.d.ts +14 -0
- package/dist/components/ui/command/command-empty.svelte +17 -0
- package/dist/components/ui/command/command-empty.svelte.d.ts +4 -0
- package/dist/components/ui/command/command-group.svelte +33 -0
- package/dist/components/ui/command/command-group.svelte.d.ts +7 -0
- package/dist/components/ui/command/command-input.svelte +36 -0
- package/dist/components/ui/command/command-input.svelte.d.ts +4 -0
- package/dist/components/ui/command/command-item.svelte +27 -0
- package/dist/components/ui/command/command-item.svelte.d.ts +4 -0
- package/dist/components/ui/command/command-link-item.svelte +20 -0
- package/dist/components/ui/command/command-link-item.svelte.d.ts +4 -0
- package/dist/components/ui/command/command-list.svelte +20 -0
- package/dist/components/ui/command/command-list.svelte.d.ts +4 -0
- package/dist/components/ui/command/command-loading.svelte +7 -0
- package/dist/components/ui/command/command-loading.svelte.d.ts +4 -0
- package/dist/components/ui/command/command-separator.svelte +17 -0
- package/dist/components/ui/command/command-separator.svelte.d.ts +4 -0
- package/dist/components/ui/command/command-shortcut.svelte +23 -0
- package/dist/components/ui/command/command-shortcut.svelte.d.ts +5 -0
- package/dist/components/ui/command/command.svelte +28 -0
- package/dist/components/ui/command/command.svelte.d.ts +8 -0
- package/dist/components/ui/command/index.d.ts +12 -0
- package/dist/components/ui/command/index.js +14 -0
- package/dist/components/ui/command-palette/command-palette.svelte +94 -0
- package/dist/components/ui/command-palette/command-palette.svelte.d.ts +40 -0
- package/dist/components/ui/command-palette/index.d.ts +3 -0
- package/dist/components/ui/command-palette/index.js +2 -0
- package/dist/components/ui/context-column/context-column.svelte +56 -0
- package/dist/components/ui/context-column/context-column.svelte.d.ts +14 -0
- package/dist/components/ui/context-column/index.d.ts +2 -0
- package/dist/components/ui/context-column/index.js +2 -0
- package/dist/components/ui/data-table/data-table.svelte.d.ts +40 -0
- package/dist/components/ui/data-table/data-table.svelte.js +110 -0
- package/dist/components/ui/data-table/flex-render.svelte +40 -0
- package/dist/components/ui/data-table/flex-render.svelte.d.ts +33 -0
- package/dist/components/ui/data-table/index.d.ts +3 -0
- package/dist/components/ui/data-table/index.js +3 -0
- package/dist/components/ui/data-table/render-helpers.d.ts +90 -0
- package/dist/components/ui/data-table/render-helpers.js +99 -0
- package/dist/components/ui/data-table-tanstack/data-table-tanstack.svelte +247 -0
- package/dist/components/ui/data-table-tanstack/data-table-tanstack.svelte.d.ts +79 -0
- package/dist/components/ui/data-table-tanstack/index.d.ts +3 -0
- package/dist/components/ui/data-table-tanstack/index.js +2 -0
- package/dist/components/ui/data-table-toolbar/data-table-toolbar.svelte +102 -0
- package/dist/components/ui/data-table-toolbar/data-table-toolbar.svelte.d.ts +32 -0
- package/dist/components/ui/data-table-toolbar/index.d.ts +3 -0
- package/dist/components/ui/data-table-toolbar/index.js +2 -0
- package/dist/components/ui/detail-panel/detail-panel.svelte +95 -0
- package/dist/components/ui/detail-panel/detail-panel.svelte.d.ts +26 -0
- package/dist/components/ui/detail-panel/index.d.ts +2 -0
- package/dist/components/ui/detail-panel/index.js +2 -0
- package/dist/components/ui/dialog/dialog-close.svelte +11 -0
- package/dist/components/ui/dialog/dialog-close.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-content.svelte +48 -0
- package/dist/components/ui/dialog/dialog-content.svelte.d.ts +13 -0
- package/dist/components/ui/dialog/dialog-description.svelte +20 -0
- package/dist/components/ui/dialog/dialog-description.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-footer.svelte +35 -0
- package/dist/components/ui/dialog/dialog-footer.svelte.d.ts +8 -0
- package/dist/components/ui/dialog/dialog-header.svelte +20 -0
- package/dist/components/ui/dialog/dialog-header.svelte.d.ts +5 -0
- package/dist/components/ui/dialog/dialog-overlay.svelte +20 -0
- package/dist/components/ui/dialog/dialog-overlay.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-portal.svelte +7 -0
- package/dist/components/ui/dialog/dialog-portal.svelte.d.ts +3 -0
- package/dist/components/ui/dialog/dialog-title.svelte +17 -0
- package/dist/components/ui/dialog/dialog-title.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog-trigger.svelte +11 -0
- package/dist/components/ui/dialog/dialog-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/dialog/dialog.svelte +7 -0
- package/dist/components/ui/dialog/dialog.svelte.d.ts +3 -0
- package/dist/components/ui/dialog/index.d.ts +11 -0
- package/dist/components/ui/dialog/index.js +13 -0
- package/dist/components/ui/dialog-section/dialog-section.svelte +20 -0
- package/dist/components/ui/dialog-section/dialog-section.svelte.d.ts +8 -0
- package/dist/components/ui/dialog-section/index.d.ts +2 -0
- package/dist/components/ui/dialog-section/index.js +2 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +16 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +44 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +9 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +31 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte.d.ts +10 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +22 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte.d.ts +8 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +27 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts +8 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte +27 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte.d.ts +8 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-portal.svelte +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-portal.svelte.d.ts +3 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +16 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +34 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte +17 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +23 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte.d.ts +5 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +20 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +29 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub.svelte +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-sub.svelte.d.ts +3 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu.svelte +7 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu.svelte.d.ts +3 -0
- package/dist/components/ui/dropdown-menu/index.d.ts +18 -0
- package/dist/components/ui/dropdown-menu/index.js +18 -0
- package/dist/components/ui/empty-state/empty-state.svelte +44 -0
- package/dist/components/ui/empty-state/empty-state.svelte.d.ts +14 -0
- package/dist/components/ui/empty-state/index.d.ts +2 -0
- package/dist/components/ui/empty-state/index.js +2 -0
- package/dist/components/ui/error-state/error-state.svelte +52 -0
- package/dist/components/ui/error-state/error-state.svelte.d.ts +10 -0
- package/dist/components/ui/error-state/index.d.ts +2 -0
- package/dist/components/ui/error-state/index.js +2 -0
- package/dist/components/ui/info-tip/index.d.ts +2 -0
- package/dist/components/ui/info-tip/index.js +2 -0
- package/dist/components/ui/info-tip/info-tip.svelte +37 -0
- package/dist/components/ui/info-tip/info-tip.svelte.d.ts +10 -0
- package/dist/components/ui/input/index.d.ts +2 -0
- package/dist/components/ui/input/index.js +4 -0
- package/dist/components/ui/input/input.svelte +48 -0
- package/dist/components/ui/input/input.svelte.d.ts +13 -0
- package/dist/components/ui/input-group/index.d.ts +7 -0
- package/dist/components/ui/input-group/index.js +9 -0
- package/dist/components/ui/input-group/input-group-addon.svelte +53 -0
- package/dist/components/ui/input-group/input-group-addon.svelte.d.ts +32 -0
- package/dist/components/ui/input-group/input-group-button.svelte +49 -0
- package/dist/components/ui/input-group/input-group-button.svelte.d.ts +32 -0
- package/dist/components/ui/input-group/input-group-input.svelte +23 -0
- package/dist/components/ui/input-group/input-group-input.svelte.d.ts +11 -0
- package/dist/components/ui/input-group/input-group-text.svelte +22 -0
- package/dist/components/ui/input-group/input-group-text.svelte.d.ts +5 -0
- package/dist/components/ui/input-group/input-group-textarea.svelte +23 -0
- package/dist/components/ui/input-group/input-group-textarea.svelte.d.ts +3 -0
- package/dist/components/ui/input-group/input-group.svelte +24 -0
- package/dist/components/ui/input-group/input-group.svelte.d.ts +5 -0
- package/dist/components/ui/label/index.d.ts +2 -0
- package/dist/components/ui/label/index.js +4 -0
- package/dist/components/ui/label/label.svelte +20 -0
- package/dist/components/ui/label/label.svelte.d.ts +4 -0
- package/dist/components/ui/loading-state/index.d.ts +2 -0
- package/dist/components/ui/loading-state/index.js +2 -0
- package/dist/components/ui/loading-state/loading-state.svelte +28 -0
- package/dist/components/ui/loading-state/loading-state.svelte.d.ts +8 -0
- package/dist/components/ui/page-header/index.d.ts +2 -0
- package/dist/components/ui/page-header/index.js +2 -0
- package/dist/components/ui/page-header/page-header.svelte +100 -0
- package/dist/components/ui/page-header/page-header.svelte.d.ts +17 -0
- package/dist/components/ui/panel/index.d.ts +2 -0
- package/dist/components/ui/panel/index.js +2 -0
- package/dist/components/ui/panel/panel.svelte +54 -0
- package/dist/components/ui/panel/panel.svelte.d.ts +16 -0
- package/dist/components/ui/password-input/index.d.ts +2 -0
- package/dist/components/ui/password-input/index.js +4 -0
- package/dist/components/ui/password-input/password-input.svelte +48 -0
- package/dist/components/ui/password-input/password-input.svelte.d.ts +8 -0
- package/dist/components/ui/popover/index.d.ts +4 -0
- package/dist/components/ui/popover/index.js +6 -0
- package/dist/components/ui/popover/popover-content.svelte +45 -0
- package/dist/components/ui/popover/popover-content.svelte.d.ts +7 -0
- package/dist/components/ui/popover/popover-trigger.svelte +7 -0
- package/dist/components/ui/popover/popover-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/popover/popover.svelte +7 -0
- package/dist/components/ui/popover/popover.svelte.d.ts +3 -0
- package/dist/components/ui/progress/index.d.ts +2 -0
- package/dist/components/ui/progress/index.js +4 -0
- package/dist/components/ui/progress/progress.svelte +30 -0
- package/dist/components/ui/progress/progress.svelte.d.ts +4 -0
- package/dist/components/ui/scorecard/index.d.ts +2 -0
- package/dist/components/ui/scorecard/index.js +2 -0
- package/dist/components/ui/scorecard/scorecard.svelte +35 -0
- package/dist/components/ui/scorecard/scorecard.svelte.d.ts +8 -0
- package/dist/components/ui/select/index.d.ts +12 -0
- package/dist/components/ui/select/index.js +14 -0
- package/dist/components/ui/select/select-content.svelte +45 -0
- package/dist/components/ui/select/select-content.svelte.d.ts +11 -0
- package/dist/components/ui/select/select-group-heading.svelte +21 -0
- package/dist/components/ui/select/select-group-heading.svelte.d.ts +10 -0
- package/dist/components/ui/select/select-group.svelte +17 -0
- package/dist/components/ui/select/select-group.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-item.svelte +38 -0
- package/dist/components/ui/select/select-item.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-label.svelte +20 -0
- package/dist/components/ui/select/select-label.svelte.d.ts +6 -0
- package/dist/components/ui/select/select-portal.svelte +7 -0
- package/dist/components/ui/select/select-portal.svelte.d.ts +3 -0
- package/dist/components/ui/select/select-scroll-down-button.svelte +23 -0
- package/dist/components/ui/select/select-scroll-down-button.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-scroll-up-button.svelte +23 -0
- package/dist/components/ui/select/select-scroll-up-button.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-separator.svelte +18 -0
- package/dist/components/ui/select/select-separator.svelte.d.ts +4 -0
- package/dist/components/ui/select/select-trigger.svelte +29 -0
- package/dist/components/ui/select/select-trigger.svelte.d.ts +8 -0
- package/dist/components/ui/select/select.svelte +11 -0
- package/dist/components/ui/select/select.svelte.d.ts +3 -0
- package/dist/components/ui/separator/index.d.ts +2 -0
- package/dist/components/ui/separator/index.js +4 -0
- package/dist/components/ui/separator/separator.svelte +23 -0
- package/dist/components/ui/separator/separator.svelte.d.ts +4 -0
- package/dist/components/ui/skeleton/index.d.ts +2 -0
- package/dist/components/ui/skeleton/index.js +4 -0
- package/dist/components/ui/skeleton/skeleton.svelte +17 -0
- package/dist/components/ui/skeleton/skeleton.svelte.d.ts +5 -0
- package/dist/components/ui/sonner/index.d.ts +1 -0
- package/dist/components/ui/sonner/index.js +1 -0
- package/dist/components/ui/sonner/sonner.svelte +34 -0
- package/dist/components/ui/sonner/sonner.svelte.d.ts +4 -0
- package/dist/components/ui/sparkline/index.d.ts +3 -0
- package/dist/components/ui/sparkline/index.js +2 -0
- package/dist/components/ui/sparkline/sparkline.svelte +90 -0
- package/dist/components/ui/sparkline/sparkline.svelte.d.ts +16 -0
- package/dist/components/ui/stat-card/index.d.ts +2 -0
- package/dist/components/ui/stat-card/index.js +2 -0
- package/dist/components/ui/stat-card/stat-card.svelte +77 -0
- package/dist/components/ui/stat-card/stat-card.svelte.d.ts +34 -0
- package/dist/components/ui/stat-list/index.d.ts +3 -0
- package/dist/components/ui/stat-list/index.js +2 -0
- package/dist/components/ui/stat-list/stat-list.svelte +80 -0
- package/dist/components/ui/stat-list/stat-list.svelte.d.ts +23 -0
- package/dist/components/ui/status/index.d.ts +1 -0
- package/dist/components/ui/status/index.js +1 -0
- package/dist/components/ui/status-badge/index.d.ts +3 -0
- package/dist/components/ui/status-badge/index.js +2 -0
- package/dist/components/ui/status-badge/status-badge.svelte +53 -0
- package/dist/components/ui/status-badge/status-badge.svelte.d.ts +39 -0
- package/dist/components/ui/switch/index.d.ts +2 -0
- package/dist/components/ui/switch/index.js +4 -0
- package/dist/components/ui/switch/switch.svelte +39 -0
- package/dist/components/ui/switch/switch.svelte.d.ts +4 -0
- package/dist/components/ui/table/index.d.ts +10 -0
- package/dist/components/ui/table/index.js +12 -0
- package/dist/components/ui/table/table-body.svelte +20 -0
- package/dist/components/ui/table/table-body.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-caption.svelte +20 -0
- package/dist/components/ui/table/table-caption.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-cell.svelte +20 -0
- package/dist/components/ui/table/table-cell.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-classes.d.ts +15 -0
- package/dist/components/ui/table/table-classes.js +15 -0
- package/dist/components/ui/table/table-footer.svelte +20 -0
- package/dist/components/ui/table/table-footer.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-head.svelte +23 -0
- package/dist/components/ui/table/table-head.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-header.svelte +20 -0
- package/dist/components/ui/table/table-header.svelte.d.ts +5 -0
- package/dist/components/ui/table/table-row.svelte +23 -0
- package/dist/components/ui/table/table-row.svelte.d.ts +5 -0
- package/dist/components/ui/table/table.svelte +37 -0
- package/dist/components/ui/table/table.svelte.d.ts +20 -0
- package/dist/components/ui/tabs/index.d.ts +5 -0
- package/dist/components/ui/tabs/index.js +7 -0
- package/dist/components/ui/tabs/tabs-content.svelte +13 -0
- package/dist/components/ui/tabs/tabs-content.svelte.d.ts +4 -0
- package/dist/components/ui/tabs/tabs-list.svelte +16 -0
- package/dist/components/ui/tabs/tabs-list.svelte.d.ts +4 -0
- package/dist/components/ui/tabs/tabs-trigger.svelte +16 -0
- package/dist/components/ui/tabs/tabs-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/tabs/tabs.svelte +19 -0
- package/dist/components/ui/tabs/tabs.svelte.d.ts +4 -0
- package/dist/components/ui/textarea/index.d.ts +2 -0
- package/dist/components/ui/textarea/index.js +4 -0
- package/dist/components/ui/textarea/textarea.svelte +22 -0
- package/dist/components/ui/textarea/textarea.svelte.d.ts +5 -0
- package/dist/components/ui/tile-grid/index.d.ts +2 -0
- package/dist/components/ui/tile-grid/index.js +2 -0
- package/dist/components/ui/tile-grid/tile-grid.svelte +66 -0
- package/dist/components/ui/tile-grid/tile-grid.svelte.d.ts +43 -0
- package/dist/components/ui/tooltip/index.d.ts +6 -0
- package/dist/components/ui/tooltip/index.js +8 -0
- package/dist/components/ui/tooltip/tooltip-content.svelte +52 -0
- package/dist/components/ui/tooltip/tooltip-content.svelte.d.ts +11 -0
- package/dist/components/ui/tooltip/tooltip-portal.svelte +7 -0
- package/dist/components/ui/tooltip/tooltip-portal.svelte.d.ts +4 -0
- package/dist/components/ui/tooltip/tooltip-provider.svelte +7 -0
- package/dist/components/ui/tooltip/tooltip-provider.svelte.d.ts +4 -0
- package/dist/components/ui/tooltip/tooltip-trigger.svelte +7 -0
- package/dist/components/ui/tooltip/tooltip-trigger.svelte.d.ts +4 -0
- package/dist/components/ui/tooltip/tooltip.svelte +7 -0
- package/dist/components/ui/tooltip/tooltip.svelte.d.ts +4 -0
- package/dist/styles.css +961 -0
- package/dist/utils.d.ts +12 -0
- package/dist/utils.js +5 -0
- package/package.json +81 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Snippet, Component } from 'svelte';
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
open?: boolean;
|
|
4
|
+
/**
|
|
5
|
+
* Fired on every open-state change, including the ones the dialogue makes
|
|
6
|
+
* for itself — Escape, a click on the scrim, the close button — not only
|
|
7
|
+
* the ones the caller drives.
|
|
8
|
+
*
|
|
9
|
+
* `bind:open` alone cannot express that. A caller that has to reset a form,
|
|
10
|
+
* abort an in-flight request or clear a selection when its dialogue closes
|
|
11
|
+
* has nowhere to hang that work: the binding reports the new value but
|
|
12
|
+
* offers no moment to act on it, so the usual workaround is an `$effect`
|
|
13
|
+
* watching the bound variable, which also fires on the open leg. In the app
|
|
14
|
+
* that reported this, 12 of 28 dialogues close through a self-dismiss path,
|
|
15
|
+
* so it is the majority case rather than an edge.
|
|
16
|
+
*
|
|
17
|
+
* The two compose: bind for state, take this for the side effect.
|
|
18
|
+
*/
|
|
19
|
+
onOpenChange?: (open: boolean) => void;
|
|
20
|
+
title: string;
|
|
21
|
+
subtitle?: string;
|
|
22
|
+
icon?: Component<{
|
|
23
|
+
class?: string;
|
|
24
|
+
}>;
|
|
25
|
+
/**
|
|
26
|
+
* The dialogue's measure. Named rather than free-form for the same reason
|
|
27
|
+
* AppShell's `content` is: a dialogue width is a design-system decision,
|
|
28
|
+
* and a `class` escape hatch would let every app pick its own again.
|
|
29
|
+
*
|
|
30
|
+
* `sm`/`md`/`lg` mean exactly what they always did; `xs` and `xl` extend the
|
|
31
|
+
* scale at its ends rather than renumbering it, so no existing call site
|
|
32
|
+
* changes width. Below the `sm:` breakpoint every size is full-bleed
|
|
33
|
+
* regardless — a phone has one width.
|
|
34
|
+
*/
|
|
35
|
+
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
36
|
+
children: Snippet;
|
|
37
|
+
footer?: Snippet;
|
|
38
|
+
};
|
|
39
|
+
declare const AppDialog: Component<$$ComponentProps, {}, "open">;
|
|
40
|
+
type AppDialog = ReturnType<typeof AppDialog>;
|
|
41
|
+
export default AppDialog;
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* The vertical navigation list.
|
|
4
|
+
*
|
|
5
|
+
* Rendered by AppShell in the rail/drawer (one element, two states — see
|
|
6
|
+
* app-shell.svelte) and exported in its own right so an app with a SECOND,
|
|
7
|
+
* route-scoped navigation column (a per-module sidebar) uses the same
|
|
8
|
+
* affordance rather than hand-building a near-copy.
|
|
9
|
+
* That was the concrete shape of the drift in the estate: one app's inner
|
|
10
|
+
* sidebar had reimplemented the active indicator, the group separators and
|
|
11
|
+
* the collapse behaviour independently of its own top bar.
|
|
12
|
+
*
|
|
13
|
+
* An item carrying `children` discloses them in place, beneath itself. That
|
|
14
|
+
* is the same drift arriving from the other direction: an app whose sections
|
|
15
|
+
* have their own navigation had nowhere to put it inside the rail, so it put
|
|
16
|
+
* its modules here and its per-section pages in AppShell's `sidebar` snippet,
|
|
17
|
+
* and shipped two left-hand columns. See `types.ts` on `children` for why the
|
|
18
|
+
* nested rail won over modules-on-the-top-bar, and why the depth cap is one.
|
|
19
|
+
*/
|
|
20
|
+
import ChevronRight from '@lucide/svelte/icons/chevron-right';
|
|
21
|
+
import {
|
|
22
|
+
hasActiveNavChild,
|
|
23
|
+
isNavItemActive,
|
|
24
|
+
navChildren,
|
|
25
|
+
toGroups,
|
|
26
|
+
type NavChildItem,
|
|
27
|
+
type NavItem,
|
|
28
|
+
type NavSource
|
|
29
|
+
} from './types.js';
|
|
30
|
+
import { cn } from '../../../utils.js';
|
|
31
|
+
|
|
32
|
+
let {
|
|
33
|
+
nav,
|
|
34
|
+
currentPath,
|
|
35
|
+
collapsed = false,
|
|
36
|
+
label = 'Primary',
|
|
37
|
+
onNavigate,
|
|
38
|
+
firstLink = $bindable(null),
|
|
39
|
+
class: className
|
|
40
|
+
}: {
|
|
41
|
+
nav?: NavSource;
|
|
42
|
+
/** The active path. Apps pass `page.url.pathname`; see AppShell. */
|
|
43
|
+
currentPath?: string;
|
|
44
|
+
/** Icon-only mode. Labels stay in the accessible tree via sr-only text. */
|
|
45
|
+
collapsed?: boolean;
|
|
46
|
+
/** Accessible name for the landmark; distinguish a secondary column. */
|
|
47
|
+
label?: string;
|
|
48
|
+
/** Fired after any nav link activates — AppShell uses it to shut the drawer. */
|
|
49
|
+
onNavigate?: () => void;
|
|
50
|
+
/**
|
|
51
|
+
* The first rendered link, bound out. AppShell moves focus here when this
|
|
52
|
+
* list is the content of an overlay, so a keyboard user lands inside the
|
|
53
|
+
* thing that just opened rather than behind it.
|
|
54
|
+
*/
|
|
55
|
+
firstLink?: HTMLElement | null;
|
|
56
|
+
class?: string;
|
|
57
|
+
} = $props();
|
|
58
|
+
|
|
59
|
+
const groups = $derived(toGroups(nav));
|
|
60
|
+
|
|
61
|
+
// Ids are real ids in the consumer's document, and this component renders
|
|
62
|
+
// more than once per page by design (the rail, plus any route-scoped second
|
|
63
|
+
// column). A literal would collide between the two and hand `aria-controls`
|
|
64
|
+
// a coin toss — the same reasoning AppShell applies to its own nav region id.
|
|
65
|
+
const navId = $props.id();
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Disclosure state, and the two-part rule behind it.
|
|
69
|
+
*
|
|
70
|
+
* The DEFAULT is derived, never stored: a group is open when the current page
|
|
71
|
+
* is the parent or one of its children. That is what makes the rail show you
|
|
72
|
+
* where you are without an app having to seed anything, and it is correct on
|
|
73
|
+
* the server, on first paint, and after a palette jump or a back button —
|
|
74
|
+
* none of which are clicks, so none of which stored state would have seen.
|
|
75
|
+
*
|
|
76
|
+
* A deliberate toggle OVERRIDES that default for as long as the shell lives,
|
|
77
|
+
* which in a SvelteKit layout is the whole session: open a group you are not
|
|
78
|
+
* in and it stays open while you navigate; close the one you are in and it
|
|
79
|
+
* stays shut. Overriding rather than seeding is what keeps both halves true
|
|
80
|
+
* at once — an untouched group still follows the path, so walking into a new
|
|
81
|
+
* section opens it, while a group you made a decision about keeps it.
|
|
82
|
+
*
|
|
83
|
+
* Nothing is written to storage. A shared package writing to a fixed
|
|
84
|
+
* localStorage key collides with the app's own, and collides with itself the
|
|
85
|
+
* moment a page renders two navs — the same hazard as a literal element id.
|
|
86
|
+
* An app that wants disclosure to survive a reload owns that decision.
|
|
87
|
+
*
|
|
88
|
+
* Keyed by `href`, which is already this component's notion of identity — the
|
|
89
|
+
* `{#each}` below keys on it too, so two items sharing an href is a Svelte
|
|
90
|
+
* duplicate-key error before it is anything else. The consequence worth naming:
|
|
91
|
+
* an app that swaps its whole `nav` (a permission filter, a context switch)
|
|
92
|
+
* and reuses an href across variants carries the user's open/closed decision
|
|
93
|
+
* across that swap. That is deliberate, not an oversight — resetting on a
|
|
94
|
+
* changed `nav` would wipe the override every time a `$derived` nav recomputes,
|
|
95
|
+
* which in the apps that derive nav from a store is constantly, destroying the
|
|
96
|
+
* persistence this whole mechanism exists to provide. The href is the contract:
|
|
97
|
+
* same href, same section, same decision.
|
|
98
|
+
*/
|
|
99
|
+
let overrides = $state<Record<string, boolean>>({});
|
|
100
|
+
|
|
101
|
+
function isOpen(item: NavItem): boolean {
|
|
102
|
+
return (
|
|
103
|
+
overrides[item.href] ??
|
|
104
|
+
(isNavItemActive(item, currentPath) || hasActiveNavChild(item, currentPath))
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** Every item that actually discloses something, by href. */
|
|
109
|
+
const branches = $derived(
|
|
110
|
+
new Map(
|
|
111
|
+
groups
|
|
112
|
+
.flatMap((group) => group.items)
|
|
113
|
+
.filter((item) => navChildren(item).length > 0)
|
|
114
|
+
.map((item) => [item.href, item] as const)
|
|
115
|
+
)
|
|
116
|
+
);
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Escape closes the group focus is inside and returns focus to the control
|
|
120
|
+
* that opened it, rather than leaving the caret on a row that has just been
|
|
121
|
+
* hidden.
|
|
122
|
+
*
|
|
123
|
+
* Bound to the rows and the chevron rather than to the landmark, because a
|
|
124
|
+
* branch contains nothing else that can hold focus, and a keyboard listener
|
|
125
|
+
* on the non-interactive `<nav>` is a genuine a11y-lint finding rather than
|
|
126
|
+
* noise. Which branch it is comes from the event's own position, so one
|
|
127
|
+
* function serves every row, nested or flat.
|
|
128
|
+
*
|
|
129
|
+
* It is swallowed ONLY when it actually closed something, so Escape anywhere
|
|
130
|
+
* else still reaches AppShell's window handler and shuts the mobile drawer:
|
|
131
|
+
* the inner surface wins first, the outer one stays reachable.
|
|
132
|
+
*/
|
|
133
|
+
function onNavKeydown(event: KeyboardEvent) {
|
|
134
|
+
if (event.key !== 'Escape') return;
|
|
135
|
+
const branch = (event.target as HTMLElement | null)?.closest?.('[data-branch]');
|
|
136
|
+
const item = branches.get(branch?.getAttribute('data-branch') ?? '');
|
|
137
|
+
if (!branch || !item || !isOpen(item)) return;
|
|
138
|
+
overrides[item.href] = false;
|
|
139
|
+
event.stopPropagation();
|
|
140
|
+
branch.querySelector<HTMLElement>('[data-ds-nav-disclosure]')?.focus();
|
|
141
|
+
}
|
|
142
|
+
</script>
|
|
143
|
+
|
|
144
|
+
<!--
|
|
145
|
+
The row. One snippet for both levels: a child that rendered through a second
|
|
146
|
+
near-copy is exactly the drift this component was extracted to end, one
|
|
147
|
+
nesting level down.
|
|
148
|
+
-->
|
|
149
|
+
{#snippet navLink(
|
|
150
|
+
item: NavItem | NavChildItem,
|
|
151
|
+
opts: { child?: boolean; first?: boolean; labelId?: string } = {}
|
|
152
|
+
)}
|
|
153
|
+
<!--
|
|
154
|
+
A declared child that IS the page WINS over its parent's prefix match, and
|
|
155
|
+
this ordering is the whole of that rule.
|
|
156
|
+
|
|
157
|
+
The obvious way round was wrong, and wrong in the commonest shape there is:
|
|
158
|
+
a parent at `/education` prefix-matches `/education/two`, so a parent whose
|
|
159
|
+
own child was the current page lit up as the current page too — two rows
|
|
160
|
+
carrying `aria-current="page"`, two tints, two edge bars. Fine while nav was
|
|
161
|
+
flat, because the child row did not exist to disagree with; incoherent the
|
|
162
|
+
moment it does, and an ARIA defect besides.
|
|
163
|
+
|
|
164
|
+
`within` is therefore computed FIRST and suppresses `active`. What the parent
|
|
165
|
+
keeps is the section-root behaviour that earned prefix matching in the first
|
|
166
|
+
place: on its own page, or on a page under it that no child row claims, it is
|
|
167
|
+
still the active row. A childless item never reaches this at all —
|
|
168
|
+
`hasActiveNavChild` is false for it — so the flat case is untouched.
|
|
169
|
+
-->
|
|
170
|
+
{@const within = hasActiveNavChild(item, currentPath)}
|
|
171
|
+
{@const active = !within && isNavItemActive(item, currentPath)}
|
|
172
|
+
<a
|
|
173
|
+
bind:this={
|
|
174
|
+
() => firstLink,
|
|
175
|
+
(node) => {
|
|
176
|
+
if (opts.first) firstLink = node;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
id={opts.labelId}
|
|
180
|
+
href={item.href}
|
|
181
|
+
class="ds-nav-item"
|
|
182
|
+
data-active={active ? 'true' : undefined}
|
|
183
|
+
data-within={within ? 'true' : undefined}
|
|
184
|
+
data-child={opts.child ? 'true' : undefined}
|
|
185
|
+
aria-current={active ? 'page' : undefined}
|
|
186
|
+
title={collapsed ? item.label : undefined}
|
|
187
|
+
target={item.external ? '_blank' : undefined}
|
|
188
|
+
rel={item.external ? 'noreferrer noopener' : undefined}
|
|
189
|
+
onclick={onNavigate}
|
|
190
|
+
onkeydown={onNavKeydown}
|
|
191
|
+
>
|
|
192
|
+
{#if active}
|
|
193
|
+
<span class="ds-nav-indicator"></span>
|
|
194
|
+
{/if}
|
|
195
|
+
{#if item.icon}
|
|
196
|
+
<item.icon class="size-4.5 flex-none" />
|
|
197
|
+
{:else if collapsed}
|
|
198
|
+
<!-- Icon-less item, collapsed: an initial keeps the row clickable
|
|
199
|
+
and identifiable rather than rendering an empty target. -->
|
|
200
|
+
<span class="grid size-4.5 flex-none place-items-center text-xs font-semibold"
|
|
201
|
+
>{item.label.slice(0, 1).toUpperCase()}</span
|
|
202
|
+
>
|
|
203
|
+
{/if}
|
|
204
|
+
<span class={collapsed ? 'sr-only' : 'truncate'}>{item.label}</span>
|
|
205
|
+
{#if item.badge !== undefined && !collapsed}
|
|
206
|
+
<span class="ds-nav-badge">{item.badge}</span>
|
|
207
|
+
{/if}
|
|
208
|
+
</a>
|
|
209
|
+
{/snippet}
|
|
210
|
+
|
|
211
|
+
<nav
|
|
212
|
+
class={cn('ds-nav flex flex-1 flex-col gap-5 overflow-y-auto px-3 py-4', className)}
|
|
213
|
+
aria-label={label}
|
|
214
|
+
data-collapsed={collapsed ? 'true' : undefined}
|
|
215
|
+
>
|
|
216
|
+
{#each groups as group, i (group.heading ?? group.items[0]?.href ?? i)}
|
|
217
|
+
<div class="flex flex-col gap-1">
|
|
218
|
+
{#if group.heading && !collapsed}
|
|
219
|
+
<div class="ds-nav-heading">{group.heading}</div>
|
|
220
|
+
{:else if group.heading && collapsed && i > 0}
|
|
221
|
+
<!-- Collapsed, a heading cannot be read, so the grouping it conveyed
|
|
222
|
+
survives as a rule instead of vanishing. -->
|
|
223
|
+
<div class="border-border mx-1 mb-1 border-t" role="presentation"></div>
|
|
224
|
+
{/if}
|
|
225
|
+
{#each group.items as item, j (item.href)}
|
|
226
|
+
{@const first = i === 0 && j === 0}
|
|
227
|
+
<!--
|
|
228
|
+
The collapsed rail is 3.5rem of icons, and an indented tree does not
|
|
229
|
+
fit in it at any depth. Rather than invent a second interaction
|
|
230
|
+
surface for that state — a hover flyout, with its own positioning,
|
|
231
|
+
hover intent, touch story and focus management — a collapsed parent
|
|
232
|
+
renders as exactly the icon-only link it was before this feature
|
|
233
|
+
existed, and its children are not in the document at all.
|
|
234
|
+
|
|
235
|
+
Not merely hidden: sr-only rows a sighted user cannot reach and a
|
|
236
|
+
pointer user cannot click are a dead affordance, which this package
|
|
237
|
+
treats as worse than an absent one. The way back is the Collapse
|
|
238
|
+
control immediately below, which is where the user just was. The
|
|
239
|
+
drawer is never collapsed (see AppShell), so a phone always gets the
|
|
240
|
+
full tree.
|
|
241
|
+
-->
|
|
242
|
+
{@const children = collapsed ? [] : navChildren(item)}
|
|
243
|
+
{#if children.length > 0}
|
|
244
|
+
{@const open = isOpen(item)}
|
|
245
|
+
{@const panelId = `${navId}-${i}-${j}`}
|
|
246
|
+
<div class="ds-nav-branch" data-branch={item.href}>
|
|
247
|
+
<div class="ds-nav-row">
|
|
248
|
+
<!--
|
|
249
|
+
Two controls, because there are two actions and one of them is
|
|
250
|
+
navigation. The label goes to the parent's own page; the chevron
|
|
251
|
+
opens the section. Folding both into the link was the obvious
|
|
252
|
+
alternative and it cannot be made honest: `aria-expanded` on
|
|
253
|
+
something that navigates away announces a state the user never
|
|
254
|
+
gets to observe. Making the label expand-only instead was the
|
|
255
|
+
other, and it silently changes what `href` means the day an app
|
|
256
|
+
adds children to an item that already had one — precisely the
|
|
257
|
+
break this release is claiming not to have.
|
|
258
|
+
-->
|
|
259
|
+
{@render navLink(item, { first, labelId: `${panelId}-label` })}
|
|
260
|
+
<button
|
|
261
|
+
type="button"
|
|
262
|
+
class="ds-nav-disclosure"
|
|
263
|
+
data-ds-nav-disclosure
|
|
264
|
+
aria-expanded={open}
|
|
265
|
+
aria-controls={panelId}
|
|
266
|
+
aria-label={`${open ? 'Collapse' : 'Expand'} ${item.label}`}
|
|
267
|
+
onclick={() => (overrides[item.href] = !open)}
|
|
268
|
+
onkeydown={onNavKeydown}
|
|
269
|
+
>
|
|
270
|
+
<ChevronRight class="size-4" />
|
|
271
|
+
</button>
|
|
272
|
+
</div>
|
|
273
|
+
<!--
|
|
274
|
+
Rendered whether open or shut, hidden by the `hidden` attribute
|
|
275
|
+
rather than by an `{#if}`. `aria-controls` must resolve to a real
|
|
276
|
+
element to mean anything, and a reference that only exists while
|
|
277
|
+
the region is already open is a reference nobody needs. `hidden`
|
|
278
|
+
takes the rows out of the accessibility tree and out of the tab
|
|
279
|
+
order at the same time, so the closed state is genuinely closed.
|
|
280
|
+
-->
|
|
281
|
+
<div
|
|
282
|
+
class="ds-nav-children"
|
|
283
|
+
id={panelId}
|
|
284
|
+
hidden={!open}
|
|
285
|
+
role="group"
|
|
286
|
+
aria-labelledby={`${panelId}-label`}
|
|
287
|
+
>
|
|
288
|
+
{#each children as child (child.href)}
|
|
289
|
+
{@render navLink(child, { child: true })}
|
|
290
|
+
{/each}
|
|
291
|
+
</div>
|
|
292
|
+
</div>
|
|
293
|
+
{:else}
|
|
294
|
+
{@render navLink(item, { first })}
|
|
295
|
+
{/if}
|
|
296
|
+
{/each}
|
|
297
|
+
</div>
|
|
298
|
+
{/each}
|
|
299
|
+
</nav>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type NavSource } from './types.js';
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
nav?: NavSource;
|
|
4
|
+
/** The active path. Apps pass `page.url.pathname`; see AppShell. */
|
|
5
|
+
currentPath?: string;
|
|
6
|
+
/** Icon-only mode. Labels stay in the accessible tree via sr-only text. */
|
|
7
|
+
collapsed?: boolean;
|
|
8
|
+
/** Accessible name for the landmark; distinguish a secondary column. */
|
|
9
|
+
label?: string;
|
|
10
|
+
/** Fired after any nav link activates — AppShell uses it to shut the drawer. */
|
|
11
|
+
onNavigate?: () => void;
|
|
12
|
+
/**
|
|
13
|
+
* The first rendered link, bound out. AppShell moves focus here when this
|
|
14
|
+
* list is the content of an overlay, so a keyboard user lands inside the
|
|
15
|
+
* thing that just opened rather than behind it.
|
|
16
|
+
*/
|
|
17
|
+
firstLink?: HTMLElement | null;
|
|
18
|
+
class?: string;
|
|
19
|
+
};
|
|
20
|
+
declare const AppNav: import("svelte").Component<$$ComponentProps, {}, "firstLink">;
|
|
21
|
+
type AppNav = ReturnType<typeof AppNav>;
|
|
22
|
+
export default AppNav;
|