@devalok/shilp-sutra 0.53.0 → 0.55.0
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/AGENTS.md +7 -1
- package/BREAKING.json +29 -0
- package/MIGRATION.md +83 -0
- package/dist/_chunks/badge-group.js +1 -1
- package/dist/_chunks/popover.js +38 -37
- package/dist/_chunks/popover.js.map +1 -1
- package/dist/_chunks/primitives/react-accordion.js +270 -0
- package/dist/_chunks/primitives/react-accordion.js.map +1 -0
- package/dist/_chunks/primitives/react-alert-dialog.js +857 -0
- package/dist/_chunks/primitives/react-alert-dialog.js.map +1 -0
- package/dist/_chunks/primitives/react-aspect-ratio.js +32 -0
- package/dist/_chunks/primitives/react-aspect-ratio.js.map +1 -0
- package/dist/_chunks/primitives/react-avatar.js +69 -0
- package/dist/_chunks/primitives/react-avatar.js.map +1 -0
- package/dist/_chunks/primitives/react-checkbox.js +151 -0
- package/dist/_chunks/primitives/react-checkbox.js.map +1 -0
- package/dist/_chunks/primitives/react-context-menu.js +905 -0
- package/dist/_chunks/primitives/react-context-menu.js.map +1 -0
- package/dist/_chunks/primitives/react-dropdown-menu.js +220 -0
- package/dist/_chunks/primitives/react-dropdown-menu.js.map +1 -0
- package/dist/_chunks/primitives/react-hover-card.js +153 -0
- package/dist/_chunks/primitives/react-hover-card.js.map +1 -0
- package/dist/_chunks/primitives/react-label.js +16 -0
- package/dist/_chunks/primitives/react-label.js.map +1 -0
- package/dist/_chunks/primitives/react-menubar.js +304 -0
- package/dist/_chunks/primitives/react-menubar.js.map +1 -0
- package/dist/_chunks/primitives/react-navigation-menu.js +560 -0
- package/dist/_chunks/primitives/react-navigation-menu.js.map +1 -0
- package/dist/_chunks/primitives/react-popover.js +186 -0
- package/dist/_chunks/primitives/react-popover.js.map +1 -0
- package/dist/_chunks/primitives/react-progress.js +70 -0
- package/dist/_chunks/primitives/react-progress.js.map +1 -0
- package/dist/_chunks/primitives/react-radio-group.js +170 -0
- package/dist/_chunks/primitives/react-radio-group.js.map +1 -0
- package/dist/_chunks/primitives/react-select.js +671 -0
- package/dist/_chunks/primitives/react-select.js.map +1 -0
- package/dist/_chunks/primitives/react-separator.js +24 -0
- package/dist/_chunks/primitives/react-separator.js.map +1 -0
- package/dist/_chunks/primitives/react-slider.js +349 -0
- package/dist/_chunks/primitives/react-slider.js.map +1 -0
- package/dist/_chunks/primitives/react-switch.js +92 -0
- package/dist/_chunks/primitives/react-switch.js.map +1 -0
- package/dist/_chunks/primitives/react-tabs.js +114 -0
- package/dist/_chunks/primitives/react-tabs.js.map +1 -0
- package/dist/_chunks/primitives/react-toggle-group.js +122 -0
- package/dist/_chunks/primitives/react-toggle-group.js.map +1 -0
- package/dist/_chunks/primitives/react-toggle.js +28 -0
- package/dist/_chunks/primitives/react-toggle.js.map +1 -0
- package/dist/_chunks/primitives/react-tooltip.js +341 -0
- package/dist/_chunks/primitives/react-tooltip.js.map +1 -0
- package/dist/_chunks/primitives-internal.js +2071 -0
- package/dist/_chunks/primitives-internal.js.map +1 -0
- package/dist/_chunks/shared.js +32 -32
- package/dist/_chunks/tiptap.js +1 -1
- package/dist/ai/ai-command-provider.d.ts +2 -3
- package/dist/ai/block-renderer.d.ts +1 -2
- package/dist/ai/blocks/block-shell.d.ts +0 -1
- package/dist/ai/blocks/block-table.d.ts +1 -2
- package/dist/ai/blocks/confirm.d.ts +1 -2
- package/dist/ai/blocks/divider.d.ts +1 -2
- package/dist/ai/blocks/error.d.ts +1 -2
- package/dist/ai/blocks/index.d.ts +7 -8
- package/dist/ai/blocks/info.d.ts +1 -2
- package/dist/ai/blocks/loading.d.ts +1 -2
- package/dist/ai/blocks/stat-row.d.ts +1 -2
- package/dist/ai/blocks/success.d.ts +1 -2
- package/dist/ai/blocks/text.d.ts +1 -2
- package/dist/ai/command-bar.d.ts +1 -2
- package/dist/ai/conversation.d.ts +2 -3
- package/dist/ai/devadoot-icon.d.ts +0 -1
- package/dist/ai/index.d.ts +16 -17
- package/dist/ai/types.js +1 -0
- package/dist/composed/activity-feed.d.ts +1 -2
- package/dist/composed/avatar-group.d.ts +11 -10
- package/dist/composed/avatar-group.d.ts.map +1 -1
- package/dist/composed/avatar-group.js +108 -140
- package/dist/composed/avatar-group.js.map +1 -1
- package/dist/composed/bulk-action-bar.d.ts +20 -13
- package/dist/composed/bulk-action-bar.d.ts.map +1 -1
- package/dist/composed/bulk-action-bar.js +81 -110
- package/dist/composed/bulk-action-bar.js.map +1 -1
- package/dist/composed/command-palette.d.ts +1 -2
- package/dist/composed/confirm-dialog.d.ts +0 -1
- package/dist/composed/date-picker/calendar-grid.d.ts +0 -1
- package/dist/composed/date-picker/date-picker.d.ts +0 -1
- package/dist/composed/date-picker/date-range-picker.d.ts +1 -2
- package/dist/composed/date-picker/date-time-picker.d.ts +0 -1
- package/dist/composed/date-picker/index.d.ts +17 -18
- package/dist/composed/date-picker/month-picker.d.ts +0 -1
- package/dist/composed/date-picker/presets.d.ts +0 -1
- package/dist/composed/date-picker/time-picker.d.ts +0 -1
- package/dist/composed/date-picker/use-calendar.d.ts +0 -1
- package/dist/composed/date-picker/year-picker.d.ts +0 -1
- package/dist/composed/deadline-indicator.d.ts +0 -1
- package/dist/composed/diff.d.ts +0 -1
- package/dist/composed/emoji-picker.d.ts +0 -1
- package/dist/composed/empty-state.d.ts +1 -2
- package/dist/composed/error-boundary.d.ts +15 -4
- package/dist/composed/error-boundary.d.ts.map +1 -1
- package/dist/composed/error-boundary.js +43 -26
- package/dist/composed/error-boundary.js.map +1 -1
- package/dist/composed/extensions/emoji-data.d.ts +0 -1
- package/dist/composed/extensions/emoji-node.d.ts +0 -1
- package/dist/composed/extensions/emoji-suggestion.d.ts +1 -2
- package/dist/composed/extensions/file-attachment.d.ts +0 -1
- package/dist/composed/extensions/mention-suggestion.d.ts +1 -2
- package/dist/composed/extensions/slash-command.d.ts +0 -1
- package/dist/composed/file-preview/audio-preview.d.ts +0 -1
- package/dist/composed/file-preview/document-preview.d.ts +0 -1
- package/dist/composed/file-preview/embed-preview.d.ts +0 -1
- package/dist/composed/file-preview/image-preview.d.ts +0 -1
- package/dist/composed/file-preview/shared.d.ts +0 -1
- package/dist/composed/file-preview/video-preview.d.ts +0 -1
- package/dist/composed/file-preview.d.ts +0 -1
- package/dist/composed/filter-bar.d.ts +0 -1
- package/dist/composed/form-section.d.ts +0 -1
- package/dist/composed/global-loading.d.ts +0 -1
- package/dist/composed/index.d.ts +49 -50
- package/dist/composed/inline-edit.d.ts +0 -1
- package/dist/composed/loading-skeleton.d.ts +2 -0
- package/dist/composed/loading-skeleton.d.ts.map +1 -1
- package/dist/composed/loading-skeleton.js +79 -56
- package/dist/composed/loading-skeleton.js.map +1 -1
- package/dist/composed/markdown-viewer.d.ts +0 -1
- package/dist/composed/master-detail.d.ts +21 -9
- package/dist/composed/master-detail.d.ts.map +1 -1
- package/dist/composed/master-detail.js +91 -77
- package/dist/composed/master-detail.js.map +1 -1
- package/dist/composed/member-picker.d.ts +0 -1
- package/dist/composed/multi-select-popover.d.ts +0 -1
- package/dist/composed/page-skeletons.d.ts +6 -0
- package/dist/composed/page-skeletons.d.ts.map +1 -1
- package/dist/composed/page-skeletons.js +93 -71
- package/dist/composed/page-skeletons.js.map +1 -1
- package/dist/composed/priority-indicator.d.ts +0 -1
- package/dist/composed/responsive-modal.d.ts +1 -2
- package/dist/composed/responsive-modal.js +47 -47
- package/dist/composed/rich-chat-input/attachment-strip.d.ts +0 -1
- package/dist/composed/rich-chat-input/audio-player.d.ts +0 -1
- package/dist/composed/rich-chat-input/audio-waveform.d.ts +0 -1
- package/dist/composed/rich-chat-input/chat-toolbar.d.ts +0 -1
- package/dist/composed/rich-chat-input/recording-overlay.d.ts +0 -1
- package/dist/composed/rich-chat-input/reply-banner.d.ts +0 -1
- package/dist/composed/rich-chat-input/schedule-send.d.ts +0 -1
- package/dist/composed/rich-chat-input/use-voice-recorder.d.ts +0 -1
- package/dist/composed/rich-chat-input.d.ts +9 -10
- package/dist/composed/rich-chat-input.js +1 -1
- package/dist/composed/rich-text-editor.d.ts +1 -2
- package/dist/composed/schedule-view.d.ts +0 -1
- package/dist/composed/simple-tooltip.d.ts +0 -1
- package/dist/composed/status-badge.d.ts +1 -2
- package/dist/hooks/index.d.ts +6 -7
- package/dist/hooks/use-color-mode.d.ts +0 -1
- package/dist/hooks/use-mobile.d.ts +0 -1
- package/dist/hooks/use-touch-device.d.ts +0 -1
- package/dist/hooks/use-viewport-height.d.ts +0 -1
- package/dist/motion/check-motion-provider.d.ts +0 -1
- package/dist/motion/index.d.ts +2 -3
- package/dist/motion/motion-provider.d.ts +1 -2
- package/dist/motion/primitives-index.d.ts +1 -2
- package/dist/motion/primitives.d.ts +1 -2
- package/dist/primitives/_internal/react-arrow.d.ts +1 -1
- package/dist/primitives/_internal/react-collection.d.ts +2 -2
- package/dist/primitives/_internal/react-dismissable-layer.d.ts +1 -1
- package/dist/primitives/_internal/react-focus-scope.d.ts +1 -1
- package/dist/primitives/_internal/react-popper.d.ts +4 -4
- package/dist/primitives/_internal/react-portal.d.ts +1 -1
- package/dist/primitives/_internal/react-use-rect.d.ts +1 -1
- package/dist/primitives/react-accordion.d.ts +3 -3
- package/dist/primitives/react-alert-dialog.d.ts +2 -2
- package/dist/primitives/react-aspect-ratio.d.ts +1 -1
- package/dist/primitives/react-avatar.d.ts +2 -2
- package/dist/primitives/react-checkbox.d.ts +3 -3
- package/dist/primitives/react-collapsible.d.ts +2 -2
- package/dist/primitives/react-context-menu.d.ts +3 -3
- package/dist/primitives/react-dialog.d.ts +5 -5
- package/dist/primitives/react-dropdown-menu.d.ts +3 -3
- package/dist/primitives/react-hover-card.d.ts +5 -5
- package/dist/primitives/react-label.d.ts +1 -1
- package/dist/primitives/react-menu.d.ts +7 -7
- package/dist/primitives/react-menubar.d.ts +5 -5
- package/dist/primitives/react-navigation-menu.d.ts +5 -5
- package/dist/primitives/react-popover.d.ts +6 -6
- package/dist/primitives/react-progress.d.ts +2 -2
- package/dist/primitives/react-radio-group.d.ts +3 -3
- package/dist/primitives/react-roving-focus.d.ts +2 -2
- package/dist/primitives/react-select.d.ts +6 -6
- package/dist/primitives/react-separator.d.ts +1 -1
- package/dist/primitives/react-slider.d.ts +2 -2
- package/dist/primitives/react-switch.d.ts +2 -2
- package/dist/primitives/react-tabs.d.ts +3 -3
- package/dist/primitives/react-toast.d.ts +3 -3
- package/dist/primitives/react-toggle-group.d.ts +4 -4
- package/dist/primitives/react-toggle.d.ts +1 -1
- package/dist/primitives/react-tooltip.d.ts +5 -5
- package/dist/primitives/react-visually-hidden.d.ts +1 -1
- package/dist/shell/app-command-palette.d.ts +2 -3
- package/dist/shell/bottom-navbar.d.ts +1 -2
- package/dist/shell/command-registry.d.ts +1 -2
- package/dist/shell/index.d.ts +12 -11
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +2 -3
- package/dist/shell/link-context.d.ts +2 -3
- package/dist/shell/notification-center.d.ts +0 -1
- package/dist/shell/notification-preferences.d.ts +0 -1
- package/dist/shell/notification-preferences.d.ts.map +1 -1
- package/dist/shell/notification-preferences.js +2 -0
- package/dist/shell/notification-preferences.js.map +1 -1
- package/dist/shell/top-bar.d.ts +1 -2
- package/dist/test-utils/conformance.d.ts +0 -1
- package/dist/ui/accordion.d.ts +1 -2
- package/dist/ui/accordion.js +1 -1
- package/dist/ui/alert-dialog.d.ts +1 -2
- package/dist/ui/alert-dialog.js +52 -52
- package/dist/ui/alert.d.ts +0 -1
- package/dist/ui/aspect-ratio.d.ts +1 -2
- package/dist/ui/aspect-ratio.js +4 -4
- package/dist/ui/autocomplete.d.ts +1 -2
- package/dist/ui/autocomplete.js +1 -1
- package/dist/ui/avatar.d.ts +1 -2
- package/dist/ui/avatar.js +33 -33
- package/dist/ui/badge-group.d.ts +1 -2
- package/dist/ui/badge-indicator.d.ts +0 -1
- package/dist/ui/badge.d.ts +3 -4
- package/dist/ui/banner.d.ts +0 -1
- package/dist/ui/breadcrumb.js +1 -1
- package/dist/ui/button-group.d.ts +1 -2
- package/dist/ui/button-processing.d.ts +0 -1
- package/dist/ui/button.d.ts +1 -2
- package/dist/ui/button.js +1 -1
- package/dist/ui/card.d.ts +0 -1
- package/dist/ui/charts/_internal/animation.d.ts +0 -1
- package/dist/ui/charts/_internal/axes.d.ts +0 -1
- package/dist/ui/charts/_internal/colors.d.ts +1 -2
- package/dist/ui/charts/_internal/grid-lines.d.ts +0 -1
- package/dist/ui/charts/_internal/legend.d.ts +0 -1
- package/dist/ui/charts/_internal/scales.d.ts +0 -1
- package/dist/ui/charts/_internal/tooltip.d.ts +0 -1
- package/dist/ui/charts/_internal/types.d.ts +0 -1
- package/dist/ui/charts/area-chart.d.ts +1 -2
- package/dist/ui/charts/bar-chart.d.ts +1 -2
- package/dist/ui/charts/chart-container.d.ts +1 -2
- package/dist/ui/charts/gauge-chart.d.ts +0 -1
- package/dist/ui/charts/index.d.ts +9 -10
- package/dist/ui/charts/line-chart.d.ts +1 -2
- package/dist/ui/charts/pie-chart.d.ts +0 -1
- package/dist/ui/charts/radar-chart.d.ts +0 -1
- package/dist/ui/charts/sparkline.d.ts +0 -1
- package/dist/ui/chat/date-separator.d.ts +0 -1
- package/dist/ui/chat/index.d.ts +7 -8
- package/dist/ui/chat/message-input.d.ts +0 -1
- package/dist/ui/chat/message-list.d.ts +0 -1
- package/dist/ui/chat/message.d.ts +1 -2
- package/dist/ui/chat/system-message.d.ts +1 -2
- package/dist/ui/chat/typing-indicator.d.ts +0 -1
- package/dist/ui/chat/unread-separator.d.ts +0 -1
- package/dist/ui/checkbox.d.ts +2 -3
- package/dist/ui/checkbox.js +13 -13
- package/dist/ui/collapsible.d.ts +1 -2
- package/dist/ui/collapsible.js +1 -1
- package/dist/ui/color-input.d.ts +0 -1
- package/dist/ui/color-swatch.d.ts +0 -1
- package/dist/ui/combobox.d.ts +3 -4
- package/dist/ui/combobox.d.ts.map +1 -1
- package/dist/ui/combobox.js +146 -141
- package/dist/ui/combobox.js.map +1 -1
- package/dist/ui/context-menu.d.ts +1 -2
- package/dist/ui/context-menu.js +58 -58
- package/dist/ui/data-table-body.d.ts +0 -1
- package/dist/ui/data-table-bulk-actions.d.ts +0 -1
- package/dist/ui/data-table-card.d.ts +0 -1
- package/dist/ui/data-table-context.d.ts +0 -1
- package/dist/ui/data-table-header.d.ts +0 -1
- package/dist/ui/data-table-pagination.d.ts +0 -1
- package/dist/ui/data-table-toolbar.d.ts +0 -1
- package/dist/ui/data-table.d.ts +3 -4
- package/dist/ui/devalok-grain.d.ts +0 -1
- package/dist/ui/dialog.d.ts +1 -2
- package/dist/ui/dialog.js +43 -43
- package/dist/ui/dot.d.ts +0 -1
- package/dist/ui/dropdown-menu.d.ts +1 -2
- package/dist/ui/dropdown-menu.js +69 -69
- package/dist/ui/file-upload.d.ts +0 -1
- package/dist/ui/file-upload.d.ts.map +1 -1
- package/dist/ui/file-upload.js +124 -138
- package/dist/ui/file-upload.js.map +1 -1
- package/dist/ui/form.d.ts +7 -1
- package/dist/ui/form.d.ts.map +1 -1
- package/dist/ui/form.js +4 -2
- package/dist/ui/form.js.map +1 -1
- package/dist/ui/hover-card.d.ts +1 -2
- package/dist/ui/hover-card.js +16 -16
- package/dist/ui/icon-button.d.ts +4 -4
- package/dist/ui/icon-button.d.ts.map +1 -1
- package/dist/ui/icon-button.js +1 -1
- package/dist/ui/icon-button.js.map +1 -1
- package/dist/ui/icon-context.d.ts +0 -1
- package/dist/ui/icon-group.d.ts +1 -2
- package/dist/ui/icon.d.ts +1 -2
- package/dist/ui/index.d.ts +78 -79
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/input-otp.d.ts +0 -1
- package/dist/ui/input.d.ts +1 -2
- package/dist/ui/label.d.ts +1 -2
- package/dist/ui/label.d.ts.map +1 -1
- package/dist/ui/label.js +13 -12
- package/dist/ui/label.js.map +1 -1
- package/dist/ui/lib/bottom-sheet.d.ts +0 -1
- package/dist/ui/lib/check-tokens.d.ts +0 -1
- package/dist/ui/lib/field-state.d.ts +0 -1
- package/dist/ui/lib/icon-input.d.ts +0 -1
- package/dist/ui/lib/index.d.ts +6 -7
- package/dist/ui/lib/keybinding.d.ts +0 -1
- package/dist/ui/lib/link-context.d.ts +0 -1
- package/dist/ui/lib/mention.d.ts +0 -1
- package/dist/ui/lib/normalize-icon.d.ts +2 -2
- package/dist/ui/lib/slot.d.ts +2 -3
- package/dist/ui/lib/use-controllable-open.d.ts +0 -1
- package/dist/ui/link.d.ts +0 -1
- package/dist/ui/link.js +1 -1
- package/dist/ui/menubar.d.ts +1 -2
- package/dist/ui/menubar.js +64 -64
- package/dist/ui/navigation-menu.d.ts +1 -2
- package/dist/ui/navigation-menu.js +67 -67
- package/dist/ui/number-input.d.ts +1 -2
- package/dist/ui/oauth-button/index.d.ts +1 -2
- package/dist/ui/oauth-button/oauth-button.d.ts +2 -3
- package/dist/ui/pagination.d.ts +0 -1
- package/dist/ui/pagination.js +1 -1
- package/dist/ui/popover.d.ts +1 -2
- package/dist/ui/progress-ring.d.ts +0 -1
- package/dist/ui/progress.d.ts +1 -2
- package/dist/ui/progress.js +30 -30
- package/dist/ui/radio.d.ts +2 -3
- package/dist/ui/radio.js +18 -18
- package/dist/ui/search-input.d.ts +0 -1
- package/dist/ui/segmented-control.d.ts +1 -2
- package/dist/ui/select.d.ts +1 -2
- package/dist/ui/select.js +55 -55
- package/dist/ui/separator.d.ts +1 -2
- package/dist/ui/separator.js +5 -5
- package/dist/ui/sheet.d.ts +1 -2
- package/dist/ui/sheet.js +45 -45
- package/dist/ui/sidebar.d.ts +4 -5
- package/dist/ui/sidebar.js +1 -1
- package/dist/ui/slider.d.ts +1 -2
- package/dist/ui/slider.js +14 -14
- package/dist/ui/spinner.d.ts +0 -1
- package/dist/ui/spinner.d.ts.map +1 -1
- package/dist/ui/spinner.js +50 -44
- package/dist/ui/spinner.js.map +1 -1
- package/dist/ui/split-button.d.ts +14 -4
- package/dist/ui/split-button.d.ts.map +1 -1
- package/dist/ui/split-button.js.map +1 -1
- package/dist/ui/stat-card.d.ts +3 -4
- package/dist/ui/stat-flash.d.ts +1 -2
- package/dist/ui/stepper.d.ts +1 -2
- package/dist/ui/surface.js +1 -1
- package/dist/ui/switch.d.ts +2 -3
- package/dist/ui/switch.d.ts.map +1 -1
- package/dist/ui/switch.js +31 -31
- package/dist/ui/switch.js.map +1 -1
- package/dist/ui/table-row-link.d.ts +0 -1
- package/dist/ui/table.js +1 -1
- package/dist/ui/table.js.map +1 -1
- package/dist/ui/tabs.d.ts +1 -2
- package/dist/ui/tabs.js +35 -35
- package/dist/ui/textarea.d.ts +1 -2
- package/dist/ui/toast-registry.d.ts +0 -1
- package/dist/ui/toast-types.js +1 -0
- package/dist/ui/toast.d.ts +2 -3
- package/dist/ui/toaster.d.ts +0 -1
- package/dist/ui/toggle-group.d.ts +2 -3
- package/dist/ui/toggle-group.js +14 -14
- package/dist/ui/toggle.d.ts +1 -2
- package/dist/ui/toggle.js +12 -12
- package/dist/ui/tooltip.d.ts +1 -2
- package/dist/ui/tooltip.js +21 -21
- package/dist/ui/tree-view/index.d.ts +3 -4
- package/dist/ui/tree-view/tree-item.d.ts +1 -2
- package/dist/ui/tree-view/tree-view.d.ts +1 -2
- package/dist/ui/tree-view/use-tree.d.ts +1 -2
- package/dist/ui/truncated-text.d.ts +0 -1
- package/docs/components/composed/bulk-action-bar.md +9 -3
- package/docs/components/composed/error-boundary.md +18 -2
- package/docs/components/composed/master-detail.md +12 -2
- package/docs/components/composed/page-skeletons.md +2 -2
- package/docs/components/composed/rich-chat-input.md +18 -6
- package/docs/components/composed/simple-tooltip.md +1 -1
- package/docs/components/shell/app-command-palette.md +2 -1
- package/docs/components/shell/bottom-navbar.md +4 -4
- package/docs/components/shell/command-registry.md +2 -2
- package/docs/components/shell/link-context.md +2 -2
- package/docs/components/shell/top-bar.md +1 -1
- package/docs/components/ui/search-input.md +2 -2
- package/docs/components/ui/slider.md +2 -2
- package/docs/components/ui/split-button.md +3 -3
- package/docs/recipes/install-astro.md +2 -0
- package/docs/recipes/install-next-app-router.md +2 -0
- package/docs/recipes/install-remix.md +2 -0
- package/docs/recipes/install-tanstack-start.md +2 -0
- package/docs/recipes/install-vite.md +2 -0
- package/docs/recipes/troubleshoot.md +80 -0
- package/llms.txt +2 -2
- package/make-kit/Guidelines.md +1 -1
- package/make-kit/components/overview.md +2 -2
- package/make-kit/foundations/surfaces.md +1 -1
- package/mcp-manifest.json +411 -147
- package/package.json +30 -10
- package/skill/SKILL.md +1 -1
- package/skill/chat-skill/README.md +18 -0
- package/skill/chat-skill/SKILL.md +78 -0
- package/skill/chat-skill/chatgpt-instructions.md +26 -0
- package/skill/chat-skill/gemini-instructions.md +25 -0
- package/skill/references/components.md +2 -2
- package/skill/references/setup-astro.md +2 -0
- package/skill/references/setup-next-app-router.md +2 -0
- package/skill/references/setup-remix.md +2 -0
- package/skill/references/setup-tanstack-start.md +2 -0
- package/skill/references/setup-vite.md +2 -0
- package/skill/references/troubleshoot.md +80 -0
- package/dist/_chunks/primitives.js +0 -7596
- package/dist/_chunks/primitives.js.map +0 -1
- package/dist/shell/sidebar.d.ts +0 -113
- package/dist/shell/sidebar.d.ts.map +0 -1
- package/dist/shell/sidebar.js +0 -293
- package/dist/shell/sidebar.js.map +0 -1
- package/docs/components/shell/sidebar.md +0 -103
package/dist/shell/sidebar.d.ts
DELETED
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { IconInput } from '../ui/lib/icon-input';
|
|
3
|
-
/**
|
|
4
|
-
* AppSidebar -- Application-layer sidebar built on the Sidebar primitive.
|
|
5
|
-
*
|
|
6
|
-
* Design-system token migration (2026-02-28):
|
|
7
|
-
* All V1 colour tokens have been replaced with semantic design-system tokens.
|
|
8
|
-
* Typography classes replaced with Tailwind equivalents.
|
|
9
|
-
*
|
|
10
|
-
* Props-driven: accepts user info, currentPath, and navItems instead of
|
|
11
|
-
* reading from Remix hooks or Zustand stores.
|
|
12
|
-
*/
|
|
13
|
-
import * as React from 'react';
|
|
14
|
-
export interface NavSubItem {
|
|
15
|
-
title: string;
|
|
16
|
-
href: string;
|
|
17
|
-
/** Optional icon. Accepts any `IconInput`. */
|
|
18
|
-
icon?: IconInput;
|
|
19
|
-
exact?: boolean;
|
|
20
|
-
}
|
|
21
|
-
export interface NavItem {
|
|
22
|
-
title: string;
|
|
23
|
-
href: string;
|
|
24
|
-
/** Icon for this nav item. Accepts any `IconInput`. */
|
|
25
|
-
icon: IconInput;
|
|
26
|
-
/** When true, the route matches only when the path is exactly equal */
|
|
27
|
-
exact?: boolean;
|
|
28
|
-
/** Badge rendered on the right side of the nav item */
|
|
29
|
-
badge?: string | number;
|
|
30
|
-
/** Optional child items — renders as collapsible sub-list with chevron */
|
|
31
|
-
children?: NavSubItem[];
|
|
32
|
-
/** Whether the collapsible is open by default. Auto-opens when a child is active. */
|
|
33
|
-
defaultOpen?: boolean;
|
|
34
|
-
}
|
|
35
|
-
export interface NavGroup {
|
|
36
|
-
label: string;
|
|
37
|
-
items: NavItem[];
|
|
38
|
-
/** Action rendered next to the group label (e.g., a "+" button) */
|
|
39
|
-
action?: React.ReactNode;
|
|
40
|
-
}
|
|
41
|
-
export interface SidebarUser {
|
|
42
|
-
name: string;
|
|
43
|
-
email?: string;
|
|
44
|
-
image?: string | null;
|
|
45
|
-
designation?: string;
|
|
46
|
-
role?: string;
|
|
47
|
-
}
|
|
48
|
-
export interface SidebarPromo {
|
|
49
|
-
/** Promo message text */
|
|
50
|
-
text: string;
|
|
51
|
-
/** Optional icon rendered before the text. Accepts any `IconInput`. */
|
|
52
|
-
icon?: IconInput;
|
|
53
|
-
/** Action button rendered in the promo banner */
|
|
54
|
-
action?: {
|
|
55
|
-
label: string;
|
|
56
|
-
href?: string;
|
|
57
|
-
onClick?: () => void;
|
|
58
|
-
};
|
|
59
|
-
/** When provided, renders a dismiss (X) button that calls this handler */
|
|
60
|
-
onDismiss?: () => void;
|
|
61
|
-
}
|
|
62
|
-
export interface SidebarFooterConfig {
|
|
63
|
-
/** Legal/utility links rendered as a row separated by dividers */
|
|
64
|
-
links?: Array<{
|
|
65
|
-
label: string;
|
|
66
|
-
href: string;
|
|
67
|
-
}>;
|
|
68
|
-
/** Version or build info text (or link) rendered inline after links */
|
|
69
|
-
version?: string | {
|
|
70
|
-
label: string;
|
|
71
|
-
href: string;
|
|
72
|
-
};
|
|
73
|
-
/** Custom content rendered above the links row */
|
|
74
|
-
slot?: React.ReactNode;
|
|
75
|
-
/** Promo/upsell banner rendered above the links row */
|
|
76
|
-
promo?: SidebarPromo;
|
|
77
|
-
}
|
|
78
|
-
export interface AppSidebarProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
79
|
-
/** Currently active pathname -- used to highlight the active nav item */
|
|
80
|
-
currentPath?: string;
|
|
81
|
-
/** User information displayed in the sidebar header */
|
|
82
|
-
user?: SidebarUser | null;
|
|
83
|
-
/** Primary navigation groups rendered in the main content area */
|
|
84
|
-
navGroups?: NavGroup[];
|
|
85
|
-
/** Optional logo element. Falls back to a text placeholder. */
|
|
86
|
-
logo?: React.ReactNode;
|
|
87
|
-
/** Footer links rendered at the bottom of the sidebar */
|
|
88
|
-
footerLinks?: Array<{
|
|
89
|
-
label: string;
|
|
90
|
-
href: string;
|
|
91
|
-
}>;
|
|
92
|
-
/** Structured footer config (takes precedence over footerLinks) */
|
|
93
|
-
footer?: SidebarFooterConfig;
|
|
94
|
-
/** Content rendered between user header and navigation */
|
|
95
|
-
headerSlot?: React.ReactNode;
|
|
96
|
-
/** Content rendered between navigation and footer */
|
|
97
|
-
preFooterSlot?: React.ReactNode;
|
|
98
|
-
/** className applied to the wrapper div around preFooterSlot */
|
|
99
|
-
preFooterClassName?: string;
|
|
100
|
-
/** Override rendering for specific nav items. Return null to use default rendering. */
|
|
101
|
-
renderItem?: (item: NavItem, defaultRender: () => React.ReactNode) => React.ReactNode | null;
|
|
102
|
-
/** Additional className for the root sidebar element */
|
|
103
|
-
className?: string;
|
|
104
|
-
/**
|
|
105
|
-
* Corner radius of nav items (composable). @default 'md' (control radius, ~6px).
|
|
106
|
-
* `'lg'` restores the previous rounder look; `'sm'` is tighter; `'pill'` is fully rounded.
|
|
107
|
-
* Sets the `--ds-sidebar-item-radius` CSS var, so you can also override it via `className`/`style`.
|
|
108
|
-
*/
|
|
109
|
-
navItemRadius?: 'sm' | 'md' | 'lg' | 'pill';
|
|
110
|
-
}
|
|
111
|
-
declare const AppSidebar: React.ForwardRefExoticComponent<AppSidebarProps & React.RefAttributes<HTMLDivElement>>;
|
|
112
|
-
export { AppSidebar };
|
|
113
|
-
//# sourceMappingURL=sidebar.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../src/shell/sidebar.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAU9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AA4BrD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,uDAAuD;IACvD,IAAI,EAAE,SAAS,CAAA;IACf,uEAAuE;IACvE,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAA;IACvB,qFAAqF;IACrF,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,OAAO,EAAE,CAAA;IAChB,mEAAmE;IACnE,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,uEAAuE;IACvE,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,iDAAiD;IACjD,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,CAAA;IAC/D,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,kEAAkE;IAClE,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC9C,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IAClD,kDAAkD;IAClD,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,uDAAuD;IACvD,KAAK,CAAC,EAAE,YAAY,CAAA;CACrB;AAED,MAAM,WAAW,eACf,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC5C,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,uDAAuD;IACvD,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IACzB,kEAAkE;IAClE,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;IACtB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,yDAAyD;IACzD,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpD,mEAAmE;IACnE,MAAM,CAAC,EAAE,mBAAmB,CAAA;IAC5B,0DAA0D;IAC1D,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC5B,qDAAqD;IACrD,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC/B,gEAAgE;IAChE,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,uFAAuF;IACvF,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,GAAG,IAAI,CAAA;IAC5F,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,aAAa,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAA;CAC5C;AAgMD,QAAA,MAAM,UAAU,wFAmOf,CAAA;AAGD,OAAO,EAAE,UAAU,EAAE,CAAA"}
|
package/dist/shell/sidebar.js
DELETED
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { IconProvider as e } from "../ui/icon-context.js";
|
|
3
|
-
import { cn as t } from "../ui/lib/utils.js";
|
|
4
|
-
import { Avatar as n, AvatarFallback as r, AvatarImage as i } from "../ui/avatar.js";
|
|
5
|
-
import { normalizeIcon as a } from "../_chunks/normalize-icon.js";
|
|
6
|
-
import { Button as o } from "../ui/button.js";
|
|
7
|
-
import { Collapsible as s, CollapsibleContent as c, CollapsibleTrigger as l } from "../ui/collapsible.js";
|
|
8
|
-
import { TruncatedText as u } from "../ui/truncated-text.js";
|
|
9
|
-
import { useLink as d } from "../_chunks/link-context.js";
|
|
10
|
-
import { Sidebar as f, SidebarContent as p, SidebarFooter as m, SidebarGroup as h, SidebarGroupAction as g, SidebarGroupContent as _, SidebarGroupLabel as v, SidebarHeader as y, SidebarMenu as b, SidebarMenuBadge as x, SidebarMenuButton as S, SidebarMenuItem as C, SidebarMenuSub as w, SidebarMenuSubButton as T, SidebarMenuSubItem as E, SidebarSeparator as D } from "../ui/sidebar.js";
|
|
11
|
-
import "./link-context.js";
|
|
12
|
-
import * as O from "react";
|
|
13
|
-
import { Fragment as k, jsx as A, jsxs as j } from "react/jsx-runtime";
|
|
14
|
-
//#region src/shell/sidebar.tsx
|
|
15
|
-
function M({ className: e }) {
|
|
16
|
-
return /* @__PURE__ */ A("svg", {
|
|
17
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
18
|
-
width: "16",
|
|
19
|
-
height: "16",
|
|
20
|
-
viewBox: "0 0 24 24",
|
|
21
|
-
fill: "none",
|
|
22
|
-
stroke: "currentColor",
|
|
23
|
-
strokeWidth: "2",
|
|
24
|
-
strokeLinecap: "round",
|
|
25
|
-
strokeLinejoin: "round",
|
|
26
|
-
className: e,
|
|
27
|
-
children: /* @__PURE__ */ A("path", { d: "m9 18 6-6-6-6" })
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
function N({ className: e }) {
|
|
31
|
-
return /* @__PURE__ */ j("svg", {
|
|
32
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
33
|
-
width: "16",
|
|
34
|
-
height: "16",
|
|
35
|
-
viewBox: "0 0 24 24",
|
|
36
|
-
fill: "none",
|
|
37
|
-
stroke: "currentColor",
|
|
38
|
-
strokeWidth: "2",
|
|
39
|
-
strokeLinecap: "round",
|
|
40
|
-
strokeLinejoin: "round",
|
|
41
|
-
className: e,
|
|
42
|
-
children: [/* @__PURE__ */ A("path", { d: "M18 6 6 18" }), /* @__PURE__ */ A("path", { d: "m6 6 12 12" })]
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
var P = "relative gap-ds-04 rounded-[var(--ds-sidebar-item-radius,var(--radius-control))] px-ds-04 py-ds-03 transition-colors duration-fast-02", F = {
|
|
46
|
-
sm: "var(--radius-control-inner)",
|
|
47
|
-
md: "var(--radius-control)",
|
|
48
|
-
lg: "var(--radius-surface)",
|
|
49
|
-
pill: "var(--radius-pill)"
|
|
50
|
-
}, I = "bg-accent-2 text-accent-11 font-medium", L = "text-surface-fg-subtle hover:bg-surface-raised-hover hover:text-surface-fg";
|
|
51
|
-
function R({ item: n, isActive: r, isPathActive: i }) {
|
|
52
|
-
let o = d(), u = n.badge == null ? null : typeof n.badge == "number" && n.badge > 99 ? "99+" : String(n.badge);
|
|
53
|
-
if (n.children && n.children.length > 0) {
|
|
54
|
-
let d = n.children.some((e) => i(e.href, e.exact));
|
|
55
|
-
return /* @__PURE__ */ A(s, {
|
|
56
|
-
defaultOpen: d || r || (n.defaultOpen ?? !1),
|
|
57
|
-
className: "group/collapsible",
|
|
58
|
-
children: /* @__PURE__ */ j(C, { children: [/* @__PURE__ */ j("div", {
|
|
59
|
-
className: "relative",
|
|
60
|
-
children: [
|
|
61
|
-
/* @__PURE__ */ A(S, {
|
|
62
|
-
asChild: !0,
|
|
63
|
-
isActive: r || d,
|
|
64
|
-
tooltip: n.title,
|
|
65
|
-
className: t(P, r || d ? I : L),
|
|
66
|
-
children: /* @__PURE__ */ j(o, {
|
|
67
|
-
href: n.href,
|
|
68
|
-
"aria-label": n.title,
|
|
69
|
-
"aria-current": r ? "page" : void 0,
|
|
70
|
-
className: "min-w-0",
|
|
71
|
-
children: [/* @__PURE__ */ A("span", {
|
|
72
|
-
className: "[&>svg]:h-ico-md [&>svg]:w-ico-md shrink-0",
|
|
73
|
-
"aria-hidden": "true",
|
|
74
|
-
children: /* @__PURE__ */ A(e, {
|
|
75
|
-
size: "md",
|
|
76
|
-
children: a(n.icon)
|
|
77
|
-
})
|
|
78
|
-
}), /* @__PURE__ */ A("span", {
|
|
79
|
-
className: "text-body-lg truncate",
|
|
80
|
-
children: n.title
|
|
81
|
-
})]
|
|
82
|
-
})
|
|
83
|
-
}),
|
|
84
|
-
u && /* @__PURE__ */ A(x, { children: u }),
|
|
85
|
-
/* @__PURE__ */ A(l, {
|
|
86
|
-
asChild: !0,
|
|
87
|
-
children: /* @__PURE__ */ A("button", {
|
|
88
|
-
className: "absolute right-ds-02 top-1/2 flex h-5 w-5 -translate-y-1/2 items-center justify-center rounded-control text-surface-fg-subtle transition-colors hover:bg-surface-raised-hover hover:text-surface-fg group-data-[collapsible=icon]:hidden",
|
|
89
|
-
"aria-label": `Toggle ${n.title}`,
|
|
90
|
-
children: /* @__PURE__ */ A(M, { className: "h-4 w-4 transition-transform duration-fast-02 ease-productive-standard group-data-[state=open]/collapsible:rotate-90" })
|
|
91
|
-
})
|
|
92
|
-
})
|
|
93
|
-
]
|
|
94
|
-
}), /* @__PURE__ */ A(c, { children: /* @__PURE__ */ A(w, { children: n.children.map((t) => {
|
|
95
|
-
let n = i(t.href, t.exact);
|
|
96
|
-
return /* @__PURE__ */ A(E, { children: /* @__PURE__ */ A(T, {
|
|
97
|
-
asChild: !0,
|
|
98
|
-
isActive: n,
|
|
99
|
-
children: /* @__PURE__ */ j(o, {
|
|
100
|
-
href: t.href,
|
|
101
|
-
"aria-current": n ? "page" : void 0,
|
|
102
|
-
className: "min-w-0",
|
|
103
|
-
children: [t.icon && /* @__PURE__ */ A("span", {
|
|
104
|
-
className: "[&>svg]:h-ico-sm [&>svg]:w-ico-sm shrink-0",
|
|
105
|
-
"aria-hidden": "true",
|
|
106
|
-
children: /* @__PURE__ */ A(e, {
|
|
107
|
-
size: "sm",
|
|
108
|
-
children: a(t.icon)
|
|
109
|
-
})
|
|
110
|
-
}), /* @__PURE__ */ A("span", {
|
|
111
|
-
className: "truncate",
|
|
112
|
-
children: t.title
|
|
113
|
-
})]
|
|
114
|
-
})
|
|
115
|
-
}) }, t.href);
|
|
116
|
-
}) }) })] })
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
return /* @__PURE__ */ j(C, { children: [/* @__PURE__ */ A(S, {
|
|
120
|
-
asChild: !0,
|
|
121
|
-
isActive: r,
|
|
122
|
-
tooltip: n.title,
|
|
123
|
-
className: t(P, r ? I : L),
|
|
124
|
-
children: /* @__PURE__ */ j(o, {
|
|
125
|
-
href: n.href,
|
|
126
|
-
"aria-label": n.title,
|
|
127
|
-
"aria-current": r ? "page" : void 0,
|
|
128
|
-
className: "min-w-0",
|
|
129
|
-
children: [/* @__PURE__ */ A("span", {
|
|
130
|
-
className: "[&>svg]:h-ico-md [&>svg]:w-ico-md shrink-0",
|
|
131
|
-
"aria-hidden": "true",
|
|
132
|
-
children: /* @__PURE__ */ A(e, {
|
|
133
|
-
size: "md",
|
|
134
|
-
children: a(n.icon)
|
|
135
|
-
})
|
|
136
|
-
}), /* @__PURE__ */ A("span", {
|
|
137
|
-
className: "text-body-lg truncate",
|
|
138
|
-
children: n.title
|
|
139
|
-
})]
|
|
140
|
-
})
|
|
141
|
-
}), u && /* @__PURE__ */ A(x, { children: u })] });
|
|
142
|
-
}
|
|
143
|
-
var z = O.forwardRef(({ currentPath: s = "/", user: c, navGroups: l = [], logo: x, headerSlot: S, preFooterSlot: C, preFooterClassName: w, footerLinks: T = [], footer: E, renderItem: M, className: P, navItemRadius: I, style: L, ...z }, B) => {
|
|
144
|
-
let V = d(), H = (e, t = !1) => t || e === "/" ? s === e : s.startsWith(e);
|
|
145
|
-
return /* @__PURE__ */ j(f, {
|
|
146
|
-
...z,
|
|
147
|
-
ref: B,
|
|
148
|
-
"aria-label": "Main navigation",
|
|
149
|
-
style: I ? {
|
|
150
|
-
"--ds-sidebar-item-radius": F[I],
|
|
151
|
-
...L
|
|
152
|
-
} : L,
|
|
153
|
-
className: t("z-raised hidden h-full flex-col border-r border-surface-border-strong bg-surface-raised md:flex", P),
|
|
154
|
-
children: [
|
|
155
|
-
/* @__PURE__ */ A(y, {
|
|
156
|
-
className: "px-ds-06 py-ds-06",
|
|
157
|
-
children: x ?? /* @__PURE__ */ A("span", {
|
|
158
|
-
className: "text-heading-xs font-semibold text-surface-fg",
|
|
159
|
-
children: "Logo"
|
|
160
|
-
})
|
|
161
|
-
}),
|
|
162
|
-
c && /* @__PURE__ */ j("div", {
|
|
163
|
-
className: "flex items-center gap-ds-04 px-ds-06 pb-ds-05",
|
|
164
|
-
children: [/* @__PURE__ */ j(n, {
|
|
165
|
-
className: "h-ds-sm-plus w-ds-sm-plus",
|
|
166
|
-
children: [c.image ? /* @__PURE__ */ A(i, {
|
|
167
|
-
src: c.image,
|
|
168
|
-
alt: c.name
|
|
169
|
-
}) : null, /* @__PURE__ */ A(r, {
|
|
170
|
-
className: "bg-surface-raised-hover text-surface-fg",
|
|
171
|
-
children: c.name?.charAt(0).toUpperCase()
|
|
172
|
-
})]
|
|
173
|
-
}), /* @__PURE__ */ j("div", {
|
|
174
|
-
className: "flex min-w-0 flex-col",
|
|
175
|
-
children: [/* @__PURE__ */ A(u, {
|
|
176
|
-
className: "text-body-md text-surface-fg",
|
|
177
|
-
children: c.name ?? ""
|
|
178
|
-
}), /* @__PURE__ */ A(u, {
|
|
179
|
-
className: "text-body-sm text-surface-fg-subtle",
|
|
180
|
-
children: c.designation || c.role || ""
|
|
181
|
-
})]
|
|
182
|
-
})]
|
|
183
|
-
}),
|
|
184
|
-
/* @__PURE__ */ A(D, {}),
|
|
185
|
-
S && /* @__PURE__ */ j(k, { children: [S, /* @__PURE__ */ A(D, {})] }),
|
|
186
|
-
/* @__PURE__ */ A(p, {
|
|
187
|
-
className: "no-scrollbar px-ds-04",
|
|
188
|
-
children: l.map((e, t) => /* @__PURE__ */ j("div", { children: [t > 0 && /* @__PURE__ */ A(D, {}), /* @__PURE__ */ j(h, { children: [
|
|
189
|
-
/* @__PURE__ */ A(v, {
|
|
190
|
-
className: "px-ds-04 text-body-sm text-surface-fg-subtle",
|
|
191
|
-
children: e.label
|
|
192
|
-
}),
|
|
193
|
-
e.action && /* @__PURE__ */ A(g, {
|
|
194
|
-
asChild: !0,
|
|
195
|
-
children: e.action
|
|
196
|
-
}),
|
|
197
|
-
/* @__PURE__ */ A(_, { children: /* @__PURE__ */ A(b, { children: e.items.map((e) => {
|
|
198
|
-
let t = () => /* @__PURE__ */ A(R, {
|
|
199
|
-
item: e,
|
|
200
|
-
isActive: H(e.href, e.exact),
|
|
201
|
-
isPathActive: H
|
|
202
|
-
});
|
|
203
|
-
if (M) {
|
|
204
|
-
let n = M(e, t);
|
|
205
|
-
if (n !== null) return /* @__PURE__ */ A(O.Fragment, { children: n }, e.href);
|
|
206
|
-
}
|
|
207
|
-
return /* @__PURE__ */ A(O.Fragment, { children: t() }, e.href);
|
|
208
|
-
}) }) })
|
|
209
|
-
] })] }, e.label))
|
|
210
|
-
}),
|
|
211
|
-
C && /* @__PURE__ */ j(k, { children: [/* @__PURE__ */ A(D, {}), /* @__PURE__ */ A("div", {
|
|
212
|
-
className: w,
|
|
213
|
-
children: C
|
|
214
|
-
})] }),
|
|
215
|
-
E ? /* @__PURE__ */ j(m, {
|
|
216
|
-
className: "gap-ds-03 px-ds-06 py-ds-05",
|
|
217
|
-
children: [
|
|
218
|
-
E.slot && /* @__PURE__ */ A("div", { children: E.slot }),
|
|
219
|
-
E.promo && /* @__PURE__ */ j("div", {
|
|
220
|
-
className: "relative rounded-surface bg-surface-raised p-ds-04 shadow-raised",
|
|
221
|
-
children: [E.promo.onDismiss && /* @__PURE__ */ A("button", {
|
|
222
|
-
onClick: E.promo.onDismiss,
|
|
223
|
-
"aria-label": "Dismiss",
|
|
224
|
-
className: "absolute right-ds-02 top-ds-02 flex h-5 w-5 items-center justify-center rounded-control text-surface-fg-subtle transition-colors hover:bg-surface-raised-hover hover:text-surface-fg",
|
|
225
|
-
children: /* @__PURE__ */ A(N, { className: "h-3.5 w-3.5" })
|
|
226
|
-
}), /* @__PURE__ */ j("div", {
|
|
227
|
-
className: "flex flex-col gap-ds-03",
|
|
228
|
-
children: [E.promo.icon && /* @__PURE__ */ A("span", {
|
|
229
|
-
className: "text-accent-11 [&>svg]:h-ico-md [&>svg]:w-ico-md",
|
|
230
|
-
"aria-hidden": "true",
|
|
231
|
-
children: /* @__PURE__ */ A(e, {
|
|
232
|
-
size: "md",
|
|
233
|
-
children: a(E.promo.icon)
|
|
234
|
-
})
|
|
235
|
-
}), /* @__PURE__ */ j("div", {
|
|
236
|
-
className: "flex min-w-0 flex-col gap-ds-03",
|
|
237
|
-
children: [/* @__PURE__ */ A("p", {
|
|
238
|
-
className: "text-body-sm text-surface-fg line-clamp-2",
|
|
239
|
-
children: E.promo.text
|
|
240
|
-
}), E.promo.action && (E.promo.action.href ? /* @__PURE__ */ A(o, {
|
|
241
|
-
asChild: !0,
|
|
242
|
-
variant: "solid",
|
|
243
|
-
size: "sm",
|
|
244
|
-
className: "self-start",
|
|
245
|
-
children: /* @__PURE__ */ A(V, {
|
|
246
|
-
href: E.promo.action.href,
|
|
247
|
-
onClick: E.promo.action.onClick,
|
|
248
|
-
children: E.promo.action.label
|
|
249
|
-
})
|
|
250
|
-
}) : /* @__PURE__ */ A(o, {
|
|
251
|
-
variant: "solid",
|
|
252
|
-
size: "sm",
|
|
253
|
-
className: "self-start",
|
|
254
|
-
onClick: E.promo.action.onClick,
|
|
255
|
-
children: E.promo.action.label
|
|
256
|
-
}))]
|
|
257
|
-
})]
|
|
258
|
-
})]
|
|
259
|
-
}),
|
|
260
|
-
(E.links?.length || E.version) && /* @__PURE__ */ j("div", {
|
|
261
|
-
className: "flex items-center gap-ds-03 text-body-sm text-surface-fg-subtle",
|
|
262
|
-
children: [
|
|
263
|
-
E.links?.map((e, t) => /* @__PURE__ */ j(O.Fragment, { children: [t > 0 && /* @__PURE__ */ A("span", { children: "·" }), /* @__PURE__ */ A(V, {
|
|
264
|
-
className: "transition-colors hover:text-accent-11",
|
|
265
|
-
href: e.href,
|
|
266
|
-
children: e.label
|
|
267
|
-
})] }, e.href)),
|
|
268
|
-
E.links?.length && E.version && /* @__PURE__ */ A("span", { children: "·" }),
|
|
269
|
-
E.version && (typeof E.version == "string" ? /* @__PURE__ */ A("span", { children: E.version }) : /* @__PURE__ */ A(V, {
|
|
270
|
-
className: "transition-colors hover:text-accent-11",
|
|
271
|
-
href: E.version.href,
|
|
272
|
-
children: E.version.label
|
|
273
|
-
}))
|
|
274
|
-
]
|
|
275
|
-
})
|
|
276
|
-
]
|
|
277
|
-
}) : T.length > 0 ? /* @__PURE__ */ A(m, {
|
|
278
|
-
className: "px-ds-06 py-ds-05",
|
|
279
|
-
children: /* @__PURE__ */ A("div", {
|
|
280
|
-
className: "flex items-center gap-ds-03 text-body-sm text-surface-fg-subtle",
|
|
281
|
-
children: T.map((e, t) => /* @__PURE__ */ j(O.Fragment, { children: [t > 0 && /* @__PURE__ */ A("span", { children: "·" }), /* @__PURE__ */ A(V, {
|
|
282
|
-
className: "transition-colors hover:text-accent-11",
|
|
283
|
-
href: e.href,
|
|
284
|
-
children: e.label
|
|
285
|
-
})] }, e.href))
|
|
286
|
-
})
|
|
287
|
-
}) : null
|
|
288
|
-
]
|
|
289
|
-
});
|
|
290
|
-
});
|
|
291
|
-
z.displayName = "AppSidebar";
|
|
292
|
-
//#endregion
|
|
293
|
-
export { z as AppSidebar };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar.js","names":[],"sources":["../../src/shell/sidebar.tsx"],"sourcesContent":["'use client'\n\n/**\n * AppSidebar -- Application-layer sidebar built on the Sidebar primitive.\n *\n * Design-system token migration (2026-02-28):\n * All V1 colour tokens have been replaced with semantic design-system tokens.\n * Typography classes replaced with Tailwind equivalents.\n *\n * Props-driven: accepts user info, currentPath, and navItems instead of\n * reading from Remix hooks or Zustand stores.\n */\nimport * as React from 'react'\n\nimport { Avatar, AvatarFallback, AvatarImage } from '../ui/avatar'\nimport { Button } from '../ui/button'\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '../ui/collapsible'\nimport { IconProvider } from '../ui/icon-context'\nimport type { IconInput } from '../ui/lib/icon-input'\nimport { normalizeIcon } from '../ui/lib/normalize-icon'\nimport { cn } from '../ui/lib/utils'\nimport {\n Sidebar as ShadcnSidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarMenu,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarSeparator,\n} from '../ui/sidebar'\nimport { TruncatedText } from '../ui/truncated-text'\nimport { useLink } from './link-context'\n\n// -----------------------------------------------------------------------\n// Types\n// -----------------------------------------------------------------------\n\nexport interface NavSubItem {\n title: string\n href: string\n /** Optional icon. Accepts any `IconInput`. */\n icon?: IconInput\n exact?: boolean\n}\n\nexport interface NavItem {\n title: string\n href: string\n /** Icon for this nav item. Accepts any `IconInput`. */\n icon: IconInput\n /** When true, the route matches only when the path is exactly equal */\n exact?: boolean\n /** Badge rendered on the right side of the nav item */\n badge?: string | number\n /** Optional child items — renders as collapsible sub-list with chevron */\n children?: NavSubItem[]\n /** Whether the collapsible is open by default. Auto-opens when a child is active. */\n defaultOpen?: boolean\n}\n\nexport interface NavGroup {\n label: string\n items: NavItem[]\n /** Action rendered next to the group label (e.g., a \"+\" button) */\n action?: React.ReactNode\n}\n\nexport interface SidebarUser {\n name: string\n email?: string\n image?: string | null\n designation?: string\n role?: string\n}\n\nexport interface SidebarPromo {\n /** Promo message text */\n text: string\n /** Optional icon rendered before the text. Accepts any `IconInput`. */\n icon?: IconInput\n /** Action button rendered in the promo banner */\n action?: { label: string; href?: string; onClick?: () => void }\n /** When provided, renders a dismiss (X) button that calls this handler */\n onDismiss?: () => void\n}\n\nexport interface SidebarFooterConfig {\n /** Legal/utility links rendered as a row separated by dividers */\n links?: Array<{ label: string; href: string }>\n /** Version or build info text (or link) rendered inline after links */\n version?: string | { label: string; href: string }\n /** Custom content rendered above the links row */\n slot?: React.ReactNode\n /** Promo/upsell banner rendered above the links row */\n promo?: SidebarPromo\n}\n\nexport interface AppSidebarProps\n extends React.HTMLAttributes<HTMLDivElement> {\n /** Currently active pathname -- used to highlight the active nav item */\n currentPath?: string\n /** User information displayed in the sidebar header */\n user?: SidebarUser | null\n /** Primary navigation groups rendered in the main content area */\n navGroups?: NavGroup[]\n /** Optional logo element. Falls back to a text placeholder. */\n logo?: React.ReactNode\n /** Footer links rendered at the bottom of the sidebar */\n footerLinks?: Array<{ label: string; href: string }>\n /** Structured footer config (takes precedence over footerLinks) */\n footer?: SidebarFooterConfig\n /** Content rendered between user header and navigation */\n headerSlot?: React.ReactNode\n /** Content rendered between navigation and footer */\n preFooterSlot?: React.ReactNode\n /** className applied to the wrapper div around preFooterSlot */\n preFooterClassName?: string\n /** Override rendering for specific nav items. Return null to use default rendering. */\n renderItem?: (item: NavItem, defaultRender: () => React.ReactNode) => React.ReactNode | null\n /** Additional className for the root sidebar element */\n className?: string\n /**\n * Corner radius of nav items (composable). @default 'md' (control radius, ~6px).\n * `'lg'` restores the previous rounder look; `'sm'` is tighter; `'pill'` is fully rounded.\n * Sets the `--ds-sidebar-item-radius` CSS var, so you can also override it via `className`/`style`.\n */\n navItemRadius?: 'sm' | 'md' | 'lg' | 'pill'\n}\n\n// -----------------------------------------------------------------------\n// ChevronRight (inline SVG icon for collapsible toggle)\n// -----------------------------------------------------------------------\n\nfunction ChevronRight({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n )\n}\n\nfunction CloseIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n )\n}\n\n// -----------------------------------------------------------------------\n// Shared styles\n// -----------------------------------------------------------------------\n\n// Radius is composable via the `navItemRadius` prop (sets --ds-sidebar-item-radius).\n// Default is the control radius (~6px) — surface (10px) read as over-rounded blobs.\nconst navItemBase =\n 'relative gap-ds-04 rounded-[var(--ds-sidebar-item-radius,var(--radius-control))] px-ds-04 py-ds-03 transition-colors duration-fast-02'\nconst NAV_ITEM_RADIUS = {\n sm: 'var(--radius-control-inner)',\n md: 'var(--radius-control)',\n lg: 'var(--radius-surface)',\n pill: 'var(--radius-pill)',\n} as const\n// Active = tinted surface + accent text + weight. No accent rail — the tint and\n// colour already signal \"you are here\"; a stripe on top is doubled accent (AI tell).\nconst navItemActive = 'bg-accent-2 text-accent-11 font-medium'\nconst navItemInactive = 'text-surface-fg-subtle hover:bg-surface-raised-hover hover:text-surface-fg'\n\n// -----------------------------------------------------------------------\n// NavLink (internal)\n// -----------------------------------------------------------------------\n\nfunction NavLink({\n item,\n isActive,\n isPathActive,\n}: {\n item: NavItem\n isActive: boolean\n isPathActive: (path: string, exact?: boolean) => boolean\n}) {\n const Link = useLink()\n const badgeContent =\n item.badge != null\n ? typeof item.badge === 'number' && item.badge > 99\n ? '99+'\n : String(item.badge)\n : null\n\n // S9: Collapsible children\n if (item.children && item.children.length > 0) {\n const hasActiveChild = item.children.some((child) =>\n isPathActive(child.href, child.exact),\n )\n const shouldOpen = hasActiveChild || isActive || (item.defaultOpen ?? false)\n\n return (\n <Collapsible defaultOpen={shouldOpen} className=\"group/collapsible\">\n <SidebarMenuItem>\n {/* Button row — chevron is anchored here, not on the full <li> */}\n <div className=\"relative\">\n <SidebarMenuButton\n asChild\n isActive={isActive || hasActiveChild}\n tooltip={item.title}\n className={cn(\n navItemBase,\n isActive || hasActiveChild ? navItemActive : navItemInactive,\n )}\n >\n <Link\n href={item.href}\n aria-label={item.title}\n aria-current={isActive ? 'page' : undefined}\n className=\"min-w-0\"\n >\n <span className=\"[&>svg]:h-ico-md [&>svg]:w-ico-md shrink-0\" aria-hidden=\"true\">\n <IconProvider size=\"md\">{normalizeIcon(item.icon)}</IconProvider>\n </span>\n <span className=\"text-body-lg truncate\">{item.title}</span>\n </Link>\n </SidebarMenuButton>\n {badgeContent && <SidebarMenuBadge>{badgeContent}</SidebarMenuBadge>}\n <CollapsibleTrigger asChild>\n <button\n className=\"absolute right-ds-02 top-1/2 flex h-5 w-5 -translate-y-1/2 items-center justify-center rounded-control text-surface-fg-subtle transition-colors hover:bg-surface-raised-hover hover:text-surface-fg group-data-[collapsible=icon]:hidden\"\n aria-label={`Toggle ${item.title}`}\n >\n <ChevronRight className=\"h-4 w-4 transition-transform duration-fast-02 ease-productive-standard group-data-[state=open]/collapsible:rotate-90\" />\n </button>\n </CollapsibleTrigger>\n </div>\n <CollapsibleContent>\n <SidebarMenuSub>\n {item.children.map((child) => {\n const childActive = isPathActive(child.href, child.exact)\n return (\n <SidebarMenuSubItem key={child.href}>\n <SidebarMenuSubButton\n asChild\n isActive={childActive}\n >\n <Link\n href={child.href}\n aria-current={childActive ? 'page' : undefined}\n className=\"min-w-0\"\n >\n {child.icon && (\n <span className=\"[&>svg]:h-ico-sm [&>svg]:w-ico-sm shrink-0\" aria-hidden=\"true\">\n <IconProvider size=\"sm\">{normalizeIcon(child.icon)}</IconProvider>\n </span>\n )}\n <span className=\"truncate\">{child.title}</span>\n </Link>\n </SidebarMenuSubButton>\n </SidebarMenuSubItem>\n )\n })}\n </SidebarMenuSub>\n </CollapsibleContent>\n </SidebarMenuItem>\n </Collapsible>\n )\n }\n\n // Default: flat nav item\n return (\n <SidebarMenuItem>\n <SidebarMenuButton\n asChild\n isActive={isActive}\n tooltip={item.title}\n className={cn(\n navItemBase,\n isActive ? navItemActive : navItemInactive,\n )}\n >\n <Link\n href={item.href}\n aria-label={item.title}\n aria-current={isActive ? 'page' : undefined}\n className=\"min-w-0\"\n >\n <span className=\"[&>svg]:h-ico-md [&>svg]:w-ico-md shrink-0\" aria-hidden=\"true\"><IconProvider size=\"md\">{normalizeIcon(item.icon)}</IconProvider></span>\n <span className=\"text-body-lg truncate\">{item.title}</span>\n </Link>\n </SidebarMenuButton>\n {badgeContent && <SidebarMenuBadge>{badgeContent}</SidebarMenuBadge>}\n </SidebarMenuItem>\n )\n}\n\n// -----------------------------------------------------------------------\n// AppSidebar\n// -----------------------------------------------------------------------\n\nconst AppSidebar = React.forwardRef<HTMLDivElement, AppSidebarProps>(\n (\n {\n currentPath = '/',\n user,\n navGroups = [],\n logo,\n headerSlot,\n preFooterSlot,\n preFooterClassName,\n footerLinks = [],\n footer,\n renderItem,\n className,\n navItemRadius,\n style,\n ...props\n },\n ref,\n ) => {\n const Link = useLink()\n const isActive = (path: string, exact = false) => {\n if (exact || path === '/') {\n return currentPath === path\n }\n return currentPath.startsWith(path)\n }\n\n return (\n <ShadcnSidebar\n {...props}\n ref={ref}\n aria-label=\"Main navigation\"\n style={\n navItemRadius\n ? ({ '--ds-sidebar-item-radius': NAV_ITEM_RADIUS[navItemRadius], ...style } as React.CSSProperties)\n : style\n }\n className={cn(\n 'z-raised hidden h-full flex-col border-r border-surface-border-strong bg-surface-raised md:flex',\n className,\n )}\n >\n {/* Logo Header */}\n <SidebarHeader className=\"px-ds-06 py-ds-06\">\n {logo ?? (\n <span className=\"text-heading-xs font-semibold text-surface-fg\">\n Logo\n </span>\n )}\n </SidebarHeader>\n\n {/* User Info */}\n {user && (\n <div className=\"flex items-center gap-ds-04 px-ds-06 pb-ds-05\">\n <Avatar className=\"h-ds-sm-plus w-ds-sm-plus\">\n {user.image ? (\n <AvatarImage src={user.image} alt={user.name} />\n ) : null}\n <AvatarFallback className=\"bg-surface-raised-hover text-surface-fg\">\n {user.name?.charAt(0).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex min-w-0 flex-col\">\n <TruncatedText className=\"text-body-md text-surface-fg\">\n {user.name ?? ''}\n </TruncatedText>\n <TruncatedText className=\"text-body-sm text-surface-fg-subtle\">\n {user.designation || user.role || ''}\n </TruncatedText>\n </div>\n </div>\n )}\n\n <SidebarSeparator />\n\n {/* Header Slot (S13) */}\n {headerSlot && (\n <>\n {headerSlot}\n <SidebarSeparator />\n </>\n )}\n\n {/* Navigation Groups */}\n <SidebarContent className=\"no-scrollbar px-ds-04\">\n {navGroups.map((group, idx) => (\n <div key={group.label}>\n {idx > 0 && <SidebarSeparator />}\n <SidebarGroup>\n <SidebarGroupLabel className=\"px-ds-04 text-body-sm text-surface-fg-subtle\">\n {group.label}\n </SidebarGroupLabel>\n {group.action && (\n <SidebarGroupAction asChild>{group.action}</SidebarGroupAction>\n )}\n <SidebarGroupContent>\n <SidebarMenu>\n {group.items.map((item) => {\n const defaultRender = () => (\n <NavLink\n item={item}\n isActive={isActive(item.href, item.exact)}\n isPathActive={isActive}\n />\n )\n\n if (renderItem) {\n const custom = renderItem(item, defaultRender)\n if (custom !== null) {\n return <React.Fragment key={item.href}>{custom}</React.Fragment>\n }\n }\n\n return <React.Fragment key={item.href}>{defaultRender()}</React.Fragment>\n })}\n </SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n </div>\n ))}\n </SidebarContent>\n\n {/* Pre-Footer Slot (S13) */}\n {preFooterSlot && (\n <>\n <SidebarSeparator />\n <div className={preFooterClassName}>\n {preFooterSlot}\n </div>\n </>\n )}\n\n {/* Footer */}\n {footer ? (\n <SidebarFooter className=\"gap-ds-03 px-ds-06 py-ds-05\">\n {footer.slot && <div>{footer.slot}</div>}\n\n {/* Promo banner */}\n {footer.promo && (\n <div className=\"relative rounded-surface bg-surface-raised p-ds-04 shadow-raised\">\n {footer.promo.onDismiss && (\n <button\n onClick={footer.promo.onDismiss}\n aria-label=\"Dismiss\"\n className=\"absolute right-ds-02 top-ds-02 flex h-5 w-5 items-center justify-center rounded-control text-surface-fg-subtle transition-colors hover:bg-surface-raised-hover hover:text-surface-fg\"\n >\n <CloseIcon className=\"h-3.5 w-3.5\" />\n </button>\n )}\n <div className=\"flex flex-col gap-ds-03\">\n {footer.promo.icon && (\n <span className=\"text-accent-11 [&>svg]:h-ico-md [&>svg]:w-ico-md\" aria-hidden=\"true\">\n <IconProvider size=\"md\">{normalizeIcon(footer.promo.icon)}</IconProvider>\n </span>\n )}\n <div className=\"flex min-w-0 flex-col gap-ds-03\">\n <p className=\"text-body-sm text-surface-fg line-clamp-2\">{footer.promo.text}</p>\n {footer.promo.action && (\n footer.promo.action.href ? (\n <Button asChild variant=\"solid\" size=\"sm\" className=\"self-start\">\n <Link\n href={footer.promo.action.href}\n onClick={footer.promo.action.onClick}\n >\n {footer.promo.action.label}\n </Link>\n </Button>\n ) : (\n <Button\n variant=\"solid\"\n size=\"sm\"\n className=\"self-start\"\n onClick={footer.promo.action.onClick}\n >\n {footer.promo.action.label}\n </Button>\n )\n )}\n </div>\n </div>\n </div>\n )}\n\n {/* Links + version on same line */}\n {(footer.links?.length || footer.version) && (\n <div className=\"flex items-center gap-ds-03 text-body-sm text-surface-fg-subtle\">\n {footer.links?.map((link, i) => (\n <React.Fragment key={link.href}>\n {i > 0 && <span>·</span>}\n <Link\n className=\"transition-colors hover:text-accent-11\"\n href={link.href}\n >\n {link.label}\n </Link>\n </React.Fragment>\n ))}\n {footer.links?.length && footer.version && <span>·</span>}\n {footer.version && (\n typeof footer.version === 'string'\n ? <span>{footer.version}</span>\n : <Link className=\"transition-colors hover:text-accent-11\" href={footer.version.href}>{footer.version.label}</Link>\n )}\n </div>\n )}\n </SidebarFooter>\n ) : footerLinks.length > 0 ? (\n <SidebarFooter className=\"px-ds-06 py-ds-05\">\n <div className=\"flex items-center gap-ds-03 text-body-sm text-surface-fg-subtle\">\n {footerLinks.map((link, i) => (\n <React.Fragment key={link.href}>\n {i > 0 && <span>·</span>}\n <Link\n className=\"transition-colors hover:text-accent-11\"\n href={link.href}\n >\n {link.label}\n </Link>\n </React.Fragment>\n ))}\n </div>\n </SidebarFooter>\n ) : null}\n </ShadcnSidebar>\n )\n },\n)\nAppSidebar.displayName = 'AppSidebar'\n\nexport { AppSidebar }\n"],"mappings":"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"}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
# AppSidebar
|
|
2
|
-
|
|
3
|
-
- Import: @devalok/shilp-sutra/shell/sidebar
|
|
4
|
-
- Server-safe: No
|
|
5
|
-
- Category: shell
|
|
6
|
-
|
|
7
|
-
## Props
|
|
8
|
-
currentPath?: string (highlights active nav item)
|
|
9
|
-
user?: SidebarUser | null — { name, email?, image?, designation?, role? }
|
|
10
|
-
navGroups?: NavGroup[] — { label: string, items: NavItem[], action?: ReactNode }
|
|
11
|
-
logo?: ReactNode
|
|
12
|
-
footerLinks?: Array<{ label: string, href: string }> (DEPRECATED — use footer.links)
|
|
13
|
-
footer?: SidebarFooterConfig — structured footer (takes precedence over footerLinks)
|
|
14
|
-
headerSlot?: ReactNode — content between user info and navigation
|
|
15
|
-
preFooterSlot?: ReactNode — content between navigation and footer
|
|
16
|
-
preFooterClassName?: string — className on preFooterSlot wrapper div
|
|
17
|
-
renderItem?: (item: NavItem, defaultRender: () => ReactNode) => ReactNode | null — custom item rendering
|
|
18
|
-
className?: string
|
|
19
|
-
|
|
20
|
-
NavItem: { title: string, href: string, icon: ReactNode, exact?: boolean, badge?: string | number, children?: NavSubItem[], defaultOpen?: boolean }
|
|
21
|
-
NavSubItem: { title: string, href: string, icon?: ReactNode, exact?: boolean }
|
|
22
|
-
NavGroup: { label: string, items: NavItem[], action?: ReactNode }
|
|
23
|
-
SidebarUser: { name: string, email?: string, image?: string | null, designation?: string, role?: string }
|
|
24
|
-
SidebarFooterConfig: { links?: Array<{ label: string, href: string }>, version?: string | { label: string, href: string }, slot?: ReactNode, promo?: SidebarPromo }
|
|
25
|
-
SidebarPromo: { text: string, icon?: ReactNode, action?: { label: string, href?: string, onClick?: () => void }, onDismiss?: () => void }
|
|
26
|
-
|
|
27
|
-
## Defaults
|
|
28
|
-
None
|
|
29
|
-
|
|
30
|
-
## Example
|
|
31
|
-
```jsx
|
|
32
|
-
<AppSidebar
|
|
33
|
-
currentPath="/dashboard"
|
|
34
|
-
user={{ name: 'Jane', email: 'jane@example.com' }}
|
|
35
|
-
navGroups={[{
|
|
36
|
-
label: 'Main',
|
|
37
|
-
items: [
|
|
38
|
-
{ title: 'Dashboard', href: '/dashboard', icon: <IconHome /> },
|
|
39
|
-
{ title: 'Projects', href: '/projects', icon: <IconFolder />, children: [
|
|
40
|
-
{ title: 'Karm V2', href: '/projects/abc/board' },
|
|
41
|
-
]},
|
|
42
|
-
],
|
|
43
|
-
}]}
|
|
44
|
-
footer={{
|
|
45
|
-
links: [{ label: 'Terms', href: '/terms' }],
|
|
46
|
-
version: { label: 'v2.4.1', href: '/changelog' },
|
|
47
|
-
}}
|
|
48
|
-
/>
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
## Composability
|
|
52
|
-
- **Opinionated app sidebar** — data-driven via `navGroups`, with user profile header, navigation groups (with optional labels + group actions), and a configurable footer (links + version + optional promo banner).
|
|
53
|
-
- **Required setup (three providers):**
|
|
54
|
-
- `SidebarProvider` (from ui/sidebar) — owns expanded/collapsed state + cookie persistence
|
|
55
|
-
- `LinkProvider` — framework router integration for nav item links
|
|
56
|
-
- `CommandRegistryProvider` (if pairing with AppCommandPalette) — registers the same navGroups so keyboard search finds them
|
|
57
|
-
- **renderItem escape hatch:** Custom per-item rendering (e.g. custom icons per item type, status decorations, hover previews). Return `null` to fall back to default.
|
|
58
|
-
- **Nested navigation:** NavItem's `children: NavSubItem[]` renders a collapsible subsection. Auto-opens if a child matches the current path.
|
|
59
|
-
- **Footer as slot:** `footer` can include links, version info, a ReactNode slot (e.g. theme toggle), and a dismissable promo banner — structure it once, compose.
|
|
60
|
-
- **Pairs with TopBar + BottomNavbar:** Desktop layout = AppSidebar + TopBar. Mobile layout = hide AppSidebar, show BottomNavbar.
|
|
61
|
-
|
|
62
|
-
## Gotchas
|
|
63
|
-
- Must be wrapped in SidebarProvider (from ui/sidebar)
|
|
64
|
-
- Requires LinkProvider for framework-specific link components
|
|
65
|
-
- `footerLinks` is deprecated — use `footer.links` instead
|
|
66
|
-
- `renderItem` returning `null` falls back to default rendering
|
|
67
|
-
- Collapsible nav items auto-open when a child is active (matching `currentPath`)
|
|
68
|
-
- Badge numbers > 99 display as "99+"
|
|
69
|
-
|
|
70
|
-
## Changes
|
|
71
|
-
### v0.19.0
|
|
72
|
-
- **Changed** Background elevated from `bg-surface-1` to `bg-surface-2` for visual hierarchy above app background
|
|
73
|
-
- **Changed** Interactive hover states bumped from `surface-2` to `surface-3`
|
|
74
|
-
|
|
75
|
-
### v0.18.0
|
|
76
|
-
- **Fixed** `bg-interactive-subtle` changed to `bg-accent-2` (OKLCH migration)
|
|
77
|
-
|
|
78
|
-
### v0.16.0
|
|
79
|
-
- **Added** `preFooterClassName?: string` — custom className on preFooterSlot wrapper
|
|
80
|
-
|
|
81
|
-
### v0.14.0
|
|
82
|
-
- **Changed** `footer.version` now accepts `string | { label: string; href: string }` — version can link to changelog
|
|
83
|
-
|
|
84
|
-
### v0.13.0
|
|
85
|
-
- **Added** `SidebarPromo` type and `footer.promo` prop — dismissable promo/upsell banner
|
|
86
|
-
- **Changed** Footer links and version now render on a single line separated by dividers
|
|
87
|
-
- **Fixed** Collapsible chevron wrapped in fixed-height container to prevent drift
|
|
88
|
-
- **Fixed** Collapsible chevron no longer drifts into child elements when sub-list expands
|
|
89
|
-
|
|
90
|
-
### v0.10.0
|
|
91
|
-
- **Added** Collapsible nav items with `children` array and `NavSubItem` type
|
|
92
|
-
- **Added** Nav item `badge` prop for counts/labels, caps at 99+
|
|
93
|
-
- **Added** Nav group `action` prop for buttons next to group labels
|
|
94
|
-
- **Added** Structured `footer` prop with `SidebarFooterConfig` — links, version, slot
|
|
95
|
-
- **Added** `headerSlot` and `preFooterSlot` content slots
|
|
96
|
-
- **Added** `renderItem` escape hatch for custom item rendering
|
|
97
|
-
- **Deprecated** `footerLinks` prop — use `footer.links` instead
|
|
98
|
-
|
|
99
|
-
### v0.1.1
|
|
100
|
-
- **Changed** Decoupled from Next.js via LinkProvider
|
|
101
|
-
|
|
102
|
-
### v0.1.0
|
|
103
|
-
- **Added** Initial release
|