@iclips/ui 1.4.12 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +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 +71 -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 +197 -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 +303 -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 +261 -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/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 +2918 -0
- package/dist/index.d.ts +2918 -149
- package/dist/index.js +375 -63146
- 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,303 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as f, jsx as i } from "react/jsx-runtime";
|
|
3
|
+
import * as c from "react";
|
|
4
|
+
import { format as x, subDays as A, startOfMonth as F, endOfMonth as et, subMonths as K, parse as ot, isValid as it } from "date-fns";
|
|
5
|
+
import { ptBR as mt } from "date-fns/locale";
|
|
6
|
+
import { X as ft, CalendarIcon as nt } from "lucide-react";
|
|
7
|
+
import { cn as ct } from "../utils.js";
|
|
8
|
+
import { Input as dt } from "./input.js";
|
|
9
|
+
import { Button as y } from "../primitives/button.js";
|
|
10
|
+
import { Calendar as lt } from "./calendar.js";
|
|
11
|
+
import { TimePicker as L } from "./time-picker.js";
|
|
12
|
+
import { Popover as at, PopoverTrigger as pt, PopoverContent as ut } from "../overlays/popover.js";
|
|
13
|
+
const yt = () => {
|
|
14
|
+
const t = /* @__PURE__ */ new Date();
|
|
15
|
+
return t.setHours(0, 0, 0, 0), [
|
|
16
|
+
{
|
|
17
|
+
label: "Hoje",
|
|
18
|
+
value: { from: t, to: t }
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
label: "Últimos 7 dias",
|
|
22
|
+
value: { from: A(t, 6), to: t }
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
label: "Últimos 30 dias",
|
|
26
|
+
value: { from: A(t, 29), to: t }
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
label: "Este mês",
|
|
30
|
+
value: { from: F(t), to: t }
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
label: "Mês passado",
|
|
34
|
+
value: {
|
|
35
|
+
from: F(K(t, 1)),
|
|
36
|
+
to: et(K(t, 1))
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
];
|
|
40
|
+
}, bt = c.forwardRef(({
|
|
41
|
+
value: t,
|
|
42
|
+
onChange: e,
|
|
43
|
+
placeholder: T = "Selecione um período",
|
|
44
|
+
disabled: S = !1,
|
|
45
|
+
minDate: b,
|
|
46
|
+
maxDate: N,
|
|
47
|
+
dateFormat: $ = "dd/MM/yyyy",
|
|
48
|
+
locale: l = mt,
|
|
49
|
+
className: X,
|
|
50
|
+
error: R = !1,
|
|
51
|
+
numberOfMonths: q = 2,
|
|
52
|
+
showTime: a = !1,
|
|
53
|
+
timeFormat: j = "24h",
|
|
54
|
+
minuteStep: z = 15,
|
|
55
|
+
presets: E,
|
|
56
|
+
showDefaultPresets: B = !0,
|
|
57
|
+
id: G,
|
|
58
|
+
name: J
|
|
59
|
+
}, Q) => {
|
|
60
|
+
const [U, h] = c.useState(!1), [H, p] = c.useState(""), [w, d] = c.useState(!1), u = a ? `${$} HH:mm` : $, W = c.useMemo(() => a ? [
|
|
61
|
+
"dd/MM/yyyy HH:mm",
|
|
62
|
+
"dd/MM/yy HH:mm",
|
|
63
|
+
"d/M/yyyy HH:mm",
|
|
64
|
+
"d/M/yy HH:mm"
|
|
65
|
+
] : [
|
|
66
|
+
"dd/MM/yyyy",
|
|
67
|
+
"dd/MM/yy",
|
|
68
|
+
"d/M/yyyy",
|
|
69
|
+
"d/M/yy"
|
|
70
|
+
], [a]);
|
|
71
|
+
c.useEffect(() => {
|
|
72
|
+
if (t != null && t.from) {
|
|
73
|
+
const r = x(t.from, u, { locale: l }), s = t.to ? x(t.to, u, { locale: l }) : "";
|
|
74
|
+
p(s ? `${r} → ${s}` : r), d(!1);
|
|
75
|
+
} else
|
|
76
|
+
p(""), d(!1);
|
|
77
|
+
}, [t, u, l]);
|
|
78
|
+
const O = c.useMemo(() => [...B ? yt() : [], ...E || []], [E, B]), I = c.useMemo(() => {
|
|
79
|
+
if (!(t != null && t.from)) return "00:00";
|
|
80
|
+
const r = t.from.getHours().toString().padStart(2, "0"), s = t.from.getMinutes().toString().padStart(2, "0");
|
|
81
|
+
return `${r}:${s}`;
|
|
82
|
+
}, [t == null ? void 0 : t.from]), k = c.useMemo(() => {
|
|
83
|
+
if (!(t != null && t.to)) return "23:59";
|
|
84
|
+
const r = t.to.getHours().toString().padStart(2, "0"), s = t.to.getMinutes().toString().padStart(2, "0");
|
|
85
|
+
return `${r}:${s}`;
|
|
86
|
+
}, [t == null ? void 0 : t.to]), Y = (r) => {
|
|
87
|
+
if (!r) {
|
|
88
|
+
e == null || e(void 0);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (a) {
|
|
92
|
+
if (r.from) {
|
|
93
|
+
const [s, m] = I.split(":").map(Number);
|
|
94
|
+
r.from.setHours(s, m, 0, 0);
|
|
95
|
+
}
|
|
96
|
+
if (r.to) {
|
|
97
|
+
const [s, m] = k.split(":").map(Number);
|
|
98
|
+
r.to.setHours(s, m, 0, 0);
|
|
99
|
+
}
|
|
100
|
+
} else
|
|
101
|
+
r.from && r.from.setHours(0, 0, 0, 0), r.to && r.to.setHours(23, 59, 59, 999);
|
|
102
|
+
e == null || e(r);
|
|
103
|
+
}, Z = (r) => {
|
|
104
|
+
if (!(t != null && t.from)) return;
|
|
105
|
+
const s = new Date(t.from), [m, o] = r.split(":").map(Number);
|
|
106
|
+
s.setHours(m, o, 0, 0), e == null || e({ ...t, from: s });
|
|
107
|
+
}, _ = (r) => {
|
|
108
|
+
if (!(t != null && t.to)) return;
|
|
109
|
+
const s = new Date(t.to), [m, o] = r.split(":").map(Number);
|
|
110
|
+
s.setHours(m, o, 0, 0), e == null || e({ ...t, to: s });
|
|
111
|
+
}, g = (r) => {
|
|
112
|
+
const s = {
|
|
113
|
+
from: new Date(r.value.from),
|
|
114
|
+
to: new Date(r.value.to)
|
|
115
|
+
};
|
|
116
|
+
if (a) {
|
|
117
|
+
const [m, o] = I.split(":").map(Number), [n, M] = k.split(":").map(Number);
|
|
118
|
+
s.from.setHours(m, o, 0, 0), s.to.setHours(n, M, 0, 0);
|
|
119
|
+
}
|
|
120
|
+
e == null || e(s);
|
|
121
|
+
}, D = (r) => {
|
|
122
|
+
const s = r.trim();
|
|
123
|
+
if (!s) return null;
|
|
124
|
+
for (const m of W)
|
|
125
|
+
try {
|
|
126
|
+
const o = ot(s, m, /* @__PURE__ */ new Date());
|
|
127
|
+
if (it(o)) {
|
|
128
|
+
if (b && o < b || N && o > N) continue;
|
|
129
|
+
return o;
|
|
130
|
+
}
|
|
131
|
+
} catch {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
return null;
|
|
135
|
+
}, v = (r) => {
|
|
136
|
+
const s = r.trim();
|
|
137
|
+
if (!s) return null;
|
|
138
|
+
const m = ["→", "-", "até", "a"];
|
|
139
|
+
let o = null, n = null;
|
|
140
|
+
for (const M of m)
|
|
141
|
+
if (s.includes(M)) {
|
|
142
|
+
const P = s.split(M).map((st) => st.trim());
|
|
143
|
+
if (P.length === 2 && (o = D(P[0]), n = D(P[1]), o && n))
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
return o || (o = D(s), o && (n = new Date(o))), !o || !n ? null : (o > n && ([o, n] = [n, o]), { from: o, to: n });
|
|
147
|
+
}, C = (r) => {
|
|
148
|
+
const s = r.target.value;
|
|
149
|
+
p(s), d(!1);
|
|
150
|
+
}, V = () => {
|
|
151
|
+
if (!H.trim()) {
|
|
152
|
+
e == null || e(void 0), d(!1);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const r = v(H);
|
|
156
|
+
r ? (e == null || e(r), d(!1)) : d(!0);
|
|
157
|
+
}, tt = (r) => {
|
|
158
|
+
if (r.key === "Enter")
|
|
159
|
+
r.preventDefault(), V(), w || h(!0);
|
|
160
|
+
else if (r.key === "Escape") {
|
|
161
|
+
if (r.preventDefault(), t != null && t.from) {
|
|
162
|
+
const s = x(t.from, u, { locale: l }), m = t.to ? x(t.to, u, { locale: l }) : "";
|
|
163
|
+
p(m ? `${s} → ${m}` : s);
|
|
164
|
+
} else
|
|
165
|
+
p("");
|
|
166
|
+
d(!1);
|
|
167
|
+
}
|
|
168
|
+
}, rt = (r) => {
|
|
169
|
+
r.stopPropagation(), e == null || e(void 0), p(""), d(!1);
|
|
170
|
+
};
|
|
171
|
+
return /* @__PURE__ */ f(at, { open: U, onOpenChange: h, children: [
|
|
172
|
+
/* @__PURE__ */ f("div", { className: "relative w-full", children: [
|
|
173
|
+
/* @__PURE__ */ i(
|
|
174
|
+
dt,
|
|
175
|
+
{
|
|
176
|
+
ref: Q,
|
|
177
|
+
id: G,
|
|
178
|
+
name: J,
|
|
179
|
+
value: H,
|
|
180
|
+
onChange: C,
|
|
181
|
+
onBlur: V,
|
|
182
|
+
onKeyDown: tt,
|
|
183
|
+
placeholder: T,
|
|
184
|
+
disabled: S,
|
|
185
|
+
"aria-invalid": R || w,
|
|
186
|
+
className: ct(
|
|
187
|
+
"pr-20",
|
|
188
|
+
(R || w) && "border-destructive focus-visible:ring-destructive/20",
|
|
189
|
+
X
|
|
190
|
+
)
|
|
191
|
+
}
|
|
192
|
+
),
|
|
193
|
+
/* @__PURE__ */ f("div", { className: "absolute inset-y-0 right-0 flex items-center gap-1 pr-1", children: [
|
|
194
|
+
H && !S && /* @__PURE__ */ f(
|
|
195
|
+
y,
|
|
196
|
+
{
|
|
197
|
+
type: "button",
|
|
198
|
+
variant: "ghost",
|
|
199
|
+
size: "sm",
|
|
200
|
+
className: "h-7 w-7 p-0 hover:bg-transparent",
|
|
201
|
+
onClick: rt,
|
|
202
|
+
tabIndex: -1,
|
|
203
|
+
children: [
|
|
204
|
+
/* @__PURE__ */ i(ft, { className: "h-4 w-4 text-muted-foreground hover:text-foreground" }),
|
|
205
|
+
/* @__PURE__ */ i("span", { className: "sr-only", children: "Limpar" })
|
|
206
|
+
]
|
|
207
|
+
}
|
|
208
|
+
),
|
|
209
|
+
/* @__PURE__ */ i(pt, { asChild: !0, children: /* @__PURE__ */ i(
|
|
210
|
+
y,
|
|
211
|
+
{
|
|
212
|
+
type: "button",
|
|
213
|
+
variant: "ghost",
|
|
214
|
+
size: "sm",
|
|
215
|
+
className: "h-7 w-7 p-0 hover:bg-transparent",
|
|
216
|
+
disabled: S,
|
|
217
|
+
"aria-label": "Abrir calendário",
|
|
218
|
+
children: /* @__PURE__ */ i(nt, { className: "h-4 w-4 text-muted-foreground" })
|
|
219
|
+
}
|
|
220
|
+
) })
|
|
221
|
+
] })
|
|
222
|
+
] }),
|
|
223
|
+
/* @__PURE__ */ i(ut, { className: "w-auto p-0", align: "start", children: /* @__PURE__ */ f("div", { className: "flex", children: [
|
|
224
|
+
O.length > 0 && /* @__PURE__ */ f("div", { className: "border-r p-3 space-y-1 w-32.5", children: [
|
|
225
|
+
/* @__PURE__ */ i("p", { className: "text-xs font-medium text-muted-foreground mb-2", children: "Atalhos" }),
|
|
226
|
+
O.map((r) => /* @__PURE__ */ i(
|
|
227
|
+
y,
|
|
228
|
+
{
|
|
229
|
+
variant: "ghost",
|
|
230
|
+
size: "sm",
|
|
231
|
+
className: "w-full justify-start text-sm h-8 truncate",
|
|
232
|
+
onClick: () => g(r),
|
|
233
|
+
children: /* @__PURE__ */ i("span", { className: "truncate", children: r.label })
|
|
234
|
+
},
|
|
235
|
+
r.label
|
|
236
|
+
))
|
|
237
|
+
] }),
|
|
238
|
+
/* @__PURE__ */ f("div", { children: [
|
|
239
|
+
/* @__PURE__ */ i(
|
|
240
|
+
lt,
|
|
241
|
+
{
|
|
242
|
+
mode: "range",
|
|
243
|
+
selected: t,
|
|
244
|
+
onSelect: Y,
|
|
245
|
+
numberOfMonths: q,
|
|
246
|
+
disabled: (r) => !!(b && r < b || N && r > N),
|
|
247
|
+
locale: l,
|
|
248
|
+
autoFocus: !0
|
|
249
|
+
}
|
|
250
|
+
),
|
|
251
|
+
a && (t == null ? void 0 : t.from) && (t == null ? void 0 : t.to) && /* @__PURE__ */ f("div", { className: "border-t p-3 flex gap-6", children: [
|
|
252
|
+
/* @__PURE__ */ f("div", { className: "flex-1", children: [
|
|
253
|
+
/* @__PURE__ */ i("p", { className: "text-xs font-medium text-muted-foreground mb-2", children: "Hora início" }),
|
|
254
|
+
/* @__PURE__ */ i(
|
|
255
|
+
L,
|
|
256
|
+
{
|
|
257
|
+
value: I,
|
|
258
|
+
onChange: Z,
|
|
259
|
+
format: j,
|
|
260
|
+
minuteStep: z,
|
|
261
|
+
variant: "select",
|
|
262
|
+
showIcon: !1
|
|
263
|
+
}
|
|
264
|
+
)
|
|
265
|
+
] }),
|
|
266
|
+
/* @__PURE__ */ f("div", { className: "flex-1", children: [
|
|
267
|
+
/* @__PURE__ */ i("p", { className: "text-xs font-medium text-muted-foreground mb-2", children: "Hora fim" }),
|
|
268
|
+
/* @__PURE__ */ i(
|
|
269
|
+
L,
|
|
270
|
+
{
|
|
271
|
+
value: k,
|
|
272
|
+
onChange: _,
|
|
273
|
+
format: j,
|
|
274
|
+
minuteStep: z,
|
|
275
|
+
variant: "select",
|
|
276
|
+
showIcon: !1
|
|
277
|
+
}
|
|
278
|
+
)
|
|
279
|
+
] })
|
|
280
|
+
] }),
|
|
281
|
+
/* @__PURE__ */ f("div", { className: "border-t p-3 flex justify-end gap-2", children: [
|
|
282
|
+
/* @__PURE__ */ i(
|
|
283
|
+
y,
|
|
284
|
+
{
|
|
285
|
+
variant: "outline",
|
|
286
|
+
size: "sm",
|
|
287
|
+
onClick: () => {
|
|
288
|
+
e == null || e(void 0);
|
|
289
|
+
},
|
|
290
|
+
children: "Limpar"
|
|
291
|
+
}
|
|
292
|
+
),
|
|
293
|
+
/* @__PURE__ */ i(y, { size: "sm", onClick: () => h(!1), children: "Confirmar" })
|
|
294
|
+
] })
|
|
295
|
+
] })
|
|
296
|
+
] }) })
|
|
297
|
+
] });
|
|
298
|
+
});
|
|
299
|
+
bt.displayName = "DateRangePicker";
|
|
300
|
+
export {
|
|
301
|
+
bt as DateRangePicker
|
|
302
|
+
};
|
|
303
|
+
//# sourceMappingURL=date-range-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-range-picker.js","sources":["../../../../src/components/ui/forms/date-range-picker.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { format, parse, isValid, subDays, startOfMonth, endOfMonth, subMonths, type Locale } from \"date-fns\";\nimport { ptBR } from \"date-fns/locale\";\nimport { CalendarIcon, X } from \"lucide-react\";\nimport { DateRange } from \"react-day-picker\";\n\nimport { cn } from \"../utils\";\nimport { Input } from \"./input\";\nimport { Button } from \"../primitives/button\";\nimport { Calendar } from \"./calendar\";\nimport { TimePicker } from \"./time-picker\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../overlays/popover\";\n\nexport interface DateRangePreset {\n label: string;\n value: DateRange;\n}\n\nexport interface DateRangePickerProps {\n /**\n * Intervalo de datas selecionado\n */\n value?: DateRange;\n /**\n * Callback quando o intervalo muda\n */\n onChange?: (range: DateRange | undefined) => void;\n /**\n * Placeholder do campo\n * @default \"Selecione um período\"\n */\n placeholder?: string;\n /**\n * Desabilita o componente\n */\n disabled?: boolean;\n /**\n * Data mínima permitida\n */\n minDate?: Date;\n /**\n * Data máxima permitida\n */\n maxDate?: Date;\n /**\n * Formato de exibição da data\n * @default \"dd/MM/yyyy\"\n */\n dateFormat?: string;\n /**\n * Locale para formatação\n * @default ptBR\n */\n locale?: Locale;\n /**\n * Classes CSS adicionais para o trigger\n */\n className?: string;\n /**\n * Estado de erro\n */\n error?: boolean;\n /**\n * Número de meses a exibir\n * @default 2\n */\n numberOfMonths?: 1 | 2;\n /**\n * Mostra seletor de hora\n * @default false\n */\n showTime?: boolean;\n /**\n * Formato de hora (12h ou 24h)\n * @default \"24h\"\n */\n timeFormat?: \"12h\" | \"24h\";\n /**\n * Incremento de minutos\n * @default 15\n */\n minuteStep?: 1 | 5 | 10 | 15 | 30;\n /**\n * Presets de intervalos rápidos\n */\n presets?: DateRangePreset[];\n /**\n * Mostra presets padrão (Hoje, Últimos 7 dias, etc.)\n * @default true\n */\n showDefaultPresets?: boolean;\n /**\n * ID do campo para acessibilidade\n */\n id?: string;\n /**\n * Nome do campo para formulários\n */\n name?: string;\n}\n\n// Presets padrão\nconst getDefaultPresets = (): DateRangePreset[] => {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n return [\n {\n label: \"Hoje\",\n value: { from: today, to: today },\n },\n {\n label: \"Últimos 7 dias\",\n value: { from: subDays(today, 6), to: today },\n },\n {\n label: \"Últimos 30 dias\",\n value: { from: subDays(today, 29), to: today },\n },\n {\n label: \"Este mês\",\n value: { from: startOfMonth(today), to: today },\n },\n {\n label: \"Mês passado\",\n value: {\n from: startOfMonth(subMonths(today, 1)),\n to: endOfMonth(subMonths(today, 1)),\n },\n },\n ];\n};\n\n/**\n * DateRangePicker - Campo de seleção de intervalo de datas com hora opcional\n *\n * @example\n * // Básico\n * <DateRangePicker\n * value={dateRange}\n * onChange={setDateRange}\n * placeholder=\"Período do relatório\"\n * />\n *\n * @example\n * // Com hora\n * <DateRangePicker\n * value={booking}\n * onChange={setBooking}\n * placeholder=\"Reserva da sala\"\n * showTime\n * minuteStep={30}\n * />\n *\n * @example\n * // Com presets customizados\n * <DateRangePicker\n * value={period}\n * onChange={setPeriod}\n * presets={[\n * { label: \"Q1\", value: { from: q1Start, to: q1End } },\n * { label: \"Q2\", value: { from: q2Start, to: q2End } },\n * ]}\n * />\n */\nconst DateRangePicker = React.forwardRef<\n React.ElementRef<typeof Input>,\n DateRangePickerProps\n>(({\n value,\n onChange,\n placeholder = \"Selecione um período\",\n disabled = false,\n minDate,\n maxDate,\n dateFormat = \"dd/MM/yyyy\",\n locale = ptBR,\n className,\n error = false,\n numberOfMonths = 2,\n showTime = false,\n timeFormat = \"24h\",\n minuteStep = 15,\n presets,\n showDefaultPresets = true,\n id,\n name,\n}, ref) => {\n const [open, setOpen] = React.useState(false);\n const [inputValue, setInputValue] = React.useState(\"\");\n const [isInvalid, setIsInvalid] = React.useState(false);\n\n // Formato com hora se necessário\n const displayFormat = showTime ? `${dateFormat} HH:mm` : dateFormat;\n \n // Formatos aceitos para parsing\n const parseFormats = React.useMemo(() => {\n if (showTime) {\n return [\n \"dd/MM/yyyy HH:mm\",\n \"dd/MM/yy HH:mm\",\n \"d/M/yyyy HH:mm\",\n \"d/M/yy HH:mm\",\n ];\n }\n return [\n \"dd/MM/yyyy\",\n \"dd/MM/yy\",\n \"d/M/yyyy\",\n \"d/M/yy\",\n ];\n }, [showTime]);\n\n // Sincroniza inputValue com value\n React.useEffect(() => {\n if (value?.from) {\n const fromStr = format(value.from, displayFormat, { locale });\n const toStr = value.to ? format(value.to, displayFormat, { locale }) : \"\";\n setInputValue(toStr ? `${fromStr} → ${toStr}` : fromStr);\n setIsInvalid(false);\n } else {\n setInputValue(\"\");\n setIsInvalid(false);\n }\n }, [value, displayFormat, locale]);\n\n // Combina presets padrão com customizados\n const allPresets = React.useMemo(() => {\n const defaults = showDefaultPresets ? getDefaultPresets() : [];\n return [...defaults, ...(presets || [])];\n }, [presets, showDefaultPresets]);\n\n // Extrai hora do valor atual\n const startTime = React.useMemo(() => {\n if (!value?.from) return \"00:00\";\n const h = value.from.getHours().toString().padStart(2, \"0\");\n const m = value.from.getMinutes().toString().padStart(2, \"0\");\n return `${h}:${m}`;\n }, [value?.from]);\n\n const endTime = React.useMemo(() => {\n if (!value?.to) return \"23:59\";\n const h = value.to.getHours().toString().padStart(2, \"0\");\n const m = value.to.getMinutes().toString().padStart(2, \"0\");\n return `${h}:${m}`;\n }, [value?.to]);\n\n // Handler para seleção de data\n const handleDateSelect = (range: DateRange | undefined) => {\n if (!range) {\n onChange?.(undefined);\n return;\n }\n\n // Se showTime, preserva os horários existentes\n if (showTime) {\n if (range.from) {\n const [h, m] = startTime.split(\":\").map(Number);\n range.from.setHours(h, m, 0, 0);\n }\n if (range.to) {\n const [h, m] = endTime.split(\":\").map(Number);\n range.to.setHours(h, m, 0, 0);\n }\n } else {\n // Sem hora, usa início e fim do dia\n if (range.from) range.from.setHours(0, 0, 0, 0);\n if (range.to) range.to.setHours(23, 59, 59, 999);\n }\n\n onChange?.(range);\n };\n\n // Handler para mudança de hora início\n const handleStartTimeChange = (time: string) => {\n if (!value?.from) return;\n\n const newFrom = new Date(value.from);\n const [h, m] = time.split(\":\").map(Number);\n newFrom.setHours(h, m, 0, 0);\n\n onChange?.({ ...value, from: newFrom });\n };\n\n // Handler para mudança de hora fim\n const handleEndTimeChange = (time: string) => {\n if (!value?.to) return;\n\n const newTo = new Date(value.to);\n const [h, m] = time.split(\":\").map(Number);\n newTo.setHours(h, m, 0, 0);\n\n onChange?.({ ...value, to: newTo });\n };\n\n // Handler para presets\n const handlePresetSelect = (preset: DateRangePreset) => {\n const newRange = {\n from: new Date(preset.value.from!),\n to: new Date(preset.value.to!),\n };\n\n if (showTime) {\n const [sh, sm] = startTime.split(\":\").map(Number);\n const [eh, em] = endTime.split(\":\").map(Number);\n newRange.from.setHours(sh, sm, 0, 0);\n newRange.to.setHours(eh, em, 0, 0);\n }\n\n onChange?.(newRange);\n };\n\n // Parse de data individual\n const parseSingleDate = (input: string): Date | null => {\n const trimmed = input.trim();\n if (!trimmed) return null;\n\n for (const fmt of parseFormats) {\n try {\n const parsed = parse(trimmed, fmt, new Date());\n if (isValid(parsed)) {\n if (minDate && parsed < minDate) continue;\n if (maxDate && parsed > maxDate) continue;\n return parsed;\n }\n } catch {\n continue;\n }\n }\n return null;\n };\n\n // Parse do intervalo digitado\n const parseInputRange = (input: string): DateRange | null => {\n const trimmed = input.trim();\n if (!trimmed) return null;\n\n // Separa por → ou -\n const separators = [\"→\", \"-\", \"até\", \"a\"];\n let from: Date | null = null;\n let to: Date | null = null;\n\n for (const sep of separators) {\n if (trimmed.includes(sep)) {\n const parts = trimmed.split(sep).map(p => p.trim());\n if (parts.length === 2) {\n from = parseSingleDate(parts[0]);\n to = parseSingleDate(parts[1]);\n if (from && to) break;\n }\n }\n }\n\n // Se não encontrou separador, tenta parsear como data única\n if (!from) {\n from = parseSingleDate(trimmed);\n if (from) {\n to = new Date(from); // Mesmo dia\n }\n }\n\n if (!from || !to) return null;\n\n // Garante que from <= to\n if (from > to) {\n [from, to] = [to, from];\n }\n\n return { from, to };\n };\n\n // Handler para input digitado\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n setIsInvalid(false);\n };\n\n // Handler para blur do input\n const handleInputBlur = () => {\n if (!inputValue.trim()) {\n onChange?.(undefined);\n setIsInvalid(false);\n return;\n }\n\n const parsed = parseInputRange(inputValue);\n if (parsed) {\n onChange?.(parsed);\n setIsInvalid(false);\n } else {\n setIsInvalid(true);\n }\n };\n\n // Handler para Enter\n const handleInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleInputBlur();\n if (!isInvalid) {\n setOpen(true);\n }\n } else if (e.key === \"Escape\") {\n e.preventDefault();\n if (value?.from) {\n const fromStr = format(value.from, displayFormat, { locale });\n const toStr = value.to ? format(value.to, displayFormat, { locale }) : \"\";\n setInputValue(toStr ? `${fromStr} → ${toStr}` : fromStr);\n } else {\n setInputValue(\"\");\n }\n setIsInvalid(false);\n }\n };\n\n // Handler para limpar\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange?.(undefined);\n setInputValue(\"\");\n setIsInvalid(false);\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <div className=\"relative w-full\">\n <Input\n ref={ref}\n id={id}\n name={name}\n value={inputValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n placeholder={placeholder}\n disabled={disabled}\n aria-invalid={error || isInvalid}\n className={cn(\n \"pr-20\",\n (error || isInvalid) && \"border-destructive focus-visible:ring-destructive/20\",\n className\n )}\n />\n <div className=\"absolute inset-y-0 right-0 flex items-center gap-1 pr-1\">\n {inputValue && !disabled && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 w-7 p-0 hover:bg-transparent\"\n onClick={handleClear}\n tabIndex={-1}\n >\n <X className=\"h-4 w-4 text-muted-foreground hover:text-foreground\" />\n <span className=\"sr-only\">Limpar</span>\n </Button>\n )}\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 w-7 p-0 hover:bg-transparent\"\n disabled={disabled}\n aria-label=\"Abrir calendário\"\n >\n <CalendarIcon className=\"h-4 w-4 text-muted-foreground\" />\n </Button>\n </PopoverTrigger>\n </div>\n </div>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <div className=\"flex\">\n {/* Presets sidebar */}\n {allPresets.length > 0 && (\n <div className=\"border-r p-3 space-y-1 w-32.5\">\n <p className=\"text-xs font-medium text-muted-foreground mb-2\">\n Atalhos\n </p>\n {allPresets.map((preset) => (\n <Button\n key={preset.label}\n variant=\"ghost\"\n size=\"sm\"\n className=\"w-full justify-start text-sm h-8 truncate\"\n onClick={() => handlePresetSelect(preset)}\n >\n <span className=\"truncate\">{preset.label}</span>\n </Button>\n ))}\n </div>\n )}\n\n {/* Calendário */}\n <div>\n <Calendar\n mode=\"range\"\n selected={value}\n onSelect={handleDateSelect}\n numberOfMonths={numberOfMonths}\n disabled={(date) => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return false;\n }}\n locale={locale}\n autoFocus\n />\n\n {/* Time pickers */}\n {showTime && value?.from && value?.to && (\n <div className=\"border-t p-3 flex gap-6\">\n <div className=\"flex-1\">\n <p className=\"text-xs font-medium text-muted-foreground mb-2\">\n Hora início\n </p>\n <TimePicker\n value={startTime}\n onChange={handleStartTimeChange}\n format={timeFormat}\n minuteStep={minuteStep}\n variant=\"select\"\n showIcon={false}\n />\n </div>\n <div className=\"flex-1\">\n <p className=\"text-xs font-medium text-muted-foreground mb-2\">\n Hora fim\n </p>\n <TimePicker\n value={endTime}\n onChange={handleEndTimeChange}\n format={timeFormat}\n minuteStep={minuteStep}\n variant=\"select\"\n showIcon={false}\n />\n </div>\n </div>\n )}\n\n {/* Footer */}\n <div className=\"border-t p-3 flex justify-end gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n onChange?.(undefined);\n }}\n >\n Limpar\n </Button>\n <Button size=\"sm\" onClick={() => setOpen(false)}>\n Confirmar\n </Button>\n </div>\n </div>\n </div>\n </PopoverContent>\n </Popover>\n );\n});\n\nDateRangePicker.displayName = \"DateRangePicker\";\n\nexport { DateRangePicker };\n"],"names":["getDefaultPresets","today","subDays","startOfMonth","subMonths","endOfMonth","DateRangePicker","React","value","onChange","placeholder","disabled","minDate","maxDate","dateFormat","locale","ptBR","className","error","numberOfMonths","showTime","timeFormat","minuteStep","presets","showDefaultPresets","id","name","ref","open","setOpen","inputValue","setInputValue","isInvalid","setIsInvalid","displayFormat","parseFormats","fromStr","format","toStr","allPresets","startTime","h","m","endTime","handleDateSelect","range","handleStartTimeChange","time","newFrom","handleEndTimeChange","newTo","handlePresetSelect","preset","newRange","sh","sm","eh","em","parseSingleDate","input","trimmed","fmt","parsed","parse","isValid","parseInputRange","separators","from","to","sep","parts","p","handleInputChange","e","newValue","handleInputBlur","handleInputKeyDown","handleClear","jsxs","Popover","jsx","Input","cn","Button","X","PopoverTrigger","CalendarIcon","PopoverContent","Calendar","date","TimePicker"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),K=require("react"),m=require("../primitives/badge.cjs"),f=require("../overlays/dropdown-menu.cjs"),d=require("../overlays/dialog.cjs"),E=require("../primitives/button.cjs"),p=require("../utils.cjs"),R=require("lucide-react");function O(l){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(l){for(const r in l)if(r!=="default"){const c=Object.getOwnPropertyDescriptor(l,r);Object.defineProperty(t,r,c.get?c:{enumerable:!0,get:()=>l[r]})}}return t.default=l,Object.freeze(t)}const n=O(K);function Q({value:l,options:t,onValueChange:r,onCancel:c,disabled:I=!1,variant:g="default",confirmTitle:P="Confirmar alteração",confirmDescription:F="Tem certeza que deseja alterar este valor?",confirmButtonText:_="Confirmar",cancelButtonText:z="Cancelar",skipConfirmation:v=!1,isLoading:h=!1,renderValue:x,className:C,...y},w){const[i,j]=n.useState(null),[H,u]=n.useState(!1),[V,b]=n.useState(!1),[N,S]=n.useState(!1),a=n.useMemo(()=>t.find(s=>s.value===l),[t,l]),o=n.useMemo(()=>i!=null?t.find(s=>s.value===i):null,[t,i]),A=n.useCallback(s=>{if(s===l){b(!1);return}j(s),b(!1),v?B(s):u(!0)},[l,v]),B=n.useCallback(async s=>{const D=s??i;if(D!=null){S(!0);try{await r(D),u(!1),j(null)}catch(J){console.error("Error confirming value change:",J)}finally{S(!1)}}},[i,r]),G=n.useCallback(()=>{u(!1),j(null),c==null||c()},[c]),q=n.useCallback(()=>x&&a?x(l,a):a?e.jsxs(e.Fragment,{children:[a.icon,a.label]}):l,[x,l,a]),M=(a==null?void 0:a.variant)||g,k=a==null?void 0:a.className;return I?e.jsx("div",{ref:w,className:p.cn("inline-flex",C),...y,children:e.jsx(m.Badge,{variant:M,className:k,children:q()})}):e.jsxs(e.Fragment,{children:[e.jsx("div",{ref:w,className:p.cn("inline-flex",C),...y,children:e.jsxs(f.DropdownMenu,{open:V,onOpenChange:b,children:[e.jsx(f.DropdownMenuTrigger,{asChild:!0,disabled:h,children:e.jsxs("button",{type:"button",className:p.cn(m.badgeVariants({variant:M}),"cursor-pointer hover:opacity-80 transition-opacity gap-1.5",h&&"opacity-50 cursor-not-allowed",k),children:[q(),!h&&e.jsx(R.ChevronDown,{className:"h-3 w-3"})]})}),e.jsx(f.DropdownMenuContent,{align:"start",className:"w-48",children:t.map(s=>e.jsxs(f.DropdownMenuItem,{onClick:()=>A(s.value),className:"gap-2",children:[s.icon&&e.jsx("span",{className:"w-4 h-4",children:s.icon}),e.jsx("span",{className:"flex-1",children:s.label}),s.value===l&&e.jsx(R.Check,{className:"h-4 w-4 text-primary"})]},String(s.value)))})]})}),e.jsx(d.Dialog,{open:H,onOpenChange:u,children:e.jsxs(d.DialogContent,{children:[e.jsxs(d.DialogHeader,{children:[e.jsx(d.DialogTitle,{children:P}),e.jsx(d.DialogDescription,{children:F})]}),o&&e.jsxs("div",{className:"flex items-center gap-3 py-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-sm text-muted-foreground",children:"De:"}),e.jsxs(m.Badge,{variant:(a==null?void 0:a.variant)||g,className:a==null?void 0:a.className,children:[a==null?void 0:a.icon,(a==null?void 0:a.label)||l]})]}),e.jsx("span",{className:"text-muted-foreground",children:"→"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-sm text-muted-foreground",children:"Para:"}),e.jsxs(m.Badge,{variant:o.variant||g,className:o.className,children:[o.icon,o.label]})]})]}),e.jsxs(d.DialogFooter,{children:[e.jsx(E.Button,{variant:"outline",onClick:G,disabled:N,children:z}),e.jsx(E.Button,{onClick:()=>B(),disabled:N,children:N?"Confirmando...":_})]})]})})]})}const T=n.forwardRef(Q);T.displayName="EditableBadge";exports.EditableBadge=T;
|
|
2
|
+
//# sourceMappingURL=editable-badge.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editable-badge.cjs","sources":["../../../../src/components/ui/forms/editable-badge.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Badge, badgeVariants } from \"../primitives/badge\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"../overlays/dropdown-menu\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"../overlays/dialog\";\nimport { Button } from \"../primitives/button\";\nimport { cn } from \"../utils\";\nimport { ChevronDown, Check } from \"lucide-react\";\nimport { type VariantProps } from \"class-variance-authority\";\n\n/**\n * Opção para o EmblemaEditavel\n */\nexport interface EditableBadgeOption<T extends string | number = string> {\n /**\n * Valor da opção\n */\n value: T;\n /**\n * Label exibido no dropdown\n */\n label: string;\n /**\n * Ícone opcional da opção\n */\n icon?: React.ReactNode;\n /**\n * Variante do badge para esta opção\n */\n variant?: VariantProps<typeof badgeVariants>[\"variant\"];\n /**\n * Classes CSS customizadas para esta opção (ex: cores da guideline)\n */\n className?: string;\n}\n\n/**\n * Props do componente EmblemaEditavel\n */\nexport interface EditableBadgeProps<T extends string | number = string>\n extends Omit<React.ComponentPropsWithoutRef<\"div\">, \"onChange\"> {\n /**\n * Valor atual do badge\n */\n value: T;\n\n /**\n * Opções disponíveis para seleção\n */\n options: EditableBadgeOption<T>[];\n\n /**\n * Callback quando o valor é confirmado\n * @param value - Novo valor selecionado\n */\n onValueChange: (value: T) => void | Promise<void>;\n\n /**\n * Callback quando a alteração é cancelada (opcional)\n */\n onCancel?: () => void;\n\n /**\n * Se true, o badge não é editável\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Variante padrão do badge\n * @default \"default\"\n */\n variant?: VariantProps<typeof badgeVariants>[\"variant\"];\n\n /**\n * Título do dialog de confirmação\n * @default \"Confirmar alteração\"\n */\n confirmTitle?: string;\n\n /**\n * Descrição do dialog de confirmação\n * @default \"Tem certeza que deseja alterar este valor?\"\n */\n confirmDescription?: string;\n\n /**\n * Texto do botão de confirmação\n * @default \"Confirmar\"\n */\n confirmButtonText?: string;\n\n /**\n * Texto do botão de cancelar\n * @default \"Cancelar\"\n */\n cancelButtonText?: string;\n\n /**\n * Se true, não exibe o dialog de confirmação\n * @default false\n */\n skipConfirmation?: boolean;\n\n /**\n * Estado de loading durante a operação\n * @default false\n */\n isLoading?: boolean;\n\n /**\n * Renderizador customizado do valor no badge\n */\n renderValue?: (value: T, option?: EditableBadgeOption<T>) => React.ReactNode;\n}\n\nfunction EditableBadgeInner<T extends string | number = string>(\n {\n value,\n options,\n onValueChange,\n onCancel,\n disabled = false,\n variant = \"default\",\n confirmTitle = \"Confirmar alteração\",\n confirmDescription = \"Tem certeza que deseja alterar este valor?\",\n confirmButtonText = \"Confirmar\",\n cancelButtonText = \"Cancelar\",\n skipConfirmation = false,\n isLoading = false,\n renderValue,\n className,\n ...props\n }: EditableBadgeProps<T>,\n ref: React.Ref<HTMLDivElement>\n) {\n const [selectedValue, setSelectedValue] = React.useState<T | null>(null);\n const [showDialog, setShowDialog] = React.useState(false);\n const [isOpen, setIsOpen] = React.useState(false);\n const [isConfirming, setIsConfirming] = React.useState(false);\n\n // Encontrar a opção atual\n const currentOption = React.useMemo(\n () => options.find((opt) => opt.value === value),\n [options, value]\n );\n\n // Encontrar a opção selecionada\n const selectedOption = React.useMemo(\n () => (selectedValue !== null && selectedValue !== undefined ? options.find((opt) => opt.value === selectedValue) : null),\n [options, selectedValue]\n );\n\n // Handler para seleção de opção\n const handleSelect = React.useCallback(\n (newValue: T) => {\n if (newValue === value) {\n setIsOpen(false);\n return;\n }\n\n setSelectedValue(newValue);\n setIsOpen(false);\n\n if (skipConfirmation) {\n handleConfirm(newValue);\n } else {\n setShowDialog(true);\n }\n },\n [value, skipConfirmation]\n );\n\n // Handler de confirmação\n const handleConfirm = React.useCallback(\n async (valueToConfirm?: T) => {\n const finalValue = valueToConfirm ?? selectedValue;\n if (finalValue === null || finalValue === undefined) return;\n\n setIsConfirming(true);\n try {\n await onValueChange(finalValue);\n setShowDialog(false);\n setSelectedValue(null);\n } catch (error) {\n console.error(\"Error confirming value change:\", error);\n } finally {\n setIsConfirming(false);\n }\n },\n [selectedValue, onValueChange]\n );\n\n // Handler de cancelamento\n const handleCancel = React.useCallback(() => {\n setShowDialog(false);\n setSelectedValue(null);\n onCancel?.();\n }, [onCancel]);\n\n // Renderizar o valor do badge\n const renderBadgeValue = React.useCallback(() => {\n if (renderValue && currentOption) {\n return renderValue(value, currentOption);\n }\n if (currentOption) {\n return (\n <>\n {currentOption.icon}\n {currentOption.label}\n </>\n );\n }\n return value;\n }, [renderValue, value, currentOption]);\n\n // Badge variant e className (usa os da opção se disponível, senão os defaults)\n const badgeVariant = currentOption?.variant || variant;\n const badgeClassName = currentOption?.className;\n\n // Se disabled, renderiza apenas o badge\n if (disabled) {\n return (\n <div ref={ref} className={cn(\"inline-flex\", className)} {...props}>\n <Badge variant={badgeVariant} className={badgeClassName}>{renderBadgeValue()}</Badge>\n </div>\n );\n }\n\n return (\n <>\n <div ref={ref} className={cn(\"inline-flex\", className)} {...props}>\n <DropdownMenu open={isOpen} onOpenChange={setIsOpen}>\n <DropdownMenuTrigger asChild disabled={isLoading}>\n <button\n type=\"button\"\n className={cn(\n badgeVariants({ variant: badgeVariant }),\n \"cursor-pointer hover:opacity-80 transition-opacity gap-1.5\",\n isLoading && \"opacity-50 cursor-not-allowed\",\n badgeClassName\n )}\n >\n {renderBadgeValue()}\n {!isLoading && <ChevronDown className=\"h-3 w-3\" />}\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-48\">\n {options.map((option) => (\n <DropdownMenuItem\n key={String(option.value)}\n onClick={() => handleSelect(option.value)}\n className=\"gap-2\"\n >\n {option.icon && <span className=\"w-4 h-4\">{option.icon}</span>}\n <span className=\"flex-1\">{option.label}</span>\n {option.value === value && <Check className=\"h-4 w-4 text-primary\" />}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n\n <Dialog open={showDialog} onOpenChange={setShowDialog}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{confirmTitle}</DialogTitle>\n <DialogDescription>{confirmDescription}</DialogDescription>\n </DialogHeader>\n {selectedOption && (\n <div className=\"flex items-center gap-3 py-4\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground\">De:</span>\n <Badge variant={currentOption?.variant || variant} className={currentOption?.className}>\n {currentOption?.icon}\n {currentOption?.label || value}\n </Badge>\n </div>\n <span className=\"text-muted-foreground\">→</span>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground\">Para:</span>\n <Badge variant={selectedOption.variant || variant} className={selectedOption.className}>\n {selectedOption.icon}\n {selectedOption.label}\n </Badge>\n </div>\n </div>\n )}\n <DialogFooter>\n <Button\n variant=\"outline\"\n onClick={handleCancel}\n disabled={isConfirming}\n >\n {cancelButtonText}\n </Button>\n <Button onClick={() => handleConfirm()} disabled={isConfirming}>\n {isConfirming ? \"Confirmando...\" : confirmButtonText}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </>\n );\n}\n\nexport const EditableBadge = React.forwardRef(EditableBadgeInner) as (<\n T extends string | number = string\n>(\n props: EditableBadgeProps<T> & { ref?: React.Ref<HTMLDivElement> }\n) => React.ReactElement) & { displayName?: string };\n\nEditableBadge.displayName = \"EditableBadge\";\n"],"names":["EditableBadgeInner","value","options","onValueChange","onCancel","disabled","variant","confirmTitle","confirmDescription","confirmButtonText","cancelButtonText","skipConfirmation","isLoading","renderValue","className","props","ref","selectedValue","setSelectedValue","React","showDialog","setShowDialog","isOpen","setIsOpen","isConfirming","setIsConfirming","currentOption","opt","selectedOption","handleSelect","newValue","handleConfirm","valueToConfirm","finalValue","error","handleCancel","renderBadgeValue","jsxs","Fragment","badgeVariant","badgeClassName","cn","jsx","Badge","DropdownMenu","DropdownMenuTrigger","badgeVariants","ChevronDown","DropdownMenuContent","option","DropdownMenuItem","Check","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","DialogFooter","Button","EditableBadge"],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as s, Fragment as I, jsx as a } from "react/jsx-runtime";
|
|
3
|
+
import * as r from "react";
|
|
4
|
+
import { Badge as p, badgeVariants as J } from "../primitives/badge.js";
|
|
5
|
+
import { DropdownMenu as K, DropdownMenuTrigger as Q, DropdownMenuContent as U, DropdownMenuItem as W } from "../overlays/dropdown-menu.js";
|
|
6
|
+
import { Dialog as X, DialogContent as Y, DialogHeader as Z, DialogTitle as _, DialogDescription as $, DialogFooter as L } from "../overlays/dialog.js";
|
|
7
|
+
import { Button as j } from "../primitives/button.js";
|
|
8
|
+
import { cn as C } from "../utils.js";
|
|
9
|
+
import { ChevronDown as O, Check as ee } from "lucide-react";
|
|
10
|
+
function ae({
|
|
11
|
+
value: n,
|
|
12
|
+
options: t,
|
|
13
|
+
onValueChange: x,
|
|
14
|
+
onCancel: d,
|
|
15
|
+
disabled: T = !1,
|
|
16
|
+
variant: m = "default",
|
|
17
|
+
confirmTitle: F = "Confirmar alteração",
|
|
18
|
+
confirmDescription: R = "Tem certeza que deseja alterar este valor?",
|
|
19
|
+
confirmButtonText: q = "Confirmar",
|
|
20
|
+
cancelButtonText: z = "Cancelar",
|
|
21
|
+
skipConfirmation: D = !1,
|
|
22
|
+
isLoading: f = !1,
|
|
23
|
+
renderValue: h,
|
|
24
|
+
className: v,
|
|
25
|
+
...w
|
|
26
|
+
}, y) {
|
|
27
|
+
const [i, g] = r.useState(null), [H, o] = r.useState(!1), [P, u] = r.useState(!1), [N, S] = r.useState(!1), e = r.useMemo(
|
|
28
|
+
() => t.find((l) => l.value === n),
|
|
29
|
+
[t, n]
|
|
30
|
+
), c = r.useMemo(
|
|
31
|
+
() => i != null ? t.find((l) => l.value === i) : null,
|
|
32
|
+
[t, i]
|
|
33
|
+
), V = r.useCallback(
|
|
34
|
+
(l) => {
|
|
35
|
+
if (l === n) {
|
|
36
|
+
u(!1);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
g(l), u(!1), D ? k(l) : o(!0);
|
|
40
|
+
},
|
|
41
|
+
[n, D]
|
|
42
|
+
), k = r.useCallback(
|
|
43
|
+
async (l) => {
|
|
44
|
+
const b = l ?? i;
|
|
45
|
+
if (b != null) {
|
|
46
|
+
S(!0);
|
|
47
|
+
try {
|
|
48
|
+
await x(b), o(!1), g(null);
|
|
49
|
+
} catch (G) {
|
|
50
|
+
console.error("Error confirming value change:", G);
|
|
51
|
+
} finally {
|
|
52
|
+
S(!1);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
[i, x]
|
|
57
|
+
), A = r.useCallback(() => {
|
|
58
|
+
o(!1), g(null), d == null || d();
|
|
59
|
+
}, [d]), B = r.useCallback(() => h && e ? h(n, e) : e ? /* @__PURE__ */ s(I, { children: [
|
|
60
|
+
e.icon,
|
|
61
|
+
e.label
|
|
62
|
+
] }) : n, [h, n, e]), M = (e == null ? void 0 : e.variant) || m, E = e == null ? void 0 : e.className;
|
|
63
|
+
return T ? /* @__PURE__ */ a("div", { ref: y, className: C("inline-flex", v), ...w, children: /* @__PURE__ */ a(p, { variant: M, className: E, children: B() }) }) : /* @__PURE__ */ s(I, { children: [
|
|
64
|
+
/* @__PURE__ */ a("div", { ref: y, className: C("inline-flex", v), ...w, children: /* @__PURE__ */ s(K, { open: P, onOpenChange: u, children: [
|
|
65
|
+
/* @__PURE__ */ a(Q, { asChild: !0, disabled: f, children: /* @__PURE__ */ s(
|
|
66
|
+
"button",
|
|
67
|
+
{
|
|
68
|
+
type: "button",
|
|
69
|
+
className: C(
|
|
70
|
+
J({ variant: M }),
|
|
71
|
+
"cursor-pointer hover:opacity-80 transition-opacity gap-1.5",
|
|
72
|
+
f && "opacity-50 cursor-not-allowed",
|
|
73
|
+
E
|
|
74
|
+
),
|
|
75
|
+
children: [
|
|
76
|
+
B(),
|
|
77
|
+
!f && /* @__PURE__ */ a(O, { className: "h-3 w-3" })
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
) }),
|
|
81
|
+
/* @__PURE__ */ a(U, { align: "start", className: "w-48", children: t.map((l) => /* @__PURE__ */ s(
|
|
82
|
+
W,
|
|
83
|
+
{
|
|
84
|
+
onClick: () => V(l.value),
|
|
85
|
+
className: "gap-2",
|
|
86
|
+
children: [
|
|
87
|
+
l.icon && /* @__PURE__ */ a("span", { className: "w-4 h-4", children: l.icon }),
|
|
88
|
+
/* @__PURE__ */ a("span", { className: "flex-1", children: l.label }),
|
|
89
|
+
l.value === n && /* @__PURE__ */ a(ee, { className: "h-4 w-4 text-primary" })
|
|
90
|
+
]
|
|
91
|
+
},
|
|
92
|
+
String(l.value)
|
|
93
|
+
)) })
|
|
94
|
+
] }) }),
|
|
95
|
+
/* @__PURE__ */ a(X, { open: H, onOpenChange: o, children: /* @__PURE__ */ s(Y, { children: [
|
|
96
|
+
/* @__PURE__ */ s(Z, { children: [
|
|
97
|
+
/* @__PURE__ */ a(_, { children: F }),
|
|
98
|
+
/* @__PURE__ */ a($, { children: R })
|
|
99
|
+
] }),
|
|
100
|
+
c && /* @__PURE__ */ s("div", { className: "flex items-center gap-3 py-4", children: [
|
|
101
|
+
/* @__PURE__ */ s("div", { className: "flex items-center gap-2", children: [
|
|
102
|
+
/* @__PURE__ */ a("span", { className: "text-sm text-muted-foreground", children: "De:" }),
|
|
103
|
+
/* @__PURE__ */ s(p, { variant: (e == null ? void 0 : e.variant) || m, className: e == null ? void 0 : e.className, children: [
|
|
104
|
+
e == null ? void 0 : e.icon,
|
|
105
|
+
(e == null ? void 0 : e.label) || n
|
|
106
|
+
] })
|
|
107
|
+
] }),
|
|
108
|
+
/* @__PURE__ */ a("span", { className: "text-muted-foreground", children: "→" }),
|
|
109
|
+
/* @__PURE__ */ s("div", { className: "flex items-center gap-2", children: [
|
|
110
|
+
/* @__PURE__ */ a("span", { className: "text-sm text-muted-foreground", children: "Para:" }),
|
|
111
|
+
/* @__PURE__ */ s(p, { variant: c.variant || m, className: c.className, children: [
|
|
112
|
+
c.icon,
|
|
113
|
+
c.label
|
|
114
|
+
] })
|
|
115
|
+
] })
|
|
116
|
+
] }),
|
|
117
|
+
/* @__PURE__ */ s(L, { children: [
|
|
118
|
+
/* @__PURE__ */ a(
|
|
119
|
+
j,
|
|
120
|
+
{
|
|
121
|
+
variant: "outline",
|
|
122
|
+
onClick: A,
|
|
123
|
+
disabled: N,
|
|
124
|
+
children: z
|
|
125
|
+
}
|
|
126
|
+
),
|
|
127
|
+
/* @__PURE__ */ a(j, { onClick: () => k(), disabled: N, children: N ? "Confirmando..." : q })
|
|
128
|
+
] })
|
|
129
|
+
] }) })
|
|
130
|
+
] });
|
|
131
|
+
}
|
|
132
|
+
const le = r.forwardRef(ae);
|
|
133
|
+
le.displayName = "EditableBadge";
|
|
134
|
+
export {
|
|
135
|
+
le as EditableBadge
|
|
136
|
+
};
|
|
137
|
+
//# sourceMappingURL=editable-badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editable-badge.js","sources":["../../../../src/components/ui/forms/editable-badge.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Badge, badgeVariants } from \"../primitives/badge\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from \"../overlays/dropdown-menu\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from \"../overlays/dialog\";\nimport { Button } from \"../primitives/button\";\nimport { cn } from \"../utils\";\nimport { ChevronDown, Check } from \"lucide-react\";\nimport { type VariantProps } from \"class-variance-authority\";\n\n/**\n * Opção para o EmblemaEditavel\n */\nexport interface EditableBadgeOption<T extends string | number = string> {\n /**\n * Valor da opção\n */\n value: T;\n /**\n * Label exibido no dropdown\n */\n label: string;\n /**\n * Ícone opcional da opção\n */\n icon?: React.ReactNode;\n /**\n * Variante do badge para esta opção\n */\n variant?: VariantProps<typeof badgeVariants>[\"variant\"];\n /**\n * Classes CSS customizadas para esta opção (ex: cores da guideline)\n */\n className?: string;\n}\n\n/**\n * Props do componente EmblemaEditavel\n */\nexport interface EditableBadgeProps<T extends string | number = string>\n extends Omit<React.ComponentPropsWithoutRef<\"div\">, \"onChange\"> {\n /**\n * Valor atual do badge\n */\n value: T;\n\n /**\n * Opções disponíveis para seleção\n */\n options: EditableBadgeOption<T>[];\n\n /**\n * Callback quando o valor é confirmado\n * @param value - Novo valor selecionado\n */\n onValueChange: (value: T) => void | Promise<void>;\n\n /**\n * Callback quando a alteração é cancelada (opcional)\n */\n onCancel?: () => void;\n\n /**\n * Se true, o badge não é editável\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Variante padrão do badge\n * @default \"default\"\n */\n variant?: VariantProps<typeof badgeVariants>[\"variant\"];\n\n /**\n * Título do dialog de confirmação\n * @default \"Confirmar alteração\"\n */\n confirmTitle?: string;\n\n /**\n * Descrição do dialog de confirmação\n * @default \"Tem certeza que deseja alterar este valor?\"\n */\n confirmDescription?: string;\n\n /**\n * Texto do botão de confirmação\n * @default \"Confirmar\"\n */\n confirmButtonText?: string;\n\n /**\n * Texto do botão de cancelar\n * @default \"Cancelar\"\n */\n cancelButtonText?: string;\n\n /**\n * Se true, não exibe o dialog de confirmação\n * @default false\n */\n skipConfirmation?: boolean;\n\n /**\n * Estado de loading durante a operação\n * @default false\n */\n isLoading?: boolean;\n\n /**\n * Renderizador customizado do valor no badge\n */\n renderValue?: (value: T, option?: EditableBadgeOption<T>) => React.ReactNode;\n}\n\nfunction EditableBadgeInner<T extends string | number = string>(\n {\n value,\n options,\n onValueChange,\n onCancel,\n disabled = false,\n variant = \"default\",\n confirmTitle = \"Confirmar alteração\",\n confirmDescription = \"Tem certeza que deseja alterar este valor?\",\n confirmButtonText = \"Confirmar\",\n cancelButtonText = \"Cancelar\",\n skipConfirmation = false,\n isLoading = false,\n renderValue,\n className,\n ...props\n }: EditableBadgeProps<T>,\n ref: React.Ref<HTMLDivElement>\n) {\n const [selectedValue, setSelectedValue] = React.useState<T | null>(null);\n const [showDialog, setShowDialog] = React.useState(false);\n const [isOpen, setIsOpen] = React.useState(false);\n const [isConfirming, setIsConfirming] = React.useState(false);\n\n // Encontrar a opção atual\n const currentOption = React.useMemo(\n () => options.find((opt) => opt.value === value),\n [options, value]\n );\n\n // Encontrar a opção selecionada\n const selectedOption = React.useMemo(\n () => (selectedValue !== null && selectedValue !== undefined ? options.find((opt) => opt.value === selectedValue) : null),\n [options, selectedValue]\n );\n\n // Handler para seleção de opção\n const handleSelect = React.useCallback(\n (newValue: T) => {\n if (newValue === value) {\n setIsOpen(false);\n return;\n }\n\n setSelectedValue(newValue);\n setIsOpen(false);\n\n if (skipConfirmation) {\n handleConfirm(newValue);\n } else {\n setShowDialog(true);\n }\n },\n [value, skipConfirmation]\n );\n\n // Handler de confirmação\n const handleConfirm = React.useCallback(\n async (valueToConfirm?: T) => {\n const finalValue = valueToConfirm ?? selectedValue;\n if (finalValue === null || finalValue === undefined) return;\n\n setIsConfirming(true);\n try {\n await onValueChange(finalValue);\n setShowDialog(false);\n setSelectedValue(null);\n } catch (error) {\n console.error(\"Error confirming value change:\", error);\n } finally {\n setIsConfirming(false);\n }\n },\n [selectedValue, onValueChange]\n );\n\n // Handler de cancelamento\n const handleCancel = React.useCallback(() => {\n setShowDialog(false);\n setSelectedValue(null);\n onCancel?.();\n }, [onCancel]);\n\n // Renderizar o valor do badge\n const renderBadgeValue = React.useCallback(() => {\n if (renderValue && currentOption) {\n return renderValue(value, currentOption);\n }\n if (currentOption) {\n return (\n <>\n {currentOption.icon}\n {currentOption.label}\n </>\n );\n }\n return value;\n }, [renderValue, value, currentOption]);\n\n // Badge variant e className (usa os da opção se disponível, senão os defaults)\n const badgeVariant = currentOption?.variant || variant;\n const badgeClassName = currentOption?.className;\n\n // Se disabled, renderiza apenas o badge\n if (disabled) {\n return (\n <div ref={ref} className={cn(\"inline-flex\", className)} {...props}>\n <Badge variant={badgeVariant} className={badgeClassName}>{renderBadgeValue()}</Badge>\n </div>\n );\n }\n\n return (\n <>\n <div ref={ref} className={cn(\"inline-flex\", className)} {...props}>\n <DropdownMenu open={isOpen} onOpenChange={setIsOpen}>\n <DropdownMenuTrigger asChild disabled={isLoading}>\n <button\n type=\"button\"\n className={cn(\n badgeVariants({ variant: badgeVariant }),\n \"cursor-pointer hover:opacity-80 transition-opacity gap-1.5\",\n isLoading && \"opacity-50 cursor-not-allowed\",\n badgeClassName\n )}\n >\n {renderBadgeValue()}\n {!isLoading && <ChevronDown className=\"h-3 w-3\" />}\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-48\">\n {options.map((option) => (\n <DropdownMenuItem\n key={String(option.value)}\n onClick={() => handleSelect(option.value)}\n className=\"gap-2\"\n >\n {option.icon && <span className=\"w-4 h-4\">{option.icon}</span>}\n <span className=\"flex-1\">{option.label}</span>\n {option.value === value && <Check className=\"h-4 w-4 text-primary\" />}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n\n <Dialog open={showDialog} onOpenChange={setShowDialog}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{confirmTitle}</DialogTitle>\n <DialogDescription>{confirmDescription}</DialogDescription>\n </DialogHeader>\n {selectedOption && (\n <div className=\"flex items-center gap-3 py-4\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground\">De:</span>\n <Badge variant={currentOption?.variant || variant} className={currentOption?.className}>\n {currentOption?.icon}\n {currentOption?.label || value}\n </Badge>\n </div>\n <span className=\"text-muted-foreground\">→</span>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground\">Para:</span>\n <Badge variant={selectedOption.variant || variant} className={selectedOption.className}>\n {selectedOption.icon}\n {selectedOption.label}\n </Badge>\n </div>\n </div>\n )}\n <DialogFooter>\n <Button\n variant=\"outline\"\n onClick={handleCancel}\n disabled={isConfirming}\n >\n {cancelButtonText}\n </Button>\n <Button onClick={() => handleConfirm()} disabled={isConfirming}>\n {isConfirming ? \"Confirmando...\" : confirmButtonText}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </>\n );\n}\n\nexport const EditableBadge = React.forwardRef(EditableBadgeInner) as (<\n T extends string | number = string\n>(\n props: EditableBadgeProps<T> & { ref?: React.Ref<HTMLDivElement> }\n) => React.ReactElement) & { displayName?: string };\n\nEditableBadge.displayName = \"EditableBadge\";\n"],"names":["EditableBadgeInner","value","options","onValueChange","onCancel","disabled","variant","confirmTitle","confirmDescription","confirmButtonText","cancelButtonText","skipConfirmation","isLoading","renderValue","className","props","ref","selectedValue","setSelectedValue","React","showDialog","setShowDialog","isOpen","setIsOpen","isConfirming","setIsConfirming","currentOption","opt","selectedOption","handleSelect","newValue","handleConfirm","valueToConfirm","finalValue","error","handleCancel","renderBadgeValue","jsxs","Fragment","badgeVariant","badgeClassName","cn","jsx","Badge","DropdownMenu","DropdownMenuTrigger","badgeVariants","ChevronDown","DropdownMenuContent","option","DropdownMenuItem","Check","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","DialogFooter","Button","EditableBadge"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),l=require("lucide-react"),P=require("react"),g=require("../primitives/badge.cjs"),d=require("../primitives/button.cjs"),k=require("../primitives/progress.cjs"),r=require("../overlays/tooltip.cjs"),h=require("../utils.cjs");function $(t){return t?t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:t<1024*1024*1024?`${(t/(1024*1024)).toFixed(1)} MB`:`${(t/(1024*1024*1024)).toFixed(1)} GB`:""}function z(t){if(!t)return"";try{const i=new Date(t);return isNaN(i.getTime())?t:i.toLocaleDateString("pt-BR",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return t}}function E(t,i){if(t.length<=i)return t;const a=t.lastIndexOf(".");if(a===-1)return t.substring(0,i-3)+"...";const n=t.substring(a);return t.substring(0,a).substring(0,i-n.length-3)+"..."+n}function F({attachments:t,onDownload:i,onRemove:a,onView:n,showDownload:x=!0,showRemove:p=!1,showView:v=!1,maxFilenameLength:C=40,variant:w="compact",emptyMessage:B="Nenhum anexo",isLoading:O=!1,className:j}){const[y,T]=P.useState({}),m=async(s,f,o)=>{if(!o)return;const u=s.chave||s.nomeOriginal;T(c=>({...c,[u]:f}));try{await o(s)}finally{T(c=>({...c,[u]:null}))}};return O?e.jsx("div",{className:h.cn("space-y-2",j),children:[1,2,3].map(s=>e.jsxs("div",{className:"flex items-center gap-2 p-3 border rounded bg-muted/30 animate-pulse",children:[e.jsx("div",{className:"h-4 w-4 bg-muted-foreground/20 rounded"}),e.jsx("div",{className:"h-4 flex-1 bg-muted-foreground/20 rounded"})]},s))}):t.length===0?e.jsx("div",{className:h.cn("text-center py-6 text-sm text-muted-foreground border rounded-lg bg-muted/20",j),children:B}):e.jsx("div",{className:h.cn("space-y-2",j),children:t.map((s,f)=>{const o=s.chave||s.id||`${s.nomeOriginal}-${f}`,u=y[s.chave||s.nomeOriginal],c=u==="download",N=u==="view",b=(()=>{switch(s.status){case"completed":return e.jsx(g.Badge,{variant:"outline",className:"bg-success/10 text-success-emphasis border-success/20 hover:bg-success/10",children:"✓ Enviado"});case"uploading":return e.jsx(g.Badge,{variant:"outline",className:"bg-info/10 text-info-emphasis border-info/20 hover:bg-info/10",children:"Enviando..."});case"failed":return e.jsx(g.Badge,{variant:"outline",className:"bg-destructive/10 text-destructive-emphasis border-destructive/20 hover:bg-destructive/10",children:"✗ Erro"});case"retrying":return e.jsx(g.Badge,{variant:"outline",className:"bg-warning/10 text-warning-emphasis border-warning/20 hover:bg-warning/10",children:"Tentando..."});default:return null}})();return w==="detailed"?e.jsx("div",{className:h.cn("p-4 border rounded-lg bg-card transition-colors",s.status==="failed"&&"border-destructive/30 bg-destructive/5"),children:e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"flex items-start gap-3 flex-1 min-w-0",children:[e.jsx(l.Paperclip,{className:"h-5 w-5 text-muted-foreground mt-0.5 flex-shrink-0"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx(r.TooltipProvider,{children:e.jsxs(r.Tooltip,{children:[e.jsx(r.TooltipTrigger,{asChild:!0,children:e.jsx("p",{className:"text-sm font-medium truncate",children:s.nomeOriginal})}),e.jsx(r.TooltipContent,{children:e.jsx("p",{className:"text-xs",children:s.nomeOriginal})})]})}),e.jsxs("div",{className:"flex items-center gap-2 mt-1 text-xs text-muted-foreground",children:[s.tamanhoBytes&&e.jsx("span",{children:$(s.tamanhoBytes)}),s.tamanhoBytes&&s.dataUpload&&e.jsx("span",{children:"•"}),s.dataUpload&&e.jsx("span",{children:z(s.dataUpload)})]}),s.status==="uploading"&&typeof s.progress=="number"&&e.jsx(k.Progress,{value:s.progress,className:"h-1 mt-2"}),s.status==="failed"&&s.erro&&e.jsxs("div",{className:"flex items-center gap-1 mt-2 text-xs text-destructive",children:[e.jsx(l.AlertCircle,{className:"h-3 w-3"}),e.jsx("span",{children:s.erro})]})]})]}),e.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[b,s.status==="completed"&&e.jsxs(e.Fragment,{children:[v&&n&&e.jsx(r.TooltipProvider,{children:e.jsxs(r.Tooltip,{children:[e.jsx(r.TooltipTrigger,{asChild:!0,children:e.jsx(d.Button,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:()=>m(s,"view",n),disabled:N,"aria-label":`Visualizar ${s.nomeOriginal}`,children:e.jsx(l.Eye,{className:"h-4 w-4"})})}),e.jsx(r.TooltipContent,{children:"Visualizar"})]})}),x&&i&&e.jsx(r.TooltipProvider,{children:e.jsxs(r.Tooltip,{children:[e.jsx(r.TooltipTrigger,{asChild:!0,children:e.jsx(d.Button,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:()=>m(s,"download",i),disabled:c,"aria-label":`Baixar ${s.nomeOriginal}`,children:e.jsx(l.Download,{className:"h-4 w-4"})})}),e.jsx(r.TooltipContent,{children:"Baixar"})]})}),p&&a&&e.jsx(r.TooltipProvider,{children:e.jsxs(r.Tooltip,{children:[e.jsx(r.TooltipTrigger,{asChild:!0,children:e.jsx(d.Button,{variant:"ghost",size:"icon",className:"h-8 w-8 text-destructive hover:text-destructive",onClick:()=>a(s),"aria-label":`Remover ${s.nomeOriginal}`,children:e.jsx(l.Trash2,{className:"h-4 w-4"})})}),e.jsx(r.TooltipContent,{children:"Remover"})]})})]})]})]})},o):e.jsxs("div",{className:h.cn("flex items-center justify-between gap-2 p-3 border rounded-lg bg-muted/30 transition-colors",s.status==="failed"&&"border-destructive/30 bg-destructive/5"),children:[e.jsxs("div",{className:"flex items-center gap-2 flex-1 min-w-0",children:[e.jsx(l.Paperclip,{className:"h-4 w-4 text-muted-foreground flex-shrink-0"}),e.jsx(r.TooltipProvider,{children:e.jsxs(r.Tooltip,{children:[e.jsx(r.TooltipTrigger,{asChild:!0,children:e.jsx("span",{className:"text-sm truncate",children:E(s.nomeOriginal,C)})}),e.jsx(r.TooltipContent,{children:e.jsx("p",{className:"max-w-xs break-all",children:s.nomeOriginal})})]})}),s.status==="uploading"&&typeof s.progress=="number"&&e.jsxs("span",{className:"text-xs text-muted-foreground flex-shrink-0",children:[s.progress,"%"]}),b]}),s.status==="completed"&&e.jsxs("div",{className:"flex items-center gap-1 flex-shrink-0",children:[v&&n&&e.jsx(r.TooltipProvider,{children:e.jsxs(r.Tooltip,{children:[e.jsx(r.TooltipTrigger,{asChild:!0,children:e.jsx(d.Button,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:()=>m(s,"view",n),disabled:N,"aria-label":`Visualizar ${s.nomeOriginal}`,children:e.jsx(l.Eye,{className:"h-4 w-4"})})}),e.jsx(r.TooltipContent,{children:"Visualizar"})]})}),x&&i&&e.jsx(r.TooltipProvider,{children:e.jsxs(r.Tooltip,{children:[e.jsx(r.TooltipTrigger,{asChild:!0,children:e.jsx(d.Button,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:()=>m(s,"download",i),disabled:c,"aria-label":`Baixar ${s.nomeOriginal}`,children:e.jsx(l.Download,{className:"h-4 w-4"})})}),e.jsx(r.TooltipContent,{children:"Baixar"})]})}),p&&a&&e.jsx(r.TooltipProvider,{children:e.jsxs(r.Tooltip,{children:[e.jsx(r.TooltipTrigger,{asChild:!0,children:e.jsx(d.Button,{variant:"ghost",size:"icon",className:"h-8 w-8 text-destructive hover:text-destructive",onClick:()=>a(s),"aria-label":`Remover ${s.nomeOriginal}`,children:e.jsx(l.Trash2,{className:"h-4 w-4"})})}),e.jsx(r.TooltipContent,{children:"Remover"})]})})]}),s.status==="failed"&&s.erro&&e.jsx(r.TooltipProvider,{children:e.jsxs(r.Tooltip,{children:[e.jsx(r.TooltipTrigger,{asChild:!0,children:e.jsx(l.AlertCircle,{className:"h-4 w-4 text-destructive flex-shrink-0"})}),e.jsx(r.TooltipContent,{children:e.jsx("p",{className:"text-xs",children:s.erro})})]})})]},o)})})}exports.FileAttachmentList=F;
|
|
2
|
+
//# sourceMappingURL=file-attachment-list.cjs.map
|