@iclips/ui 1.4.13 → 2.0.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 -0
- package/MIGRATION-v2.md +214 -0
- package/README.md +106 -0
- package/dist/alert-theme.css +94 -0
- package/dist/assets/illustrations/announcements.png.cjs +2 -0
- package/dist/assets/illustrations/announcements.png.cjs.map +1 -0
- package/dist/assets/illustrations/announcements.png.js +5 -0
- package/dist/assets/illustrations/announcements.png.js.map +1 -0
- package/dist/assets/illustrations/checklist-approved.png.cjs +2 -0
- package/dist/assets/illustrations/checklist-approved.png.cjs.map +1 -0
- package/dist/assets/illustrations/checklist-approved.png.js +5 -0
- package/dist/assets/illustrations/checklist-approved.png.js.map +1 -0
- package/dist/assets/illustrations/client-profile.png.cjs +2 -0
- package/dist/assets/illustrations/client-profile.png.cjs.map +1 -0
- package/dist/assets/illustrations/client-profile.png.js +5 -0
- package/dist/assets/illustrations/client-profile.png.js.map +1 -0
- package/dist/assets/illustrations/contract-agreement.png.cjs +2 -0
- package/dist/assets/illustrations/contract-agreement.png.cjs.map +1 -0
- package/dist/assets/illustrations/contract-agreement.png.js +5 -0
- package/dist/assets/illustrations/contract-agreement.png.js.map +1 -0
- package/dist/assets/illustrations/create-record.png.cjs +2 -0
- package/dist/assets/illustrations/create-record.png.cjs.map +1 -0
- package/dist/assets/illustrations/create-record.png.js +5 -0
- package/dist/assets/illustrations/create-record.png.js.map +1 -0
- package/dist/assets/illustrations/cta-action.png.cjs +2 -0
- package/dist/assets/illustrations/cta-action.png.cjs.map +1 -0
- package/dist/assets/illustrations/cta-action.png.js +5 -0
- package/dist/assets/illustrations/cta-action.png.js.map +1 -0
- package/dist/assets/illustrations/draft-document.png.cjs +2 -0
- package/dist/assets/illustrations/draft-document.png.cjs.map +1 -0
- package/dist/assets/illustrations/draft-document.png.js +5 -0
- package/dist/assets/illustrations/draft-document.png.js.map +1 -0
- package/dist/assets/illustrations/edit-company.png.cjs +2 -0
- package/dist/assets/illustrations/edit-company.png.cjs.map +1 -0
- package/dist/assets/illustrations/edit-company.png.js +5 -0
- package/dist/assets/illustrations/edit-company.png.js.map +1 -0
- package/dist/assets/illustrations/edit-document.png.cjs +2 -0
- package/dist/assets/illustrations/edit-document.png.cjs.map +1 -0
- package/dist/assets/illustrations/edit-document.png.js +5 -0
- package/dist/assets/illustrations/edit-document.png.js.map +1 -0
- package/dist/assets/illustrations/empty-no-results.png.cjs +2 -0
- package/dist/assets/illustrations/empty-no-results.png.cjs.map +1 -0
- package/dist/assets/illustrations/empty-no-results.png.js +5 -0
- package/dist/assets/illustrations/empty-no-results.png.js.map +1 -0
- package/dist/assets/illustrations/empty-not-found.png.cjs +2 -0
- package/dist/assets/illustrations/empty-not-found.png.cjs.map +1 -0
- package/dist/assets/illustrations/empty-not-found.png.js +5 -0
- package/dist/assets/illustrations/empty-not-found.png.js.map +1 -0
- package/dist/assets/illustrations/empty-task-approved.png.cjs +2 -0
- package/dist/assets/illustrations/empty-task-approved.png.cjs.map +1 -0
- package/dist/assets/illustrations/empty-task-approved.png.js +5 -0
- package/dist/assets/illustrations/empty-task-approved.png.js.map +1 -0
- package/dist/assets/illustrations/empty-workflow-status.png.cjs +2 -0
- package/dist/assets/illustrations/empty-workflow-status.png.cjs.map +1 -0
- package/dist/assets/illustrations/empty-workflow-status.png.js +5 -0
- package/dist/assets/illustrations/empty-workflow-status.png.js.map +1 -0
- package/dist/assets/illustrations/integrations.png.cjs +2 -0
- package/dist/assets/illustrations/integrations.png.cjs.map +1 -0
- package/dist/assets/illustrations/integrations.png.js +5 -0
- package/dist/assets/illustrations/integrations.png.js.map +1 -0
- package/dist/assets/illustrations/onboarding-tips.png.cjs +2 -0
- package/dist/assets/illustrations/onboarding-tips.png.cjs.map +1 -0
- package/dist/assets/illustrations/onboarding-tips.png.js +5 -0
- package/dist/assets/illustrations/onboarding-tips.png.js.map +1 -0
- package/dist/assets/illustrations/scheduled-tasks.png.cjs +2 -0
- package/dist/assets/illustrations/scheduled-tasks.png.cjs.map +1 -0
- package/dist/assets/illustrations/scheduled-tasks.png.js +5 -0
- package/dist/assets/illustrations/scheduled-tasks.png.js.map +1 -0
- package/dist/assets/illustrations/search-documents.png.cjs +2 -0
- package/dist/assets/illustrations/search-documents.png.cjs.map +1 -0
- package/dist/assets/illustrations/search-documents.png.js +5 -0
- package/dist/assets/illustrations/search-documents.png.js.map +1 -0
- package/dist/assets/illustrations/success-checkmark.png.cjs +2 -0
- package/dist/assets/illustrations/success-checkmark.png.cjs.map +1 -0
- package/dist/assets/illustrations/success-checkmark.png.js +5 -0
- package/dist/assets/illustrations/success-checkmark.png.js.map +1 -0
- package/dist/components/ui/brand-colors.cjs +2 -0
- package/dist/components/ui/brand-colors.cjs.map +1 -0
- package/dist/components/ui/brand-colors.js +8 -0
- package/dist/components/ui/brand-colors.js.map +1 -0
- package/dist/components/ui/charts/chart.cjs +8 -0
- package/dist/components/ui/charts/chart.cjs.map +1 -0
- package/dist/components/ui/charts/chart.js +214 -0
- package/dist/components/ui/charts/chart.js.map +1 -0
- package/dist/components/ui/charts/donut-chart.cjs +2 -0
- package/dist/components/ui/charts/donut-chart.cjs.map +1 -0
- package/dist/components/ui/charts/donut-chart.js +285 -0
- package/dist/components/ui/charts/donut-chart.js.map +1 -0
- package/dist/components/ui/charts/kpi-card.cjs +2 -0
- package/dist/components/ui/charts/kpi-card.cjs.map +1 -0
- package/dist/components/ui/charts/kpi-card.js +75 -0
- package/dist/components/ui/charts/kpi-card.js.map +1 -0
- package/dist/components/ui/data/advanced-data-table.cjs +2 -0
- package/dist/components/ui/data/advanced-data-table.cjs.map +1 -0
- package/dist/components/ui/data/advanced-data-table.js +69 -0
- package/dist/components/ui/data/advanced-data-table.js.map +1 -0
- package/dist/components/ui/data/comment-system.cjs +2 -0
- package/dist/components/ui/data/comment-system.cjs.map +1 -0
- package/dist/components/ui/data/comment-system.js +492 -0
- package/dist/components/ui/data/comment-system.js.map +1 -0
- package/dist/components/ui/data/data-table-empty-state.cjs +2 -0
- package/dist/components/ui/data/data-table-empty-state.cjs.map +1 -0
- package/dist/components/ui/data/data-table-empty-state.js +40 -0
- package/dist/components/ui/data/data-table-empty-state.js.map +1 -0
- package/dist/components/ui/data/data-table-toolbar.cjs +2 -0
- package/dist/components/ui/data/data-table-toolbar.cjs.map +1 -0
- package/dist/components/ui/data/data-table-toolbar.js +85 -0
- package/dist/components/ui/data/data-table-toolbar.js.map +1 -0
- package/dist/components/ui/data/data-table.cjs +2 -0
- package/dist/components/ui/data/data-table.cjs.map +1 -0
- package/dist/components/ui/data/data-table.js +181 -0
- package/dist/components/ui/data/data-table.js.map +1 -0
- package/dist/components/ui/data/document-editor.cjs +2 -0
- package/dist/components/ui/data/document-editor.cjs.map +1 -0
- package/dist/components/ui/data/document-editor.js +158 -0
- package/dist/components/ui/data/document-editor.js.map +1 -0
- package/dist/components/ui/data/editorial-calendar.cjs +2 -0
- package/dist/components/ui/data/editorial-calendar.cjs.map +1 -0
- package/dist/components/ui/data/editorial-calendar.js +840 -0
- package/dist/components/ui/data/editorial-calendar.js.map +1 -0
- package/dist/components/ui/data/filter-bar.cjs +2 -0
- package/dist/components/ui/data/filter-bar.cjs.map +1 -0
- package/dist/components/ui/data/filter-bar.js +60 -0
- package/dist/components/ui/data/filter-bar.js.map +1 -0
- package/dist/components/ui/data/filter-builder.cjs +2 -0
- package/dist/components/ui/data/filter-builder.cjs.map +1 -0
- package/dist/components/ui/data/filter-builder.js +378 -0
- package/dist/components/ui/data/filter-builder.js.map +1 -0
- package/dist/components/ui/data/filter-chip.cjs +2 -0
- package/dist/components/ui/data/filter-chip.cjs.map +1 -0
- package/dist/components/ui/data/filter-chip.js +39 -0
- package/dist/components/ui/data/filter-chip.js.map +1 -0
- package/dist/components/ui/data/mention-list.cjs +2 -0
- package/dist/components/ui/data/mention-list.cjs.map +1 -0
- package/dist/components/ui/data/mention-list.js +46 -0
- package/dist/components/ui/data/mention-list.js.map +1 -0
- package/dist/components/ui/data/table-pagination.cjs +2 -0
- package/dist/components/ui/data/table-pagination.cjs.map +1 -0
- package/dist/components/ui/data/table-pagination.js +176 -0
- package/dist/components/ui/data/table-pagination.js.map +1 -0
- package/dist/components/ui/data/table-types.cjs +2 -0
- package/dist/components/ui/data/table-types.cjs.map +1 -0
- package/dist/components/ui/data/table-types.js +14 -0
- package/dist/components/ui/data/table-types.js.map +1 -0
- package/dist/components/ui/data/table.cjs +2 -0
- package/dist/components/ui/data/table.cjs.map +1 -0
- package/dist/components/ui/data/table.js +130 -0
- package/dist/components/ui/data/table.js.map +1 -0
- package/dist/components/ui/feedback/alert.cjs +2 -0
- package/dist/components/ui/feedback/alert.cjs.map +1 -0
- package/dist/components/ui/feedback/alert.js +67 -0
- package/dist/components/ui/feedback/alert.js.map +1 -0
- package/dist/components/ui/feedback/empty-state.cjs +2 -0
- package/dist/components/ui/feedback/empty-state.cjs.map +1 -0
- package/dist/components/ui/feedback/empty-state.js +78 -0
- package/dist/components/ui/feedback/empty-state.js.map +1 -0
- package/dist/components/ui/feedback/illustrations.cjs +2 -0
- package/dist/components/ui/feedback/illustrations.cjs.map +1 -0
- package/dist/components/ui/feedback/illustrations.js +157 -0
- package/dist/components/ui/feedback/illustrations.js.map +1 -0
- package/dist/components/ui/feedback/toast.cjs +2 -0
- package/dist/components/ui/feedback/toast.cjs.map +1 -0
- package/dist/components/ui/feedback/toast.js +38 -0
- package/dist/components/ui/feedback/toast.js.map +1 -0
- package/dist/components/ui/forms/calendar.cjs +2 -0
- package/dist/components/ui/forms/calendar.cjs.map +1 -0
- package/dist/components/ui/forms/calendar.js +65 -0
- package/dist/components/ui/forms/calendar.js.map +1 -0
- package/dist/components/ui/forms/checkbox.cjs +2 -0
- package/dist/components/ui/forms/checkbox.cjs.map +1 -0
- package/dist/components/ui/forms/checkbox.js +31 -0
- package/dist/components/ui/forms/checkbox.js.map +1 -0
- package/dist/components/ui/forms/color-picker.cjs +2 -0
- package/dist/components/ui/forms/color-picker.cjs.map +1 -0
- package/dist/components/ui/forms/color-picker.js +151 -0
- package/dist/components/ui/forms/color-picker.js.map +1 -0
- package/dist/components/ui/forms/combobox.cjs +2 -0
- package/dist/components/ui/forms/combobox.cjs.map +1 -0
- package/dist/components/ui/forms/combobox.js +208 -0
- package/dist/components/ui/forms/combobox.js.map +1 -0
- package/dist/components/ui/forms/currency-input.cjs +2 -0
- package/dist/components/ui/forms/currency-input.cjs.map +1 -0
- package/dist/components/ui/forms/currency-input.js +81 -0
- package/dist/components/ui/forms/currency-input.js.map +1 -0
- package/dist/components/ui/forms/date-picker.cjs +2 -0
- package/dist/components/ui/forms/date-picker.cjs.map +1 -0
- package/dist/components/ui/forms/date-picker.js +199 -0
- package/dist/components/ui/forms/date-picker.js.map +1 -0
- package/dist/components/ui/forms/date-range-picker.cjs +2 -0
- package/dist/components/ui/forms/date-range-picker.cjs.map +1 -0
- package/dist/components/ui/forms/date-range-picker.js +305 -0
- package/dist/components/ui/forms/date-range-picker.js.map +1 -0
- package/dist/components/ui/forms/editable-badge.cjs +2 -0
- package/dist/components/ui/forms/editable-badge.cjs.map +1 -0
- package/dist/components/ui/forms/editable-badge.js +137 -0
- package/dist/components/ui/forms/editable-badge.js.map +1 -0
- package/dist/components/ui/forms/file-attachment-list.cjs +2 -0
- package/dist/components/ui/forms/file-attachment-list.cjs.map +1 -0
- package/dist/components/ui/forms/file-attachment-list.js +235 -0
- package/dist/components/ui/forms/file-attachment-list.js.map +1 -0
- package/dist/components/ui/forms/file-upload-zone.cjs +3 -0
- package/dist/components/ui/forms/file-upload-zone.cjs.map +1 -0
- package/dist/components/ui/forms/file-upload-zone.js +142 -0
- package/dist/components/ui/forms/file-upload-zone.js.map +1 -0
- package/dist/components/ui/forms/form.cjs +2 -0
- package/dist/components/ui/forms/form.cjs.map +1 -0
- package/dist/components/ui/forms/form.js +109 -0
- package/dist/components/ui/forms/form.js.map +1 -0
- package/dist/components/ui/forms/input-group.cjs +2 -0
- package/dist/components/ui/forms/input-group.cjs.map +1 -0
- package/dist/components/ui/forms/input-group.js +131 -0
- package/dist/components/ui/forms/input-group.js.map +1 -0
- package/dist/components/ui/forms/input-otp.cjs +2 -0
- package/dist/components/ui/forms/input-otp.cjs.map +1 -0
- package/dist/components/ui/forms/input-otp.js +63 -0
- package/dist/components/ui/forms/input-otp.js.map +1 -0
- package/dist/components/ui/forms/input-validation.cjs +2 -0
- package/dist/components/ui/forms/input-validation.cjs.map +1 -0
- package/dist/components/ui/forms/input-validation.js +55 -0
- package/dist/components/ui/forms/input-validation.js.map +1 -0
- package/dist/components/ui/forms/input.cjs +2 -0
- package/dist/components/ui/forms/input.cjs.map +1 -0
- package/dist/components/ui/forms/input.js +26 -0
- package/dist/components/ui/forms/input.js.map +1 -0
- package/dist/components/ui/forms/month-range-picker.cjs +2 -0
- package/dist/components/ui/forms/month-range-picker.cjs.map +1 -0
- package/dist/components/ui/forms/month-range-picker.js +263 -0
- package/dist/components/ui/forms/month-range-picker.js.map +1 -0
- package/dist/components/ui/forms/multi-select.cjs +2 -0
- package/dist/components/ui/forms/multi-select.cjs.map +1 -0
- package/dist/components/ui/forms/multi-select.js +251 -0
- package/dist/components/ui/forms/multi-select.js.map +1 -0
- package/dist/components/ui/forms/number-input.cjs +2 -0
- package/dist/components/ui/forms/number-input.cjs.map +1 -0
- package/dist/components/ui/forms/number-input.js +220 -0
- package/dist/components/ui/forms/number-input.js.map +1 -0
- package/dist/components/ui/forms/password-input.cjs +2 -0
- package/dist/components/ui/forms/password-input.cjs.map +1 -0
- package/dist/components/ui/forms/password-input.js +43 -0
- package/dist/components/ui/forms/password-input.js.map +1 -0
- package/dist/components/ui/forms/radio-group.cjs +2 -0
- package/dist/components/ui/forms/radio-group.cjs.map +1 -0
- package/dist/components/ui/forms/radio-group.js +41 -0
- package/dist/components/ui/forms/radio-group.js.map +1 -0
- package/dist/components/ui/forms/select.cjs +2 -0
- package/dist/components/ui/forms/select.cjs.map +1 -0
- package/dist/components/ui/forms/select.js +140 -0
- package/dist/components/ui/forms/select.js.map +1 -0
- package/dist/components/ui/forms/slider.cjs +2 -0
- package/dist/components/ui/forms/slider.cjs.map +1 -0
- package/dist/components/ui/forms/slider.js +62 -0
- package/dist/components/ui/forms/slider.js.map +1 -0
- package/dist/components/ui/forms/social-button.cjs +2 -0
- package/dist/components/ui/forms/social-button.cjs.map +1 -0
- package/dist/components/ui/forms/social-button.js +86 -0
- package/dist/components/ui/forms/social-button.js.map +1 -0
- package/dist/components/ui/forms/switch.cjs +2 -0
- package/dist/components/ui/forms/switch.cjs.map +1 -0
- package/dist/components/ui/forms/switch.js +31 -0
- package/dist/components/ui/forms/switch.js.map +1 -0
- package/dist/components/ui/forms/textarea.cjs +2 -0
- package/dist/components/ui/forms/textarea.cjs.map +1 -0
- package/dist/components/ui/forms/textarea.js +22 -0
- package/dist/components/ui/forms/textarea.js.map +1 -0
- package/dist/components/ui/forms/time-picker.cjs +2 -0
- package/dist/components/ui/forms/time-picker.cjs.map +1 -0
- package/dist/components/ui/forms/time-picker.js +195 -0
- package/dist/components/ui/forms/time-picker.js.map +1 -0
- package/dist/components/ui/forms/toggle-group.cjs +2 -0
- package/dist/components/ui/forms/toggle-group.cjs.map +1 -0
- package/dist/components/ui/forms/toggle-group.js +53 -0
- package/dist/components/ui/forms/toggle-group.js.map +1 -0
- package/dist/components/ui/forms/toggle.cjs +2 -0
- package/dist/components/ui/forms/toggle.cjs.map +1 -0
- package/dist/components/ui/forms/toggle.js +40 -0
- package/dist/components/ui/forms/toggle.js.map +1 -0
- package/dist/components/ui/layout/accordion.cjs +2 -0
- package/dist/components/ui/layout/accordion.cjs.map +1 -0
- package/dist/components/ui/layout/accordion.js +53 -0
- package/dist/components/ui/layout/accordion.js.map +1 -0
- package/dist/components/ui/layout/auth-layout.cjs +2 -0
- package/dist/components/ui/layout/auth-layout.cjs.map +1 -0
- package/dist/components/ui/layout/auth-layout.js +74 -0
- package/dist/components/ui/layout/auth-layout.js.map +1 -0
- package/dist/components/ui/layout/card.cjs +2 -0
- package/dist/components/ui/layout/card.cjs.map +1 -0
- package/dist/components/ui/layout/card.js +104 -0
- package/dist/components/ui/layout/card.js.map +1 -0
- package/dist/components/ui/layout/carousel.cjs +2 -0
- package/dist/components/ui/layout/carousel.cjs.map +1 -0
- package/dist/components/ui/layout/carousel.js +189 -0
- package/dist/components/ui/layout/carousel.js.map +1 -0
- package/dist/components/ui/layout/collapsible.cjs +2 -0
- package/dist/components/ui/layout/collapsible.cjs.map +1 -0
- package/dist/components/ui/layout/collapsible.js +30 -0
- package/dist/components/ui/layout/collapsible.js.map +1 -0
- package/dist/components/ui/layout/page-header.cjs +2 -0
- package/dist/components/ui/layout/page-header.cjs.map +1 -0
- package/dist/components/ui/layout/page-header.js +81 -0
- package/dist/components/ui/layout/page-header.js.map +1 -0
- package/dist/components/ui/layout/resizable.cjs +2 -0
- package/dist/components/ui/layout/resizable.cjs.map +1 -0
- package/dist/components/ui/layout/resizable.js +45 -0
- package/dist/components/ui/layout/resizable.js.map +1 -0
- package/dist/components/ui/layout/scroll-area.cjs +2 -0
- package/dist/components/ui/layout/scroll-area.cjs.map +1 -0
- package/dist/components/ui/layout/scroll-area.js +56 -0
- package/dist/components/ui/layout/scroll-area.js.map +1 -0
- package/dist/components/ui/navigation/breadcrumb.cjs +2 -0
- package/dist/components/ui/navigation/breadcrumb.cjs.map +1 -0
- package/dist/components/ui/navigation/breadcrumb.js +94 -0
- package/dist/components/ui/navigation/breadcrumb.js.map +1 -0
- package/dist/components/ui/navigation/navigation-menu.cjs +2 -0
- package/dist/components/ui/navigation/navigation-menu.cjs.map +1 -0
- package/dist/components/ui/navigation/navigation-menu.js +144 -0
- package/dist/components/ui/navigation/navigation-menu.js.map +1 -0
- package/dist/components/ui/navigation/pagination.cjs +2 -0
- package/dist/components/ui/navigation/pagination.cjs.map +1 -0
- package/dist/components/ui/navigation/pagination.js +106 -0
- package/dist/components/ui/navigation/pagination.js.map +1 -0
- package/dist/components/ui/navigation/sidebar.cjs +2 -0
- package/dist/components/ui/navigation/sidebar.cjs.map +1 -0
- package/dist/components/ui/navigation/sidebar.js +579 -0
- package/dist/components/ui/navigation/sidebar.js.map +1 -0
- package/dist/components/ui/navigation/tabs.cjs +2 -0
- package/dist/components/ui/navigation/tabs.cjs.map +1 -0
- package/dist/components/ui/navigation/tabs.js +58 -0
- package/dist/components/ui/navigation/tabs.js.map +1 -0
- package/dist/components/ui/navigation/underline-tabs.cjs +2 -0
- package/dist/components/ui/navigation/underline-tabs.cjs.map +1 -0
- package/dist/components/ui/navigation/underline-tabs.js +109 -0
- package/dist/components/ui/navigation/underline-tabs.js.map +1 -0
- package/dist/components/ui/overlays/alert-dialog.cjs +2 -0
- package/dist/components/ui/overlays/alert-dialog.cjs.map +1 -0
- package/dist/components/ui/overlays/alert-dialog.js +135 -0
- package/dist/components/ui/overlays/alert-dialog.js.map +1 -0
- package/dist/components/ui/overlays/command.cjs +2 -0
- package/dist/components/ui/overlays/command.cjs.map +1 -0
- package/dist/components/ui/overlays/command.js +143 -0
- package/dist/components/ui/overlays/command.js.map +1 -0
- package/dist/components/ui/overlays/context-menu.cjs +2 -0
- package/dist/components/ui/overlays/context-menu.cjs.map +1 -0
- package/dist/components/ui/overlays/context-menu.js +197 -0
- package/dist/components/ui/overlays/context-menu.js.map +1 -0
- package/dist/components/ui/overlays/dialog.cjs +2 -0
- package/dist/components/ui/overlays/dialog.cjs.map +1 -0
- package/dist/components/ui/overlays/dialog.js +112 -0
- package/dist/components/ui/overlays/dialog.js.map +1 -0
- package/dist/components/ui/overlays/drawer.cjs +2 -0
- package/dist/components/ui/overlays/drawer.cjs.map +1 -0
- package/dist/components/ui/overlays/drawer.js +109 -0
- package/dist/components/ui/overlays/drawer.js.map +1 -0
- package/dist/components/ui/overlays/dropdown-menu.cjs +2 -0
- package/dist/components/ui/overlays/dropdown-menu.cjs.map +1 -0
- package/dist/components/ui/overlays/dropdown-menu.js +198 -0
- package/dist/components/ui/overlays/dropdown-menu.js.map +1 -0
- package/dist/components/ui/overlays/hover-card.cjs +2 -0
- package/dist/components/ui/overlays/hover-card.cjs.map +1 -0
- package/dist/components/ui/overlays/hover-card.js +40 -0
- package/dist/components/ui/overlays/hover-card.js.map +1 -0
- package/dist/components/ui/overlays/menubar.cjs +2 -0
- package/dist/components/ui/overlays/menubar.cjs.map +1 -0
- package/dist/components/ui/overlays/menubar.js +213 -0
- package/dist/components/ui/overlays/menubar.js.map +1 -0
- package/dist/components/ui/overlays/popover.cjs +2 -0
- package/dist/components/ui/overlays/popover.cjs.map +1 -0
- package/dist/components/ui/overlays/popover.js +36 -0
- package/dist/components/ui/overlays/popover.js.map +1 -0
- package/dist/components/ui/overlays/sheet.cjs +2 -0
- package/dist/components/ui/overlays/sheet.cjs.map +1 -0
- package/dist/components/ui/overlays/sheet.js +109 -0
- package/dist/components/ui/overlays/sheet.js.map +1 -0
- package/dist/components/ui/overlays/side-panel.cjs +16 -0
- package/dist/components/ui/overlays/side-panel.cjs.map +1 -0
- package/dist/components/ui/overlays/side-panel.js +117 -0
- package/dist/components/ui/overlays/side-panel.js.map +1 -0
- package/dist/components/ui/overlays/tooltip.cjs +2 -0
- package/dist/components/ui/overlays/tooltip.cjs.map +1 -0
- package/dist/components/ui/overlays/tooltip.js +50 -0
- package/dist/components/ui/overlays/tooltip.js.map +1 -0
- package/dist/components/ui/primitives/aspect-ratio.cjs +2 -0
- package/dist/components/ui/primitives/aspect-ratio.cjs.map +1 -0
- package/dist/components/ui/primitives/aspect-ratio.js +10 -0
- package/dist/components/ui/primitives/aspect-ratio.js.map +1 -0
- package/dist/components/ui/primitives/avatar.cjs +2 -0
- package/dist/components/ui/primitives/avatar.cjs.map +1 -0
- package/dist/components/ui/primitives/avatar.js +63 -0
- package/dist/components/ui/primitives/avatar.js.map +1 -0
- package/dist/components/ui/primitives/badge.cjs +2 -0
- package/dist/components/ui/primitives/badge.cjs.map +1 -0
- package/dist/components/ui/primitives/badge.js +50 -0
- package/dist/components/ui/primitives/badge.js.map +1 -0
- package/dist/components/ui/primitives/brand-logo.cjs +2 -0
- package/dist/components/ui/primitives/brand-logo.cjs.map +1 -0
- package/dist/components/ui/primitives/brand-logo.js +74 -0
- package/dist/components/ui/primitives/brand-logo.js.map +1 -0
- package/dist/components/ui/primitives/brand-logo.negative-paths.cjs +2 -0
- package/dist/components/ui/primitives/brand-logo.negative-paths.cjs.map +1 -0
- package/dist/components/ui/primitives/brand-logo.negative-paths.js +15 -0
- package/dist/components/ui/primitives/brand-logo.negative-paths.js.map +1 -0
- package/dist/components/ui/primitives/brand-logo.positive-paths.cjs +2 -0
- package/dist/components/ui/primitives/brand-logo.positive-paths.cjs.map +1 -0
- package/dist/components/ui/primitives/brand-logo.positive-paths.js +15 -0
- package/dist/components/ui/primitives/brand-logo.positive-paths.js.map +1 -0
- package/dist/components/ui/primitives/brand-logo.symbol-paths.cjs +2 -0
- package/dist/components/ui/primitives/brand-logo.symbol-paths.cjs.map +1 -0
- package/dist/components/ui/primitives/brand-logo.symbol-paths.js +8 -0
- package/dist/components/ui/primitives/brand-logo.symbol-paths.js.map +1 -0
- package/dist/components/ui/primitives/button.cjs +2 -0
- package/dist/components/ui/primitives/button.cjs.map +1 -0
- package/dist/components/ui/primitives/button.js +52 -0
- package/dist/components/ui/primitives/button.js.map +1 -0
- package/dist/components/ui/primitives/label.cjs +2 -0
- package/dist/components/ui/primitives/label.cjs.map +1 -0
- package/dist/components/ui/primitives/label.js +22 -0
- package/dist/components/ui/primitives/label.js.map +1 -0
- package/dist/components/ui/primitives/progress.cjs +2 -0
- package/dist/components/ui/primitives/progress.cjs.map +1 -0
- package/dist/components/ui/primitives/progress.js +30 -0
- package/dist/components/ui/primitives/progress.js.map +1 -0
- package/dist/components/ui/primitives/separator.cjs +2 -0
- package/dist/components/ui/primitives/separator.cjs.map +1 -0
- package/dist/components/ui/primitives/separator.js +26 -0
- package/dist/components/ui/primitives/separator.js.map +1 -0
- package/dist/components/ui/primitives/skeleton.cjs +2 -0
- package/dist/components/ui/primitives/skeleton.cjs.map +1 -0
- package/dist/components/ui/primitives/skeleton.js +31 -0
- package/dist/components/ui/primitives/skeleton.js.map +1 -0
- package/dist/components/ui/use-controllable-value.cjs +2 -0
- package/dist/components/ui/use-controllable-value.cjs.map +1 -0
- package/dist/components/ui/use-controllable-value.js +14 -0
- package/dist/components/ui/use-controllable-value.js.map +1 -0
- package/dist/components/ui/utils.cjs +2 -0
- package/dist/components/ui/utils.cjs.map +1 -0
- package/dist/components/ui/utils.js +20 -0
- package/dist/components/ui/utils.js.map +1 -0
- package/dist/editor.cjs +2 -0
- package/dist/editor.cjs.map +1 -0
- package/dist/editor.d.cts +114 -0
- package/dist/editor.d.ts +114 -0
- package/dist/editor.js +12 -0
- package/dist/editor.js.map +1 -0
- package/dist/hooks/use-data-table-filters.cjs +2 -0
- package/dist/hooks/use-data-table-filters.cjs.map +1 -0
- package/dist/hooks/use-data-table-filters.js +118 -0
- package/dist/hooks/use-data-table-filters.js.map +1 -0
- package/dist/hooks/use-data-table.cjs +2 -0
- package/dist/hooks/use-data-table.cjs.map +1 -0
- package/dist/hooks/use-data-table.js +84 -0
- package/dist/hooks/use-data-table.js.map +1 -0
- package/dist/hooks/use-mobile.cjs +2 -0
- package/dist/hooks/use-mobile.cjs.map +1 -0
- package/dist/hooks/use-mobile.js +17 -0
- package/dist/hooks/use-mobile.js.map +1 -0
- package/dist/hooks/use-table-pagination.cjs +2 -0
- package/dist/hooks/use-table-pagination.cjs.map +1 -0
- package/dist/hooks/use-table-pagination.js +44 -0
- package/dist/hooks/use-table-pagination.js.map +1 -0
- package/dist/index.cjs +1 -242
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.cts +2939 -0
- package/dist/index.d.ts +2939 -149
- package/dist/index.js +375 -63715
- package/dist/index.js.map +1 -1
- package/dist/preset.css +352 -0
- package/dist/toast-theme.css +100 -0
- package/dist/tokens.css +471 -0
- package/package.json +144 -45
- package/scripts/codemod-v2-renames.mjs +101 -0
- package/scripts/codemod-v2-toast.mjs +84 -0
- package/dist/components/figma/ImageWithFallback.d.ts +0 -3
- package/dist/components/figma/ImageWithFallback.d.ts.map +0 -1
- package/dist/components/print-templates/ContractTemplate.d.ts +0 -89
- package/dist/components/print-templates/ContractTemplate.d.ts.map +0 -1
- package/dist/components/print-templates/ProposalTemplate.d.ts +0 -41
- package/dist/components/print-templates/ProposalTemplate.d.ts.map +0 -1
- package/dist/components/print-templates/index.d.ts +0 -22
- package/dist/components/print-templates/index.d.ts.map +0 -1
- package/dist/components/print-templates/shared/PrintFooter.d.ts +0 -21
- package/dist/components/print-templates/shared/PrintFooter.d.ts.map +0 -1
- package/dist/components/print-templates/shared/PrintHeader.d.ts +0 -38
- package/dist/components/print-templates/shared/PrintHeader.d.ts.map +0 -1
- package/dist/components/print-templates/shared/PrintInfoGrid.d.ts +0 -22
- package/dist/components/print-templates/shared/PrintInfoGrid.d.ts.map +0 -1
- package/dist/components/print-templates/shared/PrintSection.d.ts +0 -29
- package/dist/components/print-templates/shared/PrintSection.d.ts.map +0 -1
- package/dist/components/print-templates/shared/PrintSignature.d.ts +0 -27
- package/dist/components/print-templates/shared/PrintSignature.d.ts.map +0 -1
- package/dist/components/print-templates/shared/PrintTable.d.ts +0 -44
- package/dist/components/print-templates/shared/PrintTable.d.ts.map +0 -1
- package/dist/components/timeline-demo.d.ts +0 -3
- package/dist/components/timeline-demo.d.ts.map +0 -1
- package/dist/components/ui/accordion.d.ts +0 -8
- package/dist/components/ui/accordion.d.ts.map +0 -1
- package/dist/components/ui/advanced-data-table.d.ts +0 -100
- package/dist/components/ui/advanced-data-table.d.ts.map +0 -1
- package/dist/components/ui/alert-dialog.d.ts +0 -15
- package/dist/components/ui/alert-dialog.d.ts.map +0 -1
- package/dist/components/ui/alert-toast.d.ts +0 -11
- package/dist/components/ui/alert-toast.d.ts.map +0 -1
- package/dist/components/ui/alert.d.ts +0 -10
- package/dist/components/ui/alert.d.ts.map +0 -1
- package/dist/components/ui/app-layout-primary-nav.d.ts +0 -30
- package/dist/components/ui/app-layout-primary-nav.d.ts.map +0 -1
- package/dist/components/ui/app-layout-secondary-nav.d.ts +0 -34
- package/dist/components/ui/app-layout-secondary-nav.d.ts.map +0 -1
- package/dist/components/ui/app-layout-user-menu.d.ts +0 -28
- package/dist/components/ui/app-layout-user-menu.d.ts.map +0 -1
- package/dist/components/ui/aspect-ratio.d.ts +0 -4
- package/dist/components/ui/aspect-ratio.d.ts.map +0 -1
- package/dist/components/ui/auth-layout.d.ts +0 -28
- package/dist/components/ui/auth-layout.d.ts.map +0 -1
- package/dist/components/ui/avatar.d.ts +0 -21
- package/dist/components/ui/avatar.d.ts.map +0 -1
- package/dist/components/ui/badge.d.ts +0 -18
- package/dist/components/ui/badge.d.ts.map +0 -1
- package/dist/components/ui/brand-logo.d.ts +0 -7
- package/dist/components/ui/brand-logo.d.ts.map +0 -1
- package/dist/components/ui/breadcrumb.d.ts +0 -12
- package/dist/components/ui/breadcrumb.d.ts.map +0 -1
- package/dist/components/ui/button.d.ts +0 -15
- package/dist/components/ui/button.d.ts.map +0 -1
- package/dist/components/ui/calendar.d.ts +0 -31
- package/dist/components/ui/calendar.d.ts.map +0 -1
- package/dist/components/ui/card.d.ts +0 -10
- package/dist/components/ui/card.d.ts.map +0 -1
- package/dist/components/ui/carousel.d.ts +0 -20
- package/dist/components/ui/carousel.d.ts.map +0 -1
- package/dist/components/ui/chart.d.ts +0 -45
- package/dist/components/ui/chart.d.ts.map +0 -1
- package/dist/components/ui/checkbox.d.ts +0 -5
- package/dist/components/ui/checkbox.d.ts.map +0 -1
- package/dist/components/ui/collapsible.d.ts +0 -6
- package/dist/components/ui/collapsible.d.ts.map +0 -1
- package/dist/components/ui/color-picker.d.ts +0 -13
- package/dist/components/ui/color-picker.d.ts.map +0 -1
- package/dist/components/ui/combobox.d.ts +0 -118
- package/dist/components/ui/combobox.d.ts.map +0 -1
- package/dist/components/ui/command.d.ts +0 -17
- package/dist/components/ui/command.d.ts.map +0 -1
- package/dist/components/ui/comment-system.d.ts +0 -43
- package/dist/components/ui/comment-system.d.ts.map +0 -1
- package/dist/components/ui/context-menu.d.ts +0 -26
- package/dist/components/ui/context-menu.d.ts.map +0 -1
- package/dist/components/ui/contract-print.d.ts +0 -82
- package/dist/components/ui/contract-print.d.ts.map +0 -1
- package/dist/components/ui/currency-input.d.ts +0 -11
- package/dist/components/ui/currency-input.d.ts.map +0 -1
- package/dist/components/ui/data-table.d.ts +0 -30
- package/dist/components/ui/data-table.d.ts.map +0 -1
- package/dist/components/ui/date-picker.d.ts +0 -111
- package/dist/components/ui/date-picker.d.ts.map +0 -1
- package/dist/components/ui/date-range-picker.d.ts +0 -128
- package/dist/components/ui/date-range-picker.d.ts.map +0 -1
- package/dist/components/ui/dialog.d.ts +0 -14
- package/dist/components/ui/dialog.d.ts.map +0 -1
- package/dist/components/ui/document-editor.d.ts +0 -14
- package/dist/components/ui/document-editor.d.ts.map +0 -1
- package/dist/components/ui/donut-chart.d.ts +0 -32
- package/dist/components/ui/donut-chart.d.ts.map +0 -1
- package/dist/components/ui/drawer.d.ts +0 -14
- package/dist/components/ui/drawer.d.ts.map +0 -1
- package/dist/components/ui/dropdown-menu.d.ts +0 -26
- package/dist/components/ui/dropdown-menu.d.ts.map +0 -1
- package/dist/components/ui/editable-badge.d.ts +0 -98
- package/dist/components/ui/editable-badge.d.ts.map +0 -1
- package/dist/components/ui/editorial-calendar.d.ts +0 -22
- package/dist/components/ui/editorial-calendar.d.ts.map +0 -1
- package/dist/components/ui/empty-state.d.ts +0 -59
- package/dist/components/ui/empty-state.d.ts.map +0 -1
- package/dist/components/ui/filter-bar.d.ts +0 -16
- package/dist/components/ui/filter-bar.d.ts.map +0 -1
- package/dist/components/ui/filter-builder.d.ts +0 -39
- package/dist/components/ui/filter-builder.d.ts.map +0 -1
- package/dist/components/ui/filter-chip.d.ts +0 -8
- package/dist/components/ui/filter-chip.d.ts.map +0 -1
- package/dist/components/ui/form.d.ts +0 -25
- package/dist/components/ui/form.d.ts.map +0 -1
- package/dist/components/ui/gantt-chart.d.ts +0 -28
- package/dist/components/ui/gantt-chart.d.ts.map +0 -1
- package/dist/components/ui/hover-card.d.ts +0 -7
- package/dist/components/ui/hover-card.d.ts.map +0 -1
- package/dist/components/ui/illustrations.d.ts +0 -76
- package/dist/components/ui/illustrations.d.ts.map +0 -1
- package/dist/components/ui/index.d.ts +0 -91
- package/dist/components/ui/index.d.ts.map +0 -1
- package/dist/components/ui/input-group.d.ts +0 -19
- package/dist/components/ui/input-group.d.ts.map +0 -1
- package/dist/components/ui/input-otp.d.ts +0 -12
- package/dist/components/ui/input-otp.d.ts.map +0 -1
- package/dist/components/ui/input-validation.d.ts +0 -35
- package/dist/components/ui/input-validation.d.ts.map +0 -1
- package/dist/components/ui/input.d.ts +0 -4
- package/dist/components/ui/input.d.ts.map +0 -1
- package/dist/components/ui/kanban-card.d.ts +0 -59
- package/dist/components/ui/kanban-card.d.ts.map +0 -1
- package/dist/components/ui/kanban-generic-card.d.ts +0 -43
- package/dist/components/ui/kanban-generic-card.d.ts.map +0 -1
- package/dist/components/ui/kpi-card.d.ts +0 -45
- package/dist/components/ui/kpi-card.d.ts.map +0 -1
- package/dist/components/ui/label.d.ts +0 -5
- package/dist/components/ui/label.d.ts.map +0 -1
- package/dist/components/ui/lista-anexos-arquivo.d.ts +0 -47
- package/dist/components/ui/lista-anexos-arquivo.d.ts.map +0 -1
- package/dist/components/ui/mention-list.d.ts +0 -7
- package/dist/components/ui/mention-list.d.ts.map +0 -1
- package/dist/components/ui/menubar.d.ts +0 -27
- package/dist/components/ui/menubar.d.ts.map +0 -1
- package/dist/components/ui/month-range-picker.d.ts +0 -71
- package/dist/components/ui/month-range-picker.d.ts.map +0 -1
- package/dist/components/ui/multi-select.d.ts +0 -98
- package/dist/components/ui/multi-select.d.ts.map +0 -1
- package/dist/components/ui/navigation-menu.d.ts +0 -15
- package/dist/components/ui/navigation-menu.d.ts.map +0 -1
- package/dist/components/ui/number-input.d.ts +0 -83
- package/dist/components/ui/number-input.d.ts.map +0 -1
- package/dist/components/ui/page-header.d.ts +0 -32
- package/dist/components/ui/page-header.d.ts.map +0 -1
- package/dist/components/ui/pagination.d.ts +0 -14
- package/dist/components/ui/pagination.d.ts.map +0 -1
- package/dist/components/ui/password-input.d.ts +0 -7
- package/dist/components/ui/password-input.d.ts.map +0 -1
- package/dist/components/ui/popover.d.ts +0 -8
- package/dist/components/ui/popover.d.ts.map +0 -1
- package/dist/components/ui/progress-timeline.d.ts +0 -42
- package/dist/components/ui/progress-timeline.d.ts.map +0 -1
- package/dist/components/ui/progress.d.ts +0 -7
- package/dist/components/ui/progress.d.ts.map +0 -1
- package/dist/components/ui/radio-group.d.ts +0 -6
- package/dist/components/ui/radio-group.d.ts.map +0 -1
- package/dist/components/ui/resizable.d.ts +0 -9
- package/dist/components/ui/resizable.d.ts.map +0 -1
- package/dist/components/ui/saved-filters.d.ts +0 -16
- package/dist/components/ui/saved-filters.d.ts.map +0 -1
- package/dist/components/ui/scroll-area.d.ts +0 -8
- package/dist/components/ui/scroll-area.d.ts.map +0 -1
- package/dist/components/ui/select.d.ts +0 -16
- package/dist/components/ui/select.d.ts.map +0 -1
- package/dist/components/ui/separator.d.ts +0 -5
- package/dist/components/ui/separator.d.ts.map +0 -1
- package/dist/components/ui/sheet.d.ts +0 -14
- package/dist/components/ui/sheet.d.ts.map +0 -1
- package/dist/components/ui/side-panel.d.ts +0 -40
- package/dist/components/ui/side-panel.d.ts.map +0 -1
- package/dist/components/ui/sidebar.d.ts +0 -70
- package/dist/components/ui/sidebar.d.ts.map +0 -1
- package/dist/components/ui/skeleton.d.ts +0 -8
- package/dist/components/ui/skeleton.d.ts.map +0 -1
- package/dist/components/ui/slider.d.ts +0 -5
- package/dist/components/ui/slider.d.ts.map +0 -1
- package/dist/components/ui/social-button.d.ts +0 -13
- package/dist/components/ui/social-button.d.ts.map +0 -1
- package/dist/components/ui/switch.d.ts +0 -5
- package/dist/components/ui/switch.d.ts.map +0 -1
- package/dist/components/ui/table-pagination.d.ts +0 -131
- package/dist/components/ui/table-pagination.d.ts.map +0 -1
- package/dist/components/ui/table-types.d.ts +0 -320
- package/dist/components/ui/table-types.d.ts.map +0 -1
- package/dist/components/ui/table.d.ts +0 -34
- package/dist/components/ui/table.d.ts.map +0 -1
- package/dist/components/ui/tabs.d.ts +0 -8
- package/dist/components/ui/tabs.d.ts.map +0 -1
- package/dist/components/ui/task-edit-dialog.d.ts +0 -15
- package/dist/components/ui/task-edit-dialog.d.ts.map +0 -1
- package/dist/components/ui/textarea.d.ts +0 -4
- package/dist/components/ui/textarea.d.ts.map +0 -1
- package/dist/components/ui/time-picker.d.ts +0 -85
- package/dist/components/ui/time-picker.d.ts.map +0 -1
- package/dist/components/ui/timeline.d.ts +0 -63
- package/dist/components/ui/timeline.d.ts.map +0 -1
- package/dist/components/ui/toast.d.ts +0 -5
- package/dist/components/ui/toast.d.ts.map +0 -1
- package/dist/components/ui/toggle-group.d.ts +0 -8
- package/dist/components/ui/toggle-group.d.ts.map +0 -1
- package/dist/components/ui/toggle.d.ts +0 -10
- package/dist/components/ui/toggle.d.ts.map +0 -1
- package/dist/components/ui/tooltip.d.ts +0 -8
- package/dist/components/ui/tooltip.d.ts.map +0 -1
- package/dist/components/ui/underline-tabs.d.ts +0 -29
- package/dist/components/ui/underline-tabs.d.ts.map +0 -1
- package/dist/components/ui/use-mobile.d.ts +0 -2
- package/dist/components/ui/use-mobile.d.ts.map +0 -1
- package/dist/components/ui/use-print-contract.d.ts +0 -37
- package/dist/components/ui/use-print-contract.d.ts.map +0 -1
- package/dist/components/ui/utils.d.ts +0 -3
- package/dist/components/ui/utils.d.ts.map +0 -1
- package/dist/components/ui/zona-upload-arquivo.d.ts +0 -34
- package/dist/components/ui/zona-upload-arquivo.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-select.js","sources":["../../../../src/components/ui/forms/multi-select.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Check, ChevronsUpDown, X, Search, Loader2, Plus } from \"lucide-react\";\nimport { cn, mergeRefs, pressableKeyDown } from \"../utils\";\nimport { Button } from \"../primitives/button\";\nimport { Badge } from \"../primitives/badge\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../overlays/popover\";\nimport { Input } from \"./input\";\n\nexport interface MultiSelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n /** Slot para renderização customizada à direita do label — ex: <Badge>Externo</Badge> */\n badge?: React.ReactNode;\n}\n\nexport interface MultiSelectGroup {\n label: string;\n options: MultiSelectOption[];\n /** Quando presente, o header do grupo torna-se clicável e seleciona/deseleciona o grupo */\n value?: string;\n}\n\nexport interface MultiSelectProps {\n /** Valores atualmente selecionados */\n value: string[];\n /** Callback disparado ao alterar a seleção */\n onValueChange: (values: string[]) => void;\n\n /**\n * Opções em lista plana.\n * Use `options` OU `groups` — nunca os dois ao mesmo tempo.\n */\n options?: MultiSelectOption[];\n /**\n * Opções agrupadas hierarquicamente.\n * Use `options` OU `groups` — nunca os dois ao mesmo tempo.\n */\n groups?: MultiSelectGroup[];\n\n placeholder?: string;\n searchPlaceholder?: string;\n emptyMessage?: string;\n\n /** Rótulo acessível do gatilho quando não há `<Label>` associado */\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n\n disabled?: boolean;\n /** Exibe estado de carregamento — substitui a lista por spinner */\n loading?: boolean;\n\n /**\n * Número máximo de chips visíveis no trigger antes de exibir \"+N\".\n * @default 2\n */\n maxVisibleChips?: number;\n\n /**\n * Callback de busca assíncrona — chamado a cada keystroke e ao abrir o dropdown.\n * Quando presente, a filtragem local é desativada (o caller controla `options`/`groups`).\n */\n onSearch?: (query: string) => void;\n\n /**\n * Habilita criação de uma nova opção diretamente no dropdown.\n * Chamado quando o usuário clica em \"Criar '{busca}'\" — o caller é responsável por\n * persistir a opção (ex: chamada de API), atualizar `options`/`value` com o resultado\n * e sinalizar falhas ao usuário (ex: toast). Rejeitar a promise preserva o termo\n * buscado no campo, permitindo corrigir e tentar novamente.\n * Exibido apenas quando não há opção com label idêntico ao termo buscado.\n */\n onCreateOption?: (inputValue: string) => void | Promise<void>;\n /** Customiza o label do botão de criação. @default (query) => `Criar \"${query}\"` */\n createOptionLabel?: (query: string) => string;\n\n className?: string;\n}\n\n/**\n * MultiSelect — Seleção múltipla com chips, busca, grupos hierárquicos e slots de badge por opção.\n *\n * @example\n * ```tsx\n * // Lista plana\n * <MultiSelect\n * value={selectedSquads}\n * onValueChange={setSelectedSquads}\n * options={squads.map(s => ({ value: String(s.id), label: s.name }))}\n * placeholder=\"Selecione os squads\"\n * />\n *\n * // Com badge por opção (ex: funcionários externos)\n * <MultiSelect\n * value={selectedEmployees}\n * onValueChange={setSelectedEmployees}\n * options={employees.map(e => ({\n * value: String(e.id),\n * label: e.name,\n * badge: e.isExternalUser\n * ? <Badge variant=\"secondary\" className=\"text-xs\">Externo</Badge>\n * : undefined,\n * }))}\n * />\n *\n * // Lista hierárquica (grupos de clientes)\n * <MultiSelect\n * value={selectedClients}\n * onValueChange={setSelectedClients}\n * groups={customerGroups.map(g => ({\n * label: g.name,\n * options: g.children.map(c => ({ value: String(c.id), label: c.name })),\n * }))}\n * />\n * ```\n */\nexport const MultiSelect = React.forwardRef<\n React.ElementRef<typeof Button>,\n MultiSelectProps\n>(({\n value,\n onValueChange,\n options,\n groups,\n placeholder = \"Selecione...\",\n searchPlaceholder = \"Buscar...\",\n emptyMessage = \"Nenhum resultado encontrado\",\n disabled = false,\n loading = false,\n maxVisibleChips = 2,\n onSearch,\n onCreateOption,\n createOptionLabel,\n className,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n}, ref) => {\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState(\"\");\n const [isCreating, setIsCreating] = React.useState(false);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n const mergedTriggerRef = React.useMemo(() => mergeRefs(triggerRef, ref), [ref]);\n\n // Callback ref: chamado imediatamente ao montar o elemento (sem timing issue do useEffect).\n // Para a propagação nativa do wheel antes de chegar ao document, onde o\n // react-remove-scroll do Sheet chama preventDefault() em eventos de Portal.\n const listCallbackRef = React.useCallback((el: HTMLDivElement | null) => {\n if (!el) return;\n el.addEventListener(\"wheel\", (e) => e.stopPropagation(), { passive: true });\n }, []);\n\n const allOptions = React.useMemo((): MultiSelectOption[] => {\n if (options) return options;\n if (groups) {\n const groupHeaders: MultiSelectOption[] = groups\n .filter((g) => g.value != null)\n .map((g) => ({ value: g.value!, label: g.label }));\n return [...groupHeaders, ...groups.flatMap((g) => g.options)];\n }\n return [];\n }, [options, groups]);\n\n const isAsyncSearch = !!onSearch;\n\n const filteredOptions = React.useMemo(() => {\n if (!options) return [];\n if (isAsyncSearch) return options;\n const term = search.toLowerCase().trim();\n if (!term) return options;\n return options.filter(\n (o) =>\n o.label.toLowerCase().includes(term) ||\n o.value.toLowerCase().includes(term)\n );\n }, [options, search, isAsyncSearch]);\n\n const filteredGroups = React.useMemo(() => {\n if (!groups) return undefined;\n if (isAsyncSearch) return groups;\n const term = search.toLowerCase().trim();\n if (!term) return groups;\n return groups\n .map((g) => ({\n ...g,\n options: g.options.filter(\n (o) =>\n o.label.toLowerCase().includes(term) ||\n o.value.toLowerCase().includes(term)\n ),\n }))\n .filter((g) => g.options.length > 0);\n }, [groups, search, isAsyncSearch]);\n\n const selectedOptions = React.useMemo(\n () => allOptions.filter((o) => value.includes(o.value)),\n [allOptions, value]\n );\n\n const hasResults = groups\n ? (filteredGroups?.some((g) => g.options.length > 0) ?? false)\n : filteredOptions.length > 0;\n\n const trimmedSearch = search.trim();\n const hasExactMatch = allOptions.some(\n (o) => o.label.trim().toLowerCase() === trimmedSearch.toLowerCase()\n );\n const canCreate = !!onCreateOption && trimmedSearch.length > 0 && !hasExactMatch;\n\n const handleCreate = async () => {\n if (!onCreateOption || isCreating || !trimmedSearch) return;\n setIsCreating(true);\n try {\n await onCreateOption(trimmedSearch);\n setSearch(\"\");\n } catch {\n // Falha na criação: mantém o termo buscado para o usuário corrigir e tentar\n // novamente. O caller é responsável por sinalizar o erro (ex: toast).\n } finally {\n setIsCreating(false);\n }\n };\n\n const handleToggle = (optionValue: string) => {\n if (value.includes(optionValue)) {\n onValueChange(value.filter((v) => v !== optionValue));\n } else {\n onValueChange([...value, optionValue]);\n }\n };\n\n const handleRemoveChip = (optionValue: string, e: React.MouseEvent) => {\n e.stopPropagation();\n onValueChange(value.filter((v) => v !== optionValue));\n };\n\n const handleOpenChange = (next: boolean) => {\n if (disabled) return;\n setOpen(next);\n if (!next) setSearch(\"\");\n };\n\n React.useEffect(() => {\n if (open) onSearch?.(\"\");\n }, [open]);\n\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.target.value);\n onSearch?.(e.target.value);\n };\n\n const visibleChips = selectedOptions.slice(0, maxVisibleChips);\n const overflowCount = selectedOptions.length - maxVisibleChips;\n\n const renderOption = (option: MultiSelectOption) => {\n const selected = value.includes(option.value);\n return (\n <button\n key={option.value}\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n disabled={option.disabled}\n onClick={() => handleToggle(option.value)}\n className={cn(\n \"flex w-full items-center gap-2 rounded-sm px-2 py-1.5 text-sm\",\n \"hover:bg-accent hover:text-accent-foreground\",\n \"focus:bg-accent focus:text-accent-foreground focus:outline-none\",\n \"transition-colors duration-100\",\n option.disabled && \"pointer-events-none opacity-50\"\n )}\n >\n <Check\n className={cn(\n \"h-4 w-4 shrink-0 transition-opacity duration-100\",\n selected ? \"opacity-100\" : \"opacity-0\"\n )}\n />\n <span className=\"flex-1 text-left truncate\">{option.label}</span>\n {option.badge}\n </button>\n );\n };\n\n return (\n <Popover open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <Button\n ref={mergedTriggerRef}\n type=\"button\"\n variant=\"outline\"\n role=\"combobox\"\n aria-expanded={open}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n disabled={disabled}\n className={cn(\n \"w-full min-h-10 h-auto justify-between font-normal px-3 py-2\",\n !value.length && \"text-muted-foreground\",\n className\n )}\n >\n <div className=\"flex flex-wrap items-center gap-1 flex-1 min-w-0\">\n {value.length === 0 ? (\n <span className=\"truncate text-sm\">\n {loading ? \"Carregando...\" : placeholder}\n </span>\n ) : (\n <>\n {visibleChips.map((opt) => (\n <Badge\n key={opt.value}\n variant=\"secondary\"\n className=\"rounded-sm h-5 gap-0.5 pr-1 font-normal max-w-[160px]\"\n >\n <span className=\"truncate text-xs\">{opt.label}</span>\n <span\n role=\"button\"\n tabIndex={0}\n aria-label={`Remover ${opt.label}`}\n className=\"inline-flex items-center justify-center rounded-sm hover:bg-muted/80 cursor-pointer shrink-0 outline-none focus-visible:ring-2 focus-visible:ring-ring/60\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={(e) => handleRemoveChip(opt.value, e)}\n onKeyDown={pressableKeyDown}\n >\n <X className=\"h-3 w-3\" />\n </span>\n </Badge>\n ))}\n {overflowCount > 0 && (\n <Badge\n variant=\"secondary\"\n className=\"rounded-sm h-5 px-1.5 font-normal text-xs shrink-0\"\n >\n +{overflowCount}\n </Badge>\n )}\n </>\n )}\n </div>\n <ChevronsUpDown className=\"ml-2 h-4 w-4 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n\n <PopoverContent\n className=\"p-0 overflow-hidden\"\n style={{\n width: triggerRef.current?.offsetWidth\n ? `${triggerRef.current.offsetWidth}px`\n : \"auto\",\n }}\n align=\"start\"\n onOpenAutoFocus={(e) => {\n // O Radix suprime o autofocus padrão quando este Popover está aninhado em um\n // Dialog/Sheet (o focus-trap do pai disputa o foco com o do Popover). Focamos\n // o input manualmente via ref assim que o conteúdo transiciona para visível.\n e.preventDefault();\n searchInputRef.current?.focus();\n }}\n onWheel={(e) => e.stopPropagation()}\n >\n {/* Busca */}\n <div className=\"flex items-center border-b px-3\">\n <Search className=\"mr-2 h-4 w-4 shrink-0 opacity-50\" />\n <Input\n ref={searchInputRef}\n placeholder={searchPlaceholder}\n value={search}\n onChange={handleSearchChange}\n className=\"h-10 border-0 focus-visible:ring-0 focus-visible:ring-offset-0 px-0\"\n />\n </div>\n\n {/* Criar nova opção */}\n {canCreate && (\n <button\n type=\"button\"\n onClick={handleCreate}\n disabled={isCreating}\n className={cn(\n \"flex w-full items-center gap-2 border-b px-3 py-2 text-sm text-primary\",\n \"hover:bg-accent transition-colors duration-100\",\n \"disabled:opacity-50 disabled:pointer-events-none\"\n )}\n >\n {isCreating ? (\n <Loader2 className=\"h-4 w-4 shrink-0 animate-spin\" />\n ) : (\n <Plus className=\"h-4 w-4 shrink-0\" />\n )}\n <span className=\"truncate\">\n {isCreating\n ? \"Criando...\"\n : (createOptionLabel?.(trimmedSearch) ?? `Criar \"${trimmedSearch}\"`)}\n </span>\n </button>\n )}\n\n {/* Lista */}\n <div ref={listCallbackRef} className=\"max-h-70 overflow-y-auto [&::-webkit-scrollbar]:w-2.5 [&::-webkit-scrollbar-track]:bg-transparent [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-primary/30 [&::-webkit-scrollbar-thumb:hover]:bg-primary/50\">\n <div className=\"p-1\" role=\"listbox\" aria-multiselectable>\n {loading ? (\n <div className=\"flex items-center justify-center gap-2 py-6 text-sm text-muted-foreground\">\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n Carregando...\n </div>\n ) : !hasResults ? (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\n {emptyMessage}\n </div>\n ) : groups ? (\n filteredGroups?.map((group) => (\n <div key={group.label}>\n {group.value ? (\n <button\n type=\"button\"\n onClick={() => handleToggle(group.value!)}\n className={cn(\n \"flex w-full items-center gap-2 rounded-sm px-2 py-1.5\",\n \"hover:bg-accent hover:text-accent-foreground transition-colors duration-100\",\n value.includes(group.value) && \"text-foreground\"\n )}\n >\n <Check\n className={cn(\n \"h-4 w-4 shrink-0 transition-opacity duration-100\",\n value.includes(group.value) ? \"opacity-100\" : \"opacity-0\"\n )}\n />\n <span className=\"text-xs font-semibold uppercase tracking-wide\">\n {group.label}\n </span>\n </button>\n ) : (\n <div className=\"px-2 py-1.5 text-xs font-semibold text-muted-foreground uppercase tracking-wide\">\n {group.label}\n </div>\n )}\n {group.options.map(renderOption)}\n </div>\n ))\n ) : (\n filteredOptions.map(renderOption)\n )}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n );\n});\nMultiSelect.displayName = \"MultiSelect\";\n\nexport default MultiSelect;\n"],"names":["MultiSelect","React","value","onValueChange","options","groups","placeholder","searchPlaceholder","emptyMessage","disabled","loading","maxVisibleChips","onSearch","onCreateOption","createOptionLabel","className","ariaLabel","ariaLabelledby","ref","open","setOpen","search","setSearch","isCreating","setIsCreating","triggerRef","searchInputRef","mergedTriggerRef","mergeRefs","listCallbackRef","el","e","allOptions","g","isAsyncSearch","filteredOptions","term","o","filteredGroups","selectedOptions","hasResults","trimmedSearch","hasExactMatch","canCreate","handleCreate","handleToggle","optionValue","v","handleRemoveChip","handleOpenChange","next","handleSearchChange","visibleChips","overflowCount","renderOption","option","selected","jsxs","cn","jsx","Check","Popover","PopoverTrigger","Button","Fragment","opt","Badge","pressableKeyDown","X","ChevronsUpDown","PopoverContent","_a","Search","Input","Loader2","Plus","group"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime"),re=require("react"),I=require("lucide-react"),m=require("../utils.cjs");function te(o){const s=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(o){for(const l in o)if(l!=="default"){const b=Object.getOwnPropertyDescriptor(o,l);Object.defineProperty(s,l,b.get?b:{enumerable:!0,get:()=>o[l]})}}return s.default=o,Object.freeze(s)}const a=te(re);function ne(o){var p,N;const s=new Intl.NumberFormat(o).formatToParts(11222.3),l=((p=s.find(v=>v.type==="group"))==null?void 0:p.value)??"",b=((N=s.find(v=>v.type==="decimal"))==null?void 0:N.value)??".";return{group:l,decimal:b}}const J=a.forwardRef(({className:o,inputClassName:s,containerClassName:l,style:b,value:p,defaultValue:N=0,onChange:v,min:g=Number.MIN_SAFE_INTEGER,max:h=Number.MAX_SAFE_INTEGER,step:_=1,precision:C=0,formatOptions:k,locale:j="pt-BR",allowMouseWheel:Q=!1,clampValueOnBlur:Z=!0,keepWithinRange:A=!0,showButtons:x=!0,buttonLayout:n="vertical",buttonPosition:F="right",disabled:c,readOnly:u,...d},$)=>{const[O,L]=a.useState(N),[B,w]=a.useState(""),[M,K]=a.useState(!1),R=a.useRef(null),t=p!==void 0?p:O,y=a.useCallback(e=>k?new Intl.NumberFormat(j,k).format(e):e.toFixed(C),[k,j,C]),{group:T,decimal:S}=a.useMemo(()=>ne(j),[j]),ee=e=>{const r=e.replace(/[^\d,.-]/g,""),f=T?r.split(T).join(""):r,V=S==="."?f:f.replace(S,"."),X=parseFloat(V);return isNaN(X)?0:X},q=e=>A?Math.min(Math.max(e,g),h):e,D=a.useCallback((e,r=!1)=>{const f=r?q(e):e;p===void 0&&L(f),v&&v(f)},[p,v,g,h,A]);a.useEffect(()=>{M||w(y(t))},[t,y,M]);const z=()=>{if(c||u)return;const e=t+_;e<=h&&D(e)},E=()=>{if(c||u)return;const e=t-_;e>=g&&D(e)},G=e=>{const f=e.target.value.replace(/[^\d,.-]/g,"");w(f);const V=ee(f);D(V,!1)},P=e=>{if(K(!1),Z){const r=q(t);D(r,!1),w(y(r))}else w(y(t));d.onBlur&&d.onBlur(e)},U=e=>{K(!0);const r=S==="."?t.toString():t.toString().replace(".",S);w(r),e.target.select(),d.onFocus&&d.onFocus(e)},W=e=>{c||u||(e.key==="ArrowUp"?(e.preventDefault(),z()):e.key==="ArrowDown"&&(e.preventDefault(),E()),d.onKeyDown&&d.onKeyDown(e))},Y=e=>{!Q||c||u||!M||(e.preventDefault(),e.deltaY<0?z():e.deltaY>0&&E())};a.useImperativeHandle($,()=>R.current);const H=()=>{if(!x)return null;const e=i.jsx("button",{type:"button",onClick:z,disabled:c||u||t>=h,tabIndex:-1,"aria-label":"Increment",className:m.cn("inline-flex items-center justify-center transition-colors","hover:bg-muted active:bg-accent","disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",n==="vertical"&&"h-4 w-7 rounded-sm",n==="horizontal"&&"h-9 w-9 rounded-l-md border-r border-input bg-input-background"),children:n==="vertical"?i.jsx(I.ChevronUp,{className:"h-3 w-3"}):i.jsx(I.Plus,{className:"h-4 w-4"})},"inc"),r=i.jsx("button",{type:"button",onClick:E,disabled:c||u||t<=g,tabIndex:-1,"aria-label":"Decrement",className:m.cn("inline-flex items-center justify-center transition-colors","hover:bg-muted active:bg-accent","disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent","focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",n==="vertical"&&"h-4 w-7 rounded-sm",n==="horizontal"&&"h-9 w-9 rounded-r-md border-l border-input bg-input-background"),children:n==="vertical"?i.jsx(I.ChevronDown,{className:"h-3 w-3"}):i.jsx(I.Minus,{className:"h-4 w-4"})},"dec");if(n==="vertical")return i.jsxs("div",{className:m.cn("flex flex-col items-center justify-center gap-[2px] self-stretch px-1 shrink-0 overflow-hidden",F==="right"?"order-2 border-l border-input rounded-r-md":"order-[-1] border-r border-input rounded-l-md"),children:[e,r]});if(n==="horizontal")return[r,e]};return n==="horizontal"&&x?i.jsxs("div",{className:m.cn("inline-flex items-center w-full",l),style:b,children:[H(),i.jsx("input",{ref:R,type:"text",inputMode:"decimal","data-slot":"input",className:m.cn("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input flex h-9 w-full min-w-0 border-y px-3 py-1 text-base bg-input-background transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:relative focus-visible:z-10 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive","text-center tabular-nums",o),value:B,onChange:G,onBlur:P,onFocus:U,onKeyDown:W,onWheel:Y,disabled:c,readOnly:u,"aria-valuemin":g,"aria-valuemax":h,"aria-valuenow":t,role:"spinbutton",...d})]}):i.jsxs("div",{className:m.cn("inline-flex w-full items-stretch",l),style:b,children:[i.jsx("input",{ref:R,type:"text",inputMode:"decimal","data-slot":"input",className:m.cn("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input flex h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base bg-input-background transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive","tabular-nums",x&&n==="vertical"&&F==="right"&&"text-right rounded-r-none border-r-0",x&&n==="vertical"&&F==="left"&&"text-left rounded-l-none border-l-0",!x&&"text-right",s,o),value:B,onChange:G,onBlur:P,onFocus:U,onKeyDown:W,onWheel:Y,disabled:c,readOnly:u,"aria-valuemin":g,"aria-valuemax":h,"aria-valuenow":t,role:"spinbutton",...d}),H()]})});J.displayName="NumberInput";exports.NumberInput=J;
|
|
2
|
+
//# sourceMappingURL=number-input.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-input.cjs","sources":["../../../../src/components/ui/forms/number-input.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Plus, Minus, ChevronUp, ChevronDown } from \"lucide-react\";\nimport { cn } from \"../utils\";\n\nexport interface NumberInputProps extends Omit<React.ComponentProps<\"input\">, \"type\" | \"onChange\" | \"value\"> {\n /**\n * Valor controlado\n */\n value?: number;\n /**\n * Valor padrão inicial\n */\n defaultValue?: number;\n /**\n * Callback quando o valor muda\n */\n onChange?: (value: number) => void;\n /**\n * Valor mínimo permitido\n */\n min?: number;\n /**\n * Valor máximo permitido\n */\n max?: number;\n /**\n * Incremento/decremento\n * @default 1\n */\n step?: number;\n /**\n * Casas decimais para exibição\n * @default 0\n */\n precision?: number;\n /**\n * Opções de formatação Intl.NumberFormat\n */\n formatOptions?: Intl.NumberFormatOptions;\n /**\n * Locale para formatação\n * @default \"pt-BR\"\n */\n locale?: string;\n /**\n * Permite incrementar/decrementar com scroll do mouse\n * @default false\n */\n allowMouseWheel?: boolean;\n /**\n * Ajusta valor dentro dos limites ao perder foco\n * @default true\n */\n clampValueOnBlur?: boolean;\n /**\n * Mantém valor sempre dentro do range\n * @default true\n */\n keepWithinRange?: boolean;\n /**\n * Mostra os botões de incremento/decremento\n * @default true\n */\n showButtons?: boolean;\n /**\n * Layout dos botões\n * @default \"vertical\"\n */\n buttonLayout?: \"vertical\" | \"horizontal\";\n /**\n * Posição dos botões (apenas para layout vertical)\n * @default \"right\"\n */\n buttonPosition?: \"right\" | \"left\";\n /**\n * Classes CSS para o container externo\n */\n containerClassName?: string;\n /**\n * Classes CSS adicionais para o input (não sobrescreva padding/alinhamento)\n */\n inputClassName?: string;\n}\n\n// Descobre o separador de milhar e decimal reais do locale (ex: pt-BR usa \".\" e \",\", en-US usa \",\" e \".\")\nfunction getLocaleSeparators(loc: string): { group: string; decimal: string } {\n const parts = new Intl.NumberFormat(loc).formatToParts(11222.3);\n const group = parts.find((p) => p.type === \"group\")?.value ?? \"\";\n const decimal = parts.find((p) => p.type === \"decimal\")?.value ?? \".\";\n return { group, decimal };\n}\n\nconst NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n className,\n inputClassName,\n containerClassName,\n style,\n value: controlledValue,\n defaultValue = 0,\n onChange,\n min = Number.MIN_SAFE_INTEGER,\n max = Number.MAX_SAFE_INTEGER,\n step = 1,\n precision = 0,\n formatOptions,\n locale = \"pt-BR\",\n allowMouseWheel = false,\n clampValueOnBlur = true,\n keepWithinRange = true,\n showButtons = true,\n buttonLayout = \"vertical\",\n buttonPosition = \"right\",\n disabled,\n readOnly,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = React.useState<number>(defaultValue);\n const [displayValue, setDisplayValue] = React.useState<string>(\"\");\n const [isFocused, setIsFocused] = React.useState(false);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n // Usar valor controlado se fornecido, senão usar interno\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n\n // Formata número para exibição\n const formatNumber = React.useCallback((num: number): string => {\n if (formatOptions) {\n return new Intl.NumberFormat(locale, formatOptions).format(num);\n }\n return num.toFixed(precision);\n }, [formatOptions, locale, precision]);\n\n const { group: groupSeparator, decimal: decimalSeparator } = React.useMemo(\n () => getLocaleSeparators(locale),\n [locale]\n );\n\n // Parse string para número, respeitando separador de milhar/decimal do locale\n // (ex: em pt-BR, \"72.000\" deve virar 72000, não 72 — \".\" é milhar, \",\" é decimal)\n const parseValue = (str: string): number => {\n const cleaned = str.replace(/[^\\d,.-]/g, \"\");\n const withoutGroupSeparator = groupSeparator ? cleaned.split(groupSeparator).join(\"\") : cleaned;\n const normalized =\n decimalSeparator === \".\"\n ? withoutGroupSeparator\n : withoutGroupSeparator.replace(decimalSeparator, \".\");\n const parsed = parseFloat(normalized);\n return isNaN(parsed) ? 0 : parsed;\n };\n\n // Clamp value dentro do range\n const clampValue = (val: number): number => {\n if (!keepWithinRange) return val;\n return Math.min(Math.max(val, min), max);\n };\n\n // Atualiza valor\n const updateValue = React.useCallback((newValue: number, shouldClamp = false) => {\n const finalValue = shouldClamp ? clampValue(newValue) : newValue;\n \n if (controlledValue === undefined) {\n setInternalValue(finalValue);\n }\n \n if (onChange) {\n onChange(finalValue);\n }\n }, [controlledValue, onChange, min, max, keepWithinRange]);\n\n // Atualiza display quando valor muda\n React.useEffect(() => {\n if (!isFocused) {\n setDisplayValue(formatNumber(value));\n }\n }, [value, formatNumber, isFocused]);\n\n // Incrementa valor\n const increment = () => {\n if (disabled || readOnly) return;\n const newValue = value + step;\n if (newValue <= max) {\n updateValue(newValue);\n }\n };\n\n // Decrementa valor\n const decrement = () => {\n if (disabled || readOnly) return;\n const newValue = value - step;\n if (newValue >= min) {\n updateValue(newValue);\n }\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const input = e.target.value;\n const cleaned = input.replace(/[^\\d,.-]/g, \"\");\n setDisplayValue(cleaned);\n const parsed = parseValue(cleaned);\n updateValue(parsed, false);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n \n if (clampValueOnBlur) {\n const clamped = clampValue(value);\n updateValue(clamped, false);\n setDisplayValue(formatNumber(clamped));\n } else {\n setDisplayValue(formatNumber(value));\n }\n \n if (props.onBlur) {\n props.onBlur(e);\n }\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n // value.toString() sempre usa \".\" como decimal (JS); ajusta pro separador do locale\n // para ficar consistente com o parseValue ao continuar editando\n const rawValue =\n decimalSeparator === \".\" ? value.toString() : value.toString().replace(\".\", decimalSeparator);\n setDisplayValue(rawValue);\n e.target.select();\n \n if (props.onFocus) {\n props.onFocus(e);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (disabled || readOnly) return;\n \n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n increment();\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n decrement();\n }\n \n if (props.onKeyDown) {\n props.onKeyDown(e);\n }\n };\n\n const handleWheel = (e: React.WheelEvent<HTMLInputElement>) => {\n if (!allowMouseWheel || disabled || readOnly || !isFocused) return;\n \n e.preventDefault();\n if (e.deltaY < 0) {\n increment();\n } else if (e.deltaY > 0) {\n decrement();\n }\n };\n\n // Combina refs\n React.useImperativeHandle(ref, () => inputRef.current!);\n\n // Renderiza botões baseado no layout\n const renderButtons = () => {\n if (!showButtons) return null;\n\n const incrementButton = (\n <button\n key=\"inc\"\n type=\"button\"\n onClick={increment}\n disabled={disabled || readOnly || value >= max}\n tabIndex={-1}\n aria-label=\"Increment\"\n className={cn(\n \"inline-flex items-center justify-center transition-colors\",\n \"hover:bg-muted active:bg-accent\",\n \"disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n buttonLayout === \"vertical\" && \"h-4 w-7 rounded-sm\",\n buttonLayout === \"horizontal\" && \"h-9 w-9 rounded-l-md border-r border-input bg-input-background\"\n )}\n >\n {buttonLayout === \"vertical\" ? (\n <ChevronUp className=\"h-3 w-3\" />\n ) : (\n <Plus className=\"h-4 w-4\" />\n )}\n </button>\n );\n\n const decrementButton = (\n <button\n key=\"dec\"\n type=\"button\"\n onClick={decrement}\n disabled={disabled || readOnly || value <= min}\n tabIndex={-1}\n aria-label=\"Decrement\"\n className={cn(\n \"inline-flex items-center justify-center transition-colors\",\n \"hover:bg-muted active:bg-accent\",\n \"disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n buttonLayout === \"vertical\" && \"h-4 w-7 rounded-sm\",\n buttonLayout === \"horizontal\" && \"h-9 w-9 rounded-r-md border-l border-input bg-input-background\"\n )}\n >\n {buttonLayout === \"vertical\" ? (\n <ChevronDown className=\"h-3 w-3\" />\n ) : (\n <Minus className=\"h-4 w-4\" />\n )}\n </button>\n );\n\n if (buttonLayout === \"vertical\") {\n return (\n <div\n className={cn(\n \"flex flex-col items-center justify-center gap-[2px] self-stretch px-1 shrink-0 overflow-hidden\",\n buttonPosition === \"right\"\n ? \"order-2 border-l border-input rounded-r-md\"\n : \"order-[-1] border-r border-input rounded-l-md\"\n )}\n >\n {incrementButton}\n {decrementButton}\n </div>\n );\n }\n\n if (buttonLayout === \"horizontal\") {\n return [decrementButton, incrementButton];\n }\n\n };\n\n // Layout horizontal tem estrutura diferente\n if (buttonLayout === \"horizontal\" && showButtons) {\n return (\n <div className={cn(\"inline-flex items-center w-full\", containerClassName)} style={style}>\n {renderButtons()}\n <input\n ref={inputRef}\n type=\"text\"\n inputMode=\"decimal\"\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input flex h-9 w-full min-w-0 border-y px-3 py-1 text-base bg-input-background transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:relative focus-visible:z-10 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n \"text-center tabular-nums\",\n className\n )}\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n onWheel={handleWheel}\n disabled={disabled}\n readOnly={readOnly}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n role=\"spinbutton\"\n {...props}\n />\n </div>\n );\n }\n\n // Layout vertical (padrão)\n return (\n <div\n className={cn(\n \"inline-flex w-full items-stretch\",\n containerClassName\n )}\n style={style}\n >\n <input\n ref={inputRef}\n type=\"text\"\n inputMode=\"decimal\"\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input flex h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base bg-input-background transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n \"tabular-nums\",\n showButtons && buttonLayout === \"vertical\" && buttonPosition === \"right\" && \"text-right rounded-r-none border-r-0\",\n showButtons && buttonLayout === \"vertical\" && buttonPosition === \"left\" && \"text-left rounded-l-none border-l-0\",\n !showButtons && \"text-right\",\n inputClassName,\n className\n )}\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n onWheel={handleWheel}\n disabled={disabled}\n readOnly={readOnly}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n role=\"spinbutton\"\n {...props}\n />\n {renderButtons()}\n </div>\n );\n }\n);\n\nNumberInput.displayName = \"NumberInput\";\n\nexport { NumberInput };\n"],"names":["getLocaleSeparators","loc","parts","group","_a","p","decimal","_b","NumberInput","React","className","inputClassName","containerClassName","style","controlledValue","defaultValue","onChange","min","max","step","precision","formatOptions","locale","allowMouseWheel","clampValueOnBlur","keepWithinRange","showButtons","buttonLayout","buttonPosition","disabled","readOnly","props","ref","internalValue","setInternalValue","displayValue","setDisplayValue","isFocused","setIsFocused","inputRef","value","formatNumber","num","groupSeparator","decimalSeparator","parseValue","str","cleaned","withoutGroupSeparator","normalized","parsed","clampValue","val","updateValue","newValue","shouldClamp","finalValue","increment","decrement","handleChange","handleBlur","clamped","handleFocus","rawValue","handleKeyDown","handleWheel","renderButtons","incrementButton","jsx","cn","ChevronUp","Plus","decrementButton","ChevronDown","Minus","jsxs"],"mappings":"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"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as C, jsx as c } from "react/jsx-runtime";
|
|
3
|
+
import * as i from "react";
|
|
4
|
+
import { ChevronUp as ee, Plus as re, ChevronDown as te, Minus as ne } from "lucide-react";
|
|
5
|
+
import { cn as f } from "../utils.js";
|
|
6
|
+
function ie(g) {
|
|
7
|
+
var u, N;
|
|
8
|
+
const h = new Intl.NumberFormat(g).formatToParts(11222.3), x = ((u = h.find((d) => d.type === "group")) == null ? void 0 : u.value) ?? "", w = ((N = h.find((d) => d.type === "decimal")) == null ? void 0 : N.value) ?? ".";
|
|
9
|
+
return { group: x, decimal: w };
|
|
10
|
+
}
|
|
11
|
+
const oe = i.forwardRef(
|
|
12
|
+
({
|
|
13
|
+
className: g,
|
|
14
|
+
inputClassName: h,
|
|
15
|
+
containerClassName: x,
|
|
16
|
+
style: w,
|
|
17
|
+
value: u,
|
|
18
|
+
defaultValue: N = 0,
|
|
19
|
+
onChange: d,
|
|
20
|
+
min: b = Number.MIN_SAFE_INTEGER,
|
|
21
|
+
max: p = Number.MAX_SAFE_INTEGER,
|
|
22
|
+
step: R = 1,
|
|
23
|
+
precision: A = 0,
|
|
24
|
+
formatOptions: D,
|
|
25
|
+
locale: F = "pt-BR",
|
|
26
|
+
allowMouseWheel: P = !1,
|
|
27
|
+
clampValueOnBlur: Q = !0,
|
|
28
|
+
keepWithinRange: B = !0,
|
|
29
|
+
showButtons: v = !0,
|
|
30
|
+
buttonLayout: n = "vertical",
|
|
31
|
+
buttonPosition: S = "right",
|
|
32
|
+
disabled: o,
|
|
33
|
+
readOnly: a,
|
|
34
|
+
...l
|
|
35
|
+
}, Z) => {
|
|
36
|
+
const [$, L] = i.useState(N), [K, m] = i.useState(""), [M, _] = i.useState(!1), E = i.useRef(null), t = u !== void 0 ? u : $, I = i.useCallback((e) => D ? new Intl.NumberFormat(F, D).format(e) : e.toFixed(A), [D, F, A]), { group: G, decimal: k } = i.useMemo(
|
|
37
|
+
() => ie(F),
|
|
38
|
+
[F]
|
|
39
|
+
), O = (e) => {
|
|
40
|
+
const r = e.replace(/[^\d,.-]/g, ""), s = G ? r.split(G).join("") : r, z = k === "." ? s : s.replace(k, "."), J = parseFloat(z);
|
|
41
|
+
return isNaN(J) ? 0 : J;
|
|
42
|
+
}, T = (e) => B ? Math.min(Math.max(e, b), p) : e, y = i.useCallback((e, r = !1) => {
|
|
43
|
+
const s = r ? T(e) : e;
|
|
44
|
+
u === void 0 && L(s), d && d(s);
|
|
45
|
+
}, [u, d, b, p, B]);
|
|
46
|
+
i.useEffect(() => {
|
|
47
|
+
M || m(I(t));
|
|
48
|
+
}, [t, I, M]);
|
|
49
|
+
const V = () => {
|
|
50
|
+
if (o || a) return;
|
|
51
|
+
const e = t + R;
|
|
52
|
+
e <= p && y(e);
|
|
53
|
+
}, j = () => {
|
|
54
|
+
if (o || a) return;
|
|
55
|
+
const e = t - R;
|
|
56
|
+
e >= b && y(e);
|
|
57
|
+
}, U = (e) => {
|
|
58
|
+
const s = e.target.value.replace(/[^\d,.-]/g, "");
|
|
59
|
+
m(s);
|
|
60
|
+
const z = O(s);
|
|
61
|
+
y(z, !1);
|
|
62
|
+
}, W = (e) => {
|
|
63
|
+
if (_(!1), Q) {
|
|
64
|
+
const r = T(t);
|
|
65
|
+
y(r, !1), m(I(r));
|
|
66
|
+
} else
|
|
67
|
+
m(I(t));
|
|
68
|
+
l.onBlur && l.onBlur(e);
|
|
69
|
+
}, Y = (e) => {
|
|
70
|
+
_(!0);
|
|
71
|
+
const r = k === "." ? t.toString() : t.toString().replace(".", k);
|
|
72
|
+
m(r), e.target.select(), l.onFocus && l.onFocus(e);
|
|
73
|
+
}, H = (e) => {
|
|
74
|
+
o || a || (e.key === "ArrowUp" ? (e.preventDefault(), V()) : e.key === "ArrowDown" && (e.preventDefault(), j()), l.onKeyDown && l.onKeyDown(e));
|
|
75
|
+
}, X = (e) => {
|
|
76
|
+
!P || o || a || !M || (e.preventDefault(), e.deltaY < 0 ? V() : e.deltaY > 0 && j());
|
|
77
|
+
};
|
|
78
|
+
i.useImperativeHandle(Z, () => E.current);
|
|
79
|
+
const q = () => {
|
|
80
|
+
if (!v) return null;
|
|
81
|
+
const e = /* @__PURE__ */ c(
|
|
82
|
+
"button",
|
|
83
|
+
{
|
|
84
|
+
type: "button",
|
|
85
|
+
onClick: V,
|
|
86
|
+
disabled: o || a || t >= p,
|
|
87
|
+
tabIndex: -1,
|
|
88
|
+
"aria-label": "Increment",
|
|
89
|
+
className: f(
|
|
90
|
+
"inline-flex items-center justify-center transition-colors",
|
|
91
|
+
"hover:bg-muted active:bg-accent",
|
|
92
|
+
"disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
|
|
93
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",
|
|
94
|
+
n === "vertical" && "h-4 w-7 rounded-sm",
|
|
95
|
+
n === "horizontal" && "h-9 w-9 rounded-l-md border-r border-input bg-input-background"
|
|
96
|
+
),
|
|
97
|
+
children: n === "vertical" ? /* @__PURE__ */ c(ee, { className: "h-3 w-3" }) : /* @__PURE__ */ c(re, { className: "h-4 w-4" })
|
|
98
|
+
},
|
|
99
|
+
"inc"
|
|
100
|
+
), r = /* @__PURE__ */ c(
|
|
101
|
+
"button",
|
|
102
|
+
{
|
|
103
|
+
type: "button",
|
|
104
|
+
onClick: j,
|
|
105
|
+
disabled: o || a || t <= b,
|
|
106
|
+
tabIndex: -1,
|
|
107
|
+
"aria-label": "Decrement",
|
|
108
|
+
className: f(
|
|
109
|
+
"inline-flex items-center justify-center transition-colors",
|
|
110
|
+
"hover:bg-muted active:bg-accent",
|
|
111
|
+
"disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
|
|
112
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",
|
|
113
|
+
n === "vertical" && "h-4 w-7 rounded-sm",
|
|
114
|
+
n === "horizontal" && "h-9 w-9 rounded-r-md border-l border-input bg-input-background"
|
|
115
|
+
),
|
|
116
|
+
children: n === "vertical" ? /* @__PURE__ */ c(te, { className: "h-3 w-3" }) : /* @__PURE__ */ c(ne, { className: "h-4 w-4" })
|
|
117
|
+
},
|
|
118
|
+
"dec"
|
|
119
|
+
);
|
|
120
|
+
if (n === "vertical")
|
|
121
|
+
return /* @__PURE__ */ C(
|
|
122
|
+
"div",
|
|
123
|
+
{
|
|
124
|
+
className: f(
|
|
125
|
+
"flex flex-col items-center justify-center gap-[2px] self-stretch px-1 shrink-0 overflow-hidden",
|
|
126
|
+
S === "right" ? "order-2 border-l border-input rounded-r-md" : "order-[-1] border-r border-input rounded-l-md"
|
|
127
|
+
),
|
|
128
|
+
children: [
|
|
129
|
+
e,
|
|
130
|
+
r
|
|
131
|
+
]
|
|
132
|
+
}
|
|
133
|
+
);
|
|
134
|
+
if (n === "horizontal")
|
|
135
|
+
return [r, e];
|
|
136
|
+
};
|
|
137
|
+
return n === "horizontal" && v ? /* @__PURE__ */ C("div", { className: f("inline-flex items-center w-full", x), style: w, children: [
|
|
138
|
+
q(),
|
|
139
|
+
/* @__PURE__ */ c(
|
|
140
|
+
"input",
|
|
141
|
+
{
|
|
142
|
+
ref: E,
|
|
143
|
+
type: "text",
|
|
144
|
+
inputMode: "decimal",
|
|
145
|
+
"data-slot": "input",
|
|
146
|
+
className: f(
|
|
147
|
+
"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input flex h-9 w-full min-w-0 border-y px-3 py-1 text-base bg-input-background transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
|
148
|
+
"focus-visible:relative focus-visible:z-10 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
|
|
149
|
+
"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
|
|
150
|
+
"text-center tabular-nums",
|
|
151
|
+
g
|
|
152
|
+
),
|
|
153
|
+
value: K,
|
|
154
|
+
onChange: U,
|
|
155
|
+
onBlur: W,
|
|
156
|
+
onFocus: Y,
|
|
157
|
+
onKeyDown: H,
|
|
158
|
+
onWheel: X,
|
|
159
|
+
disabled: o,
|
|
160
|
+
readOnly: a,
|
|
161
|
+
"aria-valuemin": b,
|
|
162
|
+
"aria-valuemax": p,
|
|
163
|
+
"aria-valuenow": t,
|
|
164
|
+
role: "spinbutton",
|
|
165
|
+
...l
|
|
166
|
+
}
|
|
167
|
+
)
|
|
168
|
+
] }) : /* @__PURE__ */ C(
|
|
169
|
+
"div",
|
|
170
|
+
{
|
|
171
|
+
className: f(
|
|
172
|
+
"inline-flex w-full items-stretch",
|
|
173
|
+
x
|
|
174
|
+
),
|
|
175
|
+
style: w,
|
|
176
|
+
children: [
|
|
177
|
+
/* @__PURE__ */ c(
|
|
178
|
+
"input",
|
|
179
|
+
{
|
|
180
|
+
ref: E,
|
|
181
|
+
type: "text",
|
|
182
|
+
inputMode: "decimal",
|
|
183
|
+
"data-slot": "input",
|
|
184
|
+
className: f(
|
|
185
|
+
"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input flex h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base bg-input-background transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
|
186
|
+
"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
|
|
187
|
+
"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
|
|
188
|
+
"tabular-nums",
|
|
189
|
+
v && n === "vertical" && S === "right" && "text-right rounded-r-none border-r-0",
|
|
190
|
+
v && n === "vertical" && S === "left" && "text-left rounded-l-none border-l-0",
|
|
191
|
+
!v && "text-right",
|
|
192
|
+
h,
|
|
193
|
+
g
|
|
194
|
+
),
|
|
195
|
+
value: K,
|
|
196
|
+
onChange: U,
|
|
197
|
+
onBlur: W,
|
|
198
|
+
onFocus: Y,
|
|
199
|
+
onKeyDown: H,
|
|
200
|
+
onWheel: X,
|
|
201
|
+
disabled: o,
|
|
202
|
+
readOnly: a,
|
|
203
|
+
"aria-valuemin": b,
|
|
204
|
+
"aria-valuemax": p,
|
|
205
|
+
"aria-valuenow": t,
|
|
206
|
+
role: "spinbutton",
|
|
207
|
+
...l
|
|
208
|
+
}
|
|
209
|
+
),
|
|
210
|
+
q()
|
|
211
|
+
]
|
|
212
|
+
}
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
);
|
|
216
|
+
oe.displayName = "NumberInput";
|
|
217
|
+
export {
|
|
218
|
+
oe as NumberInput
|
|
219
|
+
};
|
|
220
|
+
//# sourceMappingURL=number-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-input.js","sources":["../../../../src/components/ui/forms/number-input.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Plus, Minus, ChevronUp, ChevronDown } from \"lucide-react\";\nimport { cn } from \"../utils\";\n\nexport interface NumberInputProps extends Omit<React.ComponentProps<\"input\">, \"type\" | \"onChange\" | \"value\"> {\n /**\n * Valor controlado\n */\n value?: number;\n /**\n * Valor padrão inicial\n */\n defaultValue?: number;\n /**\n * Callback quando o valor muda\n */\n onChange?: (value: number) => void;\n /**\n * Valor mínimo permitido\n */\n min?: number;\n /**\n * Valor máximo permitido\n */\n max?: number;\n /**\n * Incremento/decremento\n * @default 1\n */\n step?: number;\n /**\n * Casas decimais para exibição\n * @default 0\n */\n precision?: number;\n /**\n * Opções de formatação Intl.NumberFormat\n */\n formatOptions?: Intl.NumberFormatOptions;\n /**\n * Locale para formatação\n * @default \"pt-BR\"\n */\n locale?: string;\n /**\n * Permite incrementar/decrementar com scroll do mouse\n * @default false\n */\n allowMouseWheel?: boolean;\n /**\n * Ajusta valor dentro dos limites ao perder foco\n * @default true\n */\n clampValueOnBlur?: boolean;\n /**\n * Mantém valor sempre dentro do range\n * @default true\n */\n keepWithinRange?: boolean;\n /**\n * Mostra os botões de incremento/decremento\n * @default true\n */\n showButtons?: boolean;\n /**\n * Layout dos botões\n * @default \"vertical\"\n */\n buttonLayout?: \"vertical\" | \"horizontal\";\n /**\n * Posição dos botões (apenas para layout vertical)\n * @default \"right\"\n */\n buttonPosition?: \"right\" | \"left\";\n /**\n * Classes CSS para o container externo\n */\n containerClassName?: string;\n /**\n * Classes CSS adicionais para o input (não sobrescreva padding/alinhamento)\n */\n inputClassName?: string;\n}\n\n// Descobre o separador de milhar e decimal reais do locale (ex: pt-BR usa \".\" e \",\", en-US usa \",\" e \".\")\nfunction getLocaleSeparators(loc: string): { group: string; decimal: string } {\n const parts = new Intl.NumberFormat(loc).formatToParts(11222.3);\n const group = parts.find((p) => p.type === \"group\")?.value ?? \"\";\n const decimal = parts.find((p) => p.type === \"decimal\")?.value ?? \".\";\n return { group, decimal };\n}\n\nconst NumberInput = React.forwardRef<HTMLInputElement, NumberInputProps>(\n (\n {\n className,\n inputClassName,\n containerClassName,\n style,\n value: controlledValue,\n defaultValue = 0,\n onChange,\n min = Number.MIN_SAFE_INTEGER,\n max = Number.MAX_SAFE_INTEGER,\n step = 1,\n precision = 0,\n formatOptions,\n locale = \"pt-BR\",\n allowMouseWheel = false,\n clampValueOnBlur = true,\n keepWithinRange = true,\n showButtons = true,\n buttonLayout = \"vertical\",\n buttonPosition = \"right\",\n disabled,\n readOnly,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = React.useState<number>(defaultValue);\n const [displayValue, setDisplayValue] = React.useState<string>(\"\");\n const [isFocused, setIsFocused] = React.useState(false);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n // Usar valor controlado se fornecido, senão usar interno\n const value = controlledValue !== undefined ? controlledValue : internalValue;\n\n // Formata número para exibição\n const formatNumber = React.useCallback((num: number): string => {\n if (formatOptions) {\n return new Intl.NumberFormat(locale, formatOptions).format(num);\n }\n return num.toFixed(precision);\n }, [formatOptions, locale, precision]);\n\n const { group: groupSeparator, decimal: decimalSeparator } = React.useMemo(\n () => getLocaleSeparators(locale),\n [locale]\n );\n\n // Parse string para número, respeitando separador de milhar/decimal do locale\n // (ex: em pt-BR, \"72.000\" deve virar 72000, não 72 — \".\" é milhar, \",\" é decimal)\n const parseValue = (str: string): number => {\n const cleaned = str.replace(/[^\\d,.-]/g, \"\");\n const withoutGroupSeparator = groupSeparator ? cleaned.split(groupSeparator).join(\"\") : cleaned;\n const normalized =\n decimalSeparator === \".\"\n ? withoutGroupSeparator\n : withoutGroupSeparator.replace(decimalSeparator, \".\");\n const parsed = parseFloat(normalized);\n return isNaN(parsed) ? 0 : parsed;\n };\n\n // Clamp value dentro do range\n const clampValue = (val: number): number => {\n if (!keepWithinRange) return val;\n return Math.min(Math.max(val, min), max);\n };\n\n // Atualiza valor\n const updateValue = React.useCallback((newValue: number, shouldClamp = false) => {\n const finalValue = shouldClamp ? clampValue(newValue) : newValue;\n \n if (controlledValue === undefined) {\n setInternalValue(finalValue);\n }\n \n if (onChange) {\n onChange(finalValue);\n }\n }, [controlledValue, onChange, min, max, keepWithinRange]);\n\n // Atualiza display quando valor muda\n React.useEffect(() => {\n if (!isFocused) {\n setDisplayValue(formatNumber(value));\n }\n }, [value, formatNumber, isFocused]);\n\n // Incrementa valor\n const increment = () => {\n if (disabled || readOnly) return;\n const newValue = value + step;\n if (newValue <= max) {\n updateValue(newValue);\n }\n };\n\n // Decrementa valor\n const decrement = () => {\n if (disabled || readOnly) return;\n const newValue = value - step;\n if (newValue >= min) {\n updateValue(newValue);\n }\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const input = e.target.value;\n const cleaned = input.replace(/[^\\d,.-]/g, \"\");\n setDisplayValue(cleaned);\n const parsed = parseValue(cleaned);\n updateValue(parsed, false);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n \n if (clampValueOnBlur) {\n const clamped = clampValue(value);\n updateValue(clamped, false);\n setDisplayValue(formatNumber(clamped));\n } else {\n setDisplayValue(formatNumber(value));\n }\n \n if (props.onBlur) {\n props.onBlur(e);\n }\n };\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n // value.toString() sempre usa \".\" como decimal (JS); ajusta pro separador do locale\n // para ficar consistente com o parseValue ao continuar editando\n const rawValue =\n decimalSeparator === \".\" ? value.toString() : value.toString().replace(\".\", decimalSeparator);\n setDisplayValue(rawValue);\n e.target.select();\n \n if (props.onFocus) {\n props.onFocus(e);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (disabled || readOnly) return;\n \n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n increment();\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n decrement();\n }\n \n if (props.onKeyDown) {\n props.onKeyDown(e);\n }\n };\n\n const handleWheel = (e: React.WheelEvent<HTMLInputElement>) => {\n if (!allowMouseWheel || disabled || readOnly || !isFocused) return;\n \n e.preventDefault();\n if (e.deltaY < 0) {\n increment();\n } else if (e.deltaY > 0) {\n decrement();\n }\n };\n\n // Combina refs\n React.useImperativeHandle(ref, () => inputRef.current!);\n\n // Renderiza botões baseado no layout\n const renderButtons = () => {\n if (!showButtons) return null;\n\n const incrementButton = (\n <button\n key=\"inc\"\n type=\"button\"\n onClick={increment}\n disabled={disabled || readOnly || value >= max}\n tabIndex={-1}\n aria-label=\"Increment\"\n className={cn(\n \"inline-flex items-center justify-center transition-colors\",\n \"hover:bg-muted active:bg-accent\",\n \"disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n buttonLayout === \"vertical\" && \"h-4 w-7 rounded-sm\",\n buttonLayout === \"horizontal\" && \"h-9 w-9 rounded-l-md border-r border-input bg-input-background\"\n )}\n >\n {buttonLayout === \"vertical\" ? (\n <ChevronUp className=\"h-3 w-3\" />\n ) : (\n <Plus className=\"h-4 w-4\" />\n )}\n </button>\n );\n\n const decrementButton = (\n <button\n key=\"dec\"\n type=\"button\"\n onClick={decrement}\n disabled={disabled || readOnly || value <= min}\n tabIndex={-1}\n aria-label=\"Decrement\"\n className={cn(\n \"inline-flex items-center justify-center transition-colors\",\n \"hover:bg-muted active:bg-accent\",\n \"disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1\",\n buttonLayout === \"vertical\" && \"h-4 w-7 rounded-sm\",\n buttonLayout === \"horizontal\" && \"h-9 w-9 rounded-r-md border-l border-input bg-input-background\"\n )}\n >\n {buttonLayout === \"vertical\" ? (\n <ChevronDown className=\"h-3 w-3\" />\n ) : (\n <Minus className=\"h-4 w-4\" />\n )}\n </button>\n );\n\n if (buttonLayout === \"vertical\") {\n return (\n <div\n className={cn(\n \"flex flex-col items-center justify-center gap-[2px] self-stretch px-1 shrink-0 overflow-hidden\",\n buttonPosition === \"right\"\n ? \"order-2 border-l border-input rounded-r-md\"\n : \"order-[-1] border-r border-input rounded-l-md\"\n )}\n >\n {incrementButton}\n {decrementButton}\n </div>\n );\n }\n\n if (buttonLayout === \"horizontal\") {\n return [decrementButton, incrementButton];\n }\n\n };\n\n // Layout horizontal tem estrutura diferente\n if (buttonLayout === \"horizontal\" && showButtons) {\n return (\n <div className={cn(\"inline-flex items-center w-full\", containerClassName)} style={style}>\n {renderButtons()}\n <input\n ref={inputRef}\n type=\"text\"\n inputMode=\"decimal\"\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input flex h-9 w-full min-w-0 border-y px-3 py-1 text-base bg-input-background transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:relative focus-visible:z-10 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n \"text-center tabular-nums\",\n className\n )}\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n onWheel={handleWheel}\n disabled={disabled}\n readOnly={readOnly}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n role=\"spinbutton\"\n {...props}\n />\n </div>\n );\n }\n\n // Layout vertical (padrão)\n return (\n <div\n className={cn(\n \"inline-flex w-full items-stretch\",\n containerClassName\n )}\n style={style}\n >\n <input\n ref={inputRef}\n type=\"text\"\n inputMode=\"decimal\"\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input flex h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base bg-input-background transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n \"tabular-nums\",\n showButtons && buttonLayout === \"vertical\" && buttonPosition === \"right\" && \"text-right rounded-r-none border-r-0\",\n showButtons && buttonLayout === \"vertical\" && buttonPosition === \"left\" && \"text-left rounded-l-none border-l-0\",\n !showButtons && \"text-right\",\n inputClassName,\n className\n )}\n value={displayValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n onWheel={handleWheel}\n disabled={disabled}\n readOnly={readOnly}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n role=\"spinbutton\"\n {...props}\n />\n {renderButtons()}\n </div>\n );\n }\n);\n\nNumberInput.displayName = \"NumberInput\";\n\nexport { NumberInput };\n"],"names":["getLocaleSeparators","loc","parts","group","_a","p","decimal","_b","NumberInput","React","className","inputClassName","containerClassName","style","controlledValue","defaultValue","onChange","min","max","step","precision","formatOptions","locale","allowMouseWheel","clampValueOnBlur","keepWithinRange","showButtons","buttonLayout","buttonPosition","disabled","readOnly","props","ref","internalValue","setInternalValue","displayValue","setDisplayValue","isFocused","setIsFocused","inputRef","value","formatNumber","num","groupSeparator","decimalSeparator","parseValue","str","cleaned","withoutGroupSeparator","normalized","parsed","clampValue","val","updateValue","newValue","shouldClamp","finalValue","increment","decrement","handleChange","handleBlur","clamped","handleFocus","rawValue","handleKeyDown","handleWheel","renderButtons","incrementButton","jsx","cn","ChevronUp","Plus","decrementButton","ChevronDown","Minus","jsxs"],"mappings":";;;;;AAuFA,SAASA,GAAoBC,GAAiD;;AAC5E,QAAMC,IAAQ,IAAI,KAAK,aAAaD,CAAG,EAAE,cAAc,OAAO,GACxDE,MAAQC,IAAAF,EAAM,KAAK,CAACG,MAAMA,EAAE,SAAS,OAAO,MAApC,gBAAAD,EAAuC,UAAS,IACxDE,MAAUC,IAAAL,EAAM,KAAK,CAACG,MAAMA,EAAE,SAAS,SAAS,MAAtC,gBAAAE,EAAyC,UAAS;AAClE,SAAO,EAAE,OAAAJ,GAAO,SAAAG,EAAA;AAClB;AAEA,MAAME,KAAcC,EAAM;AAAA,EACxB,CACE;AAAA,IACE,WAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,OAAAC;AAAA,IACA,OAAOC;AAAA,IACP,cAAAC,IAAe;AAAA,IACf,UAAAC;AAAA,IACA,KAAAC,IAAM,OAAO;AAAA,IACb,KAAAC,IAAM,OAAO;AAAA,IACb,MAAAC,IAAO;AAAA,IACP,WAAAC,IAAY;AAAA,IACZ,eAAAC;AAAA,IACA,QAAAC,IAAS;AAAA,IACT,iBAAAC,IAAkB;AAAA,IAClB,kBAAAC,IAAmB;AAAA,IACnB,iBAAAC,IAAkB;AAAA,IAClB,aAAAC,IAAc;AAAA,IACd,cAAAC,IAAe;AAAA,IACf,gBAAAC,IAAiB;AAAA,IACjB,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAM,CAACC,GAAeC,CAAgB,IAAIzB,EAAM,SAAiBM,CAAY,GACvE,CAACoB,GAAcC,CAAe,IAAI3B,EAAM,SAAiB,EAAE,GAC3D,CAAC4B,GAAWC,CAAY,IAAI7B,EAAM,SAAS,EAAK,GAChD8B,IAAW9B,EAAM,OAAyB,IAAI,GAG9C+B,IAAQ1B,MAAoB,SAAYA,IAAkBmB,GAG1DQ,IAAehC,EAAM,YAAY,CAACiC,MAClCrB,IACK,IAAI,KAAK,aAAaC,GAAQD,CAAa,EAAE,OAAOqB,CAAG,IAEzDA,EAAI,QAAQtB,CAAS,GAC3B,CAACC,GAAeC,GAAQF,CAAS,CAAC,GAE/B,EAAE,OAAOuB,GAAgB,SAASC,EAAA,IAAqBnC,EAAM;AAAA,MACjE,MAAMT,GAAoBsB,CAAM;AAAA,MAChC,CAACA,CAAM;AAAA,IAAA,GAKHuB,IAAa,CAACC,MAAwB;AAC1C,YAAMC,IAAUD,EAAI,QAAQ,aAAa,EAAE,GACrCE,IAAwBL,IAAiBI,EAAQ,MAAMJ,CAAc,EAAE,KAAK,EAAE,IAAII,GAClFE,IACJL,MAAqB,MACjBI,IACAA,EAAsB,QAAQJ,GAAkB,GAAG,GACnDM,IAAS,WAAWD,CAAU;AACpC,aAAO,MAAMC,CAAM,IAAI,IAAIA;AAAA,IAC7B,GAGMC,IAAa,CAACC,MACb3B,IACE,KAAK,IAAI,KAAK,IAAI2B,GAAKnC,CAAG,GAAGC,CAAG,IADVkC,GAKzBC,IAAc5C,EAAM,YAAY,CAAC6C,GAAkBC,IAAc,OAAU;AAC/E,YAAMC,IAAaD,IAAcJ,EAAWG,CAAQ,IAAIA;AAExD,MAAIxC,MAAoB,UACtBoB,EAAiBsB,CAAU,GAGzBxC,KACFA,EAASwC,CAAU;AAAA,IAEvB,GAAG,CAAC1C,GAAiBE,GAAUC,GAAKC,GAAKO,CAAe,CAAC;AAGzD,IAAAhB,EAAM,UAAU,MAAM;AACpB,MAAK4B,KACHD,EAAgBK,EAAaD,CAAK,CAAC;AAAA,IAEvC,GAAG,CAACA,GAAOC,GAAcJ,CAAS,CAAC;AAGnC,UAAMoB,IAAY,MAAM;AACtB,UAAI5B,KAAYC,EAAU;AAC1B,YAAMwB,IAAWd,IAAQrB;AACzB,MAAImC,KAAYpC,KACdmC,EAAYC,CAAQ;AAAA,IAExB,GAGMI,IAAY,MAAM;AACtB,UAAI7B,KAAYC,EAAU;AAC1B,YAAMwB,IAAWd,IAAQrB;AACzB,MAAImC,KAAYrC,KACdoC,EAAYC,CAAQ;AAAA,IAExB,GAEMK,IAAe,CAAC,MAA2C;AAE/D,YAAMZ,IADQ,EAAE,OAAO,MACD,QAAQ,aAAa,EAAE;AAC7C,MAAAX,EAAgBW,CAAO;AACvB,YAAMG,IAASL,EAAWE,CAAO;AACjC,MAAAM,EAAYH,GAAQ,EAAK;AAAA,IAC3B,GAEMU,IAAa,CAAC,MAA0C;AAG5D,UAFAtB,EAAa,EAAK,GAEdd,GAAkB;AACpB,cAAMqC,IAAUV,EAAWX,CAAK;AAChC,QAAAa,EAAYQ,GAAS,EAAK,GAC1BzB,EAAgBK,EAAaoB,CAAO,CAAC;AAAA,MACvC;AACE,QAAAzB,EAAgBK,EAAaD,CAAK,CAAC;AAGrC,MAAIT,EAAM,UACRA,EAAM,OAAO,CAAC;AAAA,IAElB,GAEM+B,IAAc,CAAC,MAA0C;AAC7D,MAAAxB,EAAa,EAAI;AAGjB,YAAMyB,IACJnB,MAAqB,MAAMJ,EAAM,SAAA,IAAaA,EAAM,SAAA,EAAW,QAAQ,KAAKI,CAAgB;AAC9F,MAAAR,EAAgB2B,CAAQ,GACxB,EAAE,OAAO,OAAA,GAELhC,EAAM,WACRA,EAAM,QAAQ,CAAC;AAAA,IAEnB,GAEMiC,IAAgB,CAAC,MAA6C;AAClE,MAAInC,KAAYC,MAEZ,EAAE,QAAQ,aACZ,EAAE,eAAA,GACF2B,EAAA,KACS,EAAE,QAAQ,gBACnB,EAAE,eAAA,GACFC,EAAA,IAGE3B,EAAM,aACRA,EAAM,UAAU,CAAC;AAAA,IAErB,GAEMkC,IAAc,CAAC,MAA0C;AAC7D,MAAI,CAAC1C,KAAmBM,KAAYC,KAAY,CAACO,MAEjD,EAAE,eAAA,GACE,EAAE,SAAS,IACboB,EAAA,IACS,EAAE,SAAS,KACpBC,EAAA;AAAA,IAEJ;AAGA,IAAAjD,EAAM,oBAAoBuB,GAAK,MAAMO,EAAS,OAAQ;AAGtD,UAAM2B,IAAgB,MAAM;AAC1B,UAAI,CAACxC,EAAa,QAAO;AAEzB,YAAMyC,IACJ,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,MAAK;AAAA,UACL,SAASX;AAAA,UACT,UAAU5B,KAAYC,KAAYU,KAAStB;AAAA,UAC3C,UAAU;AAAA,UACV,cAAW;AAAA,UACX,WAAWmD;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA1C,MAAiB,cAAc;AAAA,YAC/BA,MAAiB,gBAAgB;AAAA,UAAA;AAAA,UAGlC,UAAAA,MAAiB,aAChB,gBAAAyC,EAACE,IAAA,EAAU,WAAU,WAAU,IAE/B,gBAAAF,EAACG,IAAA,EAAK,WAAU,UAAA,CAAU;AAAA,QAAA;AAAA,QAlBxB;AAAA,MAAA,GAuBFC,IACJ,gBAAAJ;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,MAAK;AAAA,UACL,SAASV;AAAA,UACT,UAAU7B,KAAYC,KAAYU,KAASvB;AAAA,UAC3C,UAAU;AAAA,UACV,cAAW;AAAA,UACX,WAAWoD;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA1C,MAAiB,cAAc;AAAA,YAC/BA,MAAiB,gBAAgB;AAAA,UAAA;AAAA,UAGlC,UAAAA,MAAiB,aAChB,gBAAAyC,EAACK,IAAA,EAAY,WAAU,WAAU,IAEjC,gBAAAL,EAACM,IAAA,EAAM,WAAU,UAAA,CAAU;AAAA,QAAA;AAAA,QAlBzB;AAAA,MAAA;AAuBR,UAAI/C,MAAiB;AACnB,eACE,gBAAAgD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWN;AAAA,cACT;AAAA,cACAzC,MAAmB,UACf,+CACA;AAAA,YAAA;AAAA,YAGL,UAAA;AAAA,cAAAuC;AAAA,cACAK;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAKP,UAAI7C,MAAiB;AACnB,eAAO,CAAC6C,GAAiBL,CAAe;AAAA,IAG5C;AAGA,WAAIxC,MAAiB,gBAAgBD,sBAEhC,OAAA,EAAI,WAAW2C,EAAG,mCAAmCzD,CAAkB,GAAG,OAAAC,GACxE,UAAA;AAAA,MAAAqD,EAAA;AAAA,MACD,gBAAAE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAK7B;AAAA,UACL,MAAK;AAAA,UACL,WAAU;AAAA,UACV,aAAU;AAAA,UACV,WAAW8B;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA3D;AAAA,UAAA;AAAA,UAEF,OAAOyB;AAAA,UACP,UAAUwB;AAAA,UACV,QAAQC;AAAA,UACR,SAASE;AAAA,UACT,WAAWE;AAAA,UACX,SAASC;AAAA,UACT,UAAApC;AAAA,UACA,UAAAC;AAAA,UACA,iBAAeb;AAAA,UACf,iBAAeC;AAAA,UACf,iBAAesB;AAAA,UACf,MAAK;AAAA,UACJ,GAAGT;AAAA,QAAA;AAAA,MAAA;AAAA,IACN,GACF,IAMF,gBAAA4C;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWN;AAAA,UACT;AAAA,UACAzD;AAAA,QAAA;AAAA,QAEF,OAAAC;AAAA,QAEA,UAAA;AAAA,UAAA,gBAAAuD;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAK7B;AAAA,cACL,MAAK;AAAA,cACL,WAAU;AAAA,cACV,aAAU;AAAA,cACV,WAAW8B;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA3C,KAAeC,MAAiB,cAAcC,MAAmB,WAAW;AAAA,gBAC5EF,KAAeC,MAAiB,cAAcC,MAAmB,UAAU;AAAA,gBAC3E,CAACF,KAAe;AAAA,gBAChBf;AAAA,gBACAD;AAAA,cAAA;AAAA,cAEF,OAAOyB;AAAA,cACP,UAAUwB;AAAA,cACV,QAAQC;AAAA,cACR,SAASE;AAAA,cACT,WAAWE;AAAA,cACX,SAASC;AAAA,cACT,UAAApC;AAAA,cACA,UAAAC;AAAA,cACA,iBAAeb;AAAA,cACf,iBAAeC;AAAA,cACf,iBAAesB;AAAA,cACf,MAAK;AAAA,cACJ,GAAGT;AAAA,YAAA;AAAA,UAAA;AAAA,UAELmC,EAAA;AAAA,QAAc;AAAA,MAAA;AAAA,IAAA;AAAA,EAGrB;AACF;AAEA1D,GAAY,cAAc;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime"),u=require("react"),n=require("lucide-react"),c=require("../utils.cjs");function f(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const s=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,s.get?s:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const a=f(u),d=a.forwardRef(({className:e,showToggle:t=!0,...r},s)=>{const[o,l]=a.useState(!1);return i.jsxs("div",{className:"relative",children:[i.jsx("input",{type:o?"text":"password","data-slot":"input",className:c.cn("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input flex h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base bg-input-background transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",t&&"pr-10",e),ref:s,...r}),t&&i.jsx("button",{type:"button",onClick:()=>l(!o),className:"absolute right-0 top-0 h-full px-3 py-2 hover:bg-transparent",tabIndex:-1,"aria-label":o?"Hide password":"Show password",children:o?i.jsx(n.EyeOff,{className:"h-4 w-4 text-muted-foreground"}):i.jsx(n.Eye,{className:"h-4 w-4 text-muted-foreground"})})]})});d.displayName="PasswordInput";exports.PasswordInput=d;
|
|
2
|
+
//# sourceMappingURL=password-input.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-input.cjs","sources":["../../../../src/components/ui/forms/password-input.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Eye, EyeOff } from \"lucide-react\";\nimport { cn } from \"../utils\";\n\nexport interface PasswordInputProps extends Omit<React.ComponentProps<\"input\">, \"type\"> {\n showToggle?: boolean;\n}\n\nconst PasswordInput = React.forwardRef<HTMLInputElement, PasswordInputProps>(\n ({ className, showToggle = true, ...props }, ref) => {\n const [showPassword, setShowPassword] = React.useState(false);\n\n return (\n <div className=\"relative\">\n <input\n type={showPassword ? \"text\" : \"password\"}\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input flex h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base bg-input-background transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n showToggle && \"pr-10\",\n className,\n )}\n ref={ref}\n {...props}\n />\n {showToggle && (\n <button\n type=\"button\"\n onClick={() => setShowPassword(!showPassword)}\n className=\"absolute right-0 top-0 h-full px-3 py-2 hover:bg-transparent\"\n tabIndex={-1}\n aria-label={showPassword ? \"Hide password\" : \"Show password\"}\n >\n {showPassword ? (\n <EyeOff className=\"h-4 w-4 text-muted-foreground\" />\n ) : (\n <Eye className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </button>\n )}\n </div>\n );\n }\n);\n\nPasswordInput.displayName = \"PasswordInput\";\n\nexport { PasswordInput };\n"],"names":["PasswordInput","React","className","showToggle","props","ref","showPassword","setShowPassword","jsxs","jsx","cn","EyeOff","Eye"],"mappings":"sdAQMA,EAAgBC,EAAM,WAC1B,CAAC,CAAE,UAAAC,EAAW,WAAAC,EAAa,GAAM,GAAGC,CAAA,EAASC,IAAQ,CACnD,KAAM,CAACC,EAAcC,CAAe,EAAIN,EAAM,SAAS,EAAK,EAE5D,OACEO,EAAAA,KAAC,MAAA,CAAI,UAAU,WACb,SAAA,CAAAC,EAAAA,IAAC,QAAA,CACC,KAAMH,EAAe,OAAS,WAC9B,YAAU,QACV,UAAWI,EAAAA,GACT,4aACA,gFACA,yGACAP,GAAc,QACdD,CAAA,EAEF,IAAAG,EACC,GAAGD,CAAA,CAAA,EAELD,GACCM,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,QAAS,IAAMF,EAAgB,CAACD,CAAY,EAC5C,UAAU,+DACV,SAAU,GACV,aAAYA,EAAe,gBAAkB,gBAE5C,SAAAA,QACEK,EAAAA,OAAA,CAAO,UAAU,gCAAgC,EAElDF,EAAAA,IAACG,EAAAA,IAAA,CAAI,UAAU,+BAAA,CAAgC,CAAA,CAAA,CAEnD,EAEJ,CAEJ,CACF,EAEAZ,EAAc,YAAc"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsxs as d, jsx as r } from "react/jsx-runtime";
|
|
2
|
+
import * as i from "react";
|
|
3
|
+
import { EyeOff as l, Eye as u } from "lucide-react";
|
|
4
|
+
import { cn as p } from "../utils.js";
|
|
5
|
+
const f = i.forwardRef(
|
|
6
|
+
({ className: o, showToggle: t = !0, ...s }, a) => {
|
|
7
|
+
const [e, n] = i.useState(!1);
|
|
8
|
+
return /* @__PURE__ */ d("div", { className: "relative", children: [
|
|
9
|
+
/* @__PURE__ */ r(
|
|
10
|
+
"input",
|
|
11
|
+
{
|
|
12
|
+
type: e ? "text" : "password",
|
|
13
|
+
"data-slot": "input",
|
|
14
|
+
className: p(
|
|
15
|
+
"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input flex h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base bg-input-background transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
|
16
|
+
"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
|
|
17
|
+
"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
|
|
18
|
+
t && "pr-10",
|
|
19
|
+
o
|
|
20
|
+
),
|
|
21
|
+
ref: a,
|
|
22
|
+
...s
|
|
23
|
+
}
|
|
24
|
+
),
|
|
25
|
+
t && /* @__PURE__ */ r(
|
|
26
|
+
"button",
|
|
27
|
+
{
|
|
28
|
+
type: "button",
|
|
29
|
+
onClick: () => n(!e),
|
|
30
|
+
className: "absolute right-0 top-0 h-full px-3 py-2 hover:bg-transparent",
|
|
31
|
+
tabIndex: -1,
|
|
32
|
+
"aria-label": e ? "Hide password" : "Show password",
|
|
33
|
+
children: e ? /* @__PURE__ */ r(l, { className: "h-4 w-4 text-muted-foreground" }) : /* @__PURE__ */ r(u, { className: "h-4 w-4 text-muted-foreground" })
|
|
34
|
+
}
|
|
35
|
+
)
|
|
36
|
+
] });
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
f.displayName = "PasswordInput";
|
|
40
|
+
export {
|
|
41
|
+
f as PasswordInput
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=password-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-input.js","sources":["../../../../src/components/ui/forms/password-input.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Eye, EyeOff } from \"lucide-react\";\nimport { cn } from \"../utils\";\n\nexport interface PasswordInputProps extends Omit<React.ComponentProps<\"input\">, \"type\"> {\n showToggle?: boolean;\n}\n\nconst PasswordInput = React.forwardRef<HTMLInputElement, PasswordInputProps>(\n ({ className, showToggle = true, ...props }, ref) => {\n const [showPassword, setShowPassword] = React.useState(false);\n\n return (\n <div className=\"relative\">\n <input\n type={showPassword ? \"text\" : \"password\"}\n data-slot=\"input\"\n className={cn(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input flex h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base bg-input-background transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n showToggle && \"pr-10\",\n className,\n )}\n ref={ref}\n {...props}\n />\n {showToggle && (\n <button\n type=\"button\"\n onClick={() => setShowPassword(!showPassword)}\n className=\"absolute right-0 top-0 h-full px-3 py-2 hover:bg-transparent\"\n tabIndex={-1}\n aria-label={showPassword ? \"Hide password\" : \"Show password\"}\n >\n {showPassword ? (\n <EyeOff className=\"h-4 w-4 text-muted-foreground\" />\n ) : (\n <Eye className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </button>\n )}\n </div>\n );\n }\n);\n\nPasswordInput.displayName = \"PasswordInput\";\n\nexport { PasswordInput };\n"],"names":["PasswordInput","React","className","showToggle","props","ref","showPassword","setShowPassword","jsxs","jsx","cn","EyeOff","Eye"],"mappings":";;;;AAQA,MAAMA,IAAgBC,EAAM;AAAA,EAC1B,CAAC,EAAE,WAAAC,GAAW,YAAAC,IAAa,IAAM,GAAGC,EAAA,GAASC,MAAQ;AACnD,UAAM,CAACC,GAAcC,CAAe,IAAIN,EAAM,SAAS,EAAK;AAE5D,WACE,gBAAAO,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAMH,IAAe,SAAS;AAAA,UAC9B,aAAU;AAAA,UACV,WAAWI;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACAP,KAAc;AAAA,YACdD;AAAA,UAAA;AAAA,UAEF,KAAAG;AAAA,UACC,GAAGD;AAAA,QAAA;AAAA,MAAA;AAAA,MAELD,KACC,gBAAAM;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,MAAMF,EAAgB,CAACD,CAAY;AAAA,UAC5C,WAAU;AAAA,UACV,UAAU;AAAA,UACV,cAAYA,IAAe,kBAAkB;AAAA,UAE5C,UAAAA,sBACEK,GAAA,EAAO,WAAU,iCAAgC,IAElD,gBAAAF,EAACG,GAAA,EAAI,WAAU,gCAAA,CAAgC;AAAA,QAAA;AAAA,MAAA;AAAA,IAEnD,GAEJ;AAAA,EAEJ;AACF;AAEAZ,EAAc,cAAc;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),u=require("react"),m=require("@radix-ui/react-radio-group"),s=require("../utils.cjs");function d(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const i=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,i.get?i:{enumerable:!0,get:()=>e[t]})}}return r.default=e,Object.freeze(r)}const c=d(u),a=d(m),n=c.forwardRef(({className:e,...r},t)=>o.jsx(a.Root,{ref:t,"data-slot":"radio-group",className:s.cn("grid gap-3",e),...r}));n.displayName=a.Root.displayName;const l=c.forwardRef(({className:e,...r},t)=>o.jsx(a.Item,{ref:t,"data-slot":"radio-group-item",className:s.cn("peer h-5 w-5 shrink-0 rounded-full border border-gray-300 bg-white shadow-sm transition-all hover:shadow-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",e),...r,children:o.jsx(a.Indicator,{"data-slot":"radio-group-indicator",className:"flex items-center justify-center",children:o.jsx("div",{className:"h-2 w-2 rounded-full bg-white"})})}));l.displayName=a.Item.displayName;exports.RadioGroup=n;exports.RadioGroupItem=l;
|
|
2
|
+
//# sourceMappingURL=radio-group.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio-group.cjs","sources":["../../../../src/components/ui/forms/radio-group.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\n\nimport { cn } from \"../utils\";\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Root\n ref={ref}\n data-slot=\"radio-group\"\n className={cn(\"grid gap-3\", className)}\n {...props}\n />\n));\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Item\n ref={ref}\n data-slot=\"radio-group-item\"\n className={cn(\n \"peer h-5 w-5 shrink-0 rounded-full border border-gray-300 bg-white shadow-sm transition-all hover:shadow-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"flex items-center justify-center\"\n >\n <div className=\"h-2 w-2 rounded-full bg-white\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n));\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nexport { RadioGroup, RadioGroupItem };\n"],"names":["RadioGroup","React","className","props","ref","jsx","RadioGroupPrimitive","cn","RadioGroupItem"],"mappings":"yfAOMA,EAAaC,EAAM,WAGvB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAC1BC,EAAAA,IAACC,EAAoB,KAApB,CACC,IAAAF,EACA,YAAU,cACV,UAAWG,EAAAA,GAAG,aAAcL,CAAS,EACpC,GAAGC,CAAA,CACN,CACD,EACDH,EAAW,YAAcM,EAAoB,KAAK,YAElD,MAAME,EAAiBP,EAAM,WAG3B,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAC1BC,EAAAA,IAACC,EAAoB,KAApB,CACC,IAAAF,EACA,YAAU,mBACV,UAAWG,EAAAA,GACT,0VACAL,CAAA,EAED,GAAGC,EAEJ,SAAAE,EAAAA,IAACC,EAAoB,UAApB,CACC,YAAU,wBACV,UAAU,mCAEV,SAAAD,EAAAA,IAAC,MAAA,CAAI,UAAU,+BAAA,CAAgC,CAAA,CAAA,CACjD,CACF,CACD,EACDG,EAAe,YAAcF,EAAoB,KAAK"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as e } from "react/jsx-runtime";
|
|
3
|
+
import * as t from "react";
|
|
4
|
+
import * as a from "@radix-ui/react-radio-group";
|
|
5
|
+
import { cn as d } from "../utils.js";
|
|
6
|
+
const s = t.forwardRef(({ className: r, ...o }, i) => /* @__PURE__ */ e(
|
|
7
|
+
a.Root,
|
|
8
|
+
{
|
|
9
|
+
ref: i,
|
|
10
|
+
"data-slot": "radio-group",
|
|
11
|
+
className: d("grid gap-3", r),
|
|
12
|
+
...o
|
|
13
|
+
}
|
|
14
|
+
));
|
|
15
|
+
s.displayName = a.Root.displayName;
|
|
16
|
+
const l = t.forwardRef(({ className: r, ...o }, i) => /* @__PURE__ */ e(
|
|
17
|
+
a.Item,
|
|
18
|
+
{
|
|
19
|
+
ref: i,
|
|
20
|
+
"data-slot": "radio-group-item",
|
|
21
|
+
className: d(
|
|
22
|
+
"peer h-5 w-5 shrink-0 rounded-full border border-gray-300 bg-white shadow-sm transition-all hover:shadow-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",
|
|
23
|
+
r
|
|
24
|
+
),
|
|
25
|
+
...o,
|
|
26
|
+
children: /* @__PURE__ */ e(
|
|
27
|
+
a.Indicator,
|
|
28
|
+
{
|
|
29
|
+
"data-slot": "radio-group-indicator",
|
|
30
|
+
className: "flex items-center justify-center",
|
|
31
|
+
children: /* @__PURE__ */ e("div", { className: "h-2 w-2 rounded-full bg-white" })
|
|
32
|
+
}
|
|
33
|
+
)
|
|
34
|
+
}
|
|
35
|
+
));
|
|
36
|
+
l.displayName = a.Item.displayName;
|
|
37
|
+
export {
|
|
38
|
+
s as RadioGroup,
|
|
39
|
+
l as RadioGroupItem
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=radio-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio-group.js","sources":["../../../../src/components/ui/forms/radio-group.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\n\nimport { cn } from \"../utils\";\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Root\n ref={ref}\n data-slot=\"radio-group\"\n className={cn(\"grid gap-3\", className)}\n {...props}\n />\n));\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName;\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <RadioGroupPrimitive.Item\n ref={ref}\n data-slot=\"radio-group-item\"\n className={cn(\n \"peer h-5 w-5 shrink-0 rounded-full border border-gray-300 bg-white shadow-sm transition-all hover:shadow-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"flex items-center justify-center\"\n >\n <div className=\"h-2 w-2 rounded-full bg-white\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n));\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;\n\nexport { RadioGroup, RadioGroupItem };\n"],"names":["RadioGroup","React","className","props","ref","jsx","RadioGroupPrimitive","cn","RadioGroupItem"],"mappings":";;;;;AAOA,MAAMA,IAAaC,EAAM,WAGvB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAACC,EAAoB;AAAA,EAApB;AAAA,IACC,KAAAF;AAAA,IACA,aAAU;AAAA,IACV,WAAWG,EAAG,cAAcL,CAAS;AAAA,IACpC,GAAGC;AAAA,EAAA;AACN,CACD;AACDH,EAAW,cAAcM,EAAoB,KAAK;AAElD,MAAME,IAAiBP,EAAM,WAG3B,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAC1B,gBAAAC;AAAA,EAACC,EAAoB;AAAA,EAApB;AAAA,IACC,KAAAF;AAAA,IACA,aAAU;AAAA,IACV,WAAWG;AAAA,MACT;AAAA,MACAL;AAAA,IAAA;AAAA,IAED,GAAGC;AAAA,IAEJ,UAAA,gBAAAE;AAAA,MAACC,EAAoB;AAAA,MAApB;AAAA,QACC,aAAU;AAAA,QACV,WAAU;AAAA,QAEV,UAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,gCAAA,CAAgC;AAAA,MAAA;AAAA,IAAA;AAAA,EACjD;AACF,CACD;AACDG,EAAe,cAAcF,EAAoB,KAAK;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),S=require("react"),h=require("@radix-ui/react-select"),i=require("lucide-react"),n=require("../utils.cjs");function p(e){const s=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const l in e)if(l!=="default"){const r=Object.getOwnPropertyDescriptor(e,l);Object.defineProperty(s,l,r.get?r:{enumerable:!0,get:()=>e[l]})}}return s.default=e,Object.freeze(s)}const o=p(S),t=p(h);function j({...e}){return a.jsx(t.Root,{"data-slot":"select",...e})}const m=o.forwardRef(({...e},s)=>a.jsx(t.Group,{ref:s,"data-slot":"select-group",...e}));m.displayName=t.Group.displayName;const f=o.forwardRef(({...e},s)=>a.jsx(t.Value,{ref:s,"data-slot":"select-value",...e}));f.displayName=t.Value.displayName;const g=o.forwardRef(({className:e,size:s="default",children:l,...r},c)=>a.jsxs(t.Trigger,{ref:c,"data-slot":"select-trigger","data-size":s,className:n.cn("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex w-full items-center justify-between gap-2 rounded-md border bg-input-background px-3 py-2 text-sm whitespace-nowrap transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...r,children:[l,a.jsx(t.Icon,{asChild:!0,children:a.jsx(i.ChevronDownIcon,{className:"size-4 opacity-50"})})]}));g.displayName=t.Trigger.displayName;const x=o.forwardRef(({className:e,children:s,position:l="popper",...r},c)=>a.jsx(t.Portal,{children:a.jsxs(t.Content,{ref:c,"data-slot":"select-content",className:n.cn("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",l==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:l,...r,children:[a.jsx(d,{}),a.jsx(t.Viewport,{className:n.cn("p-1",l==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:s}),a.jsx(u,{})]})}));x.displayName=t.Content.displayName;const v=o.forwardRef(({className:e,...s},l)=>a.jsx(t.Label,{ref:l,"data-slot":"select-label",className:n.cn("text-muted-foreground px-2 py-1.5 text-xs font-semibold",e),...s}));v.displayName=t.Label.displayName;const b=o.forwardRef(({className:e,children:s,...l},r)=>a.jsxs(t.Item,{ref:r,"data-slot":"select-item",className:n.cn("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",e),...l,children:[a.jsx("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:a.jsx(t.ItemIndicator,{children:a.jsx(i.CheckIcon,{className:"size-4"})})}),a.jsx(t.ItemText,{children:s})]}));b.displayName=t.Item.displayName;const y=o.forwardRef(({className:e,...s},l)=>a.jsx(t.Separator,{ref:l,"data-slot":"select-separator",className:n.cn("bg-border pointer-events-none -mx-1 my-1 h-px",e),...s}));y.displayName=t.Separator.displayName;const d=o.forwardRef(({className:e,...s},l)=>a.jsx(t.ScrollUpButton,{ref:l,"data-slot":"select-scroll-up-button",className:n.cn("flex cursor-default items-center justify-center py-1",e),...s,children:a.jsx(i.ChevronUpIcon,{className:"size-4"})}));d.displayName=t.ScrollUpButton.displayName;const u=o.forwardRef(({className:e,...s},l)=>a.jsx(t.ScrollDownButton,{ref:l,"data-slot":"select-scroll-down-button",className:n.cn("flex cursor-default items-center justify-center py-1",e),...s,children:a.jsx(i.ChevronDownIcon,{className:"size-4"})}));u.displayName=t.ScrollDownButton.displayName;exports.Select=j;exports.SelectContent=x;exports.SelectGroup=m;exports.SelectItem=b;exports.SelectLabel=v;exports.SelectScrollDownButton=u;exports.SelectScrollUpButton=d;exports.SelectSeparator=y;exports.SelectTrigger=g;exports.SelectValue=f;
|
|
2
|
+
//# sourceMappingURL=select.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.cjs","sources":["../../../../src/components/ui/forms/select.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport {\n CheckIcon,\n ChevronDownIcon,\n ChevronUpIcon,\n} from \"lucide-react\";\n\nimport { cn } from \"../utils\";\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n}\n\nconst SelectGroup = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Group>\n>(({ ...props }, ref) => (\n <SelectPrimitive.Group ref={ref} data-slot=\"select-group\" {...props} />\n));\nSelectGroup.displayName = SelectPrimitive.Group.displayName;\n\nconst SelectValue = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Value>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Value>\n>(({ ...props }, ref) => (\n <SelectPrimitive.Value ref={ref} data-slot=\"select-value\" {...props} />\n));\nSelectValue.displayName = SelectPrimitive.Value.displayName;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\";\n }\n>(({ className, size = \"default\", children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex w-full items-center justify-between gap-2 rounded-md border bg-input-background px-3 py-2 text-sm whitespace-nowrap transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className,\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\",\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs font-semibold\", className)}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className,\n )}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className,\n )}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n"],"names":["Select","props","SelectPrimitive","SelectGroup","React","ref","jsx","SelectValue","SelectTrigger","className","size","children","jsxs","cn","ChevronDownIcon","SelectContent","position","SelectScrollUpButton","SelectScrollDownButton","SelectLabel","SelectItem","CheckIcon","SelectSeparator","ChevronUpIcon"],"mappings":"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"}
|