@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,35 +1,35 @@
|
|
|
1
|
-
# MemberPicker
|
|
2
|
-
|
|
3
|
-
- Import: @devalok/shilp-sutra/composed/member-picker
|
|
4
|
-
- Server-safe: No
|
|
5
|
-
- Category: composed
|
|
6
|
-
|
|
7
|
-
## Props
|
|
8
|
-
members: MemberPickerMember[] (REQUIRED) — { id, name, avatar? }
|
|
9
|
-
selectedIds: string[] (REQUIRED)
|
|
10
|
-
onSelect: (memberId: string) => void (REQUIRED)
|
|
11
|
-
multiple: boolean (default: false)
|
|
12
|
-
placeholder: string (default: "Search members...")
|
|
13
|
-
children: ReactNode (trigger element)
|
|
14
|
-
|
|
15
|
-
## Defaults
|
|
16
|
-
multiple=false, placeholder="Search members..."
|
|
17
|
-
|
|
18
|
-
## Example
|
|
19
|
-
```jsx
|
|
20
|
-
<MemberPicker members={teamMembers} selectedIds={assignees} onSelect={toggleAssignee} multiple>
|
|
21
|
-
<Button variant="outline">Assign Members</Button>
|
|
22
|
-
</MemberPicker>
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## Gotchas
|
|
26
|
-
- `children` is used as the trigger element (e.g., a Button)
|
|
27
|
-
- `onSelect` is called with a single `memberId` — toggle logic is up to the consumer
|
|
28
|
-
- When `multiple=false`, selecting a new member replaces the previous selection
|
|
29
|
-
|
|
30
|
-
## Changes
|
|
31
|
-
### v0.18.0
|
|
32
|
-
- **Fixed** Added `aria-label` to search input
|
|
33
|
-
|
|
34
|
-
### v0.1.0
|
|
35
|
-
- **Added** Initial release
|
|
1
|
+
# MemberPicker
|
|
2
|
+
|
|
3
|
+
- Import: @devalok/shilp-sutra/composed/member-picker
|
|
4
|
+
- Server-safe: No
|
|
5
|
+
- Category: composed
|
|
6
|
+
|
|
7
|
+
## Props
|
|
8
|
+
members: MemberPickerMember[] (REQUIRED) — { id, name, avatar? }
|
|
9
|
+
selectedIds: string[] (REQUIRED)
|
|
10
|
+
onSelect: (memberId: string) => void (REQUIRED)
|
|
11
|
+
multiple: boolean (default: false)
|
|
12
|
+
placeholder: string (default: "Search members...")
|
|
13
|
+
children: ReactNode (trigger element)
|
|
14
|
+
|
|
15
|
+
## Defaults
|
|
16
|
+
multiple=false, placeholder="Search members..."
|
|
17
|
+
|
|
18
|
+
## Example
|
|
19
|
+
```jsx
|
|
20
|
+
<MemberPicker members={teamMembers} selectedIds={assignees} onSelect={toggleAssignee} multiple>
|
|
21
|
+
<Button variant="outline">Assign Members</Button>
|
|
22
|
+
</MemberPicker>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Gotchas
|
|
26
|
+
- `children` is used as the trigger element (e.g., a Button)
|
|
27
|
+
- `onSelect` is called with a single `memberId` — toggle logic is up to the consumer
|
|
28
|
+
- When `multiple=false`, selecting a new member replaces the previous selection
|
|
29
|
+
|
|
30
|
+
## Changes
|
|
31
|
+
### v0.18.0
|
|
32
|
+
- **Fixed** Added `aria-label` to search input
|
|
33
|
+
|
|
34
|
+
### v0.1.0
|
|
35
|
+
- **Added** Initial release
|
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
# MultiSelectPopover
|
|
2
|
-
|
|
3
|
-
- Import: @devalok/shilp-sutra/composed/multi-select-popover
|
|
4
|
-
- Server-safe: No
|
|
5
|
-
- Category: composed
|
|
6
|
-
|
|
7
|
-
## Props
|
|
8
|
-
items: MultiSelectItem[] (flat list — use `groups` for grouped rendering)
|
|
9
|
-
groups: MultiSelectGroup[] (grouped items with section headers)
|
|
10
|
-
value: string[] (currently selected item IDs)
|
|
11
|
-
onValueChange: (ids: string[]) => void
|
|
12
|
-
searchPlaceholder: string
|
|
13
|
-
onSearch: (query: string) => Promise<MultiSelectItem[]> (async search — replaces local filter)
|
|
14
|
-
searchDebounce: number (debounce for async search in ms)
|
|
15
|
-
renderItem: (item: MultiSelectItem, selected: boolean) => ReactNode (custom item renderer)
|
|
16
|
-
emptyMessage: string (message when no items match)
|
|
17
|
-
maxSelections: number (cap on selections)
|
|
18
|
-
align: "start" | "center" | "end"
|
|
19
|
-
width: string | number (popover width)
|
|
20
|
-
children: ReactNode (trigger element)
|
|
21
|
-
|
|
22
|
-
### MultiSelectItem
|
|
23
|
-
id: string
|
|
24
|
-
label: string
|
|
25
|
-
image?: string
|
|
26
|
-
description?: string
|
|
27
|
-
disabled?: boolean
|
|
28
|
-
|
|
29
|
-
### MultiSelectGroup
|
|
30
|
-
label: string
|
|
31
|
-
items: MultiSelectItem[]
|
|
32
|
-
|
|
33
|
-
## Defaults
|
|
34
|
-
searchPlaceholder="Search...", searchDebounce={300}, emptyMessage="No results found", align="start", width={240}
|
|
35
|
-
|
|
36
|
-
## Example
|
|
37
|
-
```jsx
|
|
38
|
-
<MultiSelectPopover
|
|
39
|
-
items={[
|
|
40
|
-
{ id: '1', label: 'Alice', image: '/alice.jpg' },
|
|
41
|
-
{ id: '2', label: 'Bob' },
|
|
42
|
-
]}
|
|
43
|
-
value={selected}
|
|
44
|
-
onValueChange={setSelected}
|
|
45
|
-
>
|
|
46
|
-
<Button>Assign members</Button>
|
|
47
|
-
</MultiSelectPopover>
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
## Gotchas
|
|
51
|
-
- Supply either `items` (flat) or `groups` (sectioned), not both
|
|
52
|
-
- When `onSearch` is provided, local filtering is disabled — the callback must return results
|
|
53
|
-
- Search state resets when the popover closes
|
|
54
|
-
- `maxSelections: 1` acts as single-select — clicking a new item replaces the current one
|
|
55
|
-
|
|
56
|
-
## Changes
|
|
57
|
-
|
|
58
|
-
### v0.27.2
|
|
59
|
-
- **Fixed** `maxSelections` at limit now replaces oldest selection instead of blocking. Single-select (`maxSelections: 1`) swaps in the new value.
|
|
60
|
-
|
|
61
|
-
### v0.26.0
|
|
62
|
-
- **Added** Initial release
|
|
1
|
+
# MultiSelectPopover
|
|
2
|
+
|
|
3
|
+
- Import: @devalok/shilp-sutra/composed/multi-select-popover
|
|
4
|
+
- Server-safe: No
|
|
5
|
+
- Category: composed
|
|
6
|
+
|
|
7
|
+
## Props
|
|
8
|
+
items: MultiSelectItem[] (flat list — use `groups` for grouped rendering)
|
|
9
|
+
groups: MultiSelectGroup[] (grouped items with section headers)
|
|
10
|
+
value: string[] (currently selected item IDs)
|
|
11
|
+
onValueChange: (ids: string[]) => void
|
|
12
|
+
searchPlaceholder: string
|
|
13
|
+
onSearch: (query: string) => Promise<MultiSelectItem[]> (async search — replaces local filter)
|
|
14
|
+
searchDebounce: number (debounce for async search in ms)
|
|
15
|
+
renderItem: (item: MultiSelectItem, selected: boolean) => ReactNode (custom item renderer)
|
|
16
|
+
emptyMessage: string (message when no items match)
|
|
17
|
+
maxSelections: number (cap on selections)
|
|
18
|
+
align: "start" | "center" | "end"
|
|
19
|
+
width: string | number (popover width)
|
|
20
|
+
children: ReactNode (trigger element)
|
|
21
|
+
|
|
22
|
+
### MultiSelectItem
|
|
23
|
+
id: string
|
|
24
|
+
label: string
|
|
25
|
+
image?: string
|
|
26
|
+
description?: string
|
|
27
|
+
disabled?: boolean
|
|
28
|
+
|
|
29
|
+
### MultiSelectGroup
|
|
30
|
+
label: string
|
|
31
|
+
items: MultiSelectItem[]
|
|
32
|
+
|
|
33
|
+
## Defaults
|
|
34
|
+
searchPlaceholder="Search...", searchDebounce={300}, emptyMessage="No results found", align="start", width={240}
|
|
35
|
+
|
|
36
|
+
## Example
|
|
37
|
+
```jsx
|
|
38
|
+
<MultiSelectPopover
|
|
39
|
+
items={[
|
|
40
|
+
{ id: '1', label: 'Alice', image: '/alice.jpg' },
|
|
41
|
+
{ id: '2', label: 'Bob' },
|
|
42
|
+
]}
|
|
43
|
+
value={selected}
|
|
44
|
+
onValueChange={setSelected}
|
|
45
|
+
>
|
|
46
|
+
<Button>Assign members</Button>
|
|
47
|
+
</MultiSelectPopover>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Gotchas
|
|
51
|
+
- Supply either `items` (flat) or `groups` (sectioned), not both
|
|
52
|
+
- When `onSearch` is provided, local filtering is disabled — the callback must return results
|
|
53
|
+
- Search state resets when the popover closes
|
|
54
|
+
- `maxSelections: 1` acts as single-select — clicking a new item replaces the current one
|
|
55
|
+
|
|
56
|
+
## Changes
|
|
57
|
+
|
|
58
|
+
### v0.27.2
|
|
59
|
+
- **Fixed** `maxSelections` at limit now replaces oldest selection instead of blocking. Single-select (`maxSelections: 1`) swaps in the new value.
|
|
60
|
+
|
|
61
|
+
### v0.26.0
|
|
62
|
+
- **Added** Initial release
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
# PageHeader
|
|
2
|
-
|
|
3
|
-
- Import: @devalok/shilp-sutra/composed/page-header
|
|
4
|
-
- Server-safe: Yes
|
|
5
|
-
- Category: composed
|
|
6
|
-
|
|
7
|
-
## Props
|
|
8
|
-
title: string (falls back to last breadcrumb label if omitted)
|
|
9
|
-
subtitle: string
|
|
10
|
-
actions: ReactNode (action buttons)
|
|
11
|
-
breadcrumbs: Breadcrumb[] — { label: string, href?: string }
|
|
12
|
-
titleClassName: string
|
|
13
|
-
|
|
14
|
-
## Defaults
|
|
15
|
-
None
|
|
16
|
-
|
|
17
|
-
## Example
|
|
18
|
-
```jsx
|
|
19
|
-
<PageHeader
|
|
20
|
-
title="Project Settings"
|
|
21
|
-
subtitle="Configure your project preferences"
|
|
22
|
-
breadcrumbs={[
|
|
23
|
-
{ label: 'Home', href: '/' },
|
|
24
|
-
{ label: 'Projects', href: '/projects' },
|
|
25
|
-
{ label: 'Settings' },
|
|
26
|
-
]}
|
|
27
|
-
actions={<Button>Save</Button>}
|
|
28
|
-
/>
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Gotchas
|
|
32
|
-
- Server-safe: can be imported directly in Next.js Server Components
|
|
33
|
-
- If `title` is omitted, the last breadcrumb's `label` is used as the page title
|
|
34
|
-
- The last breadcrumb should not have an `href` (it represents the current page)
|
|
35
|
-
|
|
36
|
-
## Changes
|
|
37
|
-
### v0.2.0
|
|
38
|
-
- **Added** Identified as server-safe component
|
|
39
|
-
|
|
40
|
-
### v0.1.0
|
|
41
|
-
- **Added** Initial release
|
|
1
|
+
# PageHeader
|
|
2
|
+
|
|
3
|
+
- Import: @devalok/shilp-sutra/composed/page-header
|
|
4
|
+
- Server-safe: Yes
|
|
5
|
+
- Category: composed
|
|
6
|
+
|
|
7
|
+
## Props
|
|
8
|
+
title: string (falls back to last breadcrumb label if omitted)
|
|
9
|
+
subtitle: string
|
|
10
|
+
actions: ReactNode (action buttons)
|
|
11
|
+
breadcrumbs: Breadcrumb[] — { label: string, href?: string }
|
|
12
|
+
titleClassName: string
|
|
13
|
+
|
|
14
|
+
## Defaults
|
|
15
|
+
None
|
|
16
|
+
|
|
17
|
+
## Example
|
|
18
|
+
```jsx
|
|
19
|
+
<PageHeader
|
|
20
|
+
title="Project Settings"
|
|
21
|
+
subtitle="Configure your project preferences"
|
|
22
|
+
breadcrumbs={[
|
|
23
|
+
{ label: 'Home', href: '/' },
|
|
24
|
+
{ label: 'Projects', href: '/projects' },
|
|
25
|
+
{ label: 'Settings' },
|
|
26
|
+
]}
|
|
27
|
+
actions={<Button>Save</Button>}
|
|
28
|
+
/>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Gotchas
|
|
32
|
+
- Server-safe: can be imported directly in Next.js Server Components
|
|
33
|
+
- If `title` is omitted, the last breadcrumb's `label` is used as the page title
|
|
34
|
+
- The last breadcrumb should not have an `href` (it represents the current page)
|
|
35
|
+
|
|
36
|
+
## Changes
|
|
37
|
+
### v0.2.0
|
|
38
|
+
- **Added** Identified as server-safe component
|
|
39
|
+
|
|
40
|
+
### v0.1.0
|
|
41
|
+
- **Added** Initial release
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
# PageSkeletons
|
|
2
|
-
|
|
3
|
-
- Import: @devalok/shilp-sutra/composed/page-skeletons
|
|
4
|
-
- Server-safe: Yes
|
|
5
|
-
- Category: composed
|
|
6
|
-
|
|
7
|
-
Exports: DashboardSkeleton, ProjectListSkeleton, TaskDetailSkeleton
|
|
8
|
-
|
|
9
|
-
## Props
|
|
10
|
-
className?: string (plus all standard HTML div attributes via React.ComponentPropsWithoutRef<'div'>)
|
|
11
|
-
|
|
12
|
-
## Defaults
|
|
13
|
-
None
|
|
14
|
-
|
|
15
|
-
## Example
|
|
16
|
-
```jsx
|
|
17
|
-
<DashboardSkeleton />
|
|
18
|
-
<ProjectListSkeleton />
|
|
19
|
-
<TaskDetailSkeleton />
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## Gotchas
|
|
23
|
-
- Server-safe: can be imported directly in Next.js Server Components
|
|
24
|
-
- These are full-page skeleton layouts — for smaller skeleton sections, use LoadingSkeleton components
|
|
25
|
-
- Accept `className` and standard div attributes but render fixed layout structures
|
|
26
|
-
|
|
27
|
-
## Changes
|
|
28
|
-
### v0.2.0
|
|
29
|
-
- **Added** Identified as server-safe component
|
|
30
|
-
|
|
31
|
-
### v0.1.0
|
|
32
|
-
- **Added** Initial release
|
|
1
|
+
# PageSkeletons
|
|
2
|
+
|
|
3
|
+
- Import: @devalok/shilp-sutra/composed/page-skeletons
|
|
4
|
+
- Server-safe: Yes
|
|
5
|
+
- Category: composed
|
|
6
|
+
|
|
7
|
+
Exports: DashboardSkeleton, ProjectListSkeleton, TaskDetailSkeleton
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
className?: string (plus all standard HTML div attributes via React.ComponentPropsWithoutRef<'div'>)
|
|
11
|
+
|
|
12
|
+
## Defaults
|
|
13
|
+
None
|
|
14
|
+
|
|
15
|
+
## Example
|
|
16
|
+
```jsx
|
|
17
|
+
<DashboardSkeleton />
|
|
18
|
+
<ProjectListSkeleton />
|
|
19
|
+
<TaskDetailSkeleton />
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Gotchas
|
|
23
|
+
- Server-safe: can be imported directly in Next.js Server Components
|
|
24
|
+
- These are full-page skeleton layouts — for smaller skeleton sections, use LoadingSkeleton components
|
|
25
|
+
- Accept `className` and standard div attributes but render fixed layout structures
|
|
26
|
+
|
|
27
|
+
## Changes
|
|
28
|
+
### v0.2.0
|
|
29
|
+
- **Added** Identified as server-safe component
|
|
30
|
+
|
|
31
|
+
### v0.1.0
|
|
32
|
+
- **Added** Initial release
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
# PriorityIndicator
|
|
2
|
-
|
|
3
|
-
- Import: @devalok/shilp-sutra/composed/priority-indicator
|
|
4
|
-
- Server-safe: Yes
|
|
5
|
-
- Category: composed
|
|
6
|
-
|
|
7
|
-
## Props
|
|
8
|
-
priority: Priority
|
|
9
|
-
display: "compact" | "full" (default: "full")
|
|
10
|
-
|
|
11
|
-
Priority = 'LOW' | 'MEDIUM' | 'HIGH' | 'URGENT' | 'low' | 'medium' | 'high' | 'urgent'
|
|
12
|
-
|
|
13
|
-
## Defaults
|
|
14
|
-
display="full"
|
|
15
|
-
|
|
16
|
-
## Example
|
|
17
|
-
```jsx
|
|
18
|
-
<PriorityIndicator priority="HIGH" />
|
|
19
|
-
<PriorityIndicator priority="low" display="compact" />
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## Gotchas
|
|
23
|
-
- Case-insensitive — "low" and "LOW" both work
|
|
24
|
-
- Server-safe: can be imported directly in Next.js Server Components
|
|
25
|
-
- `compact` display shows only the icon; `full` shows icon + text label
|
|
26
|
-
|
|
27
|
-
## Changes
|
|
28
|
-
### v0.2.0
|
|
29
|
-
- **Added** Identified as server-safe component
|
|
30
|
-
|
|
31
|
-
### v0.1.0
|
|
32
|
-
- **Added** Initial release
|
|
1
|
+
# PriorityIndicator
|
|
2
|
+
|
|
3
|
+
- Import: @devalok/shilp-sutra/composed/priority-indicator
|
|
4
|
+
- Server-safe: Yes
|
|
5
|
+
- Category: composed
|
|
6
|
+
|
|
7
|
+
## Props
|
|
8
|
+
priority: Priority
|
|
9
|
+
display: "compact" | "full" (default: "full")
|
|
10
|
+
|
|
11
|
+
Priority = 'LOW' | 'MEDIUM' | 'HIGH' | 'URGENT' | 'low' | 'medium' | 'high' | 'urgent'
|
|
12
|
+
|
|
13
|
+
## Defaults
|
|
14
|
+
display="full"
|
|
15
|
+
|
|
16
|
+
## Example
|
|
17
|
+
```jsx
|
|
18
|
+
<PriorityIndicator priority="HIGH" />
|
|
19
|
+
<PriorityIndicator priority="low" display="compact" />
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Gotchas
|
|
23
|
+
- Case-insensitive — "low" and "LOW" both work
|
|
24
|
+
- Server-safe: can be imported directly in Next.js Server Components
|
|
25
|
+
- `compact` display shows only the icon; `full` shows icon + text label
|
|
26
|
+
|
|
27
|
+
## Changes
|
|
28
|
+
### v0.2.0
|
|
29
|
+
- **Added** Identified as server-safe component
|
|
30
|
+
|
|
31
|
+
### v0.1.0
|
|
32
|
+
- **Added** Initial release
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
# ResponsiveOverlay
|
|
2
|
-
|
|
3
|
-
- Import: @devalok/shilp-sutra/composed/responsive-overlay
|
|
4
|
-
- Server-safe: No
|
|
5
|
-
- Category: composed
|
|
6
|
-
|
|
7
|
-
## Props
|
|
8
|
-
open: boolean
|
|
9
|
-
onOpenChange: (open: boolean) => void
|
|
10
|
-
title: string
|
|
11
|
-
description: string
|
|
12
|
-
breakpoint: "sm" | "md" (below this renders as bottom Sheet; above as Dialog)
|
|
13
|
-
children: ReactNode
|
|
14
|
-
className: string
|
|
15
|
-
|
|
16
|
-
## Defaults
|
|
17
|
-
breakpoint="md"
|
|
18
|
-
|
|
19
|
-
## Example
|
|
20
|
-
```jsx
|
|
21
|
-
<ResponsiveOverlay
|
|
22
|
-
open={open}
|
|
23
|
-
onOpenChange={setOpen}
|
|
24
|
-
title="Edit task"
|
|
25
|
-
description="Update the task details"
|
|
26
|
-
>
|
|
27
|
-
<TaskForm />
|
|
28
|
-
</ResponsiveOverlay>
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Gotchas
|
|
32
|
-
- Renders a centered Dialog on desktop and a bottom Sheet on mobile — same content, different container
|
|
33
|
-
- Uses `window.matchMedia` internally — SSR defaults to desktop (Dialog) until hydration
|
|
34
|
-
- Title and description are optional; if omitted, no header is rendered in either mode
|
|
1
|
+
# ResponsiveOverlay
|
|
2
|
+
|
|
3
|
+
- Import: @devalok/shilp-sutra/composed/responsive-overlay
|
|
4
|
+
- Server-safe: No
|
|
5
|
+
- Category: composed
|
|
6
|
+
|
|
7
|
+
## Props
|
|
8
|
+
open: boolean
|
|
9
|
+
onOpenChange: (open: boolean) => void
|
|
10
|
+
title: string
|
|
11
|
+
description: string
|
|
12
|
+
breakpoint: "sm" | "md" (below this renders as bottom Sheet; above as Dialog)
|
|
13
|
+
children: ReactNode
|
|
14
|
+
className: string
|
|
15
|
+
|
|
16
|
+
## Defaults
|
|
17
|
+
breakpoint="md"
|
|
18
|
+
|
|
19
|
+
## Example
|
|
20
|
+
```jsx
|
|
21
|
+
<ResponsiveOverlay
|
|
22
|
+
open={open}
|
|
23
|
+
onOpenChange={setOpen}
|
|
24
|
+
title="Edit task"
|
|
25
|
+
description="Update the task details"
|
|
26
|
+
>
|
|
27
|
+
<TaskForm />
|
|
28
|
+
</ResponsiveOverlay>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Gotchas
|
|
32
|
+
- Renders a centered Dialog on desktop and a bottom Sheet on mobile — same content, different container
|
|
33
|
+
- Uses `window.matchMedia` internally — SSR defaults to desktop (Dialog) until hydration
|
|
34
|
+
- Title and description are optional; if omitted, no header is rendered in either mode
|
|
@@ -1,82 +1,82 @@
|
|
|
1
|
-
# RichTextEditor
|
|
2
|
-
|
|
3
|
-
- Import: @devalok/shilp-sutra/composed/rich-text-editor
|
|
4
|
-
- Server-safe: No
|
|
5
|
-
- Category: composed
|
|
6
|
-
|
|
7
|
-
Exports: RichTextEditor, RichTextViewer
|
|
8
|
-
|
|
9
|
-
## Props
|
|
10
|
-
|
|
11
|
-
### RichTextEditor
|
|
12
|
-
content: string (HTML string)
|
|
13
|
-
placeholder: string (default: "Start writing...")
|
|
14
|
-
onChange: (html: string) => void
|
|
15
|
-
className: string
|
|
16
|
-
editable: boolean (default: true)
|
|
17
|
-
onImageUpload?: (file: File) => Promise<string> — return URL. If omitted, images paste as base64
|
|
18
|
-
onFileUpload?: (file: File) => Promise<{ url: string; name: string; size: number }> — enables file attachments
|
|
19
|
-
mentions?: MentionItem[] — static list for @mention autocomplete
|
|
20
|
-
onMentionSearch?: (query: string) => Promise<MentionItem[]> — async search, takes precedence over static mentions
|
|
21
|
-
toolbar?: ToolbarItem[] — whitelist of toolbar items to show. Omit to show all.
|
|
22
|
-
onMentionSelect?: (item: MentionItem) => void — called when a mention is selected
|
|
23
|
-
|
|
24
|
-
ToolbarItem: 'bold' | 'italic' | 'underline' | 'strike' | 'highlight' | 'h2' | 'h3' | 'blockquote' | 'bulletList' | 'orderedList' | 'taskList' | 'codeBlock' | 'link' | 'image' | 'file' | 'hr' | 'alignLeft' | 'alignCenter' | 'alignRight' | 'emoji' | 'undo' | 'redo'
|
|
25
|
-
|
|
26
|
-
MentionItem: { id: string; label: string; avatar?: string }
|
|
27
|
-
|
|
28
|
-
### RichTextViewer
|
|
29
|
-
content: string (REQUIRED, HTML string)
|
|
30
|
-
className: string
|
|
31
|
-
|
|
32
|
-
## Defaults
|
|
33
|
-
RichTextEditor: placeholder="Start writing...", editable=true
|
|
34
|
-
|
|
35
|
-
## Example
|
|
36
|
-
```jsx
|
|
37
|
-
<RichTextEditor content={html} onChange={setHtml} placeholder="Write your message..." />
|
|
38
|
-
|
|
39
|
-
<RichTextEditor
|
|
40
|
-
content={html}
|
|
41
|
-
onChange={setHtml}
|
|
42
|
-
mentions={[{ id: '1', label: 'Aarav' }]}
|
|
43
|
-
onImageUpload={async (file) => uploadAndReturnUrl(file)}
|
|
44
|
-
onFileUpload={async (file) => ({ url: uploadUrl, name: file.name, size: file.size })}
|
|
45
|
-
/>
|
|
46
|
-
|
|
47
|
-
<RichTextViewer content={savedHtml} />
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
## Gotchas
|
|
51
|
-
- Tiptap is bundled — no need to install `@tiptap/*` packages separately
|
|
52
|
-
- Emoji picker requires `@emoji-mart/react` + `@emoji-mart/data` peers
|
|
53
|
-
- Images without `onImageUpload` are stored as base64 in HTML — large images bloat content
|
|
54
|
-
- Mention rendering in viewer always works (no mention props needed, just the HTML)
|
|
55
|
-
- Features: bold, italic, underline, strikethrough, highlight, headings, blockquote, lists, task lists, code, links, images, file attachments, mentions, emoji, text alignment, horizontal rule
|
|
56
|
-
|
|
57
|
-
## Changes
|
|
58
|
-
### v0.33.0
|
|
59
|
-
- **Added** `emojiSet` prop — `EmojiSet` type for consistent emoji art style rendering
|
|
60
|
-
- **Changed** TipTap v2 → v3 upgrade (useEditorState, immediatelyRender: false for SSR, ListKit)
|
|
61
|
-
- **Added** EmojiNode + createEmojiSuggestion(set) registered internally
|
|
62
|
-
|
|
63
|
-
### v0.30.0
|
|
64
|
-
- **Added** `toolbar` prop — whitelist of `ToolbarItem` names to control which toolbar buttons appear. Dividers render only between groups that have visible items. `ToolbarItem` type exported from barrel.
|
|
65
|
-
|
|
66
|
-
### v0.18.0
|
|
67
|
-
- **Fixed** Use ref to track internal changes, prevent update loop
|
|
68
|
-
|
|
69
|
-
### v0.9.0
|
|
70
|
-
- **Changed** All `@tiptap/*` packages moved from peerDependencies to bundled build-time dependencies — consumers no longer need to install tiptap separately
|
|
71
|
-
|
|
72
|
-
### v0.8.0
|
|
73
|
-
- **Fixed** Emoji picker now renders above the editor (not clipped by overflow)
|
|
74
|
-
- **Fixed** Link/image URL injection prevented via protocol validation
|
|
75
|
-
- **Fixed** Escape key in emoji picker no longer closes parent dialogs
|
|
76
|
-
- **Fixed** Tiptap peer deps tightened to `>=2.27.2 <3.0.0`
|
|
77
|
-
|
|
78
|
-
### v0.7.0
|
|
79
|
-
- **Added** Initial release — full-featured tiptap-based rich text editing with toolbar, mentions, emoji, image, alignment
|
|
80
|
-
|
|
81
|
-
### v0.1.1
|
|
82
|
-
- **Fixed** Added content sync effect so editor updates when `content` prop changes externally
|
|
1
|
+
# RichTextEditor
|
|
2
|
+
|
|
3
|
+
- Import: @devalok/shilp-sutra/composed/rich-text-editor
|
|
4
|
+
- Server-safe: No
|
|
5
|
+
- Category: composed
|
|
6
|
+
|
|
7
|
+
Exports: RichTextEditor, RichTextViewer
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
### RichTextEditor
|
|
12
|
+
content: string (HTML string)
|
|
13
|
+
placeholder: string (default: "Start writing...")
|
|
14
|
+
onChange: (html: string) => void
|
|
15
|
+
className: string
|
|
16
|
+
editable: boolean (default: true)
|
|
17
|
+
onImageUpload?: (file: File) => Promise<string> — return URL. If omitted, images paste as base64
|
|
18
|
+
onFileUpload?: (file: File) => Promise<{ url: string; name: string; size: number }> — enables file attachments
|
|
19
|
+
mentions?: MentionItem[] — static list for @mention autocomplete
|
|
20
|
+
onMentionSearch?: (query: string) => Promise<MentionItem[]> — async search, takes precedence over static mentions
|
|
21
|
+
toolbar?: ToolbarItem[] — whitelist of toolbar items to show. Omit to show all.
|
|
22
|
+
onMentionSelect?: (item: MentionItem) => void — called when a mention is selected
|
|
23
|
+
|
|
24
|
+
ToolbarItem: 'bold' | 'italic' | 'underline' | 'strike' | 'highlight' | 'h2' | 'h3' | 'blockquote' | 'bulletList' | 'orderedList' | 'taskList' | 'codeBlock' | 'link' | 'image' | 'file' | 'hr' | 'alignLeft' | 'alignCenter' | 'alignRight' | 'emoji' | 'undo' | 'redo'
|
|
25
|
+
|
|
26
|
+
MentionItem: { id: string; label: string; avatar?: string }
|
|
27
|
+
|
|
28
|
+
### RichTextViewer
|
|
29
|
+
content: string (REQUIRED, HTML string)
|
|
30
|
+
className: string
|
|
31
|
+
|
|
32
|
+
## Defaults
|
|
33
|
+
RichTextEditor: placeholder="Start writing...", editable=true
|
|
34
|
+
|
|
35
|
+
## Example
|
|
36
|
+
```jsx
|
|
37
|
+
<RichTextEditor content={html} onChange={setHtml} placeholder="Write your message..." />
|
|
38
|
+
|
|
39
|
+
<RichTextEditor
|
|
40
|
+
content={html}
|
|
41
|
+
onChange={setHtml}
|
|
42
|
+
mentions={[{ id: '1', label: 'Aarav' }]}
|
|
43
|
+
onImageUpload={async (file) => uploadAndReturnUrl(file)}
|
|
44
|
+
onFileUpload={async (file) => ({ url: uploadUrl, name: file.name, size: file.size })}
|
|
45
|
+
/>
|
|
46
|
+
|
|
47
|
+
<RichTextViewer content={savedHtml} />
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Gotchas
|
|
51
|
+
- Tiptap is bundled — no need to install `@tiptap/*` packages separately
|
|
52
|
+
- Emoji picker requires `@emoji-mart/react` + `@emoji-mart/data` peers
|
|
53
|
+
- Images without `onImageUpload` are stored as base64 in HTML — large images bloat content
|
|
54
|
+
- Mention rendering in viewer always works (no mention props needed, just the HTML)
|
|
55
|
+
- Features: bold, italic, underline, strikethrough, highlight, headings, blockquote, lists, task lists, code, links, images, file attachments, mentions, emoji, text alignment, horizontal rule
|
|
56
|
+
|
|
57
|
+
## Changes
|
|
58
|
+
### v0.33.0
|
|
59
|
+
- **Added** `emojiSet` prop — `EmojiSet` type for consistent emoji art style rendering
|
|
60
|
+
- **Changed** TipTap v2 → v3 upgrade (useEditorState, immediatelyRender: false for SSR, ListKit)
|
|
61
|
+
- **Added** EmojiNode + createEmojiSuggestion(set) registered internally
|
|
62
|
+
|
|
63
|
+
### v0.30.0
|
|
64
|
+
- **Added** `toolbar` prop — whitelist of `ToolbarItem` names to control which toolbar buttons appear. Dividers render only between groups that have visible items. `ToolbarItem` type exported from barrel.
|
|
65
|
+
|
|
66
|
+
### v0.18.0
|
|
67
|
+
- **Fixed** Use ref to track internal changes, prevent update loop
|
|
68
|
+
|
|
69
|
+
### v0.9.0
|
|
70
|
+
- **Changed** All `@tiptap/*` packages moved from peerDependencies to bundled build-time dependencies — consumers no longer need to install tiptap separately
|
|
71
|
+
|
|
72
|
+
### v0.8.0
|
|
73
|
+
- **Fixed** Emoji picker now renders above the editor (not clipped by overflow)
|
|
74
|
+
- **Fixed** Link/image URL injection prevented via protocol validation
|
|
75
|
+
- **Fixed** Escape key in emoji picker no longer closes parent dialogs
|
|
76
|
+
- **Fixed** Tiptap peer deps tightened to `>=2.27.2 <3.0.0`
|
|
77
|
+
|
|
78
|
+
### v0.7.0
|
|
79
|
+
- **Added** Initial release — full-featured tiptap-based rich text editing with toolbar, mentions, emoji, image, alignment
|
|
80
|
+
|
|
81
|
+
### v0.1.1
|
|
82
|
+
- **Fixed** Added content sync effect so editor updates when `content` prop changes externally
|