@fastsprout/reacd-shadcn 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +28 -2
- package/THIRD_PARTY_NOTICES.md +21 -0
- package/dist/accordion/accordion.adapter.d.ts +2 -0
- package/dist/accordion/accordion.adapter.js +10 -0
- package/dist/action-menu/menu-content.d.ts +5 -0
- package/dist/action-menu/menu-content.js +15 -0
- package/dist/action-menu/menu-items.d.ts +5 -0
- package/dist/action-menu/menu-items.js +46 -0
- package/dist/action-menu/menu-surface.d.ts +7 -0
- package/dist/action-menu/menu-surface.js +15 -0
- package/dist/action-menu/use-menu-frame.d.ts +8 -0
- package/dist/action-menu/use-menu-frame.js +24 -0
- package/dist/alert/alert.adapter.d.ts +2 -0
- package/dist/alert/alert.adapter.js +13 -0
- package/dist/app/app.adapter.d.ts +2 -0
- package/dist/app/app.adapter.js +7 -0
- package/dist/auth-form/auth-form.adapter.d.ts +2 -0
- package/dist/auth-form/auth-form.adapter.js +21 -0
- package/dist/avatar/avatar.adapter.d.ts +2 -0
- package/dist/avatar/avatar.adapter.js +8 -0
- package/dist/avatar-group/avatar-group.adapter.d.ts +2 -0
- package/dist/avatar-group/avatar-group.adapter.js +9 -0
- package/dist/avatar-group/overflow.adapter.d.ts +5 -0
- package/dist/avatar-group/overflow.adapter.js +5 -0
- package/dist/badge/badge.adapter.d.ts +2 -0
- package/dist/badge/badge.adapter.js +9 -0
- package/dist/banner/banner.adapter.d.ts +2 -0
- package/dist/banner/banner.adapter.js +12 -0
- package/dist/blog-post/blog-post.adapter.d.ts +3 -0
- package/dist/blog-post/blog-post.adapter.js +5 -0
- package/dist/blog-posts/blog-posts.adapter.d.ts +3 -0
- package/dist/blog-posts/blog-posts.adapter.js +7 -0
- package/dist/breadcrumb/breadcrumb.adapter.d.ts +2 -0
- package/dist/breadcrumb/breadcrumb.adapter.js +13 -0
- package/dist/button/button.adapter.d.ts +2 -0
- package/dist/button/button.adapter.js +8 -0
- package/dist/calendar/calendar-date.d.ts +7 -0
- package/dist/calendar/calendar-date.js +24 -0
- package/dist/calendar/calendar-day-button.d.ts +2 -0
- package/dist/calendar/calendar-day-button.js +9 -0
- package/dist/calendar/calendar-form-bridge.d.ts +6 -0
- package/dist/calendar/calendar-form-bridge.js +11 -0
- package/dist/calendar/calendar-localization.d.ts +15 -0
- package/dist/calendar/calendar-localization.js +28 -0
- package/dist/calendar/calendar.adapter.d.ts +2 -0
- package/dist/calendar/calendar.adapter.js +47 -0
- package/dist/card/card.adapter.d.ts +2 -0
- package/dist/card/card.adapter.js +13 -0
- package/dist/carousel/carousel-panel.d.ts +7 -0
- package/dist/carousel/carousel-panel.js +8 -0
- package/dist/carousel/carousel.adapter.d.ts +2 -0
- package/dist/carousel/carousel.adapter.js +43 -0
- package/dist/carousel/focus-boundary.d.ts +16 -0
- package/dist/carousel/focus-boundary.js +19 -0
- package/dist/changelog-version/changelog-version.adapter.d.ts +3 -0
- package/dist/changelog-version/changelog-version.adapter.js +5 -0
- package/dist/changelog-versions/changelog-versions.adapter.d.ts +3 -0
- package/dist/changelog-versions/changelog-versions.adapter.js +8 -0
- package/dist/chart/cartesian.d.ts +5 -0
- package/dist/chart/cartesian.js +15 -0
- package/dist/chart/chart-graphic.d.ts +2 -0
- package/dist/chart/chart-graphic.js +14 -0
- package/dist/chart/chart-table.d.ts +2 -0
- package/dist/chart/chart-table.js +6 -0
- package/dist/chart/chart.adapter.d.ts +2 -0
- package/dist/chart/chart.adapter.js +17 -0
- package/dist/chart/legend.d.ts +3 -0
- package/dist/chart/legend.js +14 -0
- package/dist/chart/patterns.d.ts +9 -0
- package/dist/chart/patterns.js +8 -0
- package/dist/chat-attachment/chat-attachment.adapter.d.ts +2 -0
- package/dist/chat-attachment/chat-attachment.adapter.js +12 -0
- package/dist/chat-disclosure/chat-disclosure.d.ts +9 -0
- package/dist/chat-disclosure/chat-disclosure.js +10 -0
- package/dist/chat-message/chat-message.adapter.d.ts +2 -0
- package/dist/chat-message/chat-message.adapter.js +12 -0
- package/dist/chat-messages/chat-messages.adapter.d.ts +2 -0
- package/dist/chat-messages/chat-messages.adapter.js +13 -0
- package/dist/chat-messages/use-follow-latest.d.ts +6 -0
- package/dist/chat-messages/use-follow-latest.js +33 -0
- package/dist/chat-palette/chat-palette.adapter.d.ts +2 -0
- package/dist/chat-palette/chat-palette.adapter.js +4 -0
- package/dist/chat-prompt/chat-prompt.adapter.d.ts +2 -0
- package/dist/chat-prompt/chat-prompt.adapter.js +30 -0
- package/dist/chat-prompt/use-prompt-controls.d.ts +22 -0
- package/dist/chat-prompt/use-prompt-controls.js +69 -0
- package/dist/chat-prompt/use-prompt-escape.d.ts +5 -0
- package/dist/chat-prompt/use-prompt-escape.js +39 -0
- package/dist/chat-prompt-submit/chat-prompt-submit.adapter.d.ts +2 -0
- package/dist/chat-prompt-submit/chat-prompt-submit.adapter.js +14 -0
- package/dist/chat-prompt-submit/prompt-action.d.ts +12 -0
- package/dist/chat-prompt-submit/prompt-action.js +45 -0
- package/dist/chat-reasoning/chat-reasoning.adapter.d.ts +2 -0
- package/dist/chat-reasoning/chat-reasoning.adapter.js +15 -0
- package/dist/chat-reasoning/use-reasoning-disclosure.d.ts +10 -0
- package/dist/chat-reasoning/use-reasoning-disclosure.js +23 -0
- package/dist/chat-shimmer/chat-shimmer.adapter.d.ts +2 -0
- package/dist/chat-shimmer/chat-shimmer.adapter.js +5 -0
- package/dist/chat-tool/chat-tool.adapter.d.ts +2 -0
- package/dist/chat-tool/chat-tool.adapter.js +7 -0
- package/dist/checkbox/checkbox.adapter.d.ts +2 -0
- package/dist/checkbox/checkbox.adapter.js +27 -0
- package/dist/checkbox-group/checkbox-group.adapter.d.ts +2 -0
- package/dist/checkbox-group/checkbox-group.adapter.js +18 -0
- package/dist/chip/chip.adapter.d.ts +2 -0
- package/dist/chip/chip.adapter.js +12 -0
- package/dist/code-editor/code-editor.adapter.d.ts +2 -0
- package/dist/code-editor/code-editor.adapter.js +9 -0
- package/dist/collapsible/collapsible.adapter.d.ts +2 -0
- package/dist/collapsible/collapsible.adapter.js +11 -0
- package/dist/color-mode-avatar/color-mode-avatar.adapter.d.ts +2 -0
- package/dist/color-mode-avatar/color-mode-avatar.adapter.js +6 -0
- package/dist/color-mode-button/color-mode-button.adapter.d.ts +2 -0
- package/dist/color-mode-button/color-mode-button.adapter.js +11 -0
- package/dist/color-mode-image/color-mode-image.adapter.d.ts +2 -0
- package/dist/color-mode-image/color-mode-image.adapter.js +6 -0
- package/dist/color-mode-image/mode-image.d.ts +4 -0
- package/dist/color-mode-image/mode-image.js +8 -0
- package/dist/color-mode-select/color-mode-select.adapter.d.ts +2 -0
- package/dist/color-mode-select/color-mode-select.adapter.js +16 -0
- package/dist/color-mode-switch/color-mode-switch.adapter.d.ts +2 -0
- package/dist/color-mode-switch/color-mode-switch.adapter.js +5 -0
- package/dist/color-picker/color-hex.d.ts +11 -0
- package/dist/color-picker/color-hex.js +57 -0
- package/dist/color-picker/color-picker.adapter.d.ts +2 -0
- package/dist/color-picker/color-picker.adapter.js +20 -0
- package/dist/color-picker/use-color-model.d.ts +6 -0
- package/dist/color-picker/use-color-model.js +18 -0
- package/dist/command-palette/command-palette.adapter.d.ts +2 -0
- package/dist/command-palette/command-palette.adapter.js +44 -0
- package/dist/container/container.adapter.d.ts +2 -0
- package/dist/container/container.adapter.js +4 -0
- package/dist/content-navigation/content-navigation.adapter.d.ts +2 -0
- package/dist/content-navigation/content-navigation.adapter.js +10 -0
- package/dist/content-search/content-search.adapter.d.ts +2 -0
- package/dist/content-search/content-search.adapter.js +27 -0
- package/dist/content-search-button/content-search-button.adapter.d.ts +2 -0
- package/dist/content-search-button/content-search-button.adapter.js +6 -0
- package/dist/content-surround/content-surround.adapter.d.ts +2 -0
- package/dist/content-surround/content-surround.adapter.js +14 -0
- package/dist/content-toc/content-toc.adapter.d.ts +2 -0
- package/dist/content-toc/content-toc.adapter.js +10 -0
- package/dist/context-menu/context-menu.adapter.d.ts +2 -0
- package/dist/context-menu/context-menu.adapter.js +13 -0
- package/dist/context-menu/keyboard-trigger.d.ts +2 -0
- package/dist/context-menu/keyboard-trigger.js +13 -0
- package/dist/dashboard-group/dashboard-group.adapter.d.ts +3 -0
- package/dist/dashboard-group/dashboard-group.adapter.js +54 -0
- package/dist/dashboard-navbar/dashboard-navbar.adapter.d.ts +2 -0
- package/dist/dashboard-navbar/dashboard-navbar.adapter.js +12 -0
- package/dist/dashboard-panel/dashboard-panel.adapter.d.ts +2 -0
- package/dist/dashboard-panel/dashboard-panel.adapter.js +18 -0
- package/dist/dashboard-resize-handle/dashboard-resize-handle.adapter.d.ts +2 -0
- package/dist/dashboard-resize-handle/dashboard-resize-handle.adapter.js +46 -0
- package/dist/dashboard-search/dashboard-search.adapter.d.ts +2 -0
- package/dist/dashboard-search/dashboard-search.adapter.js +24 -0
- package/dist/dashboard-search-button/dashboard-search-button.adapter.d.ts +2 -0
- package/dist/dashboard-search-button/dashboard-search-button.adapter.js +6 -0
- package/dist/dashboard-sidebar/dashboard-sidebar.adapter.d.ts +2 -0
- package/dist/dashboard-sidebar/dashboard-sidebar.adapter.js +19 -0
- package/dist/dashboard-sidebar-collapse/dashboard-sidebar-collapse.adapter.d.ts +2 -0
- package/dist/dashboard-sidebar-collapse/dashboard-sidebar-collapse.adapter.js +22 -0
- package/dist/dashboard-sidebar-toggle/dashboard-sidebar-toggle.adapter.d.ts +2 -0
- package/dist/dashboard-sidebar-toggle/dashboard-sidebar-toggle.adapter.js +22 -0
- package/dist/dashboard-toolbar/dashboard-toolbar.adapter.d.ts +2 -0
- package/dist/dashboard-toolbar/dashboard-toolbar.adapter.js +4 -0
- package/dist/data-table/data-table.adapter.d.ts +2 -0
- package/dist/data-table/data-table.adapter.js +28 -0
- package/dist/data-table/filters.adapter.d.ts +8 -0
- package/dist/data-table/filters.adapter.js +40 -0
- package/dist/data-table/pagination.adapter.d.ts +2 -0
- package/dist/data-table/pagination.adapter.js +21 -0
- package/dist/divider/divider.adapter.d.ts +1 -0
- package/dist/divider/divider.adapter.js +5 -0
- package/dist/drawer/drawer.adapter.d.ts +2 -0
- package/dist/drawer/drawer.adapter.js +14 -0
- package/dist/dropdown-menu/dropdown-menu.adapter.d.ts +2 -0
- package/dist/dropdown-menu/dropdown-menu.adapter.js +14 -0
- package/dist/editor/drag-session.d.ts +7 -0
- package/dist/editor/drag-session.js +41 -0
- package/dist/editor/editor.adapter.d.ts +2 -0
- package/dist/editor/editor.adapter.js +21 -0
- package/dist/editor/publish-edit.d.ts +3 -0
- package/dist/editor/publish-edit.js +12 -0
- package/dist/editor/use-editor-port.d.ts +5 -0
- package/dist/editor/use-editor-port.js +40 -0
- package/dist/editor/use-editor-session.d.ts +14 -0
- package/dist/editor/use-editor-session.js +198 -0
- package/dist/editor-conversion/attribute.d.ts +3 -0
- package/dist/editor-conversion/attribute.js +3 -0
- package/dist/editor-conversion/budget.d.ts +2 -0
- package/dist/editor-conversion/budget.js +61 -0
- package/dist/editor-conversion/from-sdk-block.d.ts +5 -0
- package/dist/editor-conversion/from-sdk-block.js +73 -0
- package/dist/editor-conversion/from-sdk-inline.d.ts +3 -0
- package/dist/editor-conversion/from-sdk-inline.js +57 -0
- package/dist/editor-conversion/from-sdk.d.ts +4 -0
- package/dist/editor-conversion/from-sdk.js +35 -0
- package/dist/editor-conversion/id-allocator.d.ts +2 -0
- package/dist/editor-conversion/id-allocator.js +29 -0
- package/dist/editor-conversion/projection-weight.d.ts +8 -0
- package/dist/editor-conversion/projection-weight.js +124 -0
- package/dist/editor-conversion/text-chunks.d.ts +6 -0
- package/dist/editor-conversion/text-chunks.js +18 -0
- package/dist/editor-conversion/to-sdk.d.ts +3 -0
- package/dist/editor-conversion/to-sdk.js +58 -0
- package/dist/editor-drag-handle/editor-drag-handle.adapter.d.ts +2 -0
- package/dist/editor-drag-handle/editor-drag-handle.adapter.js +54 -0
- package/dist/editor-drag-handle/use-drag-session.d.ts +9 -0
- package/dist/editor-drag-handle/use-drag-session.js +22 -0
- package/dist/editor-emoji-menu/editor-emoji-menu.adapter.d.ts +2 -0
- package/dist/editor-emoji-menu/editor-emoji-menu.adapter.js +9 -0
- package/dist/editor-mention-menu/editor-mention-menu.adapter.d.ts +2 -0
- package/dist/editor-mention-menu/editor-mention-menu.adapter.js +17 -0
- package/dist/editor-menu/lookup-controller.d.ts +24 -0
- package/dist/editor-menu/lookup-controller.js +83 -0
- package/dist/editor-menu/menu-panel.d.ts +10 -0
- package/dist/editor-menu/menu-panel.js +17 -0
- package/dist/editor-menu/menu-plugin.d.ts +3 -0
- package/dist/editor-menu/menu-plugin.js +190 -0
- package/dist/editor-menu/menu-port.d.ts +3 -0
- package/dist/editor-menu/menu-port.js +27 -0
- package/dist/editor-menu/menu-store.d.ts +20 -0
- package/dist/editor-menu/menu-store.js +92 -0
- package/dist/editor-menu/use-editor-menu.d.ts +9 -0
- package/dist/editor-menu/use-editor-menu.js +21 -0
- package/dist/editor-sdk/apply-paste.d.ts +3 -0
- package/dist/editor-sdk/apply-paste.js +12 -0
- package/dist/editor-sdk/atom-data.d.ts +7 -0
- package/dist/editor-sdk/atom-data.js +41 -0
- package/dist/editor-sdk/atoms.d.ts +3 -0
- package/dist/editor-sdk/atoms.js +25 -0
- package/dist/editor-sdk/block-types.d.ts +1 -0
- package/dist/editor-sdk/block-types.js +10 -0
- package/dist/editor-sdk/command-chain.d.ts +3 -0
- package/dist/editor-sdk/command-chain.js +25 -0
- package/dist/editor-sdk/commands.d.ts +5 -0
- package/dist/editor-sdk/commands.js +38 -0
- package/dist/editor-sdk/controlled-selection.d.ts +2 -0
- package/dist/editor-sdk/controlled-selection.js +8 -0
- package/dist/editor-sdk/extensions.d.ts +2 -0
- package/dist/editor-sdk/extensions.js +21 -0
- package/dist/editor-sdk/identity-plugin.d.ts +18 -0
- package/dist/editor-sdk/identity-plugin.js +107 -0
- package/dist/editor-sdk/identity.d.ts +3 -0
- package/dist/editor-sdk/identity.js +28 -0
- package/dist/editor-sdk/plain-paste.d.ts +3 -0
- package/dist/editor-sdk/plain-paste.js +66 -0
- package/dist/editor-sdk/resources.d.ts +5 -0
- package/dist/editor-sdk/resources.js +14 -0
- package/dist/editor-sdk/select-block.d.ts +2 -0
- package/dist/editor-sdk/select-block.js +31 -0
- package/dist/editor-sdk/selection-mapping.d.ts +9 -0
- package/dist/editor-sdk/selection-mapping.js +92 -0
- package/dist/editor-sdk/structural-selection.d.ts +4 -0
- package/dist/editor-sdk/structural-selection.js +21 -0
- package/dist/editor-suggestion-menu/editor-suggestion-menu.adapter.d.ts +2 -0
- package/dist/editor-suggestion-menu/editor-suggestion-menu.adapter.js +13 -0
- package/dist/editor-toolbar/editor-toolbar.adapter.d.ts +2 -0
- package/dist/editor-toolbar/editor-toolbar.adapter.js +38 -0
- package/dist/element/variants.d.ts +5 -0
- package/dist/element/variants.js +5 -0
- package/dist/empty/empty.adapter.d.ts +2 -0
- package/dist/empty/empty.adapter.js +10 -0
- package/dist/error/error.adapter.d.ts +2 -0
- package/dist/error/error.adapter.js +9 -0
- package/dist/field-group/field-group.adapter.d.ts +2 -0
- package/dist/field-group/field-group.adapter.js +5 -0
- package/dist/file-upload/file-upload.adapter.d.ts +2 -0
- package/dist/file-upload/file-upload.adapter.js +60 -0
- package/dist/file-upload/intake-validation.d.ts +8 -0
- package/dist/file-upload/intake-validation.js +48 -0
- package/dist/file-upload/intake.d.ts +36 -0
- package/dist/file-upload/intake.js +112 -0
- package/dist/file-upload/read-file.d.ts +5 -0
- package/dist/file-upload/read-file.js +32 -0
- package/dist/footer/footer.adapter.d.ts +2 -0
- package/dist/footer/footer.adapter.js +4 -0
- package/dist/footer-columns/footer-columns.adapter.d.ts +2 -0
- package/dist/footer-columns/footer-columns.adapter.js +8 -0
- package/dist/form-field/focus-control.d.ts +1 -0
- package/dist/form-field/focus-control.js +21 -0
- package/dist/form-field/form-field.adapter.d.ts +2 -0
- package/dist/form-field/form-field.adapter.js +22 -0
- package/dist/form-menu-shared/request.d.ts +4 -0
- package/dist/form-menu-shared/request.js +14 -0
- package/dist/grid/grid.adapter.d.ts +2 -0
- package/dist/grid/grid.adapter.js +5 -0
- package/dist/h-stack/h-stack.adapter.d.ts +2 -0
- package/dist/h-stack/h-stack.adapter.js +5 -0
- package/dist/header/header-menu.d.ts +7 -0
- package/dist/header/header-menu.js +25 -0
- package/dist/header/header.adapter.d.ts +2 -0
- package/dist/header/header.adapter.js +5 -0
- package/dist/icon/icon-map.d.ts +16 -0
- package/dist/icon/icon-map.js +17 -0
- package/dist/icon/icon.adapter.d.ts +2 -0
- package/dist/icon/icon.adapter.js +7 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/input/input.adapter.d.ts +2 -0
- package/dist/input/input.adapter.js +34 -0
- package/dist/input/validation-message.d.ts +1 -0
- package/dist/input/validation-message.js +13 -0
- package/dist/input-date/date-control.d.ts +16 -0
- package/dist/input-date/date-control.js +35 -0
- package/dist/input-date/input-date.adapter.d.ts +2 -0
- package/dist/input-date/input-date.adapter.js +36 -0
- package/dist/input-menu/input-menu-form.d.ts +7 -0
- package/dist/input-menu/input-menu-form.js +8 -0
- package/dist/input-menu/input-menu-popup.d.ts +8 -0
- package/dist/input-menu/input-menu-popup.js +13 -0
- package/dist/input-menu/input-menu.adapter.d.ts +2 -0
- package/dist/input-menu/input-menu.adapter.js +74 -0
- package/dist/input-menu/use-input-menu.d.ts +26 -0
- package/dist/input-menu/use-input-menu.js +92 -0
- package/dist/input-number/input-number.adapter.d.ts +2 -0
- package/dist/input-number/input-number.adapter.js +13 -0
- package/dist/input-rating/input-rating.adapter.d.ts +2 -0
- package/dist/input-rating/input-rating.adapter.js +33 -0
- package/dist/input-rating/rating-stars.d.ts +4 -0
- package/dist/input-rating/rating-stars.js +9 -0
- package/dist/input-tags/input-tags.adapter.d.ts +2 -0
- package/dist/input-tags/input-tags.adapter.js +47 -0
- package/dist/input-tags/use-tag-draft.d.ts +9 -0
- package/dist/input-tags/use-tag-draft.js +43 -0
- package/dist/input-time/anchored-time.d.ts +1 -0
- package/dist/input-time/anchored-time.js +5 -0
- package/dist/input-time/draft-validation.d.ts +1 -0
- package/dist/input-time/draft-validation.js +1 -0
- package/dist/input-time/focus-draft.d.ts +1 -0
- package/dist/input-time/focus-draft.js +1 -0
- package/dist/input-time/input-time.adapter.d.ts +2 -0
- package/dist/input-time/input-time.adapter.js +32 -0
- package/dist/input-time/time-control.d.ts +15 -0
- package/dist/input-time/time-control.js +37 -0
- package/dist/input-time/use-time-change.d.ts +10 -0
- package/dist/input-time/use-time-change.js +4 -0
- package/dist/kbd/kbd-key.adapter.d.ts +5 -0
- package/dist/kbd/kbd-key.adapter.js +5 -0
- package/dist/kbd/kbd.adapter.d.ts +2 -0
- package/dist/kbd/kbd.adapter.js +8 -0
- package/dist/listbox/clear-focus.d.ts +1 -0
- package/dist/listbox/clear-focus.js +8 -0
- package/dist/listbox/form-bridge.d.ts +14 -0
- package/dist/listbox/form-bridge.js +34 -0
- package/dist/listbox/listbox.adapter.d.ts +2 -0
- package/dist/listbox/listbox.adapter.js +79 -0
- package/dist/listbox/native-semantics.d.ts +9 -0
- package/dist/listbox/native-semantics.js +33 -0
- package/dist/listbox/selection.d.ts +4 -0
- package/dist/listbox/selection.js +31 -0
- package/dist/listbox/use-listbox-request.d.ts +10 -0
- package/dist/listbox/use-listbox-request.js +73 -0
- package/dist/locale-select/locale-select.adapter.d.ts +2 -0
- package/dist/locale-select/locale-select.adapter.js +15 -0
- package/dist/main/main.adapter.d.ts +2 -0
- package/dist/main/main.adapter.js +7 -0
- package/dist/marquee/marquee.adapter.d.ts +2 -0
- package/dist/marquee/marquee.adapter.js +23 -0
- package/dist/modal/modal.adapter.d.ts +2 -0
- package/dist/modal/modal.adapter.js +30 -0
- package/dist/navigation/navigation.adapter.d.ts +2 -0
- package/dist/navigation/navigation.adapter.js +5 -0
- package/dist/navigation-menu/menu-target.d.ts +4 -0
- package/dist/navigation-menu/menu-target.js +13 -0
- package/dist/navigation-menu/navigation-menu.adapter.d.ts +2 -0
- package/dist/navigation-menu/navigation-menu.adapter.js +16 -0
- package/dist/page-anchors/page-anchors.adapter.d.ts +3 -0
- package/dist/page-anchors/page-anchors.adapter.js +5 -0
- package/dist/page-aside/page-aside.adapter.d.ts +2 -0
- package/dist/page-aside/page-aside.adapter.js +6 -0
- package/dist/page-body/page-body.adapter.d.ts +2 -0
- package/dist/page-body/page-body.adapter.js +4 -0
- package/dist/page-card/page-card.adapter.d.ts +3 -0
- package/dist/page-card/page-card.adapter.js +5 -0
- package/dist/page-columns/page-columns.adapter.d.ts +2 -0
- package/dist/page-columns/page-columns.adapter.js +5 -0
- package/dist/page-cta/page-cta.adapter.d.ts +3 -0
- package/dist/page-cta/page-cta.adapter.js +5 -0
- package/dist/page-feature/page-feature.adapter.d.ts +3 -0
- package/dist/page-feature/page-feature.adapter.js +6 -0
- package/dist/page-grid/page-grid.adapter.d.ts +2 -0
- package/dist/page-grid/page-grid.adapter.js +4 -0
- package/dist/page-header/page-header.adapter.d.ts +3 -0
- package/dist/page-header/page-header.adapter.js +5 -0
- package/dist/page-hero/page-hero.adapter.d.ts +3 -0
- package/dist/page-hero/page-hero.adapter.js +5 -0
- package/dist/page-links/page-links.adapter.d.ts +3 -0
- package/dist/page-links/page-links.adapter.js +5 -0
- package/dist/page-list/page-list.adapter.d.ts +2 -0
- package/dist/page-list/page-list.adapter.js +6 -0
- package/dist/page-logos/page-logos.adapter.d.ts +2 -0
- package/dist/page-logos/page-logos.adapter.js +11 -0
- package/dist/page-section/page-section.adapter.d.ts +3 -0
- package/dist/page-section/page-section.adapter.js +5 -0
- package/dist/pagination/pagination-control.d.ts +13 -0
- package/dist/pagination/pagination-control.js +31 -0
- package/dist/pagination/pagination.adapter.d.ts +2 -0
- package/dist/pagination/pagination.adapter.js +23 -0
- package/dist/panel/use-panel-frame.d.ts +15 -0
- package/dist/panel/use-panel-frame.js +36 -0
- package/dist/pin-input/pin-input.adapter.d.ts +2 -0
- package/dist/pin-input/pin-input.adapter.js +18 -0
- package/dist/pin-input/pin-slots.d.ts +6 -0
- package/dist/pin-input/pin-slots.js +9 -0
- package/dist/popover/popover.adapter.d.ts +2 -0
- package/dist/popover/popover.adapter.js +55 -0
- package/dist/pricing-plan/pricing-plan.adapter.d.ts +3 -0
- package/dist/pricing-plan/pricing-plan.adapter.js +15 -0
- package/dist/pricing-plans/pricing-plans.adapter.d.ts +3 -0
- package/dist/pricing-plans/pricing-plans.adapter.js +8 -0
- package/dist/pricing-table/pricing-table.adapter.d.ts +3 -0
- package/dist/pricing-table/pricing-table.adapter.js +9 -0
- package/dist/progress/progress.adapter.d.ts +2 -0
- package/dist/progress/progress.adapter.js +10 -0
- package/dist/progress-group/progress-group.adapter.d.ts +2 -0
- package/dist/progress-group/progress-group.adapter.js +9 -0
- package/dist/radio-group/radio-group.adapter.d.ts +2 -0
- package/dist/radio-group/radio-group.adapter.js +14 -0
- package/dist/registry/action-menus.d.ts +4 -0
- package/dist/registry/action-menus.js +9 -0
- package/dist/registry/auth-form.d.ts +3 -0
- package/dist/registry/auth-form.js +6 -0
- package/dist/registry/calendar.d.ts +3 -0
- package/dist/registry/calendar.js +6 -0
- package/dist/registry/carousel.d.ts +3 -0
- package/dist/registry/carousel.js +6 -0
- package/dist/registry/chart.d.ts +3 -0
- package/dist/registry/chart.js +4 -0
- package/dist/registry/chat-composer.d.ts +5 -0
- package/dist/registry/chat-composer.js +12 -0
- package/dist/registry/chat-feedback.d.ts +5 -0
- package/dist/registry/chat-feedback.js +12 -0
- package/dist/registry/chat.d.ts +5 -0
- package/dist/registry/chat.js +12 -0
- package/dist/registry/color-mode.d.ts +7 -0
- package/dist/registry/color-mode.js +18 -0
- package/dist/registry/color-picker.d.ts +3 -0
- package/dist/registry/color-picker.js +6 -0
- package/dist/registry/command-palette.d.ts +3 -0
- package/dist/registry/command-palette.js +6 -0
- package/dist/registry/content-outline.d.ts +4 -0
- package/dist/registry/content-outline.js +9 -0
- package/dist/registry/content-search.d.ts +4 -0
- package/dist/registry/content-search.js +9 -0
- package/dist/registry/content.d.ts +26 -0
- package/dist/registry/content.js +75 -0
- package/dist/registry/dashboard.d.ts +12 -0
- package/dist/registry/dashboard.js +33 -0
- package/dist/registry/edge-panels.d.ts +4 -0
- package/dist/registry/edge-panels.js +9 -0
- package/dist/registry/editor-drag-handle.d.ts +3 -0
- package/dist/registry/editor-drag-handle.js +6 -0
- package/dist/registry/editor-menus.d.ts +5 -0
- package/dist/registry/editor-menus.js +12 -0
- package/dist/registry/editor.d.ts +4 -0
- package/dist/registry/editor.js +9 -0
- package/dist/registry/editorial.d.ts +6 -0
- package/dist/registry/editorial.js +15 -0
- package/dist/registry/element.d.ts +3 -0
- package/dist/registry/element.js +4 -0
- package/dist/registry/feedback.d.ts +8 -0
- package/dist/registry/feedback.js +21 -0
- package/dist/registry/fields.d.ts +24 -0
- package/dist/registry/fields.js +69 -0
- package/dist/registry/file-upload.d.ts +3 -0
- package/dist/registry/file-upload.js +6 -0
- package/dist/registry/listbox.d.ts +3 -0
- package/dist/registry/listbox.js +6 -0
- package/dist/registry/marquee.d.ts +3 -0
- package/dist/registry/marquee.js +6 -0
- package/dist/registry/navigation-composition.d.ts +5 -0
- package/dist/registry/navigation-composition.js +12 -0
- package/dist/registry/page-composition.d.ts +7 -0
- package/dist/registry/page-composition.js +18 -0
- package/dist/registry/page-logos.d.ts +3 -0
- package/dist/registry/page-logos.js +6 -0
- package/dist/registry/page-navigation.d.ts +5 -0
- package/dist/registry/page-navigation.js +12 -0
- package/dist/registry/page-presentation.d.ts +7 -0
- package/dist/registry/page-presentation.js +18 -0
- package/dist/registry/pricing.d.ts +5 -0
- package/dist/registry/pricing.js +12 -0
- package/dist/registry/shells.d.ts +10 -0
- package/dist/registry/shells.js +27 -0
- package/dist/registry/sidebar-splitter.d.ts +4 -0
- package/dist/registry/sidebar-splitter.js +9 -0
- package/dist/registry/structure.d.ts +10 -0
- package/dist/registry/structure.js +27 -0
- package/dist/registry/toast.d.ts +3 -0
- package/dist/registry/toast.js +4 -0
- package/dist/scroll-area/scroll-area.adapter.d.ts +2 -0
- package/dist/scroll-area/scroll-area.adapter.js +6 -0
- package/dist/select/display-text.d.ts +2 -0
- package/dist/select/display-text.js +18 -0
- package/dist/select/select-base-content.adapter.d.ts +6 -0
- package/dist/select/select-base-content.adapter.js +16 -0
- package/dist/select/select-content.adapter.d.ts +4 -0
- package/dist/select/select-content.adapter.js +11 -0
- package/dist/select/select-option.d.ts +5 -0
- package/dist/select/select-option.js +6 -0
- package/dist/select/select.adapter.d.ts +2 -0
- package/dist/select/select.adapter.js +47 -0
- package/dist/select/use-select-change.d.ts +2 -0
- package/dist/select/use-select-change.js +29 -0
- package/dist/select-menu/select-menu-form.d.ts +7 -0
- package/dist/select-menu/select-menu-form.js +14 -0
- package/dist/select-menu/select-menu-popup.d.ts +8 -0
- package/dist/select-menu/select-menu-popup.js +39 -0
- package/dist/select-menu/select-menu-root.d.ts +8 -0
- package/dist/select-menu/select-menu-root.js +34 -0
- package/dist/select-menu/select-menu.adapter.d.ts +2 -0
- package/dist/select-menu/select-menu.adapter.js +63 -0
- package/dist/select-menu/use-select-menu.d.ts +22 -0
- package/dist/select-menu/use-select-menu.js +111 -0
- package/dist/separator/separator.adapter.d.ts +2 -0
- package/dist/separator/separator.adapter.js +6 -0
- package/dist/shadcn.adapter.d.ts +2 -0
- package/dist/shadcn.adapter.js +102 -0
- package/dist/sidebar/sidebar.adapter.d.ts +2 -0
- package/dist/sidebar/sidebar.adapter.js +63 -0
- package/dist/skeleton/skeleton.adapter.d.ts +2 -0
- package/dist/skeleton/skeleton.adapter.js +8 -0
- package/dist/slideover/slideover.adapter.d.ts +2 -0
- package/dist/slideover/slideover.adapter.js +14 -0
- package/dist/slider/request-change.d.ts +2 -0
- package/dist/slider/request-change.js +34 -0
- package/dist/slider/slider-thumb.d.ts +7 -0
- package/dist/slider/slider-thumb.js +18 -0
- package/dist/slider/slider.adapter.d.ts +2 -0
- package/dist/slider/slider.adapter.js +36 -0
- package/dist/splitter/splitter.adapter.d.ts +3 -0
- package/dist/splitter/splitter.adapter.js +50 -0
- package/dist/stepper/stepper.adapter.d.ts +2 -0
- package/dist/stepper/stepper.adapter.js +30 -0
- package/dist/styles-contract.d.ts +1 -0
- package/dist/styles-contract.js +1 -0
- package/dist/styles.css +2 -0
- package/dist/styles.d.ts +1 -0
- package/dist/styles.js +1 -0
- package/dist/submit-button/submit-button.adapter.d.ts +2 -0
- package/dist/submit-button/submit-button.adapter.js +11 -0
- package/dist/surface/surface.adapter.d.ts +2 -0
- package/dist/surface/surface.adapter.js +8 -0
- package/dist/switch/switch.adapter.d.ts +2 -0
- package/dist/switch/switch.adapter.js +26 -0
- package/dist/table/interactive-table.d.ts +2 -0
- package/dist/table/interactive-table.js +24 -0
- package/dist/table/table.adapter.d.ts +2 -0
- package/dist/table/table.adapter.js +14 -0
- package/dist/tabs/tabs.adapter.d.ts +2 -0
- package/dist/tabs/tabs.adapter.js +17 -0
- package/dist/temporal/draft-validity.d.ts +13 -0
- package/dist/temporal/draft-validity.js +18 -0
- package/dist/temporal/focus-incomplete-segment.d.ts +1 -0
- package/dist/temporal/focus-incomplete-segment.js +7 -0
- package/dist/temporal/range-reset-focus.d.ts +1 -0
- package/dist/temporal/range-reset-focus.js +16 -0
- package/dist/temporal/temporal-recovery.d.ts +6 -0
- package/dist/temporal/temporal-recovery.js +4 -0
- package/dist/temporal/use-range-reset.d.ts +6 -0
- package/dist/temporal/use-range-reset.js +55 -0
- package/dist/temporal/use-temporal-change.d.ts +10 -0
- package/dist/temporal/use-temporal-change.js +21 -0
- package/dist/text/text.adapter.d.ts +1 -0
- package/dist/text/text.adapter.js +1 -0
- package/dist/text-area/text-area.adapter.d.ts +2 -0
- package/dist/text-area/text-area.adapter.js +9 -0
- package/dist/textarea/textarea.adapter.d.ts +2 -0
- package/dist/textarea/textarea.adapter.js +40 -0
- package/dist/textarea/use-auto-rows.d.ts +2 -0
- package/dist/textarea/use-auto-rows.js +33 -0
- package/dist/theme/theme.adapter.d.ts +2 -0
- package/dist/theme/theme.adapter.js +23 -0
- package/dist/timeline/timeline.adapter.d.ts +2 -0
- package/dist/timeline/timeline.adapter.js +13 -0
- package/dist/toast/toast-data.d.ts +17 -0
- package/dist/toast/toast-data.js +1 -0
- package/dist/toast/toast-focus.d.ts +12 -0
- package/dist/toast/toast-focus.js +38 -0
- package/dist/toast/toast-provider.d.ts +4 -0
- package/dist/toast/toast-provider.js +11 -0
- package/dist/toast/toast-queue-context.d.ts +24 -0
- package/dist/toast/toast-queue-context.js +8 -0
- package/dist/toast/toast-queue.d.ts +12 -0
- package/dist/toast/toast-queue.js +29 -0
- package/dist/toast/toast-registration.d.ts +9 -0
- package/dist/toast/toast-registration.js +149 -0
- package/dist/toast/toast-viewport.d.ts +1 -0
- package/dist/toast/toast-viewport.js +36 -0
- package/dist/toast/toast.adapter.d.ts +2 -0
- package/dist/toast/toast.adapter.js +14 -0
- package/dist/toggle/toggle.adapter.d.ts +2 -0
- package/dist/toggle/toggle.adapter.js +8 -0
- package/dist/tooltip/tooltip.adapter.d.ts +2 -0
- package/dist/tooltip/tooltip.adapter.js +29 -0
- package/dist/tooltip/use-tooltip-anchor.d.ts +5 -0
- package/dist/tooltip/use-tooltip-anchor.js +36 -0
- package/dist/tree/focus-element.d.ts +1 -0
- package/dist/tree/focus-element.js +4 -0
- package/dist/tree/tree.adapter.d.ts +2 -0
- package/dist/tree/tree.adapter.js +27 -0
- package/dist/tree/use-tree.d.ts +13 -0
- package/dist/tree/use-tree.js +73 -0
- package/dist/user/user.adapter.d.ts +2 -0
- package/dist/user/user.adapter.js +24 -0
- package/dist/v-stack/v-stack.adapter.d.ts +2 -0
- package/dist/v-stack/v-stack.adapter.js +5 -0
- package/dist/vendor/lib/utils.d.ts +2 -0
- package/dist/vendor/lib/utils.js +5 -0
- package/dist/vendor/ui/accordion.d.ts +7 -0
- package/dist/vendor/ui/accordion.js +14 -0
- package/dist/vendor/ui/alert.d.ts +8 -0
- package/dist/vendor/ui/alert.js +22 -0
- package/dist/vendor/ui/badge.d.ts +9 -0
- package/dist/vendor/ui/badge.js +21 -0
- package/dist/vendor/ui/button.d.ts +11 -0
- package/dist/vendor/ui/button.js +33 -0
- package/dist/vendor/ui/card.d.ts +8 -0
- package/dist/vendor/ui/card.js +16 -0
- package/dist/vendor/ui/checkbox.d.ts +4 -0
- package/dist/vendor/ui/checkbox.js +9 -0
- package/dist/vendor/ui/input.d.ts +3 -0
- package/dist/vendor/ui/input.js +8 -0
- package/dist/vendor/ui/label.d.ts +5 -0
- package/dist/vendor/ui/label.js +10 -0
- package/dist/vendor/ui/progress.d.ts +4 -0
- package/dist/vendor/ui/progress.js +8 -0
- package/dist/vendor/ui/select.d.ts +13 -0
- package/dist/vendor/ui/select.js +27 -0
- package/dist/vendor/ui/separator.d.ts +4 -0
- package/dist/vendor/ui/separator.js +8 -0
- package/dist/vendor/ui/slider.d.ts +4 -0
- package/dist/vendor/ui/slider.js +8 -0
- package/dist/vendor/ui/switch.d.ts +4 -0
- package/dist/vendor/ui/switch.js +8 -0
- package/dist/vendor/ui/tabs.d.ts +7 -0
- package/dist/vendor/ui/tabs.js +13 -0
- package/dist/vendor/ui/textarea.d.ts +3 -0
- package/dist/vendor/ui/textarea.js +8 -0
- package/package.json +71 -3
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { TimeField, DateInput, DateSegment, Label, Text, FieldError, } from 'react-aria-components/TimeField';
|
|
3
|
+
import { useLocale } from 'react-aria-components/I18nProvider';
|
|
4
|
+
import { toTime } from '@internationalized/date';
|
|
5
|
+
import { useId, useMemo, useState } from 'react';
|
|
6
|
+
import { DATE_TIME_POLICY } from '@fastsprout/reacd/adapter-runtime/core/date-time-policy.js';
|
|
7
|
+
import { INPUT_TIME_POLICY } from '@fastsprout/reacd/adapter-runtime/core/input-time-policy.js';
|
|
8
|
+
import { useFieldMetadata } from '@fastsprout/reacd/adapter-runtime/renderer/form-field/field-metadata.js';
|
|
9
|
+
import { Button } from '../vendor/ui/button.js';
|
|
10
|
+
import { anchoredTime } from './anchored-time.js';
|
|
11
|
+
import { TimeDraftValidation } from './draft-validation.js';
|
|
12
|
+
export function TimeControl({ label, value, onValueChange, description, error, min, max, name, required, disabled, readOnly, }) {
|
|
13
|
+
const metadata = useFieldMetadata({ name, required, disabled });
|
|
14
|
+
const { direction } = useLocale();
|
|
15
|
+
const draftErrorId = useId();
|
|
16
|
+
const [draftInvalid, setDraftInvalid] = useState(false);
|
|
17
|
+
const [segments, setSegments] = useState(null);
|
|
18
|
+
const controlValue = useMemo(() => (value === null ? null : anchoredTime(value)), [value]);
|
|
19
|
+
const minimum = useMemo(() => (min === undefined ? undefined : anchoredTime(min)), [min]);
|
|
20
|
+
const maximum = useMemo(() => (max === undefined ? undefined : anchoredTime(max)), [max]);
|
|
21
|
+
const placeholder = useMemo(() => anchoredTime(DATE_TIME_POLICY.placeholderTime), []);
|
|
22
|
+
const invalid = Boolean(metadata.error) || error !== undefined || draftInvalid;
|
|
23
|
+
const descriptions = [
|
|
24
|
+
...metadata.descriptionIds,
|
|
25
|
+
...(draftInvalid ? [draftErrorId] : []),
|
|
26
|
+
].join(' ');
|
|
27
|
+
return (_jsx(TimeField, { className: "reacd-node reacd-field reacd-time-control", ...(descriptions ? { 'aria-describedby': descriptions } : {}), value: controlValue, onChange: (next) => {
|
|
28
|
+
setDraftInvalid(false);
|
|
29
|
+
onValueChange(next === null ? null : toTime(next).toString());
|
|
30
|
+
}, ...(minimum === undefined ? {} : { minValue: minimum }), ...(maximum === undefined ? {} : { maxValue: maximum }), ...(invalid ? { isInvalid: true } : {}), isRequired: metadata.required, isDisabled: metadata.disabled, isReadOnly: readOnly ?? false, hourCycle: INPUT_TIME_POLICY.hourCycle, hideTimeZone: true, granularity: INPUT_TIME_POLICY.granularity, shouldForceLeadingZeros: INPUT_TIME_POLICY.forceLeadingZeros, validationBehavior: INPUT_TIME_POLICY.validationBehavior, placeholderValue: placeholder, children: ({ state }) => (_jsxs(_Fragment, { children: [_jsx(Label, { children: label }), _jsxs("div", { className: "reacd-time-entry", children: [_jsx(DateInput, { className: "reacd-time-segments", dir: direction, ref: setSegments, "aria-invalid": invalid || undefined, children: (segment) => (_jsx(DateSegment, { className: "reacd-time-segment", segment: segment, "aria-invalid": invalid || undefined })) }), _jsx(Button, { type: "button", variant: "outline", className: "reacd-button reacd-time-clear", disabled: metadata.disabled || readOnly, "aria-label": `${INPUT_TIME_POLICY.clearLabel} ${label}`, onClick: () => {
|
|
31
|
+
if (value === null) {
|
|
32
|
+
state.setValue(null);
|
|
33
|
+
setDraftInvalid(false);
|
|
34
|
+
}
|
|
35
|
+
onValueChange(null);
|
|
36
|
+
}, children: INPUT_TIME_POLICY.clearLabel })] }), description === undefined ? null : (_jsx(Text, { slot: "description", className: "reacd-field-description", children: description })), draftInvalid ? (_jsx("span", { id: draftErrorId, role: "alert", className: "reacd-time-error", children: INPUT_TIME_POLICY.incompleteValue })) : metadata.error ? null : (_jsx(FieldError, { className: "reacd-time-error", children: error })), _jsx("input", { type: "hidden", name: metadata.name, value: value ?? '', disabled: metadata.disabled }), _jsx(TimeDraftValidation, { segments: state.segments, value: value, required: metadata.required, disabled: metadata.disabled, root: segments, onInvalidChange: setDraftInvalid })] })) }));
|
|
37
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { TemporalRecovery } from '../temporal/temporal-recovery.js';
|
|
2
|
+
interface TimeProtection {
|
|
3
|
+
readonly disabled?: boolean | undefined;
|
|
4
|
+
readonly readOnly?: boolean | undefined;
|
|
5
|
+
}
|
|
6
|
+
export declare function useTimeChange<Value>(validate: (value: Value) => boolean, onValueChange: (value: Value) => void, message: string, protection: TimeProtection, recovery?: TemporalRecovery<Value>): {
|
|
7
|
+
error: string | undefined;
|
|
8
|
+
change: (value: Value) => void;
|
|
9
|
+
};
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { KbdProps } from '@fastsprout/reacd/adapter-runtime/components/kbd/kbd.js';
|
|
2
|
+
import type { KeyPresentation } from '@fastsprout/reacd/adapter-runtime/core/keyboard-key.js';
|
|
3
|
+
type KbdKeyProps = KeyPresentation & Pick<KbdProps, 'size' | 'variant' | 'intent'>;
|
|
4
|
+
export declare function KbdKey({ display, label, size, variant, intent, }: KbdKeyProps): import("react").JSX.Element;
|
|
5
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { KBD_DEFAULTS } from '@fastsprout/reacd/adapter-runtime/core/kbd-policy.js';
|
|
3
|
+
export function KbdKey({ display, label, size = KBD_DEFAULTS.size, variant = KBD_DEFAULTS.variant, intent = KBD_DEFAULTS.intent, }) {
|
|
4
|
+
return (_jsx("kbd", { className: "reacd-node reacd-kbd", "data-slot": "kbd", "data-size": size, "data-variant": variant, "data-intent": intent, title: label, children: _jsx("span", { role: "img", "aria-label": label, children: display }) }));
|
|
5
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { keyboardKey } from '@fastsprout/reacd/adapter-runtime/core/keyboard-key.js';
|
|
3
|
+
import { KBD_DEFAULTS } from '@fastsprout/reacd/adapter-runtime/core/kbd-policy.js';
|
|
4
|
+
import { KbdKey } from './kbd-key.adapter.js';
|
|
5
|
+
export function ShadcnKbd({ value, label, platform = KBD_DEFAULTS.platform, ...properties }) {
|
|
6
|
+
const presentation = keyboardKey(value, platform);
|
|
7
|
+
return (_jsx(KbdKey, { ...properties, display: presentation.display, label: label ?? presentation.label }));
|
|
8
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function focusListboxAfterClear(root: HTMLElement | null, button: HTMLButtonElement, wasFocused: boolean): void;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
interface FormBridgeProps {
|
|
2
|
+
readonly values: readonly string[];
|
|
3
|
+
readonly multiple: boolean;
|
|
4
|
+
readonly name: string | undefined;
|
|
5
|
+
readonly required: boolean | undefined;
|
|
6
|
+
readonly disabled: boolean | undefined;
|
|
7
|
+
readonly root: HTMLDivElement | null;
|
|
8
|
+
readonly errorId: string;
|
|
9
|
+
readonly invalid: boolean;
|
|
10
|
+
readonly markInvalid: () => void;
|
|
11
|
+
readonly reset: () => boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function ListboxFormBridge({ values, multiple, name, required, disabled, root, errorId, reset, invalid, markInvalid, }: FormBridgeProps): import("react").JSX.Element;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useLayoutEffect, useRef, useState } from 'react';
|
|
3
|
+
import { LISTBOX_POLICY } from '@fastsprout/reacd/adapter-runtime/core/listbox-policy.js';
|
|
4
|
+
import { SELECTION_POLICY } from '@fastsprout/reacd/adapter-runtime/core/selection-policy.js';
|
|
5
|
+
export function ListboxFormBridge({ values, multiple, name, required, disabled, root, errorId, reset, invalid, markInvalid, }) {
|
|
6
|
+
const [proxy, setProxy] = useState(null);
|
|
7
|
+
const latestReset = useRef(reset);
|
|
8
|
+
useLayoutEffect(() => {
|
|
9
|
+
latestReset.current = reset;
|
|
10
|
+
}, [reset]);
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
const form = proxy?.form;
|
|
13
|
+
if (form === undefined || form === null)
|
|
14
|
+
return;
|
|
15
|
+
let active = true;
|
|
16
|
+
function onReset(event) {
|
|
17
|
+
queueMicrotask(() => {
|
|
18
|
+
if (active && !event.defaultPrevented)
|
|
19
|
+
latestReset.current();
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
form.addEventListener('reset', onReset);
|
|
23
|
+
return () => {
|
|
24
|
+
active = false;
|
|
25
|
+
form.removeEventListener('reset', onReset);
|
|
26
|
+
};
|
|
27
|
+
}, [proxy]);
|
|
28
|
+
const entries = multiple ? values : [values[0] ?? SELECTION_POLICY.emptySingleValue];
|
|
29
|
+
return (_jsxs(_Fragment, { children: [entries.map((value) => (_jsx("input", { type: "hidden", name: name, value: value, disabled: disabled }, value))), _jsx("input", { ref: setProxy, type: "text", hidden: true, required: required, disabled: disabled, value: values.length > 0 ? LISTBOX_POLICY.validFieldValue : '', onChange: () => undefined, onInvalid: (event) => {
|
|
30
|
+
event.preventDefault();
|
|
31
|
+
markInvalid();
|
|
32
|
+
root?.focus();
|
|
33
|
+
} }), _jsx("p", { id: errorId, role: invalid ? 'alert' : undefined, hidden: !invalid, children: invalid ? LISTBOX_POLICY.requiredMessage : null })] }));
|
|
34
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useId, useLayoutEffect, useState } from 'react';
|
|
3
|
+
import { ListBox, ListBoxItem, Text } from 'react-aria-components/ListBox';
|
|
4
|
+
import { I18nProvider } from 'react-aria-components/I18nProvider';
|
|
5
|
+
import { useDirection } from '@radix-ui/react-direction';
|
|
6
|
+
import { LISTBOX_DEFAULTS, LISTBOX_POLICY, } from '@fastsprout/reacd/adapter-runtime/core/listbox-policy.js';
|
|
7
|
+
import { useFieldMetadata } from '@fastsprout/reacd/adapter-runtime/renderer/form-field/field-metadata.js';
|
|
8
|
+
import { Button } from '../vendor/ui/button.js';
|
|
9
|
+
import { ListboxFormBridge } from './form-bridge.js';
|
|
10
|
+
import { useListboxRequest } from './use-listbox-request.js';
|
|
11
|
+
import { focusListboxAfterClear } from './clear-focus.js';
|
|
12
|
+
import { maintainListboxSemantics } from './native-semantics.js';
|
|
13
|
+
export function ShadcnListbox(properties) {
|
|
14
|
+
const id = useId();
|
|
15
|
+
const metadata = useFieldMetadata(properties, properties.description === undefined ? [] : [`${id}-description`]);
|
|
16
|
+
const effectiveProperties = {
|
|
17
|
+
...properties,
|
|
18
|
+
name: metadata.name,
|
|
19
|
+
required: metadata.required,
|
|
20
|
+
disabled: metadata.disabled,
|
|
21
|
+
};
|
|
22
|
+
const { label, items, description, name, required, disabled, readOnly, mode = LISTBOX_DEFAULTS.mode, locale = LISTBOX_DEFAULTS.locale, status = LISTBOX_DEFAULTS.status, clearLabel = LISTBOX_DEFAULTS.clearLabel, emptyMessage = LISTBOX_DEFAULTS.emptyMessage, loadingMessage = LISTBOX_DEFAULTS.loadingMessage, errorMessage = LISTBOX_DEFAULTS.errorMessage, } = effectiveProperties;
|
|
23
|
+
const direction = useDirection();
|
|
24
|
+
const [root, setRoot] = useState(null);
|
|
25
|
+
const [invalid, setInvalid] = useState(false);
|
|
26
|
+
const { values, blocked, failure, select, request, reset } = useListboxRequest(effectiveProperties);
|
|
27
|
+
if (invalid && (values.length > 0 || !required || disabled))
|
|
28
|
+
setInvalid(false);
|
|
29
|
+
useLayoutEffect(() => maintainListboxSemantics(root, {
|
|
30
|
+
readOnly: Boolean(readOnly) || status !== 'ready',
|
|
31
|
+
required: Boolean(required),
|
|
32
|
+
invalid: invalid || metadata.error.length > 0,
|
|
33
|
+
disabled: Boolean(disabled),
|
|
34
|
+
busy: status === 'loading',
|
|
35
|
+
}), [root, readOnly, required, invalid, disabled, status, metadata.error]);
|
|
36
|
+
const describedBy = [
|
|
37
|
+
...metadata.descriptionIds,
|
|
38
|
+
`${id}-status`,
|
|
39
|
+
`${id}-error`,
|
|
40
|
+
failure === undefined ? undefined : `${id}-request-error`,
|
|
41
|
+
]
|
|
42
|
+
.filter(Boolean)
|
|
43
|
+
.join(' ');
|
|
44
|
+
const variables = {
|
|
45
|
+
'--reacd-listbox-rows': LISTBOX_POLICY.visibleRows,
|
|
46
|
+
};
|
|
47
|
+
return (_jsx(I18nProvider, { locale: locale, children: _jsxs("div", { className: "reacd-node reacd-field reacd-listbox", dir: direction, onPointerDownCapture: (event) => {
|
|
48
|
+
if (disabled) {
|
|
49
|
+
event.preventDefault();
|
|
50
|
+
event.stopPropagation();
|
|
51
|
+
}
|
|
52
|
+
}, onKeyDownCapture: (event) => {
|
|
53
|
+
if (disabled) {
|
|
54
|
+
event.stopPropagation();
|
|
55
|
+
if (event.key !== 'Tab')
|
|
56
|
+
event.preventDefault();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (event.nativeEvent.isComposing ||
|
|
60
|
+
event.keyCode === LISTBOX_POLICY.imeProcessKeyCode) {
|
|
61
|
+
event.stopPropagation();
|
|
62
|
+
if (event.key === 'Enter' || event.key === ' ')
|
|
63
|
+
event.preventDefault();
|
|
64
|
+
}
|
|
65
|
+
}, children: [_jsxs("span", { children: [_jsx("span", { id: id, children: label }), required ? ' (required)' : ''] }), description === undefined ? null : (_jsx("p", { id: `${id}-description`, children: description })), _jsx(ListBox, { ref: setRoot, items: items, className: "reacd-listbox-options", style: variables, "aria-labelledby": id, "aria-describedby": describedBy, selectionMode: mode, selectionBehavior: "toggle", escapeKeyBehavior: "none", selectedKeys: new Set(values), onSelectionChange: select, disabledKeys: items
|
|
66
|
+
.filter((item) => disabled || item.disabled)
|
|
67
|
+
.map((item) => item.value), children: (item) => (_jsxs(ListBoxItem, { id: item.value, textValue: item.label, className: "reacd-listbox-option", children: [_jsx(Text, { slot: "label", children: item.label }), item.description === undefined ? null : (_jsx(Text, { slot: "description", className: "reacd-listbox-description", children: item.description }))] })) }), _jsx("p", { id: `${id}-status`, role: status === 'error' ? 'alert' : 'status', children: status === 'loading'
|
|
68
|
+
? loadingMessage
|
|
69
|
+
: status === 'error'
|
|
70
|
+
? errorMessage
|
|
71
|
+
: items.length === 0
|
|
72
|
+
? emptyMessage
|
|
73
|
+
: LISTBOX_DEFAULTS.readyMessage }), failure === undefined ? null : (_jsx("p", { id: `${id}-request-error`, role: "alert", children: failure })), _jsx(Button, { type: "button", className: "reacd-node reacd-button", disabled: blocked || values.length === 0, onClick: (event) => {
|
|
74
|
+
const button = event.currentTarget;
|
|
75
|
+
const wasFocused = button.ownerDocument.activeElement === button;
|
|
76
|
+
if (request([]))
|
|
77
|
+
focusListboxAfterClear(root, button, wasFocused);
|
|
78
|
+
}, children: clearLabel }), _jsx(ListboxFormBridge, { values: values, multiple: mode === 'multiple', name: name, required: required, disabled: disabled, root: root, errorId: `${id}-error`, reset: reset, invalid: invalid, markInvalid: () => setInvalid(true) })] }) }));
|
|
79
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface ListboxSemantics {
|
|
2
|
+
readonly readOnly: boolean;
|
|
3
|
+
readonly required: boolean;
|
|
4
|
+
readonly invalid: boolean;
|
|
5
|
+
readonly disabled: boolean;
|
|
6
|
+
readonly busy: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function maintainListboxSemantics(root: HTMLElement | null, state: ListboxSemantics): () => void;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { LISTBOX_POLICY } from '@fastsprout/reacd/adapter-runtime/core/listbox-policy.js';
|
|
2
|
+
export function maintainListboxSemantics(root, state) {
|
|
3
|
+
if (root === null)
|
|
4
|
+
return () => undefined;
|
|
5
|
+
const attributes = {
|
|
6
|
+
'aria-readonly': state.readOnly,
|
|
7
|
+
'aria-required': state.required,
|
|
8
|
+
'aria-invalid': state.invalid,
|
|
9
|
+
'aria-disabled': state.disabled,
|
|
10
|
+
'aria-busy': state.busy,
|
|
11
|
+
};
|
|
12
|
+
for (const [attribute, value] of Object.entries(attributes)) {
|
|
13
|
+
root.setAttribute(attribute, String(value));
|
|
14
|
+
}
|
|
15
|
+
if (!state.disabled)
|
|
16
|
+
return () => undefined;
|
|
17
|
+
const element = root;
|
|
18
|
+
function excludeFromTab() {
|
|
19
|
+
if (element.tabIndex !== LISTBOX_POLICY.disabledTabIndex) {
|
|
20
|
+
element.tabIndex = LISTBOX_POLICY.disabledTabIndex;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const observer = new MutationObserver(excludeFromTab);
|
|
24
|
+
excludeFromTab();
|
|
25
|
+
observer.observe(root, { attributes: true, attributeFilter: ['tabindex'] });
|
|
26
|
+
return () => {
|
|
27
|
+
observer.disconnect();
|
|
28
|
+
root.tabIndex =
|
|
29
|
+
root.querySelector('[role="option"][tabindex="0"]') === null
|
|
30
|
+
? LISTBOX_POLICY.activeTabIndex
|
|
31
|
+
: LISTBOX_POLICY.disabledTabIndex;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Selection } from 'react-aria-components/ListBox';
|
|
2
|
+
import type { ListboxProps } from '@fastsprout/reacd/adapter-runtime/components/listbox/index.js';
|
|
3
|
+
export declare function listboxKeys(properties: ListboxProps): readonly string[];
|
|
4
|
+
export declare function orderedListboxSelection(next: Selection, properties: ListboxProps): readonly string[] | undefined;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { SELECTION_POLICY } from '@fastsprout/reacd/adapter-runtime/core/selection-policy.js';
|
|
2
|
+
export function listboxKeys(properties) {
|
|
3
|
+
if (properties.mode === 'multiple')
|
|
4
|
+
return properties.value;
|
|
5
|
+
return properties.value === SELECTION_POLICY.emptySingleValue
|
|
6
|
+
? []
|
|
7
|
+
: [properties.value];
|
|
8
|
+
}
|
|
9
|
+
export function orderedListboxSelection(next, properties) {
|
|
10
|
+
const previous = listboxKeys(properties);
|
|
11
|
+
if (next === 'all') {
|
|
12
|
+
if (properties.mode !== 'multiple')
|
|
13
|
+
return undefined;
|
|
14
|
+
return [
|
|
15
|
+
...previous,
|
|
16
|
+
...properties.items
|
|
17
|
+
.filter((item) => !item.disabled && !previous.includes(item.value))
|
|
18
|
+
.map((item) => item.value),
|
|
19
|
+
];
|
|
20
|
+
}
|
|
21
|
+
const values = [...next];
|
|
22
|
+
if (!values.every((key) => typeof key === 'string'))
|
|
23
|
+
return undefined;
|
|
24
|
+
const retained = previous.filter((key) => next.has(key));
|
|
25
|
+
const additions = properties.items
|
|
26
|
+
.filter((item) => next.has(item.value) && !previous.includes(item.value))
|
|
27
|
+
.map((item) => item.value);
|
|
28
|
+
if (retained.length + additions.length !== values.length)
|
|
29
|
+
return undefined;
|
|
30
|
+
return [...retained, ...additions];
|
|
31
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Selection } from 'react-aria-components/ListBox';
|
|
2
|
+
import type { ListboxProps } from '@fastsprout/reacd/adapter-runtime/components/listbox/index.js';
|
|
3
|
+
export declare function useListboxRequest(properties: ListboxProps): {
|
|
4
|
+
values: readonly string[];
|
|
5
|
+
blocked: boolean;
|
|
6
|
+
failure: string | undefined;
|
|
7
|
+
select: (next: Selection) => void;
|
|
8
|
+
request: (next: readonly string[]) => boolean;
|
|
9
|
+
reset: () => boolean;
|
|
10
|
+
};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
import { LISTBOX_DEFAULTS, LISTBOX_POLICY, } from '@fastsprout/reacd/adapter-runtime/core/listbox-policy.js';
|
|
3
|
+
import { SELECTION_POLICY } from '@fastsprout/reacd/adapter-runtime/core/selection-policy.js';
|
|
4
|
+
import { canRequestSelection } from '@fastsprout/reacd/adapter-runtime/schema/selection/index.js';
|
|
5
|
+
import { listboxKeys, orderedListboxSelection } from './selection.js';
|
|
6
|
+
export function useListboxRequest(properties) {
|
|
7
|
+
const values = listboxKeys(properties);
|
|
8
|
+
const [initial] = useState(() => Object.freeze([...values]));
|
|
9
|
+
const [failure, setFailure] = useState();
|
|
10
|
+
const basis = JSON.stringify([
|
|
11
|
+
properties.mode ?? LISTBOX_DEFAULTS.mode,
|
|
12
|
+
values,
|
|
13
|
+
properties.items.map(({ value, disabled }) => [value, Boolean(disabled)]),
|
|
14
|
+
Boolean(properties.disabled),
|
|
15
|
+
Boolean(properties.readOnly),
|
|
16
|
+
properties.status ?? LISTBOX_DEFAULTS.status,
|
|
17
|
+
]);
|
|
18
|
+
if (failure !== undefined && failure.basis !== basis)
|
|
19
|
+
setFailure(undefined);
|
|
20
|
+
const blocked = properties.disabled ||
|
|
21
|
+
properties.readOnly ||
|
|
22
|
+
(properties.status ?? LISTBOX_DEFAULTS.status) !== 'ready';
|
|
23
|
+
function fail(message) {
|
|
24
|
+
setFailure({ basis, message });
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
function request(next) {
|
|
28
|
+
if (blocked)
|
|
29
|
+
return false;
|
|
30
|
+
if ((properties.mode !== 'multiple' && next.length > LISTBOX_POLICY.singleLimit) ||
|
|
31
|
+
!canRequestSelection(values, next, properties.items)) {
|
|
32
|
+
return fail(LISTBOX_POLICY.invalidChange);
|
|
33
|
+
}
|
|
34
|
+
if (next.length === values.length && next.every((key, n) => key === values[n])) {
|
|
35
|
+
setFailure(undefined);
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
const decision = properties.mode === 'multiple'
|
|
40
|
+
? properties.onValueChange(Object.freeze([...next]))
|
|
41
|
+
: properties.onValueChange(next[0] ?? SELECTION_POLICY.emptySingleValue);
|
|
42
|
+
if (decision === false)
|
|
43
|
+
return fail(LISTBOX_POLICY.invalidChange);
|
|
44
|
+
if (decision !== undefined && decision !== true) {
|
|
45
|
+
if (decision instanceof Promise)
|
|
46
|
+
void decision.catch(() => undefined);
|
|
47
|
+
return fail(LISTBOX_POLICY.invalidCallback);
|
|
48
|
+
}
|
|
49
|
+
setFailure(undefined);
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return fail(LISTBOX_POLICY.invalidCallback);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function select(next) {
|
|
57
|
+
if (blocked)
|
|
58
|
+
return;
|
|
59
|
+
const keys = orderedListboxSelection(next, properties);
|
|
60
|
+
if (keys === undefined)
|
|
61
|
+
fail(LISTBOX_POLICY.invalidChange);
|
|
62
|
+
else
|
|
63
|
+
request(keys);
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
values,
|
|
67
|
+
blocked,
|
|
68
|
+
failure: failure?.basis === basis ? failure.message : undefined,
|
|
69
|
+
select,
|
|
70
|
+
request,
|
|
71
|
+
reset: () => request(initial),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import type { LocaleSelectProps } from '@fastsprout/reacd/adapter-runtime/components/locale-select/index.js';
|
|
2
|
+
export declare function ShadcnLocaleSelect({ label, value, locales, onValueChange, name, required, description, disabled, readOnly, }: LocaleSelectProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useContext, useId } from 'react';
|
|
3
|
+
import { PortalActiveContext } from '@fastsprout/reacd/adapter-runtime/renderer/theme/portal-context.js';
|
|
4
|
+
import { Select, SelectItem, SelectTrigger, SelectValue } from '../vendor/ui/select.js';
|
|
5
|
+
import { Label } from '../vendor/ui/label.js';
|
|
6
|
+
import { ShadcnSelectContent } from '../select/select-content.adapter.js';
|
|
7
|
+
export function ShadcnLocaleSelect({ label, value, locales, onValueChange, name, required, description, disabled, readOnly, }) {
|
|
8
|
+
const id = useId();
|
|
9
|
+
const active = useContext(PortalActiveContext);
|
|
10
|
+
const selectedLabel = locales.reduce((selected, locale) => (locale.code === value ? locale.label : selected), value);
|
|
11
|
+
return (_jsxs("div", { className: "reacd-node reacd-field reacd-locale-select", children: [_jsx(Label, { htmlFor: id, children: label }), _jsxs(Select, { value: value, name: name, required: required, disabled: disabled, ...(active ? {} : { open: false }), onValueChange: (next) => {
|
|
12
|
+
if (!readOnly)
|
|
13
|
+
onValueChange(next);
|
|
14
|
+
}, children: [_jsx(SelectTrigger, { id: id, className: "reacd-locale-trigger", "aria-readonly": readOnly || undefined, "aria-describedby": description === undefined ? undefined : `${id}-help`, children: _jsx(SelectValue, { children: selectedLabel }) }), _jsx(ShadcnSelectContent, { children: locales.map((locale) => (_jsx(SelectItem, { value: locale.code, className: "reacd-locale-option", children: locale.label }, locale.code))) })] }, active ? 'active' : 'inactive'), description === undefined ? null : (_jsx("span", { id: `${id}-help`, className: "reacd-field-description", children: description }))] }));
|
|
15
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useContext } from 'react';
|
|
3
|
+
import { MainScopeContext } from '@fastsprout/reacd/adapter-runtime/renderer/main/main-scope.js';
|
|
4
|
+
export function ShadcnMain({ children }) {
|
|
5
|
+
const nested = useContext(MainScopeContext);
|
|
6
|
+
return (_jsx(MainScopeContext.Provider, { value: true, children: nested ? (_jsx("section", { className: "reacd-node reacd-main", children: children })) : (_jsx("main", { className: "reacd-node reacd-main", children: children })) }));
|
|
7
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useDirection } from '@base-ui/react/direction-provider';
|
|
3
|
+
import { MARQUEE_DEFAULTS, MARQUEE_POLICY, } from '@fastsprout/reacd/adapter-runtime/core/marquee-policy.js';
|
|
4
|
+
import { useReducedMotion } from '@fastsprout/reacd/adapter-runtime/renderer/motion/use-reduced-motion.js';
|
|
5
|
+
import { Button } from '../vendor/ui/button.js';
|
|
6
|
+
export function ShadcnMarquee({ label, items, paused, onPausedChange, pace = MARQUEE_DEFAULTS.pace, direction: motion = MARQUEE_DEFAULTS.direction, readOnly = MARQUEE_DEFAULTS.readOnly, emptyMessage = MARQUEE_DEFAULTS.emptyMessage, }) {
|
|
7
|
+
const direction = useDirection();
|
|
8
|
+
const reduced = useReducedMotion();
|
|
9
|
+
const staticView = reduced !== false || readOnly;
|
|
10
|
+
const variables = {
|
|
11
|
+
'--reacd-marquee-duration': `var(--reacd-marquee-${pace})`,
|
|
12
|
+
};
|
|
13
|
+
const content = (_jsx("ul", { "aria-label": label, className: "reacd-marquee-reading-list", children: items.map((item) => (_jsx("li", { children: item.label }, item.id))) }));
|
|
14
|
+
return (_jsx("section", { role: "region", "aria-label": label, className: "reacd-node reacd-marquee", children: items.length === 0 ? (_jsx("p", { role: "status", children: emptyMessage })) : (_jsxs(_Fragment, { children: [_jsx("p", { role: "status", children: staticView
|
|
15
|
+
? reduced === undefined
|
|
16
|
+
? MARQUEE_DEFAULTS.unknownLabel
|
|
17
|
+
: reduced
|
|
18
|
+
? MARQUEE_DEFAULTS.reducedLabel
|
|
19
|
+
: MARQUEE_DEFAULTS.readonlyLabel
|
|
20
|
+
: paused
|
|
21
|
+
? MARQUEE_DEFAULTS.pausedLabel
|
|
22
|
+
: MARQUEE_DEFAULTS.enabledLabel }), staticView ? (content) : (_jsxs(_Fragment, { children: [_jsx("div", { className: "reacd-marquee-viewport", "aria-hidden": "true", inert: true, dir: "ltr", children: _jsx("div", { className: "reacd-marquee-track", "data-paused": paused, "data-reverse": (direction === 'rtl') !== (motion === 'backward'), style: variables, children: Array.from({ length: MARQUEE_POLICY.visualCopies }, (_, copy) => (_jsx("div", { className: "reacd-marquee-copy", children: items.map((item) => (_jsx("span", { dir: direction, children: item.label }, item.id))) }, copy))) }) }), _jsx(Button, { type: "button", className: "reacd-button", variant: "outline", onClick: () => onPausedChange(!paused), children: paused ? MARQUEE_DEFAULTS.resumeLabel : MARQUEE_DEFAULTS.pauseLabel }), _jsxs("details", { className: "reacd-marquee-reading", children: [_jsx("summary", { children: MARQUEE_DEFAULTS.readLabel }), content] })] }))] })) }));
|
|
23
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import type { ModalProps } from '@fastsprout/reacd/adapter-runtime/components/modal/modal.js';
|
|
2
|
+
export declare function ShadcnModal({ title, description, open, onOpenChange, triggerLabel, closeLabel, children, footer, disabled, dismissible, modal, overlay, fullscreen, retainContent, }: ModalProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useContext, useState } from 'react';
|
|
3
|
+
import { Dialog } from '@base-ui/react/dialog';
|
|
4
|
+
import { useDirection } from '@base-ui/react/direction-provider';
|
|
5
|
+
import { MODAL_DEFAULTS } from '@fastsprout/reacd/adapter-runtime/core/modal-policy.js';
|
|
6
|
+
import { ThemeVariablesContext } from '@fastsprout/reacd/adapter-runtime/renderer/theme/theme-context.js';
|
|
7
|
+
import { Button } from '../vendor/ui/button.js';
|
|
8
|
+
import { EscapeScopeContext } from '@fastsprout/reacd/adapter-runtime/renderer/theme/escape-context.js';
|
|
9
|
+
import { createEscapeScope } from '@fastsprout/reacd/adapter-runtime/renderer/theme/escape-scope.js';
|
|
10
|
+
import { initialLayerFocus } from '@fastsprout/reacd/adapter-runtime/renderer/theme/initial-layer-focus.js';
|
|
11
|
+
import { PortalHostContext, PortalActiveContext, } from '@fastsprout/reacd/adapter-runtime/renderer/theme/portal-context.js';
|
|
12
|
+
export function ShadcnModal({ title, description, open, onOpenChange, triggerLabel, closeLabel = MODAL_DEFAULTS.closeLabel, children, footer, disabled, dismissible = MODAL_DEFAULTS.dismissible, modal = MODAL_DEFAULTS.modal, overlay = MODAL_DEFAULTS.overlay, fullscreen = MODAL_DEFAULTS.fullscreen, retainContent = MODAL_DEFAULTS.retainContent, }) {
|
|
13
|
+
const direction = useDirection();
|
|
14
|
+
const variables = useContext(ThemeVariablesContext);
|
|
15
|
+
const ancestorActive = useContext(PortalActiveContext);
|
|
16
|
+
const active = open && ancestorActive;
|
|
17
|
+
const [escapeScope] = useState(createEscapeScope);
|
|
18
|
+
const [host, setHost] = useState(null);
|
|
19
|
+
return (_jsxs(Dialog.Root, { open: active, modal: modal, disablePointerDismissal: !dismissible, onOpenChange: (next, details) => {
|
|
20
|
+
if (details.reason === 'escape-key' && escapeScope.dismiss()) {
|
|
21
|
+
details.event.preventDefault();
|
|
22
|
+
details.event.stopImmediatePropagation();
|
|
23
|
+
details.cancel();
|
|
24
|
+
}
|
|
25
|
+
else if (details.reason === 'escape-key' && !dismissible)
|
|
26
|
+
details.cancel();
|
|
27
|
+
else
|
|
28
|
+
onOpenChange(next);
|
|
29
|
+
}, children: [triggerLabel !== undefined && (_jsx(Dialog.Trigger, { disabled: disabled, render: _jsx(Button, { className: "reacd-node reacd-button" }), children: triggerLabel })), _jsxs(Dialog.Portal, { dir: direction, keepMounted: retainContent, className: "reacd-root reacd-portal-root reacd-modal-portal", style: variables, hidden: !active, children: [modal && overlay && _jsx(Dialog.Backdrop, { className: "reacd-modal-backdrop" }), _jsx(Dialog.Viewport, { className: "reacd-modal-viewport", "data-modal": modal, children: _jsx(Dialog.Popup, { dir: direction, ref: setHost, initialFocus: (interaction) => initialLayerFocus(host, interaction), finalFocus: ancestorActive ? undefined : false, className: "reacd-modal-panel", "data-fullscreen": fullscreen, "aria-modal": modal, children: _jsx(PortalHostContext.Provider, { value: host, children: _jsx(EscapeScopeContext.Provider, { value: escapeScope, children: _jsxs(PortalActiveContext.Provider, { value: active, children: [_jsxs("header", { className: "reacd-modal-header", children: [_jsx(Dialog.Title, { children: title }), _jsx(Dialog.Description, { children: description })] }), _jsx("div", { className: "reacd-modal-body", children: children }), _jsxs("footer", { className: "reacd-modal-footer", children: [footer, _jsx(Dialog.Close, { render: _jsx(Button, { className: "reacd-node reacd-button", variant: "secondary" }), children: closeLabel })] })] }) }) }) }) })] })] }));
|
|
30
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Button } from '../vendor/ui/button.js';
|
|
3
|
+
export function ShadcnNavigation({ label, value, items, onValueChange, }) {
|
|
4
|
+
return (_jsx("nav", { className: "reacd-node reacd-navigation", "aria-label": label, children: items.map((item) => (_jsx(Button, { type: "button", className: "reacd-node reacd-button", "aria-current": item.value === value ? 'page' : undefined, variant: item.value === value ? 'secondary' : 'ghost', onClick: () => onValueChange(item.value), children: item.label }, item.value))) }));
|
|
5
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { NavigationMenu } from '@base-ui/react/navigation-menu';
|
|
3
|
+
import { pressHandler } from '@fastsprout/reacd/adapter-runtime/renderer/contracts/press-handler.js';
|
|
4
|
+
import { Button } from '../vendor/ui/button.js';
|
|
5
|
+
export function MenuTarget({ item }) {
|
|
6
|
+
if (item.onPress !== undefined) {
|
|
7
|
+
return (_jsx(NavigationMenu.Link, { closeOnClick: true, className: "reacd-node reacd-button reacd-menu-target", render: _jsx(Button, { type: "button", variant: "ghost", disabled: item.disabled }), onClick: pressHandler(item.disabled ? undefined : item.onPress), children: item.label }));
|
|
8
|
+
}
|
|
9
|
+
if (item.href !== undefined && !item.disabled) {
|
|
10
|
+
return (_jsx(NavigationMenu.Link, { closeOnClick: true, className: "reacd-node reacd-link reacd-menu-target", href: item.href, active: item.active, target: item.newWindow ? '_blank' : undefined, rel: item.newWindow ? 'noopener noreferrer' : undefined, children: item.label }));
|
|
11
|
+
}
|
|
12
|
+
return (_jsx("span", { className: "reacd-menu-label", "aria-disabled": item.disabled || undefined, children: item.label }));
|
|
13
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useContext } from 'react';
|
|
3
|
+
import { NavigationMenu } from '@base-ui/react/navigation-menu';
|
|
4
|
+
import { useDirection } from '@radix-ui/react-direction';
|
|
5
|
+
import { NAVIGATION_COMPOSITION_DEFAULTS, NAVIGATION_COMPOSITION_POLICY, } from '@fastsprout/reacd/adapter-runtime/core/navigation-composition-policy.js';
|
|
6
|
+
import { ThemeVariablesContext } from '@fastsprout/reacd/adapter-runtime/renderer/theme/theme-context.js';
|
|
7
|
+
import { PortalHostContext } from '@fastsprout/reacd/adapter-runtime/renderer/theme/portal-context.js';
|
|
8
|
+
import { Button } from '../vendor/ui/button.js';
|
|
9
|
+
import { MenuTarget } from './menu-target.js';
|
|
10
|
+
export function ShadcnNavigationMenu({ label, items, orientation = NAVIGATION_COMPOSITION_DEFAULTS.orientation, }) {
|
|
11
|
+
const variables = useContext(ThemeVariablesContext);
|
|
12
|
+
const host = useContext(PortalHostContext);
|
|
13
|
+
const direction = useDirection();
|
|
14
|
+
const side = orientation === 'horizontal' ? 'bottom' : direction === 'rtl' ? 'left' : 'right';
|
|
15
|
+
return (_jsxs(NavigationMenu.Root, { className: "reacd-node reacd-navigation-menu", "aria-label": label, orientation: orientation, "data-orientation": orientation, delay: NAVIGATION_COMPOSITION_POLICY.disclosureDelayMs, closeDelay: NAVIGATION_COMPOSITION_POLICY.disclosureDelayMs, children: [_jsx(NavigationMenu.List, { className: "reacd-menu-list", children: items.map((item) => (_jsx(NavigationMenu.Item, { value: item.key, children: item.children === undefined ? (_jsx(MenuTarget, { item: item })) : (_jsxs(_Fragment, { children: [_jsxs(NavigationMenu.Trigger, { className: "reacd-node reacd-button reacd-menu-trigger", disabled: item.disabled, render: _jsx(Button, { type: "button", variant: "ghost" }), children: [item.label, _jsx(NavigationMenu.Icon, { "aria-hidden": "true", className: "reacd-menu-disclosure", children: "\u2304" })] }), _jsxs(NavigationMenu.Content, { className: "reacd-menu-content", children: [item.description !== undefined && _jsx("p", { children: item.description }), _jsx("ul", { className: "reacd-menu-child-list", children: item.children.map((child) => (_jsx("li", { children: _jsx(MenuTarget, { item: child }) }, child.key))) })] })] })) }, item.key))) }), _jsx(NavigationMenu.Portal, { container: host ?? undefined, children: _jsx(NavigationMenu.Positioner, { className: "reacd-root reacd-portal-root reacd-menu-positioner", side: side, sideOffset: NAVIGATION_COMPOSITION_POLICY.popupOffsetPx, collisionPadding: NAVIGATION_COMPOSITION_POLICY.collisionPaddingPx, style: variables, dir: direction, children: _jsx(NavigationMenu.Popup, { className: "reacd-menu-popup", children: _jsx(NavigationMenu.Viewport, {}) }) }) })] }));
|
|
16
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { PageLinksSurface } from '@fastsprout/reacd/adapter-runtime/renderer/page-links/page-links.renderer.js';
|
|
3
|
+
export function ShadcnPageAnchors(props) {
|
|
4
|
+
return _jsx(PageLinksSurface, { ...props, kind: "anchors" });
|
|
5
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useWidePage } from '@fastsprout/reacd/adapter-runtime/renderer/page-aside/use-wide-page.js';
|
|
3
|
+
export function ShadcnPageAside({ children, label, top, bottom }) {
|
|
4
|
+
const wide = useWidePage();
|
|
5
|
+
return (_jsxs("aside", { className: "reacd-node reacd-page-aside", "aria-label": label, "data-wide": wide, children: [top !== undefined && _jsx("div", { className: "reacd-page-aside-top", children: top }), _jsx("div", { className: "reacd-page-aside-body", children: children }), bottom !== undefined && _jsx("div", { className: "reacd-page-aside-bottom", children: bottom })] }));
|
|
6
|
+
}
|