@devalok/shilp-sutra 0.34.1 → 0.36.1
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/LICENSE +21 -21
- package/dist/_chunks/badge-group.js +95 -95
- package/dist/_chunks/badge-group.js.map +1 -0
- package/dist/_chunks/chat.js +7 -2
- package/dist/_chunks/chat.js.map +1 -0
- package/dist/_chunks/date-picker.js.map +1 -0
- package/dist/_chunks/document-preview.js.map +1 -0
- package/dist/_chunks/file-preview.js.map +1 -0
- package/dist/_chunks/framer.js +62 -62
- package/dist/_chunks/framer.js.map +1 -0
- package/dist/_chunks/image-preview.js +1 -1
- package/dist/_chunks/image-preview.js.map +1 -0
- package/dist/_chunks/keybinding.js.map +1 -0
- package/dist/_chunks/link-context.js.map +1 -0
- package/dist/_chunks/mention-suggestion.js.map +1 -0
- package/dist/_chunks/motion-provider.js.map +1 -0
- package/dist/_chunks/popover.js +32 -36
- package/dist/_chunks/popover.js.map +1 -0
- package/dist/_chunks/primitives.js +686 -686
- package/dist/_chunks/primitives.js.map +1 -0
- package/dist/_chunks/rich-chat-input.js +651 -650
- package/dist/_chunks/rich-chat-input.js.map +1 -0
- package/dist/_chunks/shared.js.map +1 -0
- package/dist/_chunks/sonner.js.map +1 -0
- package/dist/_chunks/stat-row.js +158 -158
- package/dist/_chunks/stat-row.js.map +1 -0
- package/dist/_chunks/tiptap.js +11 -11
- package/dist/_chunks/tiptap.js.map +1 -0
- package/dist/_chunks/tree-view.js +1 -1
- package/dist/_chunks/tree-view.js.map +1 -0
- package/dist/_chunks/use-calendar.js.map +1 -0
- package/dist/_chunks/vendor-client.js +1 -1
- package/dist/_chunks/vendor-client.js.map +1 -0
- package/dist/_chunks/vendor-utils.js.map +1 -0
- package/dist/ai/ai-command-provider.js.map +1 -0
- package/dist/ai/block-renderer.js.map +1 -0
- package/dist/ai/blocks/loading.d.ts.map +1 -1
- package/dist/ai/command-bar.js.map +1 -0
- package/dist/ai/conversation.js +76 -76
- package/dist/ai/conversation.js.map +1 -0
- package/dist/ai/devadoot-icon.d.ts.map +1 -1
- package/dist/ai/index.js.map +1 -0
- package/dist/composed/activity-feed.js.map +1 -0
- package/dist/composed/avatar-group.js +1 -1
- package/dist/composed/avatar-group.js.map +1 -0
- package/dist/composed/bulk-action-bar.js +13 -21
- package/dist/composed/bulk-action-bar.js.map +1 -0
- package/dist/composed/command-palette.js.map +1 -0
- package/dist/composed/confirm-dialog.js.map +1 -0
- package/dist/composed/content-card.js.map +1 -0
- package/dist/composed/deadline-indicator.js.map +1 -0
- package/dist/composed/emoji-picker.js.map +1 -0
- package/dist/composed/empty-state.d.ts.map +1 -1
- package/dist/composed/empty-state.js +30 -30
- package/dist/composed/empty-state.js.map +1 -0
- package/dist/composed/error-boundary.js.map +1 -0
- package/dist/composed/filter-bar.js.map +1 -0
- package/dist/composed/form-section.js.map +1 -0
- package/dist/composed/global-loading.js.map +1 -0
- package/dist/composed/inline-edit.js.map +1 -0
- package/dist/composed/lib/string-utils.js.map +1 -0
- package/dist/composed/loading-skeleton.js.map +1 -0
- package/dist/composed/markdown-viewer.js.map +1 -0
- package/dist/composed/master-detail.js.map +1 -0
- package/dist/composed/member-picker.js.map +1 -0
- package/dist/composed/multi-select-popover.d.ts.map +1 -1
- package/dist/composed/multi-select-popover.js +4 -0
- package/dist/composed/multi-select-popover.js.map +1 -0
- package/dist/composed/page-header.js.map +1 -0
- package/dist/composed/page-skeletons.js.map +1 -0
- package/dist/composed/priority-indicator.js.map +1 -0
- package/dist/composed/responsive-overlay.js.map +1 -0
- package/dist/composed/rich-chat-input/attachment-strip.d.ts.map +1 -1
- package/dist/composed/rich-chat-input/reply-banner.d.ts.map +1 -1
- package/dist/composed/rich-chat-input/schedule-send.d.ts.map +1 -1
- package/dist/composed/rich-chat-input.d.ts.map +1 -1
- package/dist/composed/rich-text-editor.js +1 -1
- package/dist/composed/rich-text-editor.js.map +1 -0
- package/dist/composed/schedule-view.js.map +1 -0
- package/dist/composed/simple-tooltip.js.map +1 -0
- package/dist/composed/status-badge.d.ts.map +1 -1
- package/dist/composed/status-badge.js.map +1 -0
- package/dist/hooks/use-color-mode.js.map +1 -0
- package/dist/hooks/use-mobile.js.map +1 -0
- package/dist/hooks/use-touch-device.js.map +1 -0
- package/dist/hooks/use-viewport-height.js.map +1 -0
- package/dist/motion/check-motion-provider.d.ts +3 -0
- package/dist/motion/check-motion-provider.d.ts.map +1 -0
- package/dist/motion/index.js +14 -0
- package/dist/motion/index.js.map +1 -0
- package/dist/motion/primitives-index.js.map +1 -0
- package/dist/primitives/react-accordion.d.ts +114 -114
- package/dist/primitives/react-alert-dialog.d.ts +51 -51
- package/dist/primitives/react-aspect-ratio.d.ts +11 -11
- package/dist/primitives/react-avatar.d.ts +24 -24
- package/dist/primitives/react-checkbox.d.ts +50 -50
- package/dist/primitives/react-collapsible.d.ts +33 -33
- package/dist/primitives/react-context-menu.d.ts +96 -96
- package/dist/primitives/react-dialog.d.ts +103 -103
- package/dist/primitives/react-dropdown-menu.d.ts +97 -97
- package/dist/primitives/react-hover-card.d.ts +79 -79
- package/dist/primitives/react-label.d.ts +10 -10
- package/dist/primitives/react-menu.d.ts +169 -169
- package/dist/primitives/react-menubar.d.ts +115 -115
- package/dist/primitives/react-navigation-menu.d.ts +126 -126
- package/dist/primitives/react-popover.d.ts +85 -85
- package/dist/primitives/react-progress.d.ts +19 -19
- package/dist/primitives/react-radio-group.d.ts +58 -58
- package/dist/primitives/react-roving-focus.d.ts +49 -49
- package/dist/primitives/react-select.d.ts +137 -137
- package/dist/primitives/react-separator.d.ts +21 -21
- package/dist/primitives/react-slider.d.ts +75 -75
- package/dist/primitives/react-switch.d.ts +21 -21
- package/dist/primitives/react-tabs.d.ts +56 -56
- package/dist/primitives/react-toast.d.ts +120 -120
- package/dist/primitives/react-toggle-group.d.ts +75 -75
- package/dist/primitives/react-toggle.d.ts +24 -24
- package/dist/primitives/react-tooltip.d.ts +101 -101
- package/dist/primitives/react-visually-hidden.d.ts +22 -22
- package/dist/shell/app-command-palette.d.ts +2 -0
- package/dist/shell/app-command-palette.d.ts.map +1 -1
- package/dist/shell/app-command-palette.js +42 -155
- package/dist/shell/app-command-palette.js.map +1 -0
- package/dist/shell/bottom-navbar.js +1 -1
- package/dist/shell/bottom-navbar.js.map +1 -0
- package/dist/shell/command-registry.js.map +1 -0
- package/dist/shell/notification-center.d.ts.map +1 -1
- package/dist/shell/notification-center.js +194 -169
- package/dist/shell/notification-center.js.map +1 -0
- package/dist/shell/notification-preferences.js.map +1 -0
- package/dist/shell/sidebar.js.map +1 -0
- package/dist/shell/top-bar.js +1 -1
- package/dist/shell/top-bar.js.map +1 -0
- package/dist/tailwind/index.cjs +48 -1
- package/dist/tailwind/preset.d.ts.map +1 -1
- package/dist/tailwind/preset.js +48 -1
- package/dist/tailwind/preset.js.map +1 -0
- package/dist/tokens/index.css +4 -4
- package/dist/tokens/primitives.css +442 -442
- package/dist/tokens/semantic.css +742 -547
- package/dist/tokens/typography-semantic.css +123 -100
- package/dist/tokens/typography.css +422 -422
- package/dist/ui/accordion.js +13 -13
- package/dist/ui/accordion.js.map +1 -0
- package/dist/ui/alert-dialog.d.ts +6 -2
- package/dist/ui/alert-dialog.d.ts.map +1 -1
- package/dist/ui/alert-dialog.js +43 -42
- package/dist/ui/alert-dialog.js.map +1 -0
- package/dist/ui/alert.d.ts +3 -2
- package/dist/ui/alert.d.ts.map +1 -1
- package/dist/ui/alert.js +31 -5
- package/dist/ui/alert.js.map +1 -0
- package/dist/ui/aspect-ratio.js +1 -1
- package/dist/ui/aspect-ratio.js.map +1 -0
- package/dist/ui/autocomplete.d.ts.map +1 -1
- package/dist/ui/autocomplete.js +92 -67
- package/dist/ui/autocomplete.js.map +1 -0
- package/dist/ui/avatar.js +9 -9
- package/dist/ui/avatar.js.map +1 -0
- package/dist/ui/badge-indicator.js.map +1 -0
- package/dist/ui/banner.js.map +1 -0
- package/dist/ui/breadcrumb.js +1 -1
- package/dist/ui/breadcrumb.js.map +1 -0
- package/dist/ui/button-group.js.map +1 -0
- package/dist/ui/button-processing.d.ts.map +1 -1
- package/dist/ui/button-processing.js +61 -40
- package/dist/ui/button-processing.js.map +1 -0
- package/dist/ui/button.js +8 -8
- package/dist/ui/button.js.map +1 -0
- package/dist/ui/card.js.map +1 -0
- package/dist/ui/charts/bar-chart.d.ts.map +1 -1
- package/dist/ui/charts/chart-container.d.ts +2 -0
- package/dist/ui/charts/chart-container.d.ts.map +1 -1
- package/dist/ui/charts/index.js +88 -65
- package/dist/ui/charts/index.js.map +1 -0
- package/dist/ui/charts/line-chart.d.ts.map +1 -1
- package/dist/ui/chat/message-input.d.ts.map +1 -1
- package/dist/ui/chat/message-list.d.ts +1 -1
- package/dist/ui/chat/message-list.d.ts.map +1 -1
- package/dist/ui/chat/message.d.ts.map +1 -1
- package/dist/ui/chat/system-message.d.ts.map +1 -1
- package/dist/ui/checkbox.d.ts.map +1 -1
- package/dist/ui/checkbox.js +33 -28
- package/dist/ui/checkbox.js.map +1 -0
- package/dist/ui/code.js.map +1 -0
- package/dist/ui/collapsible.js +1 -1
- package/dist/ui/collapsible.js.map +1 -0
- package/dist/ui/color-input.d.ts.map +1 -1
- package/dist/ui/color-input.js +165 -163
- package/dist/ui/color-input.js.map +1 -0
- package/dist/ui/color-swatch.js.map +1 -0
- package/dist/ui/combobox.d.ts +7 -0
- package/dist/ui/combobox.d.ts.map +1 -1
- package/dist/ui/combobox.js +147 -113
- package/dist/ui/combobox.js.map +1 -0
- package/dist/ui/container.js +1 -1
- package/dist/ui/container.js.map +1 -0
- package/dist/ui/context-menu.js.map +1 -0
- package/dist/ui/data-table-body.js.map +1 -0
- package/dist/ui/data-table-bulk-actions.js +1 -1
- package/dist/ui/data-table-bulk-actions.js.map +1 -0
- package/dist/ui/data-table-card.js.map +1 -0
- package/dist/ui/data-table-context.js.map +1 -0
- package/dist/ui/data-table-header.js.map +1 -0
- package/dist/ui/data-table-pagination.js.map +1 -0
- package/dist/ui/data-table-toolbar.js.map +1 -0
- package/dist/ui/data-table.js +34 -31
- package/dist/ui/data-table.js.map +1 -0
- package/dist/ui/devalok-grain.js.map +1 -0
- package/dist/ui/dialog.js +31 -35
- package/dist/ui/dialog.js.map +1 -0
- package/dist/ui/dropdown-menu.js.map +1 -0
- package/dist/ui/file-upload.js +120 -120
- package/dist/ui/file-upload.js.map +1 -0
- package/dist/ui/form.d.ts +8 -0
- package/dist/ui/form.d.ts.map +1 -1
- package/dist/ui/form.js +14 -12
- package/dist/ui/form.js.map +1 -0
- package/dist/ui/hover-card.js.map +1 -0
- package/dist/ui/icon-button.js.map +1 -0
- package/dist/ui/icon-context.js.map +1 -0
- package/dist/ui/icon-group.js.map +1 -0
- package/dist/ui/icon.js.map +1 -0
- package/dist/ui/index.d.ts +4 -4
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +82 -66
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/input-otp.d.ts +12 -3
- package/dist/ui/input-otp.d.ts.map +1 -1
- package/dist/ui/input-otp.js +41 -27
- package/dist/ui/input-otp.js.map +1 -0
- package/dist/ui/input.d.ts.map +1 -1
- package/dist/ui/input.js +16 -15
- package/dist/ui/input.js.map +1 -0
- package/dist/ui/label.d.ts.map +1 -1
- package/dist/ui/label.js +19 -14
- package/dist/ui/label.js.map +1 -0
- package/dist/ui/lib/check-tokens.d.ts +3 -0
- package/dist/ui/lib/check-tokens.d.ts.map +1 -0
- package/dist/ui/lib/date-utils.js.map +1 -0
- package/dist/ui/lib/motion.d.ts +15 -4
- package/dist/ui/lib/motion.d.ts.map +1 -1
- package/dist/ui/lib/motion.js +18 -9
- package/dist/ui/lib/motion.js.map +1 -0
- package/dist/ui/lib/utils.js.map +1 -0
- package/dist/ui/link.js +2 -2
- package/dist/ui/link.js.map +1 -0
- package/dist/ui/menubar.js.map +1 -0
- package/dist/ui/navigation-menu.js.map +1 -0
- package/dist/ui/number-input.d.ts +16 -1
- package/dist/ui/number-input.d.ts.map +1 -1
- package/dist/ui/number-input.js +79 -49
- package/dist/ui/number-input.js.map +1 -0
- package/dist/ui/pagination.js +1 -1
- package/dist/ui/pagination.js.map +1 -0
- package/dist/ui/progress-ring.d.ts.map +1 -1
- package/dist/ui/progress-ring.js.map +1 -0
- package/dist/ui/progress.js.map +1 -0
- package/dist/ui/radio.d.ts.map +1 -1
- package/dist/ui/radio.js +27 -20
- package/dist/ui/radio.js.map +1 -0
- package/dist/ui/search-input.js.map +1 -0
- package/dist/ui/segmented-control.d.ts +1 -1
- package/dist/ui/segmented-control.d.ts.map +1 -1
- package/dist/ui/segmented-control.js +3 -1
- package/dist/ui/segmented-control.js.map +1 -0
- package/dist/ui/select.d.ts.map +1 -1
- package/dist/ui/select.js +54 -48
- package/dist/ui/select.js.map +1 -0
- package/dist/ui/separator.d.ts.map +1 -1
- package/dist/ui/separator.js +10 -7
- package/dist/ui/separator.js.map +1 -0
- package/dist/ui/sheet.js +29 -29
- package/dist/ui/sheet.js.map +1 -0
- package/dist/ui/sidebar.js +9 -9
- package/dist/ui/sidebar.js.map +1 -0
- package/dist/ui/skeleton.js.map +1 -0
- package/dist/ui/slider.d.ts +22 -3
- package/dist/ui/slider.d.ts.map +1 -1
- package/dist/ui/slider.js +57 -19
- package/dist/ui/slider.js.map +1 -0
- package/dist/ui/spinner.js.map +1 -0
- package/dist/ui/split-button.d.ts.map +1 -1
- package/dist/ui/split-button.js +77 -76
- package/dist/ui/split-button.js.map +1 -0
- package/dist/ui/stack.js.map +1 -0
- package/dist/ui/stat-card.js.map +1 -0
- package/dist/ui/status-dot.js.map +1 -0
- package/dist/ui/stepper.d.ts +10 -0
- package/dist/ui/stepper.d.ts.map +1 -1
- package/dist/ui/stepper.js +80 -75
- package/dist/ui/stepper.js.map +1 -0
- package/dist/ui/switch.d.ts.map +1 -1
- package/dist/ui/switch.js +26 -22
- package/dist/ui/switch.js.map +1 -0
- package/dist/ui/table.js.map +1 -0
- package/dist/ui/tabs.d.ts +3 -1
- package/dist/ui/tabs.d.ts.map +1 -1
- package/dist/ui/tabs.js +68 -48
- package/dist/ui/tabs.js.map +1 -0
- package/dist/ui/text.d.ts +1 -1
- package/dist/ui/text.d.ts.map +1 -1
- package/dist/ui/text.js +10 -2
- package/dist/ui/text.js.map +1 -0
- package/dist/ui/textarea.js +1 -1
- package/dist/ui/textarea.js.map +1 -0
- package/dist/ui/toast-registry.d.ts +8 -0
- package/dist/ui/toast-registry.d.ts.map +1 -0
- package/dist/ui/toast-registry.js +13 -0
- package/dist/ui/toast-registry.js.map +1 -0
- package/dist/ui/toast.d.ts.map +1 -1
- package/dist/ui/toast.js +141 -136
- package/dist/ui/toast.js.map +1 -0
- package/dist/ui/toaster.d.ts.map +1 -1
- package/dist/ui/toaster.js +15 -14
- package/dist/ui/toaster.js.map +1 -0
- package/dist/ui/toggle-group.d.ts +2 -0
- package/dist/ui/toggle-group.d.ts.map +1 -1
- package/dist/ui/toggle-group.js +23 -16
- package/dist/ui/toggle-group.js.map +1 -0
- package/dist/ui/toggle.d.ts +2 -0
- package/dist/ui/toggle.d.ts.map +1 -1
- package/dist/ui/toggle.js +14 -6
- package/dist/ui/toggle.js.map +1 -0
- package/dist/ui/tooltip.js.map +1 -0
- package/dist/ui/visually-hidden.js.map +1 -0
- package/docs/components/_header.md +85 -85
- package/docs/components/composed/activity-feed.md +62 -62
- package/docs/components/composed/avatar-group.md +65 -65
- package/docs/components/composed/bulk-action-bar.md +40 -40
- package/docs/components/composed/command-palette.md +40 -40
- package/docs/components/composed/confirm-dialog.md +46 -46
- package/docs/components/composed/content-card.md +36 -36
- package/docs/components/composed/date-picker.md +130 -130
- package/docs/components/composed/deadline-indicator.md +27 -27
- package/docs/components/composed/emoji-picker.md +52 -52
- package/docs/components/composed/empty-state.md +53 -53
- package/docs/components/composed/error-boundary.md +29 -29
- package/docs/components/composed/file-preview.md +40 -40
- package/docs/components/composed/filter-bar.md +57 -57
- package/docs/components/composed/form-section.md +31 -31
- package/docs/components/composed/global-loading.md +27 -27
- package/docs/components/composed/inline-edit.md +35 -35
- package/docs/components/composed/loading-skeleton.md +51 -51
- package/docs/components/composed/markdown-viewer.md +27 -27
- package/docs/components/composed/master-detail.md +48 -48
- package/docs/components/composed/member-picker.md +35 -35
- package/docs/components/composed/multi-select-popover.md +62 -62
- package/docs/components/composed/page-header.md +41 -41
- package/docs/components/composed/page-skeletons.md +32 -32
- package/docs/components/composed/priority-indicator.md +32 -32
- package/docs/components/composed/responsive-overlay.md +34 -34
- package/docs/components/composed/rich-text-editor.md +82 -82
- package/docs/components/composed/schedule-view.md +39 -39
- package/docs/components/composed/simple-tooltip.md +33 -33
- package/docs/components/composed/status-badge.md +55 -55
- package/docs/components/shell/app-command-palette.md +44 -44
- package/docs/components/shell/bottom-navbar.md +52 -52
- package/docs/components/shell/command-registry.md +48 -48
- package/docs/components/shell/link-context.md +41 -41
- package/docs/components/shell/notification-center.md +63 -63
- package/docs/components/shell/notification-preferences.md +42 -42
- package/docs/components/shell/sidebar.md +92 -92
- package/docs/components/shell/top-bar.md +143 -143
- package/docs/components/ui/accordion.md +51 -51
- package/docs/components/ui/alert-dialog.md +61 -61
- package/docs/components/ui/alert.md +46 -46
- package/docs/components/ui/aspect-ratio.md +25 -25
- package/docs/components/ui/autocomplete.md +48 -48
- package/docs/components/ui/avatar.md +56 -56
- package/docs/components/ui/badge.md +83 -82
- package/docs/components/ui/banner.md +42 -42
- package/docs/components/ui/breadcrumb.md +37 -37
- package/docs/components/ui/button-group.md +41 -41
- package/docs/components/ui/button.md +94 -93
- package/docs/components/ui/card.md +52 -52
- package/docs/components/ui/charts.md +43 -43
- package/docs/components/ui/checkbox.md +36 -36
- package/docs/components/ui/chip.md +47 -47
- package/docs/components/ui/code.md +28 -28
- package/docs/components/ui/collapsible.md +40 -40
- package/docs/components/ui/color-input.md +91 -91
- package/docs/components/ui/color-swatch.md +25 -25
- package/docs/components/ui/combobox.md +54 -54
- package/docs/components/ui/container.md +26 -26
- package/docs/components/ui/context-menu.md +43 -43
- package/docs/components/ui/data-table-body.md +1 -1
- package/docs/components/ui/data-table-bulk-actions.md +1 -1
- package/docs/components/ui/data-table-card.md +1 -1
- package/docs/components/ui/data-table-context.md +1 -1
- package/docs/components/ui/data-table-header.md +1 -1
- package/docs/components/ui/data-table-pagination.md +1 -1
- package/docs/components/ui/data-table-toolbar.md +44 -44
- package/docs/components/ui/data-table.md +94 -94
- package/docs/components/ui/dialog.md +54 -54
- package/docs/components/ui/dropdown-menu.md +48 -48
- package/docs/components/ui/file-upload.md +41 -41
- package/docs/components/ui/form.md +51 -51
- package/docs/components/ui/hover-card.md +32 -32
- package/docs/components/ui/icon-button.md +40 -40
- package/docs/components/ui/input-otp.md +44 -44
- package/docs/components/ui/input.md +74 -74
- package/docs/components/ui/label.md +25 -25
- package/docs/components/ui/link.md +29 -29
- package/docs/components/ui/menubar.md +44 -44
- package/docs/components/ui/navigation-menu.md +46 -46
- package/docs/components/ui/number-input.md +44 -44
- package/docs/components/ui/pagination.md +48 -48
- package/docs/components/ui/popover.md +30 -30
- package/docs/components/ui/progress-ring.md +41 -41
- package/docs/components/ui/progress.md +34 -34
- package/docs/components/ui/radio.md +34 -34
- package/docs/components/ui/search-input.md +43 -43
- package/docs/components/ui/segmented-control.md +50 -50
- package/docs/components/ui/select.md +53 -53
- package/docs/components/ui/separator.md +32 -32
- package/docs/components/ui/sheet.md +47 -47
- package/docs/components/ui/sidebar.md +72 -72
- package/docs/components/ui/skeleton.md +77 -77
- package/docs/components/ui/slider.md +29 -29
- package/docs/components/ui/spinner.md +54 -54
- package/docs/components/ui/stack.md +39 -39
- package/docs/components/ui/stat-card.md +61 -61
- package/docs/components/ui/status-dot.md +26 -26
- package/docs/components/ui/stepper.md +49 -49
- package/docs/components/ui/switch.md +47 -47
- package/docs/components/ui/table.md +47 -47
- package/docs/components/ui/tabs.md +60 -60
- package/docs/components/ui/text.md +37 -37
- package/docs/components/ui/textarea.md +39 -39
- package/docs/components/ui/toast.md +65 -65
- package/docs/components/ui/toaster.md +47 -47
- package/docs/components/ui/toggle-group.md +43 -43
- package/docs/components/ui/toggle.md +37 -37
- package/docs/components/ui/tooltip.md +38 -38
- package/docs/components/ui/tree-view.md +65 -65
- package/docs/components/ui/visually-hidden.md +21 -21
- package/llms-full.txt +5266 -5264
- package/llms.txt +624 -580
- package/package.json +7 -8
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
# FilePreview
|
|
2
|
-
|
|
3
|
-
- Import: @devalok/shilp-sutra/composed/file-preview
|
|
4
|
-
- Server-safe: No
|
|
5
|
-
- Category: composed
|
|
6
|
-
|
|
7
|
-
## Props
|
|
8
|
-
url: string (file URL — required)
|
|
9
|
-
type: "image" | "pdf" | "video" | "audio" | "embed" (auto-detected from URL/mimeType)
|
|
10
|
-
mimeType: string (helps auto-detection)
|
|
11
|
-
alt: string (image alt text)
|
|
12
|
-
initialPage: number (PDF starting page, default 1)
|
|
13
|
-
fileName: string (displayed in file info bar)
|
|
14
|
-
fileSize: string (displayed as badge, e.g. "2.4 MB")
|
|
15
|
-
onError: (error: string) => void (called on load failures)
|
|
16
|
-
|
|
17
|
-
## Defaults
|
|
18
|
-
initialPage={1}, type auto-detected
|
|
19
|
-
|
|
20
|
-
## Features by Type
|
|
21
|
-
|
|
22
|
-
**Image:** Pinch/scroll zoom (0.1x–8x), double-click toggle, floating toolbar (zoom %/reset/fullscreen), keyboard (+/-/0/F/Esc)
|
|
23
|
-
**PDF:** react-pdf page nav (prev/next + direct input), keyboard (←→), crossfade between pages
|
|
24
|
-
**Video:** Custom branded player, play overlay, auto-hiding controls, progress bar + scrub handle, mute, fullscreen
|
|
25
|
-
**Audio:** Branded mini-player, full-width progress bar with hover tooltip + scrub handle, volume, file name display
|
|
26
|
-
**Embed:** 16:9 aspect ratio, auto-converts YouTube/Vimeo/Figma/Loom URLs, 15s timeout
|
|
27
|
-
|
|
28
|
-
## Example
|
|
29
|
-
```jsx
|
|
30
|
-
<FilePreview url="/uploads/mockup.png" fileName="mockup.png" fileSize="2.4 MB" />
|
|
31
|
-
<FilePreview url="/docs/contract.pdf" initialPage={3} />
|
|
32
|
-
<FilePreview url="https://youtube.com/watch?v=..." />
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## Gotchas
|
|
36
|
-
- Image/PDF lazy-loaded (Skeleton on first render)
|
|
37
|
-
- PDF worker from unpkg CDN — configure workerSrc for offline apps
|
|
38
|
-
- All types have error fallback with download link
|
|
39
|
-
- Embed URLs auto-converted to embed format
|
|
40
|
-
- Audio player doesn't show separate Download button (integrated in card)
|
|
1
|
+
# FilePreview
|
|
2
|
+
|
|
3
|
+
- Import: @devalok/shilp-sutra/composed/file-preview
|
|
4
|
+
- Server-safe: No
|
|
5
|
+
- Category: composed
|
|
6
|
+
|
|
7
|
+
## Props
|
|
8
|
+
url: string (file URL — required)
|
|
9
|
+
type: "image" | "pdf" | "video" | "audio" | "embed" (auto-detected from URL/mimeType)
|
|
10
|
+
mimeType: string (helps auto-detection)
|
|
11
|
+
alt: string (image alt text)
|
|
12
|
+
initialPage: number (PDF starting page, default 1)
|
|
13
|
+
fileName: string (displayed in file info bar)
|
|
14
|
+
fileSize: string (displayed as badge, e.g. "2.4 MB")
|
|
15
|
+
onError: (error: string) => void (called on load failures)
|
|
16
|
+
|
|
17
|
+
## Defaults
|
|
18
|
+
initialPage={1}, type auto-detected
|
|
19
|
+
|
|
20
|
+
## Features by Type
|
|
21
|
+
|
|
22
|
+
**Image:** Pinch/scroll zoom (0.1x–8x), double-click toggle, floating toolbar (zoom %/reset/fullscreen), keyboard (+/-/0/F/Esc)
|
|
23
|
+
**PDF:** react-pdf page nav (prev/next + direct input), keyboard (←→), crossfade between pages
|
|
24
|
+
**Video:** Custom branded player, play overlay, auto-hiding controls, progress bar + scrub handle, mute, fullscreen
|
|
25
|
+
**Audio:** Branded mini-player, full-width progress bar with hover tooltip + scrub handle, volume, file name display
|
|
26
|
+
**Embed:** 16:9 aspect ratio, auto-converts YouTube/Vimeo/Figma/Loom URLs, 15s timeout
|
|
27
|
+
|
|
28
|
+
## Example
|
|
29
|
+
```jsx
|
|
30
|
+
<FilePreview url="/uploads/mockup.png" fileName="mockup.png" fileSize="2.4 MB" />
|
|
31
|
+
<FilePreview url="/docs/contract.pdf" initialPage={3} />
|
|
32
|
+
<FilePreview url="https://youtube.com/watch?v=..." />
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Gotchas
|
|
36
|
+
- Image/PDF lazy-loaded (Skeleton on first render)
|
|
37
|
+
- PDF worker from unpkg CDN — configure workerSrc for offline apps
|
|
38
|
+
- All types have error fallback with download link
|
|
39
|
+
- Embed URLs auto-converted to embed format
|
|
40
|
+
- Audio player doesn't show separate Download button (integrated in card)
|
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
# FilterBar
|
|
2
|
-
|
|
3
|
-
- Import: @devalok/shilp-sutra/composed/filter-bar
|
|
4
|
-
- Server-safe: No
|
|
5
|
-
- Category: composed
|
|
6
|
-
|
|
7
|
-
## Exports
|
|
8
|
-
FilterBar, FilterSelect, FilterMultiSelect
|
|
9
|
-
|
|
10
|
-
## Props
|
|
11
|
-
|
|
12
|
-
### FilterBar
|
|
13
|
-
searchValue: string
|
|
14
|
-
onSearchChange: (value: string) => void (renders SearchInput when provided)
|
|
15
|
-
searchPlaceholder: string
|
|
16
|
-
onClearAll: () => void (renders "Clear all" button when provided)
|
|
17
|
-
size: "xs" | "sm" | "md" (propagated to all child controls via context)
|
|
18
|
-
children: ReactNode (FilterSelect / FilterMultiSelect controls)
|
|
19
|
-
|
|
20
|
-
### FilterSelect
|
|
21
|
-
label: string
|
|
22
|
-
value: string
|
|
23
|
-
onValueChange: (value: string) => void
|
|
24
|
-
options: { value: string; label: string }[]
|
|
25
|
-
allLabel: string (label for the "all" option)
|
|
26
|
-
|
|
27
|
-
### FilterMultiSelect
|
|
28
|
-
label: string
|
|
29
|
-
value: string[]
|
|
30
|
-
onValueChange: (values: string[]) => void
|
|
31
|
-
options: { value: string; label: string }[]
|
|
32
|
-
|
|
33
|
-
## Defaults
|
|
34
|
-
size="sm", searchPlaceholder="Search...", allLabel="All"
|
|
35
|
-
|
|
36
|
-
## Example
|
|
37
|
-
```jsx
|
|
38
|
-
<FilterBar searchValue={search} onSearchChange={setSearch} onClearAll={clearFilters}>
|
|
39
|
-
<FilterSelect
|
|
40
|
-
label="Status"
|
|
41
|
-
value={status}
|
|
42
|
-
onValueChange={setStatus}
|
|
43
|
-
options={[{ value: 'active', label: 'Active' }, { value: 'done', label: 'Done' }]}
|
|
44
|
-
/>
|
|
45
|
-
<FilterMultiSelect
|
|
46
|
-
label="Assignees"
|
|
47
|
-
value={assignees}
|
|
48
|
-
onValueChange={setAssignees}
|
|
49
|
-
options={memberOptions}
|
|
50
|
-
/>
|
|
51
|
-
</FilterBar>
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
## Gotchas
|
|
55
|
-
- FilterSelect and FilterMultiSelect must be direct children of FilterBar to inherit the size context
|
|
56
|
-
- FilterSelect uses `"all"` as the sentinel value for "no filter" — do not use `"all"` as a real option value
|
|
57
|
-
- Active filters get an accent border highlight automatically
|
|
1
|
+
# FilterBar
|
|
2
|
+
|
|
3
|
+
- Import: @devalok/shilp-sutra/composed/filter-bar
|
|
4
|
+
- Server-safe: No
|
|
5
|
+
- Category: composed
|
|
6
|
+
|
|
7
|
+
## Exports
|
|
8
|
+
FilterBar, FilterSelect, FilterMultiSelect
|
|
9
|
+
|
|
10
|
+
## Props
|
|
11
|
+
|
|
12
|
+
### FilterBar
|
|
13
|
+
searchValue: string
|
|
14
|
+
onSearchChange: (value: string) => void (renders SearchInput when provided)
|
|
15
|
+
searchPlaceholder: string
|
|
16
|
+
onClearAll: () => void (renders "Clear all" button when provided)
|
|
17
|
+
size: "xs" | "sm" | "md" (propagated to all child controls via context)
|
|
18
|
+
children: ReactNode (FilterSelect / FilterMultiSelect controls)
|
|
19
|
+
|
|
20
|
+
### FilterSelect
|
|
21
|
+
label: string
|
|
22
|
+
value: string
|
|
23
|
+
onValueChange: (value: string) => void
|
|
24
|
+
options: { value: string; label: string }[]
|
|
25
|
+
allLabel: string (label for the "all" option)
|
|
26
|
+
|
|
27
|
+
### FilterMultiSelect
|
|
28
|
+
label: string
|
|
29
|
+
value: string[]
|
|
30
|
+
onValueChange: (values: string[]) => void
|
|
31
|
+
options: { value: string; label: string }[]
|
|
32
|
+
|
|
33
|
+
## Defaults
|
|
34
|
+
size="sm", searchPlaceholder="Search...", allLabel="All"
|
|
35
|
+
|
|
36
|
+
## Example
|
|
37
|
+
```jsx
|
|
38
|
+
<FilterBar searchValue={search} onSearchChange={setSearch} onClearAll={clearFilters}>
|
|
39
|
+
<FilterSelect
|
|
40
|
+
label="Status"
|
|
41
|
+
value={status}
|
|
42
|
+
onValueChange={setStatus}
|
|
43
|
+
options={[{ value: 'active', label: 'Active' }, { value: 'done', label: 'Done' }]}
|
|
44
|
+
/>
|
|
45
|
+
<FilterMultiSelect
|
|
46
|
+
label="Assignees"
|
|
47
|
+
value={assignees}
|
|
48
|
+
onValueChange={setAssignees}
|
|
49
|
+
options={memberOptions}
|
|
50
|
+
/>
|
|
51
|
+
</FilterBar>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Gotchas
|
|
55
|
+
- FilterSelect and FilterMultiSelect must be direct children of FilterBar to inherit the size context
|
|
56
|
+
- FilterSelect uses `"all"` as the sentinel value for "no filter" — do not use `"all"` as a real option value
|
|
57
|
+
- Active filters get an accent border highlight automatically
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
# FormSection
|
|
2
|
-
|
|
3
|
-
- Import: @devalok/shilp-sutra/composed/form-section
|
|
4
|
-
- Server-safe: No
|
|
5
|
-
- Category: composed
|
|
6
|
-
|
|
7
|
-
## Props
|
|
8
|
-
title: string
|
|
9
|
-
description: string (subtitle text below the title)
|
|
10
|
-
collapsible: boolean (wraps content in a Collapsible)
|
|
11
|
-
defaultOpen: boolean (initial open state when collapsible)
|
|
12
|
-
children: ReactNode (form fields)
|
|
13
|
-
|
|
14
|
-
## Defaults
|
|
15
|
-
collapsible={false}, defaultOpen={true}
|
|
16
|
-
|
|
17
|
-
## Example
|
|
18
|
-
```jsx
|
|
19
|
-
<FormSection title="General" description="Basic project settings">
|
|
20
|
-
<FormField .../>
|
|
21
|
-
<FormField .../>
|
|
22
|
-
</FormSection>
|
|
23
|
-
|
|
24
|
-
<FormSection title="Advanced" collapsible defaultOpen={false}>
|
|
25
|
-
<FormField .../>
|
|
26
|
-
</FormSection>
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## Gotchas
|
|
30
|
-
- `defaultOpen` only applies when `collapsible={true}` — otherwise the section is always open
|
|
31
|
-
- Renders a horizontal rule between the header and content automatically
|
|
1
|
+
# FormSection
|
|
2
|
+
|
|
3
|
+
- Import: @devalok/shilp-sutra/composed/form-section
|
|
4
|
+
- Server-safe: No
|
|
5
|
+
- Category: composed
|
|
6
|
+
|
|
7
|
+
## Props
|
|
8
|
+
title: string
|
|
9
|
+
description: string (subtitle text below the title)
|
|
10
|
+
collapsible: boolean (wraps content in a Collapsible)
|
|
11
|
+
defaultOpen: boolean (initial open state when collapsible)
|
|
12
|
+
children: ReactNode (form fields)
|
|
13
|
+
|
|
14
|
+
## Defaults
|
|
15
|
+
collapsible={false}, defaultOpen={true}
|
|
16
|
+
|
|
17
|
+
## Example
|
|
18
|
+
```jsx
|
|
19
|
+
<FormSection title="General" description="Basic project settings">
|
|
20
|
+
<FormField .../>
|
|
21
|
+
<FormField .../>
|
|
22
|
+
</FormSection>
|
|
23
|
+
|
|
24
|
+
<FormSection title="Advanced" collapsible defaultOpen={false}>
|
|
25
|
+
<FormField .../>
|
|
26
|
+
</FormSection>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Gotchas
|
|
30
|
+
- `defaultOpen` only applies when `collapsible={true}` — otherwise the section is always open
|
|
31
|
+
- Renders a horizontal rule between the header and content automatically
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
# GlobalLoading
|
|
2
|
-
|
|
3
|
-
- Import: @devalok/shilp-sutra/composed/global-loading
|
|
4
|
-
- Server-safe: No
|
|
5
|
-
- Category: composed
|
|
6
|
-
|
|
7
|
-
## Props
|
|
8
|
-
isLoading: boolean (REQUIRED)
|
|
9
|
-
|
|
10
|
-
## Defaults
|
|
11
|
-
None
|
|
12
|
-
|
|
13
|
-
## Example
|
|
14
|
-
```jsx
|
|
15
|
-
<GlobalLoading isLoading={isNavigating} />
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## Gotchas
|
|
19
|
-
- Fixed-position bar at top of viewport (z-toast layer)
|
|
20
|
-
- Renders nothing when `isLoading` is false
|
|
21
|
-
|
|
22
|
-
## Changes
|
|
23
|
-
### v0.18.0
|
|
24
|
-
- **Fixed** Track `setTimeout` with ref, add cleanup on unmount
|
|
25
|
-
|
|
26
|
-
### v0.1.0
|
|
27
|
-
- **Added** Initial release
|
|
1
|
+
# GlobalLoading
|
|
2
|
+
|
|
3
|
+
- Import: @devalok/shilp-sutra/composed/global-loading
|
|
4
|
+
- Server-safe: No
|
|
5
|
+
- Category: composed
|
|
6
|
+
|
|
7
|
+
## Props
|
|
8
|
+
isLoading: boolean (REQUIRED)
|
|
9
|
+
|
|
10
|
+
## Defaults
|
|
11
|
+
None
|
|
12
|
+
|
|
13
|
+
## Example
|
|
14
|
+
```jsx
|
|
15
|
+
<GlobalLoading isLoading={isNavigating} />
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Gotchas
|
|
19
|
+
- Fixed-position bar at top of viewport (z-toast layer)
|
|
20
|
+
- Renders nothing when `isLoading` is false
|
|
21
|
+
|
|
22
|
+
## Changes
|
|
23
|
+
### v0.18.0
|
|
24
|
+
- **Fixed** Track `setTimeout` with ref, add cleanup on unmount
|
|
25
|
+
|
|
26
|
+
### v0.1.0
|
|
27
|
+
- **Added** Initial release
|
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
# InlineEdit
|
|
2
|
-
|
|
3
|
-
- Import: @devalok/shilp-sutra/composed/inline-edit
|
|
4
|
-
- Server-safe: No
|
|
5
|
-
- Category: composed
|
|
6
|
-
|
|
7
|
-
## Props
|
|
8
|
-
value: string (current text value)
|
|
9
|
-
onSave: (newValue: string) => void | Promise<void> (called on commit; async shows spinner)
|
|
10
|
-
placeholder: string (shown when value is empty)
|
|
11
|
-
textClassName: string (CSS class for the editable text, e.g. "text-ds-lg font-semibold")
|
|
12
|
-
readOnly: boolean
|
|
13
|
-
maxLength: number
|
|
14
|
-
saving: boolean (external saving state — shows spinner, disables editing)
|
|
15
|
-
|
|
16
|
-
## Defaults
|
|
17
|
-
placeholder="Click to edit", readOnly={false}, saving={false}
|
|
18
|
-
|
|
19
|
-
## Example
|
|
20
|
-
```jsx
|
|
21
|
-
<InlineEdit
|
|
22
|
-
value={title}
|
|
23
|
-
onSave={(v) => updateTitle(v)}
|
|
24
|
-
textClassName="text-ds-lg font-semibold"
|
|
25
|
-
/>
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Gotchas
|
|
29
|
-
- Uses contentEditable — the text IS the editor. No input field appears.
|
|
30
|
-
- Click to focus → cursor appears in text. Type to edit. Enter saves. Escape reverts.
|
|
31
|
-
- Text is auto-selected on focus (like renaming a file in Finder)
|
|
32
|
-
- Paste is restricted to plain text (no rich content)
|
|
33
|
-
- The value is trimmed before calling `onSave`; if unchanged, `onSave` is not called
|
|
34
|
-
- If `onSave` returns a Promise, a spinner is shown and editing is disabled until it resolves
|
|
35
|
-
- On Promise rejection, the text reverts to the original value
|
|
1
|
+
# InlineEdit
|
|
2
|
+
|
|
3
|
+
- Import: @devalok/shilp-sutra/composed/inline-edit
|
|
4
|
+
- Server-safe: No
|
|
5
|
+
- Category: composed
|
|
6
|
+
|
|
7
|
+
## Props
|
|
8
|
+
value: string (current text value)
|
|
9
|
+
onSave: (newValue: string) => void | Promise<void> (called on commit; async shows spinner)
|
|
10
|
+
placeholder: string (shown when value is empty)
|
|
11
|
+
textClassName: string (CSS class for the editable text, e.g. "text-ds-lg font-semibold")
|
|
12
|
+
readOnly: boolean
|
|
13
|
+
maxLength: number
|
|
14
|
+
saving: boolean (external saving state — shows spinner, disables editing)
|
|
15
|
+
|
|
16
|
+
## Defaults
|
|
17
|
+
placeholder="Click to edit", readOnly={false}, saving={false}
|
|
18
|
+
|
|
19
|
+
## Example
|
|
20
|
+
```jsx
|
|
21
|
+
<InlineEdit
|
|
22
|
+
value={title}
|
|
23
|
+
onSave={(v) => updateTitle(v)}
|
|
24
|
+
textClassName="text-ds-lg font-semibold"
|
|
25
|
+
/>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Gotchas
|
|
29
|
+
- Uses contentEditable — the text IS the editor. No input field appears.
|
|
30
|
+
- Click to focus → cursor appears in text. Type to edit. Enter saves. Escape reverts.
|
|
31
|
+
- Text is auto-selected on focus (like renaming a file in Finder)
|
|
32
|
+
- Paste is restricted to plain text (no rich content)
|
|
33
|
+
- The value is trimmed before calling `onSave`; if unchanged, `onSave` is not called
|
|
34
|
+
- If `onSave` returns a Promise, a spinner is shown and editing is disabled until it resolves
|
|
35
|
+
- On Promise rejection, the text reverts to the original value
|
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
# LoadingSkeleton
|
|
2
|
-
|
|
3
|
-
- Import: @devalok/shilp-sutra/composed/loading-skeleton
|
|
4
|
-
- Server-safe: Yes
|
|
5
|
-
- Category: composed
|
|
6
|
-
|
|
7
|
-
Exports: CardSkeleton, TableSkeleton, BoardSkeleton, ListSkeleton
|
|
8
|
-
|
|
9
|
-
## Props
|
|
10
|
-
|
|
11
|
-
### CardSkeleton
|
|
12
|
-
className: string
|
|
13
|
-
|
|
14
|
-
### TableSkeleton
|
|
15
|
-
rows: number (default: 5)
|
|
16
|
-
columns: number (default: 4)
|
|
17
|
-
className: string
|
|
18
|
-
|
|
19
|
-
### BoardSkeleton
|
|
20
|
-
columns: number (default: 4)
|
|
21
|
-
cardsPerColumn: number (default: 3)
|
|
22
|
-
className: string
|
|
23
|
-
|
|
24
|
-
### ListSkeleton
|
|
25
|
-
rows: number (default: 6)
|
|
26
|
-
showAvatar: boolean (default: true)
|
|
27
|
-
className: string
|
|
28
|
-
|
|
29
|
-
## Defaults
|
|
30
|
-
TableSkeleton: rows=5, columns=4
|
|
31
|
-
BoardSkeleton: columns=4, cardsPerColumn=3
|
|
32
|
-
ListSkeleton: rows=6, showAvatar=true
|
|
33
|
-
|
|
34
|
-
## Example
|
|
35
|
-
```jsx
|
|
36
|
-
<CardSkeleton />
|
|
37
|
-
<TableSkeleton rows={8} columns={5} />
|
|
38
|
-
<BoardSkeleton columns={3} cardsPerColumn={4} />
|
|
39
|
-
<ListSkeleton rows={10} showAvatar={false} />
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
## Gotchas
|
|
43
|
-
- Server-safe: can be imported directly in Next.js Server Components
|
|
44
|
-
- These are pre-composed skeleton layouts — for individual skeleton shapes, use the `Skeleton` UI component
|
|
45
|
-
|
|
46
|
-
## Changes
|
|
47
|
-
### v0.2.0
|
|
48
|
-
- **Added** Identified as server-safe component
|
|
49
|
-
|
|
50
|
-
### v0.1.0
|
|
51
|
-
- **Added** Initial release
|
|
1
|
+
# LoadingSkeleton
|
|
2
|
+
|
|
3
|
+
- Import: @devalok/shilp-sutra/composed/loading-skeleton
|
|
4
|
+
- Server-safe: Yes
|
|
5
|
+
- Category: composed
|
|
6
|
+
|
|
7
|
+
Exports: CardSkeleton, TableSkeleton, BoardSkeleton, ListSkeleton
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
### CardSkeleton
|
|
12
|
+
className: string
|
|
13
|
+
|
|
14
|
+
### TableSkeleton
|
|
15
|
+
rows: number (default: 5)
|
|
16
|
+
columns: number (default: 4)
|
|
17
|
+
className: string
|
|
18
|
+
|
|
19
|
+
### BoardSkeleton
|
|
20
|
+
columns: number (default: 4)
|
|
21
|
+
cardsPerColumn: number (default: 3)
|
|
22
|
+
className: string
|
|
23
|
+
|
|
24
|
+
### ListSkeleton
|
|
25
|
+
rows: number (default: 6)
|
|
26
|
+
showAvatar: boolean (default: true)
|
|
27
|
+
className: string
|
|
28
|
+
|
|
29
|
+
## Defaults
|
|
30
|
+
TableSkeleton: rows=5, columns=4
|
|
31
|
+
BoardSkeleton: columns=4, cardsPerColumn=3
|
|
32
|
+
ListSkeleton: rows=6, showAvatar=true
|
|
33
|
+
|
|
34
|
+
## Example
|
|
35
|
+
```jsx
|
|
36
|
+
<CardSkeleton />
|
|
37
|
+
<TableSkeleton rows={8} columns={5} />
|
|
38
|
+
<BoardSkeleton columns={3} cardsPerColumn={4} />
|
|
39
|
+
<ListSkeleton rows={10} showAvatar={false} />
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Gotchas
|
|
43
|
+
- Server-safe: can be imported directly in Next.js Server Components
|
|
44
|
+
- These are pre-composed skeleton layouts — for individual skeleton shapes, use the `Skeleton` UI component
|
|
45
|
+
|
|
46
|
+
## Changes
|
|
47
|
+
### v0.2.0
|
|
48
|
+
- **Added** Identified as server-safe component
|
|
49
|
+
|
|
50
|
+
### v0.1.0
|
|
51
|
+
- **Added** Initial release
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
# MarkdownViewer
|
|
2
|
-
|
|
3
|
-
- Import: @devalok/shilp-sutra/composed/markdown-viewer
|
|
4
|
-
- Server-safe: No
|
|
5
|
-
- Category: composed
|
|
6
|
-
|
|
7
|
-
## Props
|
|
8
|
-
content: string (markdown source)
|
|
9
|
-
compact: boolean (tighter spacing for inline use)
|
|
10
|
-
allowHtml: boolean (allow raw HTML in markdown)
|
|
11
|
-
linkTarget: string (target attribute for links)
|
|
12
|
-
|
|
13
|
-
## Defaults
|
|
14
|
-
compact={false}, allowHtml={false}, linkTarget="_blank"
|
|
15
|
-
|
|
16
|
-
## Example
|
|
17
|
-
```jsx
|
|
18
|
-
<MarkdownViewer content={message.body} />
|
|
19
|
-
<MarkdownViewer content={comment} compact />
|
|
20
|
-
<MarkdownViewer content={trustedHtml} allowHtml />
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Gotchas
|
|
24
|
-
- Code blocks with a language fence are syntax-highlighted via `react-syntax-highlighter` (lazy-loaded) — the first render shows a plain `<pre>` fallback
|
|
25
|
-
- GFM (tables, strikethrough, task lists) is supported via `remark-gfm`
|
|
26
|
-
- Raw HTML is stripped by default — only enable `allowHtml` for trusted content
|
|
27
|
-
- Links open in a new tab by default (`target="_blank"` with `rel="noopener noreferrer"`)
|
|
1
|
+
# MarkdownViewer
|
|
2
|
+
|
|
3
|
+
- Import: @devalok/shilp-sutra/composed/markdown-viewer
|
|
4
|
+
- Server-safe: No
|
|
5
|
+
- Category: composed
|
|
6
|
+
|
|
7
|
+
## Props
|
|
8
|
+
content: string (markdown source)
|
|
9
|
+
compact: boolean (tighter spacing for inline use)
|
|
10
|
+
allowHtml: boolean (allow raw HTML in markdown)
|
|
11
|
+
linkTarget: string (target attribute for links)
|
|
12
|
+
|
|
13
|
+
## Defaults
|
|
14
|
+
compact={false}, allowHtml={false}, linkTarget="_blank"
|
|
15
|
+
|
|
16
|
+
## Example
|
|
17
|
+
```jsx
|
|
18
|
+
<MarkdownViewer content={message.body} />
|
|
19
|
+
<MarkdownViewer content={comment} compact />
|
|
20
|
+
<MarkdownViewer content={trustedHtml} allowHtml />
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Gotchas
|
|
24
|
+
- Code blocks with a language fence are syntax-highlighted via `react-syntax-highlighter` (lazy-loaded) — the first render shows a plain `<pre>` fallback
|
|
25
|
+
- GFM (tables, strikethrough, task lists) is supported via `remark-gfm`
|
|
26
|
+
- Raw HTML is stripped by default — only enable `allowHtml` for trusted content
|
|
27
|
+
- Links open in a new tab by default (`target="_blank"` with `rel="noopener noreferrer"`)
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
# MasterDetail
|
|
2
|
-
|
|
3
|
-
- Import: @devalok/shilp-sutra/composed/master-detail
|
|
4
|
-
- Server-safe: No
|
|
5
|
-
- Category: composed
|
|
6
|
-
|
|
7
|
-
## Compound Components
|
|
8
|
-
MasterDetail (root), MasterDetail.List, MasterDetail.Detail, MasterDetail.ListItem
|
|
9
|
-
|
|
10
|
-
## Props
|
|
11
|
-
|
|
12
|
-
### MasterDetail (root)
|
|
13
|
-
selected: string | null (ID of currently selected item; null = show list on mobile)
|
|
14
|
-
onBack: () => void (called when mobile back button is pressed)
|
|
15
|
-
masterWidth: string (master panel width on desktop)
|
|
16
|
-
breakpoint: "sm" | "md" | "lg" (below this, stacked mobile mode activates)
|
|
17
|
-
|
|
18
|
-
### MasterDetail.ListItem
|
|
19
|
-
active: boolean (highlights the item)
|
|
20
|
-
(extends ButtonHTMLAttributes)
|
|
21
|
-
|
|
22
|
-
## Defaults
|
|
23
|
-
selected={null}, masterWidth="280px", breakpoint="md"
|
|
24
|
-
|
|
25
|
-
## Example
|
|
26
|
-
```jsx
|
|
27
|
-
<MasterDetail selected={selectedId} onBack={() => setSelectedId(null)}>
|
|
28
|
-
<MasterDetail.List>
|
|
29
|
-
{items.map((item) => (
|
|
30
|
-
<MasterDetail.ListItem
|
|
31
|
-
key={item.id}
|
|
32
|
-
active={item.id === selectedId}
|
|
33
|
-
onClick={() => setSelectedId(item.id)}
|
|
34
|
-
>
|
|
35
|
-
{item.name}
|
|
36
|
-
</MasterDetail.ListItem>
|
|
37
|
-
))}
|
|
38
|
-
</MasterDetail.List>
|
|
39
|
-
<MasterDetail.Detail>
|
|
40
|
-
{selectedId ? <ItemDetail id={selectedId} /> : <EmptyState />}
|
|
41
|
-
</MasterDetail.Detail>
|
|
42
|
-
</MasterDetail>
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## Gotchas
|
|
46
|
-
- On mobile (below breakpoint), List and Detail are mutually exclusive — selecting an item hides the list
|
|
47
|
-
- The `onBack` callback is required for the mobile back button to appear in the Detail pane
|
|
48
|
-
- Uses `window.matchMedia` — SSR renders desktop layout initially, then hydrates to correct mode
|
|
1
|
+
# MasterDetail
|
|
2
|
+
|
|
3
|
+
- Import: @devalok/shilp-sutra/composed/master-detail
|
|
4
|
+
- Server-safe: No
|
|
5
|
+
- Category: composed
|
|
6
|
+
|
|
7
|
+
## Compound Components
|
|
8
|
+
MasterDetail (root), MasterDetail.List, MasterDetail.Detail, MasterDetail.ListItem
|
|
9
|
+
|
|
10
|
+
## Props
|
|
11
|
+
|
|
12
|
+
### MasterDetail (root)
|
|
13
|
+
selected: string | null (ID of currently selected item; null = show list on mobile)
|
|
14
|
+
onBack: () => void (called when mobile back button is pressed)
|
|
15
|
+
masterWidth: string (master panel width on desktop)
|
|
16
|
+
breakpoint: "sm" | "md" | "lg" (below this, stacked mobile mode activates)
|
|
17
|
+
|
|
18
|
+
### MasterDetail.ListItem
|
|
19
|
+
active: boolean (highlights the item)
|
|
20
|
+
(extends ButtonHTMLAttributes)
|
|
21
|
+
|
|
22
|
+
## Defaults
|
|
23
|
+
selected={null}, masterWidth="280px", breakpoint="md"
|
|
24
|
+
|
|
25
|
+
## Example
|
|
26
|
+
```jsx
|
|
27
|
+
<MasterDetail selected={selectedId} onBack={() => setSelectedId(null)}>
|
|
28
|
+
<MasterDetail.List>
|
|
29
|
+
{items.map((item) => (
|
|
30
|
+
<MasterDetail.ListItem
|
|
31
|
+
key={item.id}
|
|
32
|
+
active={item.id === selectedId}
|
|
33
|
+
onClick={() => setSelectedId(item.id)}
|
|
34
|
+
>
|
|
35
|
+
{item.name}
|
|
36
|
+
</MasterDetail.ListItem>
|
|
37
|
+
))}
|
|
38
|
+
</MasterDetail.List>
|
|
39
|
+
<MasterDetail.Detail>
|
|
40
|
+
{selectedId ? <ItemDetail id={selectedId} /> : <EmptyState />}
|
|
41
|
+
</MasterDetail.Detail>
|
|
42
|
+
</MasterDetail>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Gotchas
|
|
46
|
+
- On mobile (below breakpoint), List and Detail are mutually exclusive — selecting an item hides the list
|
|
47
|
+
- The `onBack` callback is required for the mobile back button to appear in the Detail pane
|
|
48
|
+
- Uses `window.matchMedia` — SSR renders desktop layout initially, then hydrates to correct mode
|