@iclips/ui 1.4.13 → 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 -63715
- package/dist/index.js.map +1 -1
- package/dist/preset.css +352 -0
- package/dist/toast-theme.css +100 -0
- package/dist/tokens.css +471 -0
- package/package.json +144 -45
- package/scripts/codemod-v2-renames.mjs +101 -0
- package/scripts/codemod-v2-toast.mjs +84 -0
- package/dist/components/figma/ImageWithFallback.d.ts +0 -3
- package/dist/components/figma/ImageWithFallback.d.ts.map +0 -1
- package/dist/components/print-templates/ContractTemplate.d.ts +0 -89
- package/dist/components/print-templates/ContractTemplate.d.ts.map +0 -1
- package/dist/components/print-templates/ProposalTemplate.d.ts +0 -41
- package/dist/components/print-templates/ProposalTemplate.d.ts.map +0 -1
- package/dist/components/print-templates/index.d.ts +0 -22
- package/dist/components/print-templates/index.d.ts.map +0 -1
- package/dist/components/print-templates/shared/PrintFooter.d.ts +0 -21
- package/dist/components/print-templates/shared/PrintFooter.d.ts.map +0 -1
- package/dist/components/print-templates/shared/PrintHeader.d.ts +0 -38
- package/dist/components/print-templates/shared/PrintHeader.d.ts.map +0 -1
- package/dist/components/print-templates/shared/PrintInfoGrid.d.ts +0 -22
- package/dist/components/print-templates/shared/PrintInfoGrid.d.ts.map +0 -1
- package/dist/components/print-templates/shared/PrintSection.d.ts +0 -29
- package/dist/components/print-templates/shared/PrintSection.d.ts.map +0 -1
- package/dist/components/print-templates/shared/PrintSignature.d.ts +0 -27
- package/dist/components/print-templates/shared/PrintSignature.d.ts.map +0 -1
- package/dist/components/print-templates/shared/PrintTable.d.ts +0 -44
- package/dist/components/print-templates/shared/PrintTable.d.ts.map +0 -1
- package/dist/components/timeline-demo.d.ts +0 -3
- package/dist/components/timeline-demo.d.ts.map +0 -1
- package/dist/components/ui/accordion.d.ts +0 -8
- package/dist/components/ui/accordion.d.ts.map +0 -1
- package/dist/components/ui/advanced-data-table.d.ts +0 -100
- package/dist/components/ui/advanced-data-table.d.ts.map +0 -1
- package/dist/components/ui/alert-dialog.d.ts +0 -15
- package/dist/components/ui/alert-dialog.d.ts.map +0 -1
- package/dist/components/ui/alert-toast.d.ts +0 -11
- package/dist/components/ui/alert-toast.d.ts.map +0 -1
- package/dist/components/ui/alert.d.ts +0 -10
- package/dist/components/ui/alert.d.ts.map +0 -1
- package/dist/components/ui/app-layout-primary-nav.d.ts +0 -30
- package/dist/components/ui/app-layout-primary-nav.d.ts.map +0 -1
- package/dist/components/ui/app-layout-secondary-nav.d.ts +0 -34
- package/dist/components/ui/app-layout-secondary-nav.d.ts.map +0 -1
- package/dist/components/ui/app-layout-user-menu.d.ts +0 -28
- package/dist/components/ui/app-layout-user-menu.d.ts.map +0 -1
- package/dist/components/ui/aspect-ratio.d.ts +0 -4
- package/dist/components/ui/aspect-ratio.d.ts.map +0 -1
- package/dist/components/ui/auth-layout.d.ts +0 -28
- package/dist/components/ui/auth-layout.d.ts.map +0 -1
- package/dist/components/ui/avatar.d.ts +0 -21
- package/dist/components/ui/avatar.d.ts.map +0 -1
- package/dist/components/ui/badge.d.ts +0 -18
- package/dist/components/ui/badge.d.ts.map +0 -1
- package/dist/components/ui/brand-logo.d.ts +0 -7
- package/dist/components/ui/brand-logo.d.ts.map +0 -1
- package/dist/components/ui/breadcrumb.d.ts +0 -12
- package/dist/components/ui/breadcrumb.d.ts.map +0 -1
- package/dist/components/ui/button.d.ts +0 -15
- package/dist/components/ui/button.d.ts.map +0 -1
- package/dist/components/ui/calendar.d.ts +0 -31
- package/dist/components/ui/calendar.d.ts.map +0 -1
- package/dist/components/ui/card.d.ts +0 -10
- package/dist/components/ui/card.d.ts.map +0 -1
- package/dist/components/ui/carousel.d.ts +0 -20
- package/dist/components/ui/carousel.d.ts.map +0 -1
- package/dist/components/ui/chart.d.ts +0 -45
- package/dist/components/ui/chart.d.ts.map +0 -1
- package/dist/components/ui/checkbox.d.ts +0 -5
- package/dist/components/ui/checkbox.d.ts.map +0 -1
- package/dist/components/ui/collapsible.d.ts +0 -6
- package/dist/components/ui/collapsible.d.ts.map +0 -1
- package/dist/components/ui/color-picker.d.ts +0 -13
- package/dist/components/ui/color-picker.d.ts.map +0 -1
- package/dist/components/ui/combobox.d.ts +0 -118
- package/dist/components/ui/combobox.d.ts.map +0 -1
- package/dist/components/ui/command.d.ts +0 -17
- package/dist/components/ui/command.d.ts.map +0 -1
- package/dist/components/ui/comment-system.d.ts +0 -43
- package/dist/components/ui/comment-system.d.ts.map +0 -1
- package/dist/components/ui/context-menu.d.ts +0 -26
- package/dist/components/ui/context-menu.d.ts.map +0 -1
- package/dist/components/ui/contract-print.d.ts +0 -82
- package/dist/components/ui/contract-print.d.ts.map +0 -1
- package/dist/components/ui/currency-input.d.ts +0 -11
- package/dist/components/ui/currency-input.d.ts.map +0 -1
- package/dist/components/ui/data-table.d.ts +0 -30
- package/dist/components/ui/data-table.d.ts.map +0 -1
- package/dist/components/ui/date-picker.d.ts +0 -111
- package/dist/components/ui/date-picker.d.ts.map +0 -1
- package/dist/components/ui/date-range-picker.d.ts +0 -128
- package/dist/components/ui/date-range-picker.d.ts.map +0 -1
- package/dist/components/ui/dialog.d.ts +0 -14
- package/dist/components/ui/dialog.d.ts.map +0 -1
- package/dist/components/ui/document-editor.d.ts +0 -14
- package/dist/components/ui/document-editor.d.ts.map +0 -1
- package/dist/components/ui/donut-chart.d.ts +0 -32
- package/dist/components/ui/donut-chart.d.ts.map +0 -1
- package/dist/components/ui/drawer.d.ts +0 -14
- package/dist/components/ui/drawer.d.ts.map +0 -1
- package/dist/components/ui/dropdown-menu.d.ts +0 -26
- package/dist/components/ui/dropdown-menu.d.ts.map +0 -1
- package/dist/components/ui/editable-badge.d.ts +0 -98
- package/dist/components/ui/editable-badge.d.ts.map +0 -1
- package/dist/components/ui/editorial-calendar.d.ts +0 -22
- package/dist/components/ui/editorial-calendar.d.ts.map +0 -1
- package/dist/components/ui/empty-state.d.ts +0 -59
- package/dist/components/ui/empty-state.d.ts.map +0 -1
- package/dist/components/ui/filter-bar.d.ts +0 -16
- package/dist/components/ui/filter-bar.d.ts.map +0 -1
- package/dist/components/ui/filter-builder.d.ts +0 -39
- package/dist/components/ui/filter-builder.d.ts.map +0 -1
- package/dist/components/ui/filter-chip.d.ts +0 -8
- package/dist/components/ui/filter-chip.d.ts.map +0 -1
- package/dist/components/ui/form.d.ts +0 -25
- package/dist/components/ui/form.d.ts.map +0 -1
- package/dist/components/ui/gantt-chart.d.ts +0 -28
- package/dist/components/ui/gantt-chart.d.ts.map +0 -1
- package/dist/components/ui/hover-card.d.ts +0 -7
- package/dist/components/ui/hover-card.d.ts.map +0 -1
- package/dist/components/ui/illustrations.d.ts +0 -76
- package/dist/components/ui/illustrations.d.ts.map +0 -1
- package/dist/components/ui/index.d.ts +0 -91
- package/dist/components/ui/index.d.ts.map +0 -1
- package/dist/components/ui/input-group.d.ts +0 -19
- package/dist/components/ui/input-group.d.ts.map +0 -1
- package/dist/components/ui/input-otp.d.ts +0 -12
- package/dist/components/ui/input-otp.d.ts.map +0 -1
- package/dist/components/ui/input-validation.d.ts +0 -35
- package/dist/components/ui/input-validation.d.ts.map +0 -1
- package/dist/components/ui/input.d.ts +0 -4
- package/dist/components/ui/input.d.ts.map +0 -1
- package/dist/components/ui/kanban-card.d.ts +0 -59
- package/dist/components/ui/kanban-card.d.ts.map +0 -1
- package/dist/components/ui/kanban-generic-card.d.ts +0 -43
- package/dist/components/ui/kanban-generic-card.d.ts.map +0 -1
- package/dist/components/ui/kpi-card.d.ts +0 -45
- package/dist/components/ui/kpi-card.d.ts.map +0 -1
- package/dist/components/ui/label.d.ts +0 -5
- package/dist/components/ui/label.d.ts.map +0 -1
- package/dist/components/ui/lista-anexos-arquivo.d.ts +0 -47
- package/dist/components/ui/lista-anexos-arquivo.d.ts.map +0 -1
- package/dist/components/ui/mention-list.d.ts +0 -7
- package/dist/components/ui/mention-list.d.ts.map +0 -1
- package/dist/components/ui/menubar.d.ts +0 -27
- package/dist/components/ui/menubar.d.ts.map +0 -1
- package/dist/components/ui/month-range-picker.d.ts +0 -71
- package/dist/components/ui/month-range-picker.d.ts.map +0 -1
- package/dist/components/ui/multi-select.d.ts +0 -98
- package/dist/components/ui/multi-select.d.ts.map +0 -1
- package/dist/components/ui/navigation-menu.d.ts +0 -15
- package/dist/components/ui/navigation-menu.d.ts.map +0 -1
- package/dist/components/ui/number-input.d.ts +0 -83
- package/dist/components/ui/number-input.d.ts.map +0 -1
- package/dist/components/ui/page-header.d.ts +0 -32
- package/dist/components/ui/page-header.d.ts.map +0 -1
- package/dist/components/ui/pagination.d.ts +0 -14
- package/dist/components/ui/pagination.d.ts.map +0 -1
- package/dist/components/ui/password-input.d.ts +0 -7
- package/dist/components/ui/password-input.d.ts.map +0 -1
- package/dist/components/ui/popover.d.ts +0 -8
- package/dist/components/ui/popover.d.ts.map +0 -1
- package/dist/components/ui/progress-timeline.d.ts +0 -42
- package/dist/components/ui/progress-timeline.d.ts.map +0 -1
- package/dist/components/ui/progress.d.ts +0 -7
- package/dist/components/ui/progress.d.ts.map +0 -1
- package/dist/components/ui/radio-group.d.ts +0 -6
- package/dist/components/ui/radio-group.d.ts.map +0 -1
- package/dist/components/ui/resizable.d.ts +0 -9
- package/dist/components/ui/resizable.d.ts.map +0 -1
- package/dist/components/ui/saved-filters.d.ts +0 -16
- package/dist/components/ui/saved-filters.d.ts.map +0 -1
- package/dist/components/ui/scroll-area.d.ts +0 -8
- package/dist/components/ui/scroll-area.d.ts.map +0 -1
- package/dist/components/ui/select.d.ts +0 -16
- package/dist/components/ui/select.d.ts.map +0 -1
- package/dist/components/ui/separator.d.ts +0 -5
- package/dist/components/ui/separator.d.ts.map +0 -1
- package/dist/components/ui/sheet.d.ts +0 -14
- package/dist/components/ui/sheet.d.ts.map +0 -1
- package/dist/components/ui/side-panel.d.ts +0 -40
- package/dist/components/ui/side-panel.d.ts.map +0 -1
- package/dist/components/ui/sidebar.d.ts +0 -70
- package/dist/components/ui/sidebar.d.ts.map +0 -1
- package/dist/components/ui/skeleton.d.ts +0 -8
- package/dist/components/ui/skeleton.d.ts.map +0 -1
- package/dist/components/ui/slider.d.ts +0 -5
- package/dist/components/ui/slider.d.ts.map +0 -1
- package/dist/components/ui/social-button.d.ts +0 -13
- package/dist/components/ui/social-button.d.ts.map +0 -1
- package/dist/components/ui/switch.d.ts +0 -5
- package/dist/components/ui/switch.d.ts.map +0 -1
- package/dist/components/ui/table-pagination.d.ts +0 -131
- package/dist/components/ui/table-pagination.d.ts.map +0 -1
- package/dist/components/ui/table-types.d.ts +0 -320
- package/dist/components/ui/table-types.d.ts.map +0 -1
- package/dist/components/ui/table.d.ts +0 -34
- package/dist/components/ui/table.d.ts.map +0 -1
- package/dist/components/ui/tabs.d.ts +0 -8
- package/dist/components/ui/tabs.d.ts.map +0 -1
- package/dist/components/ui/task-edit-dialog.d.ts +0 -15
- package/dist/components/ui/task-edit-dialog.d.ts.map +0 -1
- package/dist/components/ui/textarea.d.ts +0 -4
- package/dist/components/ui/textarea.d.ts.map +0 -1
- package/dist/components/ui/time-picker.d.ts +0 -85
- package/dist/components/ui/time-picker.d.ts.map +0 -1
- package/dist/components/ui/timeline.d.ts +0 -63
- package/dist/components/ui/timeline.d.ts.map +0 -1
- package/dist/components/ui/toast.d.ts +0 -5
- package/dist/components/ui/toast.d.ts.map +0 -1
- package/dist/components/ui/toggle-group.d.ts +0 -8
- package/dist/components/ui/toggle-group.d.ts.map +0 -1
- package/dist/components/ui/toggle.d.ts +0 -10
- package/dist/components/ui/toggle.d.ts.map +0 -1
- package/dist/components/ui/tooltip.d.ts +0 -8
- package/dist/components/ui/tooltip.d.ts.map +0 -1
- package/dist/components/ui/underline-tabs.d.ts +0 -29
- package/dist/components/ui/underline-tabs.d.ts.map +0 -1
- package/dist/components/ui/use-mobile.d.ts +0 -2
- package/dist/components/ui/use-mobile.d.ts.map +0 -1
- package/dist/components/ui/use-print-contract.d.ts +0 -37
- package/dist/components/ui/use-print-contract.d.ts.map +0 -1
- package/dist/components/ui/utils.d.ts +0 -3
- package/dist/components/ui/utils.d.ts.map +0 -1
- package/dist/components/ui/zona-upload-arquivo.d.ts +0 -34
- package/dist/components/ui/zona-upload-arquivo.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { useState as F, useCallback as O, useEffect as j } from "react";
|
|
2
|
+
function B({
|
|
3
|
+
initialFilters: c,
|
|
4
|
+
filterFields: T,
|
|
5
|
+
isServerMode: l,
|
|
6
|
+
serverConfig: e,
|
|
7
|
+
handlers: n,
|
|
8
|
+
defaultSearchColumn: u
|
|
9
|
+
}) {
|
|
10
|
+
const [s, m] = F(""), [D, q] = F(!1), [r, _] = F(c), y = (t) => {
|
|
11
|
+
switch (t) {
|
|
12
|
+
case "is":
|
|
13
|
+
return "equals";
|
|
14
|
+
case "equals":
|
|
15
|
+
return "equals";
|
|
16
|
+
case "contains":
|
|
17
|
+
return "contains";
|
|
18
|
+
case "contem":
|
|
19
|
+
return "contains";
|
|
20
|
+
case "starts_with":
|
|
21
|
+
return "startsWith";
|
|
22
|
+
case "greater_than":
|
|
23
|
+
return "greaterThan";
|
|
24
|
+
case "greater_than_or_equal":
|
|
25
|
+
return "greaterThanOrEqual";
|
|
26
|
+
case "less_than":
|
|
27
|
+
return "lessThan";
|
|
28
|
+
case "less_than_or_equal":
|
|
29
|
+
return "lessThanOrEqual";
|
|
30
|
+
case "entre":
|
|
31
|
+
return "equals";
|
|
32
|
+
// Para datas entre, precisa processar diferente
|
|
33
|
+
default:
|
|
34
|
+
return "contains";
|
|
35
|
+
}
|
|
36
|
+
}, b = O(async (t) => {
|
|
37
|
+
l && (e != null && e.onFilterChange) ? await e.onFilterChange(t, s) : (n.clearFilters(), s && n.setFilter(u, s, "contains"), t.forEach((a) => {
|
|
38
|
+
const p = y(a.operator);
|
|
39
|
+
n.setFilter(a.field, a.value, p);
|
|
40
|
+
}));
|
|
41
|
+
}, [l, e, s, n, u]);
|
|
42
|
+
j(() => {
|
|
43
|
+
c && (_(c), c.length > 0 && (l && (e != null && e.onFilterChange) ? e.onFilterChange(c, s) : (n.clearFilters(), s && n.setFilter(u, s, "contains"), c.forEach((t) => {
|
|
44
|
+
const a = y(t.operator);
|
|
45
|
+
n.setFilter(t.field, t.value, a);
|
|
46
|
+
}))));
|
|
47
|
+
}, [JSON.stringify(c)]);
|
|
48
|
+
const E = O(async (t) => {
|
|
49
|
+
m(t), l && (e != null && e.onFilterChange) ? await e.onFilterChange(r, t) : n.setFilter(u, t, "contains");
|
|
50
|
+
}, [l, e, r, n, u]), L = (t) => {
|
|
51
|
+
if (/^\d{4}-\d{2}-\d{2}/.test(t)) {
|
|
52
|
+
const a = /* @__PURE__ */ new Date(t + "T00:00:00");
|
|
53
|
+
if (!isNaN(a.getTime()))
|
|
54
|
+
return a.toLocaleDateString("pt-BR");
|
|
55
|
+
}
|
|
56
|
+
return t;
|
|
57
|
+
}, N = (t) => ({
|
|
58
|
+
is: "é",
|
|
59
|
+
is_not: "não é",
|
|
60
|
+
is_any_of: "é qualquer um de",
|
|
61
|
+
is_none_of: "não é nenhum de",
|
|
62
|
+
equals: "igual a",
|
|
63
|
+
not_equals: "diferente de",
|
|
64
|
+
contains: "contém",
|
|
65
|
+
contem: "contém",
|
|
66
|
+
does_not_contain: "não contém",
|
|
67
|
+
starts_with: "começa com",
|
|
68
|
+
ends_with: "termina com",
|
|
69
|
+
greater_than: "maior que",
|
|
70
|
+
greater_than_or_equal: "maior ou igual a",
|
|
71
|
+
less_than: "menor que",
|
|
72
|
+
less_than_or_equal: "menor ou igual a",
|
|
73
|
+
is_empty: "está vazio",
|
|
74
|
+
is_not_empty: "não está vazio",
|
|
75
|
+
entre: "entre"
|
|
76
|
+
})[t] || t, z = (t) => t ? t.groups ? t.groups.flatMap((a) => [
|
|
77
|
+
...a.value ? [{ value: a.value, label: a.label }] : [],
|
|
78
|
+
...a.options
|
|
79
|
+
]) : t.options ?? [] : [], Q = r.map((t) => {
|
|
80
|
+
var w;
|
|
81
|
+
const a = T.find((o) => o.value === t.field), p = N(t.operator), A = z(a);
|
|
82
|
+
let i;
|
|
83
|
+
return Array.isArray(t.value) ? i = t.value.map((o) => {
|
|
84
|
+
var h;
|
|
85
|
+
return ((h = A.find(($) => $.value === o)) == null ? void 0 : h.label) || o;
|
|
86
|
+
}).join(", ") : (a == null ? void 0 : a.type) === "date" ? i = L(t.value) : i = ((w = A.find((o) => o.value === t.value)) == null ? void 0 : w.label) || t.value, {
|
|
87
|
+
id: t.id,
|
|
88
|
+
label: (a == null ? void 0 : a.label) || t.field,
|
|
89
|
+
value: p ? `${p} ${i}` : i,
|
|
90
|
+
onRemove: () => {
|
|
91
|
+
const o = r.filter((h) => h.id !== t.id);
|
|
92
|
+
_(o), b(o);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
}), R = () => {
|
|
96
|
+
b(r), q(!1);
|
|
97
|
+
}, d = () => {
|
|
98
|
+
_([]), l && (e != null && e.onFilterChange) ? e.onFilterChange([], s) : (n.clearFilters(), s && n.setFilter(u, s, "contains"));
|
|
99
|
+
};
|
|
100
|
+
return {
|
|
101
|
+
searchQuery: s,
|
|
102
|
+
handleSearchChange: E,
|
|
103
|
+
advancedFilters: r,
|
|
104
|
+
setAdvancedFilters: _,
|
|
105
|
+
filterDialogOpen: D,
|
|
106
|
+
setFilterDialogOpen: q,
|
|
107
|
+
activeFilterChips: Q,
|
|
108
|
+
handleApplyFilters: R,
|
|
109
|
+
handleClearAllFilters: d,
|
|
110
|
+
clearSearchAndFilters: () => {
|
|
111
|
+
m(""), d();
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
export {
|
|
116
|
+
B as useDataTableFilters
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=use-data-table-filters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-data-table-filters.js","sources":["../../src/hooks/use-data-table-filters.ts"],"sourcesContent":["import { useState, useCallback, useEffect, Dispatch, SetStateAction } from \"react\";\nimport { ServerSideConfig, FilterOperator } from \"../components/ui/data/table-types\";\nimport { ActiveFilter } from \"../components/ui/data/filter-bar\";\nimport { FilterCondition, FilterField } from \"../components/ui/data/filter-builder\";\nimport { useDataTable } from \"./use-data-table\";\n\ninterface UseDataTableFiltersOptions<T extends object> {\n initialFilters: FilterCondition[];\n filterFields: FilterField[];\n isServerMode: boolean;\n serverConfig?: ServerSideConfig<T>;\n handlers: ReturnType<typeof useDataTable<T>>[\"handlers\"];\n defaultSearchColumn: keyof T | undefined;\n}\n\ninterface UseDataTableFiltersReturn {\n searchQuery: string;\n handleSearchChange: (value: string) => Promise<void>;\n advancedFilters: FilterCondition[];\n setAdvancedFilters: Dispatch<SetStateAction<FilterCondition[]>>;\n filterDialogOpen: boolean;\n setFilterDialogOpen: Dispatch<SetStateAction<boolean>>;\n activeFilterChips: ActiveFilter[];\n handleApplyFilters: () => void;\n handleClearAllFilters: () => void;\n /**\n * Ação composta usada pelo empty state: limpa a busca de texto e todos os filtros\n * avançados juntos. Existia inline em data-table.tsx como `setSearchQuery(\"\");\n * handleClearAllFilters();` — movida para cá (em vez de expor o setter cru de\n * searchQuery) para manter a interface pública do hook enxuta, já que\n * `setSearchQuery` não tem nenhum outro consumidor fora deste hook. Preserva\n * exatamente a mesma sequência/timing do código original, incluindo o fato de\n * `handleClearAllFilters` ainda ler o valor antigo de `searchQuery` nesta mesma\n * passada de execução (o setState acima é assíncrono).\n */\n clearSearchAndFilters: () => void;\n}\n\n/**\n * Owns DataTable's search + advanced-filter state and derived data: search query,\n * advanced filter conditions, the filter dialog's open state, PT-BR operator/label\n * translation, and the active-filter-chip list consumed by `FilterBar`.\n *\n * Pure extraction from `data-table.tsx` — every function body below is unchanged\n * from its previous inline form.\n */\nexport function useDataTableFilters<T extends object>({\n initialFilters,\n filterFields,\n isServerMode,\n serverConfig,\n handlers,\n defaultSearchColumn,\n}: UseDataTableFiltersOptions<T>): UseDataTableFiltersReturn {\n // Search state - separate from filters\n const [searchQuery, setSearchQuery] = useState(\"\");\n\n // Estado de filtro avançado\n const [filterDialogOpen, setFilterDialogOpen] = useState(false);\n const [advancedFilters, setAdvancedFilters] = useState<FilterCondition[]>(initialFilters);\n\n // Map FilterBuilder operators to table FilterOperator\n const mapFilterOperator = (operator: string): FilterOperator => {\n switch (operator) {\n case \"is\": return \"equals\";\n case \"equals\": return \"equals\";\n case \"contains\": return \"contains\";\n case \"contem\": return \"contains\";\n case \"starts_with\": return \"startsWith\";\n case \"greater_than\": return \"greaterThan\";\n case \"greater_than_or_equal\": return \"greaterThanOrEqual\";\n case \"less_than\": return \"lessThan\";\n case \"less_than_or_equal\": return \"lessThanOrEqual\";\n case \"entre\": return \"equals\"; // Para datas entre, precisa processar diferente\n default: return \"contains\";\n }\n };\n\n // Apply advanced filters - server-side aware\n const applyAdvancedFilters = useCallback(async (filters: FilterCondition[]) => {\n if (isServerMode && serverConfig?.onFilterChange) {\n await serverConfig.onFilterChange(filters, searchQuery);\n } else {\n handlers.clearFilters();\n if (searchQuery) {\n handlers.setFilter(defaultSearchColumn!, searchQuery, \"contains\");\n }\n\n filters.forEach(filter => {\n const operator = mapFilterOperator(filter.operator);\n handlers.setFilter(filter.field as keyof T, filter.value, operator);\n });\n }\n }, [isServerMode, serverConfig, searchQuery, handlers, defaultSearchColumn]);\n\n // Sync external filters with internal state\n useEffect(() => {\n if (initialFilters) {\n // Sincroniza sempre que initialFilters mudar (incluindo quando ficar vazio)\n setAdvancedFilters(initialFilters);\n if (initialFilters.length > 0) {\n // Não inclui applyAdvancedFilters nas dependências para evitar loops\n // Aplica os filtros diretamente\n if (isServerMode && serverConfig?.onFilterChange) {\n serverConfig.onFilterChange(initialFilters, searchQuery);\n } else {\n handlers.clearFilters();\n if (searchQuery) {\n handlers.setFilter(defaultSearchColumn!, searchQuery, \"contains\");\n }\n initialFilters.forEach(filter => {\n const operator = mapFilterOperator(filter.operator);\n handlers.setFilter(filter.field as keyof T, filter.value, operator);\n });\n }\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(initialFilters)]);\n\n // Handle search - server-side aware\n const handleSearchChange = useCallback(async (value: string) => {\n setSearchQuery(value);\n\n if (isServerMode && serverConfig?.onFilterChange) {\n await serverConfig.onFilterChange(advancedFilters, value);\n } else {\n handlers.setFilter(defaultSearchColumn!, value, \"contains\");\n }\n }, [isServerMode, serverConfig, advancedFilters, handlers, defaultSearchColumn]);\n\n // Helper para formatar datas para pt-BR\n const formatDateValue = (value: string): string => {\n // Tenta parsear como data ISO (YYYY-MM-DD)\n if (/^\\d{4}-\\d{2}-\\d{2}/.test(value)) {\n const date = new Date(value + 'T00:00:00');\n if (!isNaN(date.getTime())) {\n return date.toLocaleDateString('pt-BR');\n }\n }\n return value;\n };\n\n // Helper para traduzir operadores para português\n const translateOperator = (operator: string): string => {\n const translations: Record<string, string> = {\n \"is\": \"é\",\n \"is_not\": \"não é\",\n \"is_any_of\": \"é qualquer um de\",\n \"is_none_of\": \"não é nenhum de\",\n \"equals\": \"igual a\",\n \"not_equals\": \"diferente de\",\n \"contains\": \"contém\",\n \"contem\": \"contém\",\n \"does_not_contain\": \"não contém\",\n \"starts_with\": \"começa com\",\n \"ends_with\": \"termina com\",\n \"greater_than\": \"maior que\",\n \"greater_than_or_equal\": \"maior ou igual a\",\n \"less_than\": \"menor que\",\n \"less_than_or_equal\": \"menor ou igual a\",\n \"is_empty\": \"está vazio\",\n \"is_not_empty\": \"não está vazio\",\n \"entre\": \"entre\",\n };\n return translations[operator] || operator;\n };\n\n // Opções selecionáveis de um campo, cobrindo tanto `options` quanto `groups`. Num campo\n // hierárquico o cabeçalho do grupo também é selecionável, e olhar só `options` fazia o\n // chip cair no value cru — \"Cliente / Grupo: é qualquer um de g-2\" em vez do nome.\n const opcoesSelecionaveis = (field?: FilterField) => {\n if (!field) return [];\n if (field.groups) {\n return field.groups.flatMap(group => [\n ...(group.value ? [{ value: group.value, label: group.label }] : []),\n ...group.options,\n ]);\n }\n return field.options ?? [];\n };\n\n // Convert advanced filters to active filter chips\n const activeFilterChips: ActiveFilter[] = advancedFilters.map((filter) => {\n const field = filterFields.find(f => f.value === filter.field);\n const operatorLabel = translateOperator(filter.operator);\n const opcoes = opcoesSelecionaveis(field);\n\n // Para campos com options (select), buscar o label correspondente ao value\n let valueLabel: string;\n if (Array.isArray(filter.value)) {\n // Multi-select: mapear cada value para seu label\n valueLabel = filter.value\n .map(val => opcoes.find(opt => opt.value === val)?.label || val)\n .join(\", \");\n } else {\n // Single value: buscar label ou usar o value\n // Se for campo de data, formatar para pt-BR\n if (field?.type === 'date') {\n valueLabel = formatDateValue(filter.value);\n } else {\n valueLabel = opcoes.find(opt => opt.value === filter.value)?.label || filter.value;\n }\n }\n\n return {\n id: filter.id,\n label: field?.label || filter.field,\n value: operatorLabel ? `${operatorLabel} ${valueLabel}` : valueLabel,\n onRemove: () => {\n const updated = advancedFilters.filter(f => f.id !== filter.id);\n setAdvancedFilters(updated);\n applyAdvancedFilters(updated);\n }\n };\n });\n\n const handleApplyFilters = () => {\n applyAdvancedFilters(advancedFilters);\n setFilterDialogOpen(false);\n };\n\n const handleClearAllFilters = () => {\n setAdvancedFilters([]);\n if (isServerMode && serverConfig?.onFilterChange) {\n serverConfig.onFilterChange([], searchQuery);\n } else {\n handlers.clearFilters();\n if (searchQuery) {\n handlers.setFilter(defaultSearchColumn!, searchQuery, \"contains\");\n }\n }\n };\n\n const clearSearchAndFilters = () => {\n setSearchQuery(\"\");\n handleClearAllFilters();\n };\n\n return {\n searchQuery,\n handleSearchChange,\n advancedFilters,\n setAdvancedFilters,\n filterDialogOpen,\n setFilterDialogOpen,\n activeFilterChips,\n handleApplyFilters,\n handleClearAllFilters,\n clearSearchAndFilters,\n };\n}\n"],"names":["useDataTableFilters","initialFilters","filterFields","isServerMode","serverConfig","handlers","defaultSearchColumn","searchQuery","setSearchQuery","useState","filterDialogOpen","setFilterDialogOpen","advancedFilters","setAdvancedFilters","mapFilterOperator","operator","applyAdvancedFilters","useCallback","filters","filter","useEffect","handleSearchChange","value","formatDateValue","date","translateOperator","opcoesSelecionaveis","field","group","activeFilterChips","f","operatorLabel","opcoes","valueLabel","val","_a","opt","updated","handleApplyFilters","handleClearAllFilters"],"mappings":";AA8CO,SAASA,EAAsC;AAAA,EAClD,gBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,qBAAAC;AACJ,GAA6D;AAEzD,QAAM,CAACC,GAAaC,CAAc,IAAIC,EAAS,EAAE,GAG3C,CAACC,GAAkBC,CAAmB,IAAIF,EAAS,EAAK,GACxD,CAACG,GAAiBC,CAAkB,IAAIJ,EAA4BR,CAAc,GAGlFa,IAAoB,CAACC,MAAqC;AAC5D,YAAQA,GAAA;AAAA,MACJ,KAAK;AAAM,eAAO;AAAA,MAClB,KAAK;AAAU,eAAO;AAAA,MACtB,KAAK;AAAY,eAAO;AAAA,MACxB,KAAK;AAAU,eAAO;AAAA,MACtB,KAAK;AAAe,eAAO;AAAA,MAC3B,KAAK;AAAgB,eAAO;AAAA,MAC5B,KAAK;AAAyB,eAAO;AAAA,MACrC,KAAK;AAAa,eAAO;AAAA,MACzB,KAAK;AAAsB,eAAO;AAAA,MAClC,KAAK;AAAS,eAAO;AAAA;AAAA,MACrB;AAAS,eAAO;AAAA,IAAA;AAAA,EAExB,GAGMC,IAAuBC,EAAY,OAAOC,MAA+B;AAC3E,IAAIf,MAAgBC,KAAA,QAAAA,EAAc,kBAC9B,MAAMA,EAAa,eAAec,GAASX,CAAW,KAEtDF,EAAS,aAAA,GACLE,KACAF,EAAS,UAAUC,GAAsBC,GAAa,UAAU,GAGpEW,EAAQ,QAAQ,CAAAC,MAAU;AACtB,YAAMJ,IAAWD,EAAkBK,EAAO,QAAQ;AAClD,MAAAd,EAAS,UAAUc,EAAO,OAAkBA,EAAO,OAAOJ,CAAQ;AAAA,IACtE,CAAC;AAAA,EAET,GAAG,CAACZ,GAAcC,GAAcG,GAAaF,GAAUC,CAAmB,CAAC;AAG3E,EAAAc,EAAU,MAAM;AACZ,IAAInB,MAEAY,EAAmBZ,CAAc,GAC7BA,EAAe,SAAS,MAGpBE,MAAgBC,KAAA,QAAAA,EAAc,kBAC9BA,EAAa,eAAeH,GAAgBM,CAAW,KAEvDF,EAAS,aAAA,GACLE,KACAF,EAAS,UAAUC,GAAsBC,GAAa,UAAU,GAEpEN,EAAe,QAAQ,CAAAkB,MAAU;AAC7B,YAAMJ,IAAWD,EAAkBK,EAAO,QAAQ;AAClD,MAAAd,EAAS,UAAUc,EAAO,OAAkBA,EAAO,OAAOJ,CAAQ;AAAA,IACtE,CAAC;AAAA,EAKjB,GAAG,CAAC,KAAK,UAAUd,CAAc,CAAC,CAAC;AAGnC,QAAMoB,IAAqBJ,EAAY,OAAOK,MAAkB;AAC5D,IAAAd,EAAec,CAAK,GAEhBnB,MAAgBC,KAAA,QAAAA,EAAc,kBAC9B,MAAMA,EAAa,eAAeQ,GAAiBU,CAAK,IAExDjB,EAAS,UAAUC,GAAsBgB,GAAO,UAAU;AAAA,EAElE,GAAG,CAACnB,GAAcC,GAAcQ,GAAiBP,GAAUC,CAAmB,CAAC,GAGzEiB,IAAkB,CAACD,MAA0B;AAE/C,QAAI,qBAAqB,KAAKA,CAAK,GAAG;AAClC,YAAME,IAAO,oBAAI,KAAKF,IAAQ,WAAW;AACzC,UAAI,CAAC,MAAME,EAAK,QAAA,CAAS;AACrB,eAAOA,EAAK,mBAAmB,OAAO;AAAA,IAE9C;AACA,WAAOF;AAAA,EACX,GAGMG,IAAoB,CAACV,OACsB;AAAA,IACzC,IAAM;AAAA,IACN,QAAU;AAAA,IACV,WAAa;AAAA,IACb,YAAc;AAAA,IACd,QAAU;AAAA,IACV,YAAc;AAAA,IACd,UAAY;AAAA,IACZ,QAAU;AAAA,IACV,kBAAoB;AAAA,IACpB,aAAe;AAAA,IACf,WAAa;AAAA,IACb,cAAgB;AAAA,IAChB,uBAAyB;AAAA,IACzB,WAAa;AAAA,IACb,oBAAsB;AAAA,IACtB,UAAY;AAAA,IACZ,cAAgB;AAAA,IAChB,OAAS;AAAA,EAAA,GAEOA,CAAQ,KAAKA,GAM/BW,IAAsB,CAACC,MACpBA,IACDA,EAAM,SACCA,EAAM,OAAO,QAAQ,CAAAC,MAAS;AAAA,IACjC,GAAIA,EAAM,QAAQ,CAAC,EAAE,OAAOA,EAAM,OAAO,OAAOA,EAAM,MAAA,CAAO,IAAI,CAAA;AAAA,IACjE,GAAGA,EAAM;AAAA,EAAA,CACZ,IAEED,EAAM,WAAW,CAAA,IAPL,CAAA,GAWjBE,IAAoCjB,EAAgB,IAAI,CAACO,MAAW;;AACtE,UAAMQ,IAAQzB,EAAa,KAAK,OAAK4B,EAAE,UAAUX,EAAO,KAAK,GACvDY,IAAgBN,EAAkBN,EAAO,QAAQ,GACjDa,IAASN,EAAoBC,CAAK;AAGxC,QAAIM;AACJ,WAAI,MAAM,QAAQd,EAAO,KAAK,IAE1Bc,IAAad,EAAO,MACf,IAAI,CAAAe,MAAA;;AAAO,eAAAC,IAAAH,EAAO,KAAK,CAAAI,MAAOA,EAAI,UAAUF,CAAG,MAApC,gBAAAC,EAAuC,UAASD;AAAA,KAAG,EAC9D,KAAK,IAAI,KAIVP,KAAA,gBAAAA,EAAO,UAAS,SAChBM,IAAaV,EAAgBJ,EAAO,KAAK,IAEzCc,MAAaE,IAAAH,EAAO,KAAK,CAAAI,MAAOA,EAAI,UAAUjB,EAAO,KAAK,MAA7C,gBAAAgB,EAAgD,UAAShB,EAAO,OAI9E;AAAA,MACH,IAAIA,EAAO;AAAA,MACX,QAAOQ,KAAA,gBAAAA,EAAO,UAASR,EAAO;AAAA,MAC9B,OAAOY,IAAgB,GAAGA,CAAa,IAAIE,CAAU,KAAKA;AAAA,MAC1D,UAAU,MAAM;AACZ,cAAMI,IAAUzB,EAAgB,OAAO,OAAKkB,EAAE,OAAOX,EAAO,EAAE;AAC9D,QAAAN,EAAmBwB,CAAO,GAC1BrB,EAAqBqB,CAAO;AAAA,MAChC;AAAA,IAAA;AAAA,EAER,CAAC,GAEKC,IAAqB,MAAM;AAC7B,IAAAtB,EAAqBJ,CAAe,GACpCD,EAAoB,EAAK;AAAA,EAC7B,GAEM4B,IAAwB,MAAM;AAChC,IAAA1B,EAAmB,CAAA,CAAE,GACjBV,MAAgBC,KAAA,QAAAA,EAAc,kBAC9BA,EAAa,eAAe,CAAA,GAAIG,CAAW,KAE3CF,EAAS,aAAA,GACLE,KACAF,EAAS,UAAUC,GAAsBC,GAAa,UAAU;AAAA,EAG5E;AAOA,SAAO;AAAA,IACH,aAAAA;AAAA,IACA,oBAAAc;AAAA,IACA,iBAAAT;AAAA,IACA,oBAAAC;AAAA,IACA,kBAAAH;AAAA,IACA,qBAAAC;AAAA,IACA,mBAAAkB;AAAA,IACA,oBAAAS;AAAA,IACA,uBAAAC;AAAA,IACA,uBAf0B,MAAM;AAChC,MAAA/B,EAAe,EAAE,GACjB+B,EAAA;AAAA,IACJ;AAAA,EAYI;AAER;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react"),C=require("./use-table-pagination.cjs");function I({data:c,initialSort:p={column:null,direction:null},initialPageSize:S=10,enablePagination:T=!0,serverMode:a=!1,totalItems:D,serverCurrentPage:u,serverCurrentPageSize:s}){const[o,b]=l.useState(p),[r,d]=l.useState([]),g=l.useMemo(()=>a||r.length===0?c:c.filter(n=>r.every(t=>{const i=n[t.column];switch(t.operator){case"equals":return i==t.value;case"contains":return String(i).toLowerCase().includes(String(t.value).toLowerCase());case"startsWith":return String(i).toLowerCase().startsWith(String(t.value).toLowerCase());case"greaterThan":return i>t.value;case"greaterThanOrEqual":return i>=t.value;case"lessThan":return i<t.value;case"lessThanOrEqual":return i<=t.value;default:return!0}})),[c,r,a]),m=l.useMemo(()=>a||!o.column||!o.direction?g:[...g].sort((n,t)=>{const i=n[o.column],f=t[o.column];return i<f?o.direction==="asc"?-1:1:i>f?o.direction==="asc"?1:-1:0}),[g,o,a]),q=a?D??c.length:m.length,e=C.useTablePagination({data:a?c:m,initialPageSize:S,resetOnDataChange:!0,serverSideTotalItems:a?q:void 0});l.useEffect(()=>{a&&(u!==void 0&&u!==e.currentPage&&e.goToPage(u),s!==void 0&&s!==e.pageSize&&e.setPageSize(s))},[a,u,s,e]);const w=n=>{b(t=>{if(t.column===n){if(t.direction==="asc")return{column:n,direction:"desc"};if(t.direction==="desc")return{column:null,direction:null}}return{column:n,direction:"asc"}})},F=(n,t,i="contains")=>{d(f=>{const h=f.filter(V=>V.column!==n);return t===""||t===null||t===void 0?h:[...h,{column:n,operator:i,value:t}]})},L=n=>{d(t=>t.filter(i=>i.column!==n))},O=n=>o.column===n?o.direction:null,y=a?c:T?e.paginatedData:m,E=a&&(u!==void 0||s!==void 0)?{...e.paginationConfig,currentPage:u??e.paginationConfig.currentPage,pageSize:s??e.paginationConfig.pageSize}:e.paginationConfig;return{data:y,state:{sort:o,filters:r,pagination:E},handlers:{onSort:w,setFilter:F,removeFilter:L,clearFilters:()=>d([])},getSortDirection:O}}exports.useDataTable=I;
|
|
2
|
+
//# sourceMappingURL=use-data-table.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-data-table.cjs","sources":["../../src/hooks/use-data-table.ts"],"sourcesContent":["import { useState, useMemo, useEffect } from \"react\";\nimport {\n SortConfig,\n SortDirection,\n FilterConfig,\n FilterOperator\n} from \"../components/ui/data/table-types\";\nimport { useTablePagination } from \"./use-table-pagination\";\n\ninterface UseDataTableProps<T> {\n data: T[];\n initialSort?: SortConfig<T>;\n initialPageSize?: number;\n enablePagination?: boolean;\n\n // Server-side mode\n serverMode?: boolean;\n totalItems?: number;\n serverCurrentPage?: number; // Página atual do servidor (1-indexed)\n serverCurrentPageSize?: number; // Tamanho da página do servidor\n}\n\ninterface UseDataTableReturn<T> {\n /** The processed data to be displayed (filtered, sorted, and optionally paginated) */\n data: T[];\n /** State helpers */\n state: {\n sort: SortConfig<T>;\n filters: FilterConfig<T>[];\n pagination: ReturnType<typeof useTablePagination>[\"paginationConfig\"];\n };\n /** Handlers */\n handlers: {\n /** Toggle sort for a column. Cycles through: asc -> desc -> null (or reset) */\n onSort: (column: keyof T) => void;\n /** Apply a filter */\n setFilter: (column: keyof T, value: unknown, operator?: FilterOperator) => void;\n /** Remove a filter */\n removeFilter: (column: keyof T) => void;\n /** Clear all filters */\n clearFilters: () => void;\n };\n /** Helper to get aria-sort attribute for a column */\n getSortDirection: (column: keyof T) => SortDirection;\n}\n\n/**\n * Composite hook that manages Sorting, Filtering and Pagination for a Data Table.\n */\nexport function useDataTable<T>({\n data,\n initialSort = { column: null, direction: null },\n initialPageSize = 10,\n enablePagination = true,\n serverMode = false,\n totalItems,\n serverCurrentPage,\n serverCurrentPageSize\n}: UseDataTableProps<T>): UseDataTableReturn<T> {\n\n // --- Sorting State ---\n const [sortConfig, setSortConfig] = useState<SortConfig<T>>(initialSort);\n\n // --- Filtering State ---\n const [filters, setFilters] = useState<FilterConfig<T>[]>([]);\n\n // --- 1. Filtering Logic ---\n // Skip se server-side (dados já vêm filtrados)\n const filteredData = useMemo(() => {\n if (serverMode) return data;\n if (filters.length === 0) return data;\n\n return data.filter(item => {\n return filters.every(filter => {\n const itemValue = item[filter.column];\n\n switch (filter.operator) {\n case \"equals\": return itemValue == filter.value;\n case \"contains\":\n return String(itemValue).toLowerCase().includes(String(filter.value).toLowerCase());\n case \"startsWith\":\n return String(itemValue).toLowerCase().startsWith(String(filter.value).toLowerCase());\n case \"greaterThan\": return itemValue > filter.value;\n case \"greaterThanOrEqual\": return itemValue >= filter.value;\n case \"lessThan\": return itemValue < filter.value;\n case \"lessThanOrEqual\": return itemValue <= filter.value;\n default: return true;\n }\n });\n });\n }, [data, filters, serverMode]);\n\n // --- 2. Sorting Logic ---\n // Skip se server-side (dados já vêm ordenados)\n const sortedData = useMemo(() => {\n if (serverMode) return filteredData;\n if (!sortConfig.column || !sortConfig.direction) return filteredData;\n\n return [...filteredData].sort((a, b) => {\n const aValue = a[sortConfig.column!];\n const bValue = b[sortConfig.column!];\n\n if (aValue < bValue) return sortConfig.direction === \"asc\" ? -1 : 1;\n if (aValue > bValue) return sortConfig.direction === \"asc\" ? 1 : -1;\n return 0;\n });\n }, [filteredData, sortConfig, serverMode]);\n\n // --- 3. Pagination Logic ---\n // Server-side: data já vem paginado, usar totalItems do servidor\n // Client-side: paginar dados processados localmente\n const realTotalItems = serverMode ? (totalItems ?? data.length) : sortedData.length;\n\n const pagination = useTablePagination({\n data: serverMode ? data : sortedData,\n initialPageSize,\n resetOnDataChange: true,\n serverSideTotalItems: serverMode ? realTotalItems : undefined\n });\n\n useEffect(() => {\n if (serverMode) {\n // Sincronizar página atual com servidor\n if (serverCurrentPage !== undefined && serverCurrentPage !== pagination.currentPage) {\n pagination.goToPage(serverCurrentPage);\n }\n \n // Sincronizar pageSize com servidor\n if (serverCurrentPageSize !== undefined && serverCurrentPageSize !== pagination.pageSize) {\n pagination.setPageSize(serverCurrentPageSize);\n }\n }\n }, [serverMode, serverCurrentPage, serverCurrentPageSize, pagination]);\n\n // --- Handlers ---\n const handleSort = (column: keyof T) => {\n setSortConfig(current => {\n if (current.column === column) {\n // Cycle: asc -> desc -> null\n if (current.direction === \"asc\") return { column, direction: \"desc\" };\n if (current.direction === \"desc\") return { column: null, direction: null };\n }\n return { column, direction: \"asc\" };\n });\n };\n\n const setFilter = (column: keyof T, value: unknown, operator: FilterOperator = \"contains\") => {\n setFilters(prev => {\n const existing = prev.filter(f => f.column !== column);\n if (value === \"\" || value === null || value === undefined) {\n return existing;\n }\n return [...existing, { column, operator, value }];\n });\n };\n\n const removeFilter = (column: keyof T) => {\n setFilters(prev => prev.filter(f => f.column !== column));\n };\n\n const getSortDirection = (column: keyof T): SortDirection => {\n return sortConfig.column === column ? sortConfig.direction : null;\n };\n\n // Server-side: dados já vêm paginados, retornar como vieram\n // Client-side: usar paginatedData do hook de paginação\n const finalData = serverMode\n ? data\n : (enablePagination ? pagination.paginatedData : sortedData);\n\n // Override paginationConfig com valores do servidor quando disponíveis\n const finalPaginationConfig = serverMode && (serverCurrentPage !== undefined || serverCurrentPageSize !== undefined)\n ? {\n ...pagination.paginationConfig,\n currentPage: serverCurrentPage ?? pagination.paginationConfig.currentPage,\n pageSize: serverCurrentPageSize ?? pagination.paginationConfig.pageSize\n }\n : pagination.paginationConfig;\n\n return {\n data: finalData,\n state: {\n sort: sortConfig,\n filters,\n pagination: finalPaginationConfig\n },\n handlers: {\n onSort: handleSort,\n setFilter,\n removeFilter,\n clearFilters: () => setFilters([])\n },\n getSortDirection\n };\n}\n"],"names":["useDataTable","data","initialSort","initialPageSize","enablePagination","serverMode","totalItems","serverCurrentPage","serverCurrentPageSize","sortConfig","setSortConfig","useState","filters","setFilters","filteredData","useMemo","item","filter","itemValue","sortedData","a","b","aValue","bValue","realTotalItems","pagination","useTablePagination","useEffect","handleSort","column","current","setFilter","value","operator","prev","existing","f","removeFilter","getSortDirection","finalData","finalPaginationConfig"],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { useState as h, useMemo as d, useEffect as I } from "react";
|
|
2
|
+
import { useTablePagination as W } from "./use-table-pagination.js";
|
|
3
|
+
function k({
|
|
4
|
+
data: e,
|
|
5
|
+
initialSort: S = { column: null, direction: null },
|
|
6
|
+
initialPageSize: T = 10,
|
|
7
|
+
enablePagination: D = !0,
|
|
8
|
+
serverMode: o = !1,
|
|
9
|
+
totalItems: w,
|
|
10
|
+
serverCurrentPage: s,
|
|
11
|
+
serverCurrentPageSize: u
|
|
12
|
+
}) {
|
|
13
|
+
const [a, F] = h(S), [l, f] = h([]), r = d(() => o || l.length === 0 ? e : e.filter((n) => l.every((t) => {
|
|
14
|
+
const i = n[t.column];
|
|
15
|
+
switch (t.operator) {
|
|
16
|
+
case "equals":
|
|
17
|
+
return i == t.value;
|
|
18
|
+
case "contains":
|
|
19
|
+
return String(i).toLowerCase().includes(String(t.value).toLowerCase());
|
|
20
|
+
case "startsWith":
|
|
21
|
+
return String(i).toLowerCase().startsWith(String(t.value).toLowerCase());
|
|
22
|
+
case "greaterThan":
|
|
23
|
+
return i > t.value;
|
|
24
|
+
case "greaterThanOrEqual":
|
|
25
|
+
return i >= t.value;
|
|
26
|
+
case "lessThan":
|
|
27
|
+
return i < t.value;
|
|
28
|
+
case "lessThanOrEqual":
|
|
29
|
+
return i <= t.value;
|
|
30
|
+
default:
|
|
31
|
+
return !0;
|
|
32
|
+
}
|
|
33
|
+
})), [e, l, o]), m = d(() => o || !a.column || !a.direction ? r : [...r].sort((n, t) => {
|
|
34
|
+
const i = n[a.column], g = t[a.column];
|
|
35
|
+
return i < g ? a.direction === "asc" ? -1 : 1 : i > g ? a.direction === "asc" ? 1 : -1 : 0;
|
|
36
|
+
}), [r, a, o]), L = o ? w ?? e.length : m.length, c = W({
|
|
37
|
+
data: o ? e : m,
|
|
38
|
+
initialPageSize: T,
|
|
39
|
+
resetOnDataChange: !0,
|
|
40
|
+
serverSideTotalItems: o ? L : void 0
|
|
41
|
+
});
|
|
42
|
+
I(() => {
|
|
43
|
+
o && (s !== void 0 && s !== c.currentPage && c.goToPage(s), u !== void 0 && u !== c.pageSize && c.setPageSize(u));
|
|
44
|
+
}, [o, s, u, c]);
|
|
45
|
+
const b = (n) => {
|
|
46
|
+
F((t) => {
|
|
47
|
+
if (t.column === n) {
|
|
48
|
+
if (t.direction === "asc") return { column: n, direction: "desc" };
|
|
49
|
+
if (t.direction === "desc") return { column: null, direction: null };
|
|
50
|
+
}
|
|
51
|
+
return { column: n, direction: "asc" };
|
|
52
|
+
});
|
|
53
|
+
}, q = (n, t, i = "contains") => {
|
|
54
|
+
f((g) => {
|
|
55
|
+
const p = g.filter((C) => C.column !== n);
|
|
56
|
+
return t === "" || t === null || t === void 0 ? p : [...p, { column: n, operator: i, value: t }];
|
|
57
|
+
});
|
|
58
|
+
}, E = (n) => {
|
|
59
|
+
f((t) => t.filter((i) => i.column !== n));
|
|
60
|
+
}, O = (n) => a.column === n ? a.direction : null, V = o ? e : D ? c.paginatedData : m, x = o && (s !== void 0 || u !== void 0) ? {
|
|
61
|
+
...c.paginationConfig,
|
|
62
|
+
currentPage: s ?? c.paginationConfig.currentPage,
|
|
63
|
+
pageSize: u ?? c.paginationConfig.pageSize
|
|
64
|
+
} : c.paginationConfig;
|
|
65
|
+
return {
|
|
66
|
+
data: V,
|
|
67
|
+
state: {
|
|
68
|
+
sort: a,
|
|
69
|
+
filters: l,
|
|
70
|
+
pagination: x
|
|
71
|
+
},
|
|
72
|
+
handlers: {
|
|
73
|
+
onSort: b,
|
|
74
|
+
setFilter: q,
|
|
75
|
+
removeFilter: E,
|
|
76
|
+
clearFilters: () => f([])
|
|
77
|
+
},
|
|
78
|
+
getSortDirection: O
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export {
|
|
82
|
+
k as useDataTable
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=use-data-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-data-table.js","sources":["../../src/hooks/use-data-table.ts"],"sourcesContent":["import { useState, useMemo, useEffect } from \"react\";\nimport {\n SortConfig,\n SortDirection,\n FilterConfig,\n FilterOperator\n} from \"../components/ui/data/table-types\";\nimport { useTablePagination } from \"./use-table-pagination\";\n\ninterface UseDataTableProps<T> {\n data: T[];\n initialSort?: SortConfig<T>;\n initialPageSize?: number;\n enablePagination?: boolean;\n\n // Server-side mode\n serverMode?: boolean;\n totalItems?: number;\n serverCurrentPage?: number; // Página atual do servidor (1-indexed)\n serverCurrentPageSize?: number; // Tamanho da página do servidor\n}\n\ninterface UseDataTableReturn<T> {\n /** The processed data to be displayed (filtered, sorted, and optionally paginated) */\n data: T[];\n /** State helpers */\n state: {\n sort: SortConfig<T>;\n filters: FilterConfig<T>[];\n pagination: ReturnType<typeof useTablePagination>[\"paginationConfig\"];\n };\n /** Handlers */\n handlers: {\n /** Toggle sort for a column. Cycles through: asc -> desc -> null (or reset) */\n onSort: (column: keyof T) => void;\n /** Apply a filter */\n setFilter: (column: keyof T, value: unknown, operator?: FilterOperator) => void;\n /** Remove a filter */\n removeFilter: (column: keyof T) => void;\n /** Clear all filters */\n clearFilters: () => void;\n };\n /** Helper to get aria-sort attribute for a column */\n getSortDirection: (column: keyof T) => SortDirection;\n}\n\n/**\n * Composite hook that manages Sorting, Filtering and Pagination for a Data Table.\n */\nexport function useDataTable<T>({\n data,\n initialSort = { column: null, direction: null },\n initialPageSize = 10,\n enablePagination = true,\n serverMode = false,\n totalItems,\n serverCurrentPage,\n serverCurrentPageSize\n}: UseDataTableProps<T>): UseDataTableReturn<T> {\n\n // --- Sorting State ---\n const [sortConfig, setSortConfig] = useState<SortConfig<T>>(initialSort);\n\n // --- Filtering State ---\n const [filters, setFilters] = useState<FilterConfig<T>[]>([]);\n\n // --- 1. Filtering Logic ---\n // Skip se server-side (dados já vêm filtrados)\n const filteredData = useMemo(() => {\n if (serverMode) return data;\n if (filters.length === 0) return data;\n\n return data.filter(item => {\n return filters.every(filter => {\n const itemValue = item[filter.column];\n\n switch (filter.operator) {\n case \"equals\": return itemValue == filter.value;\n case \"contains\":\n return String(itemValue).toLowerCase().includes(String(filter.value).toLowerCase());\n case \"startsWith\":\n return String(itemValue).toLowerCase().startsWith(String(filter.value).toLowerCase());\n case \"greaterThan\": return itemValue > filter.value;\n case \"greaterThanOrEqual\": return itemValue >= filter.value;\n case \"lessThan\": return itemValue < filter.value;\n case \"lessThanOrEqual\": return itemValue <= filter.value;\n default: return true;\n }\n });\n });\n }, [data, filters, serverMode]);\n\n // --- 2. Sorting Logic ---\n // Skip se server-side (dados já vêm ordenados)\n const sortedData = useMemo(() => {\n if (serverMode) return filteredData;\n if (!sortConfig.column || !sortConfig.direction) return filteredData;\n\n return [...filteredData].sort((a, b) => {\n const aValue = a[sortConfig.column!];\n const bValue = b[sortConfig.column!];\n\n if (aValue < bValue) return sortConfig.direction === \"asc\" ? -1 : 1;\n if (aValue > bValue) return sortConfig.direction === \"asc\" ? 1 : -1;\n return 0;\n });\n }, [filteredData, sortConfig, serverMode]);\n\n // --- 3. Pagination Logic ---\n // Server-side: data já vem paginado, usar totalItems do servidor\n // Client-side: paginar dados processados localmente\n const realTotalItems = serverMode ? (totalItems ?? data.length) : sortedData.length;\n\n const pagination = useTablePagination({\n data: serverMode ? data : sortedData,\n initialPageSize,\n resetOnDataChange: true,\n serverSideTotalItems: serverMode ? realTotalItems : undefined\n });\n\n useEffect(() => {\n if (serverMode) {\n // Sincronizar página atual com servidor\n if (serverCurrentPage !== undefined && serverCurrentPage !== pagination.currentPage) {\n pagination.goToPage(serverCurrentPage);\n }\n \n // Sincronizar pageSize com servidor\n if (serverCurrentPageSize !== undefined && serverCurrentPageSize !== pagination.pageSize) {\n pagination.setPageSize(serverCurrentPageSize);\n }\n }\n }, [serverMode, serverCurrentPage, serverCurrentPageSize, pagination]);\n\n // --- Handlers ---\n const handleSort = (column: keyof T) => {\n setSortConfig(current => {\n if (current.column === column) {\n // Cycle: asc -> desc -> null\n if (current.direction === \"asc\") return { column, direction: \"desc\" };\n if (current.direction === \"desc\") return { column: null, direction: null };\n }\n return { column, direction: \"asc\" };\n });\n };\n\n const setFilter = (column: keyof T, value: unknown, operator: FilterOperator = \"contains\") => {\n setFilters(prev => {\n const existing = prev.filter(f => f.column !== column);\n if (value === \"\" || value === null || value === undefined) {\n return existing;\n }\n return [...existing, { column, operator, value }];\n });\n };\n\n const removeFilter = (column: keyof T) => {\n setFilters(prev => prev.filter(f => f.column !== column));\n };\n\n const getSortDirection = (column: keyof T): SortDirection => {\n return sortConfig.column === column ? sortConfig.direction : null;\n };\n\n // Server-side: dados já vêm paginados, retornar como vieram\n // Client-side: usar paginatedData do hook de paginação\n const finalData = serverMode\n ? data\n : (enablePagination ? pagination.paginatedData : sortedData);\n\n // Override paginationConfig com valores do servidor quando disponíveis\n const finalPaginationConfig = serverMode && (serverCurrentPage !== undefined || serverCurrentPageSize !== undefined)\n ? {\n ...pagination.paginationConfig,\n currentPage: serverCurrentPage ?? pagination.paginationConfig.currentPage,\n pageSize: serverCurrentPageSize ?? pagination.paginationConfig.pageSize\n }\n : pagination.paginationConfig;\n\n return {\n data: finalData,\n state: {\n sort: sortConfig,\n filters,\n pagination: finalPaginationConfig\n },\n handlers: {\n onSort: handleSort,\n setFilter,\n removeFilter,\n clearFilters: () => setFilters([])\n },\n getSortDirection\n };\n}\n"],"names":["useDataTable","data","initialSort","initialPageSize","enablePagination","serverMode","totalItems","serverCurrentPage","serverCurrentPageSize","sortConfig","setSortConfig","useState","filters","setFilters","filteredData","useMemo","item","filter","itemValue","sortedData","a","b","aValue","bValue","realTotalItems","pagination","useTablePagination","useEffect","handleSort","column","current","setFilter","value","operator","prev","existing","f","removeFilter","getSortDirection","finalData","finalPaginationConfig"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react");function s(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const o=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,o.get?o:{enumerable:!0,get:()=>e[t]})}}return n.default=e,Object.freeze(n)}const r=s(c),i=768;function a(){const[e,n]=r.useState(void 0);return r.useEffect(()=>{const t=window.matchMedia(`(max-width: ${i-1}px)`),o=()=>{n(window.innerWidth<i)};return t.addEventListener("change",o),n(window.innerWidth<i),()=>t.removeEventListener("change",o)},[]),!!e}exports.useIsMobile=a;
|
|
2
|
+
//# sourceMappingURL=use-mobile.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-mobile.cjs","sources":["../../src/hooks/use-mobile.ts"],"sourcesContent":["import * as React from \"react\";\n\nconst MOBILE_BREAKPOINT = 768;\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(\n undefined,\n );\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n mql.addEventListener(\"change\", onChange);\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return !!isMobile;\n}\n"],"names":["MOBILE_BREAKPOINT","useIsMobile","isMobile","setIsMobile","React","mql","onChange"],"mappings":"mYAEMA,EAAoB,IAEnB,SAASC,GAAc,CAC5B,KAAM,CAACC,EAAUC,CAAW,EAAIC,EAAM,SACpC,MAAA,EAGFA,OAAAA,EAAM,UAAU,IAAM,CACpB,MAAMC,EAAM,OAAO,WAAW,eAAeL,EAAoB,CAAC,KAAK,EACjEM,EAAW,IAAM,CACrBH,EAAY,OAAO,WAAaH,CAAiB,CACnD,EACA,OAAAK,EAAI,iBAAiB,SAAUC,CAAQ,EACvCH,EAAY,OAAO,WAAaH,CAAiB,EAC1C,IAAMK,EAAI,oBAAoB,SAAUC,CAAQ,CACzD,EAAG,CAAA,CAAE,EAEE,CAAC,CAACJ,CACX"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as o from "react";
|
|
2
|
+
const e = 768;
|
|
3
|
+
function r() {
|
|
4
|
+
const [s, n] = o.useState(
|
|
5
|
+
void 0
|
|
6
|
+
);
|
|
7
|
+
return o.useEffect(() => {
|
|
8
|
+
const t = window.matchMedia(`(max-width: ${e - 1}px)`), i = () => {
|
|
9
|
+
n(window.innerWidth < e);
|
|
10
|
+
};
|
|
11
|
+
return t.addEventListener("change", i), n(window.innerWidth < e), () => t.removeEventListener("change", i);
|
|
12
|
+
}, []), !!s;
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
r as useIsMobile
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=use-mobile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-mobile.js","sources":["../../src/hooks/use-mobile.ts"],"sourcesContent":["import * as React from \"react\";\n\nconst MOBILE_BREAKPOINT = 768;\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(\n undefined,\n );\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n mql.addEventListener(\"change\", onChange);\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return !!isMobile;\n}\n"],"names":["MOBILE_BREAKPOINT","useIsMobile","isMobile","setIsMobile","React","mql","onChange"],"mappings":";AAEA,MAAMA,IAAoB;AAEnB,SAASC,IAAc;AAC5B,QAAM,CAACC,GAAUC,CAAW,IAAIC,EAAM;AAAA,IACpC;AAAA,EAAA;AAGF,SAAAA,EAAM,UAAU,MAAM;AACpB,UAAMC,IAAM,OAAO,WAAW,eAAeL,IAAoB,CAAC,KAAK,GACjEM,IAAW,MAAM;AACrB,MAAAH,EAAY,OAAO,aAAaH,CAAiB;AAAA,IACnD;AACA,WAAAK,EAAI,iBAAiB,UAAUC,CAAQ,GACvCH,EAAY,OAAO,aAAaH,CAAiB,GAC1C,MAAMK,EAAI,oBAAoB,UAAUC,CAAQ;AAAA,EACzD,GAAG,CAAA,CAAE,GAEE,CAAC,CAACJ;AACX;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("react"),y=require("../components/ui/data/table-types.cjs");function D({data:e,initialPageSize:m=10,resetOnDataChange:f=!0,serverSideTotalItems:P}){const[c,n]=g.useState(1),[a,p]=g.useState(m),i=P!==void 0,o=i?P:e.length,[x,b]=g.useState(e.length);f&&e.length!==x&&(b(e.length),n(1));const s=Math.ceil(o/a),r=Math.min(Math.max(1,c),Math.max(1,s)),u=(r-1)*a,h=Math.min(u+a,o),v=g.useMemo(()=>i?e:e.slice(u,h),[e,u,h,i]),l=t=>{const T=Math.max(1,Math.min(t,s));n(T)},z=()=>{c<s&&n(t=>t+1)},C=()=>{c>1&&n(t=>t-1)},M=t=>{p(t),n(1)},S={currentPage:r,pageSize:a,totalItems:o,onPageChange:l,onPageSizeChange:M},d=y.calculatePaginationMetadata(S);return{currentPage:r,pageSize:a,totalItems:o,totalPages:s,paginatedData:v,goToPage:l,nextPage:z,prevPage:C,setPageSize:M,paginationConfig:S,metadata:d}}exports.useTablePagination=D;
|
|
2
|
+
//# sourceMappingURL=use-table-pagination.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-table-pagination.cjs","sources":["../../src/hooks/use-table-pagination.ts"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { PaginationConfig, PaginationMetadata, calculatePaginationMetadata } from \"../components/ui/data/table-types\";\n\ninterface UseTablePaginationProps<T> {\n /** Array of items to be paginated */\n data: T[];\n /** Initial page size */\n initialPageSize?: number;\n /** Whether to reset to first page when data changes */\n resetOnDataChange?: boolean;\n /** Total items from server (for server-side pagination) */\n serverSideTotalItems?: number;\n}\n\ninterface UseTablePaginationReturn<T> {\n /** Current page number (1-indexed) */\n currentPage: number;\n /** Current page size */\n pageSize: number;\n /** Total number of items in the data array */\n totalItems: number;\n /** Total number of pages */\n totalPages: number;\n /** The subset of data for the current page */\n paginatedData: T[];\n /** Go to specific page */\n goToPage: (page: number) => void;\n /** Go to next page if available */\n nextPage: () => void;\n /** Go to previous page if available */\n prevPage: () => void;\n /** Change page size and reset to first page */\n setPageSize: (size: number) => void;\n /** Computed metadata usually needed for TablePagination component */\n paginationConfig: PaginationConfig;\n /** Full metadata including hasNext/hasPrev */\n metadata: PaginationMetadata;\n}\n\n/**\n * Hook to manage pagination state and logic for tables.\n * \n * @example\n * ```tsx\n * const { paginatedData, paginationConfig, goToPage, setPageSize } = useTablePagination({\n * data: allUsers,\n * initialPageSize: 10\n * });\n * \n * return (\n * <>\n * <Table data={paginatedData} />\n * <TablePagination \n * {...paginationConfig} \n * onPageChange={goToPage}\n * onPageSizeChange={setPageSize}\n * />\n * </>\n * )\n * ```\n */\nexport function useTablePagination<T>({\n data,\n initialPageSize = 10,\n resetOnDataChange = true,\n serverSideTotalItems\n}: UseTablePaginationProps<T>): UseTablePaginationReturn<T> {\n const [currentPage, setCurrentPage] = useState(1);\n const [pageSize, setPageSize] = useState(initialPageSize);\n\n // Server-side mode: usa total do servidor, senão usa length local\n const isServerMode = serverSideTotalItems !== undefined;\n const totalItems = isServerMode ? serverSideTotalItems : data.length;\n\n // Volta para a primeira página quando a quantidade de itens muda (ex.: filtro aplicado).\n // Ajuste de estado durante o render (padrão \"You Might Not Need an Effect\") em vez de\n // um useEffect com `data.length` só no array de deps — que disparava o warning\n // react-hooks/exhaustive-deps por não usar `data` no corpo.\n const [prevDataLength, setPrevDataLength] = useState(data.length);\n if (resetOnDataChange && data.length !== prevDataLength) {\n setPrevDataLength(data.length);\n setCurrentPage(1);\n }\n\n const totalPages = Math.ceil(totalItems / pageSize);\n\n // Ensure current page is valid\n const safeCurrentPage = Math.min(Math.max(1, currentPage), Math.max(1, totalPages));\n\n // Calculate slice indices (apenas para client-side)\n const startIndex = (safeCurrentPage - 1) * pageSize;\n const endIndex = Math.min(startIndex + pageSize, totalItems);\n\n // Get current page data\n // Server-side: data já vem paginado, retornar como está\n // Client-side: fazer slice\n const paginatedData = useMemo(() => {\n return isServerMode ? data : data.slice(startIndex, endIndex);\n }, [data, startIndex, endIndex, isServerMode]);\n\n const goToPage = (page: number) => {\n const targetPage = Math.max(1, Math.min(page, totalPages));\n setCurrentPage(targetPage);\n };\n\n const nextPage = () => {\n if (currentPage < totalPages) {\n setCurrentPage(p => p + 1);\n }\n };\n\n const prevPage = () => {\n if (currentPage > 1) {\n setCurrentPage(p => p - 1);\n }\n };\n\n const handleSetPageSize = (newSize: number) => {\n setPageSize(newSize);\n setCurrentPage(1); // Usually best UX to reset to page 1 on size change\n };\n\n const paginationConfig: PaginationConfig = {\n currentPage: safeCurrentPage,\n pageSize,\n totalItems,\n onPageChange: goToPage,\n onPageSizeChange: handleSetPageSize\n };\n\n const metadata = calculatePaginationMetadata(paginationConfig);\n\n return {\n currentPage: safeCurrentPage,\n pageSize,\n totalItems,\n totalPages,\n paginatedData,\n goToPage,\n nextPage,\n prevPage,\n setPageSize: handleSetPageSize,\n paginationConfig,\n metadata\n };\n}\n"],"names":["useTablePagination","data","initialPageSize","resetOnDataChange","serverSideTotalItems","currentPage","setCurrentPage","useState","pageSize","setPageSize","isServerMode","totalItems","prevDataLength","setPrevDataLength","totalPages","safeCurrentPage","startIndex","endIndex","paginatedData","useMemo","goToPage","page","targetPage","nextPage","p","prevPage","handleSetPageSize","newSize","paginationConfig","metadata","calculatePaginationMetadata"],"mappings":"4JA6DO,SAASA,EAAsB,CAClC,KAAAC,EACA,gBAAAC,EAAkB,GAClB,kBAAAC,EAAoB,GACpB,qBAAAC,CACJ,EAA4D,CACxD,KAAM,CAACC,EAAaC,CAAc,EAAIC,EAAAA,SAAS,CAAC,EAC1C,CAACC,EAAUC,CAAW,EAAIF,EAAAA,SAASL,CAAe,EAGlDQ,EAAeN,IAAyB,OACxCO,EAAaD,EAAeN,EAAuBH,EAAK,OAMxD,CAACW,EAAgBC,CAAiB,EAAIN,EAAAA,SAASN,EAAK,MAAM,EAC5DE,GAAqBF,EAAK,SAAWW,IACrCC,EAAkBZ,EAAK,MAAM,EAC7BK,EAAe,CAAC,GAGpB,MAAMQ,EAAa,KAAK,KAAKH,EAAaH,CAAQ,EAG5CO,EAAkB,KAAK,IAAI,KAAK,IAAI,EAAGV,CAAW,EAAG,KAAK,IAAI,EAAGS,CAAU,CAAC,EAG5EE,GAAcD,EAAkB,GAAKP,EACrCS,EAAW,KAAK,IAAID,EAAaR,EAAUG,CAAU,EAKrDO,EAAgBC,EAAAA,QAAQ,IACnBT,EAAeT,EAAOA,EAAK,MAAMe,EAAYC,CAAQ,EAC7D,CAAChB,EAAMe,EAAYC,EAAUP,CAAY,CAAC,EAEvCU,EAAYC,GAAiB,CAC/B,MAAMC,EAAa,KAAK,IAAI,EAAG,KAAK,IAAID,EAAMP,CAAU,CAAC,EACzDR,EAAegB,CAAU,CAC7B,EAEMC,EAAW,IAAM,CACflB,EAAcS,GACdR,EAAekB,GAAKA,EAAI,CAAC,CAEjC,EAEMC,EAAW,IAAM,CACfpB,EAAc,GACdC,EAAekB,GAAKA,EAAI,CAAC,CAEjC,EAEME,EAAqBC,GAAoB,CAC3ClB,EAAYkB,CAAO,EACnBrB,EAAe,CAAC,CACpB,EAEMsB,EAAqC,CACvC,YAAab,EACb,SAAAP,EACA,WAAAG,EACA,aAAcS,EACd,iBAAkBM,CAAA,EAGhBG,EAAWC,EAAAA,4BAA4BF,CAAgB,EAE7D,MAAO,CACH,YAAab,EACb,SAAAP,EACA,WAAAG,EACA,WAAAG,EACA,cAAAI,EACA,SAAAE,EACA,SAAAG,EACA,SAAAE,EACA,YAAaC,EACb,iBAAAE,EACA,SAAAC,CAAA,CAER"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { useState as P, useMemo as L } from "react";
|
|
2
|
+
import { calculatePaginationMetadata as b } from "../components/ui/data/table-types.js";
|
|
3
|
+
function k({
|
|
4
|
+
data: e,
|
|
5
|
+
initialPageSize: f = 10,
|
|
6
|
+
resetOnDataChange: p = !0,
|
|
7
|
+
serverSideTotalItems: h
|
|
8
|
+
}) {
|
|
9
|
+
const [s, n] = P(1), [a, x] = P(f), c = h !== void 0, o = c ? h : e.length, [S, z] = P(e.length);
|
|
10
|
+
p && e.length !== S && (z(e.length), n(1));
|
|
11
|
+
const g = Math.ceil(o / a), i = Math.min(Math.max(1, s), Math.max(1, g)), r = (i - 1) * a, u = Math.min(r + a, o), C = L(() => c ? e : e.slice(r, u), [e, r, u, c]), m = (t) => {
|
|
12
|
+
const I = Math.max(1, Math.min(t, g));
|
|
13
|
+
n(I);
|
|
14
|
+
}, v = () => {
|
|
15
|
+
s < g && n((t) => t + 1);
|
|
16
|
+
}, D = () => {
|
|
17
|
+
s > 1 && n((t) => t - 1);
|
|
18
|
+
}, l = (t) => {
|
|
19
|
+
x(t), n(1);
|
|
20
|
+
}, M = {
|
|
21
|
+
currentPage: i,
|
|
22
|
+
pageSize: a,
|
|
23
|
+
totalItems: o,
|
|
24
|
+
onPageChange: m,
|
|
25
|
+
onPageSizeChange: l
|
|
26
|
+
}, d = b(M);
|
|
27
|
+
return {
|
|
28
|
+
currentPage: i,
|
|
29
|
+
pageSize: a,
|
|
30
|
+
totalItems: o,
|
|
31
|
+
totalPages: g,
|
|
32
|
+
paginatedData: C,
|
|
33
|
+
goToPage: m,
|
|
34
|
+
nextPage: v,
|
|
35
|
+
prevPage: D,
|
|
36
|
+
setPageSize: l,
|
|
37
|
+
paginationConfig: M,
|
|
38
|
+
metadata: d
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export {
|
|
42
|
+
k as useTablePagination
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=use-table-pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-table-pagination.js","sources":["../../src/hooks/use-table-pagination.ts"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { PaginationConfig, PaginationMetadata, calculatePaginationMetadata } from \"../components/ui/data/table-types\";\n\ninterface UseTablePaginationProps<T> {\n /** Array of items to be paginated */\n data: T[];\n /** Initial page size */\n initialPageSize?: number;\n /** Whether to reset to first page when data changes */\n resetOnDataChange?: boolean;\n /** Total items from server (for server-side pagination) */\n serverSideTotalItems?: number;\n}\n\ninterface UseTablePaginationReturn<T> {\n /** Current page number (1-indexed) */\n currentPage: number;\n /** Current page size */\n pageSize: number;\n /** Total number of items in the data array */\n totalItems: number;\n /** Total number of pages */\n totalPages: number;\n /** The subset of data for the current page */\n paginatedData: T[];\n /** Go to specific page */\n goToPage: (page: number) => void;\n /** Go to next page if available */\n nextPage: () => void;\n /** Go to previous page if available */\n prevPage: () => void;\n /** Change page size and reset to first page */\n setPageSize: (size: number) => void;\n /** Computed metadata usually needed for TablePagination component */\n paginationConfig: PaginationConfig;\n /** Full metadata including hasNext/hasPrev */\n metadata: PaginationMetadata;\n}\n\n/**\n * Hook to manage pagination state and logic for tables.\n * \n * @example\n * ```tsx\n * const { paginatedData, paginationConfig, goToPage, setPageSize } = useTablePagination({\n * data: allUsers,\n * initialPageSize: 10\n * });\n * \n * return (\n * <>\n * <Table data={paginatedData} />\n * <TablePagination \n * {...paginationConfig} \n * onPageChange={goToPage}\n * onPageSizeChange={setPageSize}\n * />\n * </>\n * )\n * ```\n */\nexport function useTablePagination<T>({\n data,\n initialPageSize = 10,\n resetOnDataChange = true,\n serverSideTotalItems\n}: UseTablePaginationProps<T>): UseTablePaginationReturn<T> {\n const [currentPage, setCurrentPage] = useState(1);\n const [pageSize, setPageSize] = useState(initialPageSize);\n\n // Server-side mode: usa total do servidor, senão usa length local\n const isServerMode = serverSideTotalItems !== undefined;\n const totalItems = isServerMode ? serverSideTotalItems : data.length;\n\n // Volta para a primeira página quando a quantidade de itens muda (ex.: filtro aplicado).\n // Ajuste de estado durante o render (padrão \"You Might Not Need an Effect\") em vez de\n // um useEffect com `data.length` só no array de deps — que disparava o warning\n // react-hooks/exhaustive-deps por não usar `data` no corpo.\n const [prevDataLength, setPrevDataLength] = useState(data.length);\n if (resetOnDataChange && data.length !== prevDataLength) {\n setPrevDataLength(data.length);\n setCurrentPage(1);\n }\n\n const totalPages = Math.ceil(totalItems / pageSize);\n\n // Ensure current page is valid\n const safeCurrentPage = Math.min(Math.max(1, currentPage), Math.max(1, totalPages));\n\n // Calculate slice indices (apenas para client-side)\n const startIndex = (safeCurrentPage - 1) * pageSize;\n const endIndex = Math.min(startIndex + pageSize, totalItems);\n\n // Get current page data\n // Server-side: data já vem paginado, retornar como está\n // Client-side: fazer slice\n const paginatedData = useMemo(() => {\n return isServerMode ? data : data.slice(startIndex, endIndex);\n }, [data, startIndex, endIndex, isServerMode]);\n\n const goToPage = (page: number) => {\n const targetPage = Math.max(1, Math.min(page, totalPages));\n setCurrentPage(targetPage);\n };\n\n const nextPage = () => {\n if (currentPage < totalPages) {\n setCurrentPage(p => p + 1);\n }\n };\n\n const prevPage = () => {\n if (currentPage > 1) {\n setCurrentPage(p => p - 1);\n }\n };\n\n const handleSetPageSize = (newSize: number) => {\n setPageSize(newSize);\n setCurrentPage(1); // Usually best UX to reset to page 1 on size change\n };\n\n const paginationConfig: PaginationConfig = {\n currentPage: safeCurrentPage,\n pageSize,\n totalItems,\n onPageChange: goToPage,\n onPageSizeChange: handleSetPageSize\n };\n\n const metadata = calculatePaginationMetadata(paginationConfig);\n\n return {\n currentPage: safeCurrentPage,\n pageSize,\n totalItems,\n totalPages,\n paginatedData,\n goToPage,\n nextPage,\n prevPage,\n setPageSize: handleSetPageSize,\n paginationConfig,\n metadata\n };\n}\n"],"names":["useTablePagination","data","initialPageSize","resetOnDataChange","serverSideTotalItems","currentPage","setCurrentPage","useState","pageSize","setPageSize","isServerMode","totalItems","prevDataLength","setPrevDataLength","totalPages","safeCurrentPage","startIndex","endIndex","paginatedData","useMemo","goToPage","page","targetPage","nextPage","p","prevPage","handleSetPageSize","newSize","paginationConfig","metadata","calculatePaginationMetadata"],"mappings":";;AA6DO,SAASA,EAAsB;AAAA,EAClC,MAAAC;AAAA,EACA,iBAAAC,IAAkB;AAAA,EAClB,mBAAAC,IAAoB;AAAA,EACpB,sBAAAC;AACJ,GAA4D;AACxD,QAAM,CAACC,GAAaC,CAAc,IAAIC,EAAS,CAAC,GAC1C,CAACC,GAAUC,CAAW,IAAIF,EAASL,CAAe,GAGlDQ,IAAeN,MAAyB,QACxCO,IAAaD,IAAeN,IAAuBH,EAAK,QAMxD,CAACW,GAAgBC,CAAiB,IAAIN,EAASN,EAAK,MAAM;AAChE,EAAIE,KAAqBF,EAAK,WAAWW,MACrCC,EAAkBZ,EAAK,MAAM,GAC7BK,EAAe,CAAC;AAGpB,QAAMQ,IAAa,KAAK,KAAKH,IAAaH,CAAQ,GAG5CO,IAAkB,KAAK,IAAI,KAAK,IAAI,GAAGV,CAAW,GAAG,KAAK,IAAI,GAAGS,CAAU,CAAC,GAG5EE,KAAcD,IAAkB,KAAKP,GACrCS,IAAW,KAAK,IAAID,IAAaR,GAAUG,CAAU,GAKrDO,IAAgBC,EAAQ,MACnBT,IAAeT,IAAOA,EAAK,MAAMe,GAAYC,CAAQ,GAC7D,CAAChB,GAAMe,GAAYC,GAAUP,CAAY,CAAC,GAEvCU,IAAW,CAACC,MAAiB;AAC/B,UAAMC,IAAa,KAAK,IAAI,GAAG,KAAK,IAAID,GAAMP,CAAU,CAAC;AACzD,IAAAR,EAAegB,CAAU;AAAA,EAC7B,GAEMC,IAAW,MAAM;AACnB,IAAIlB,IAAcS,KACdR,EAAe,CAAAkB,MAAKA,IAAI,CAAC;AAAA,EAEjC,GAEMC,IAAW,MAAM;AACnB,IAAIpB,IAAc,KACdC,EAAe,CAAAkB,MAAKA,IAAI,CAAC;AAAA,EAEjC,GAEME,IAAoB,CAACC,MAAoB;AAC3C,IAAAlB,EAAYkB,CAAO,GACnBrB,EAAe,CAAC;AAAA,EACpB,GAEMsB,IAAqC;AAAA,IACvC,aAAab;AAAA,IACb,UAAAP;AAAA,IACA,YAAAG;AAAA,IACA,cAAcS;AAAA,IACd,kBAAkBM;AAAA,EAAA,GAGhBG,IAAWC,EAA4BF,CAAgB;AAE7D,SAAO;AAAA,IACH,aAAab;AAAA,IACb,UAAAP;AAAA,IACA,YAAAG;AAAA,IACA,YAAAG;AAAA,IACA,eAAAI;AAAA,IACA,UAAAE;AAAA,IACA,UAAAG;AAAA,IACA,UAAAE;AAAA,IACA,aAAaC;AAAA,IACb,kBAAAE;AAAA,IACA,UAAAC;AAAA,EAAA;AAER;"}
|