@iclips/ui 1.4.12 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/MIGRATION-v2.md +214 -0
- package/README.md +106 -0
- package/dist/alert-theme.css +94 -0
- package/dist/assets/illustrations/announcements.png.cjs +2 -0
- package/dist/assets/illustrations/announcements.png.cjs.map +1 -0
- package/dist/assets/illustrations/announcements.png.js +5 -0
- package/dist/assets/illustrations/announcements.png.js.map +1 -0
- package/dist/assets/illustrations/checklist-approved.png.cjs +2 -0
- package/dist/assets/illustrations/checklist-approved.png.cjs.map +1 -0
- package/dist/assets/illustrations/checklist-approved.png.js +5 -0
- package/dist/assets/illustrations/checklist-approved.png.js.map +1 -0
- package/dist/assets/illustrations/client-profile.png.cjs +2 -0
- package/dist/assets/illustrations/client-profile.png.cjs.map +1 -0
- package/dist/assets/illustrations/client-profile.png.js +5 -0
- package/dist/assets/illustrations/client-profile.png.js.map +1 -0
- package/dist/assets/illustrations/contract-agreement.png.cjs +2 -0
- package/dist/assets/illustrations/contract-agreement.png.cjs.map +1 -0
- package/dist/assets/illustrations/contract-agreement.png.js +5 -0
- package/dist/assets/illustrations/contract-agreement.png.js.map +1 -0
- package/dist/assets/illustrations/create-record.png.cjs +2 -0
- package/dist/assets/illustrations/create-record.png.cjs.map +1 -0
- package/dist/assets/illustrations/create-record.png.js +5 -0
- package/dist/assets/illustrations/create-record.png.js.map +1 -0
- package/dist/assets/illustrations/cta-action.png.cjs +2 -0
- package/dist/assets/illustrations/cta-action.png.cjs.map +1 -0
- package/dist/assets/illustrations/cta-action.png.js +5 -0
- package/dist/assets/illustrations/cta-action.png.js.map +1 -0
- package/dist/assets/illustrations/draft-document.png.cjs +2 -0
- package/dist/assets/illustrations/draft-document.png.cjs.map +1 -0
- package/dist/assets/illustrations/draft-document.png.js +5 -0
- package/dist/assets/illustrations/draft-document.png.js.map +1 -0
- package/dist/assets/illustrations/edit-company.png.cjs +2 -0
- package/dist/assets/illustrations/edit-company.png.cjs.map +1 -0
- package/dist/assets/illustrations/edit-company.png.js +5 -0
- package/dist/assets/illustrations/edit-company.png.js.map +1 -0
- package/dist/assets/illustrations/edit-document.png.cjs +2 -0
- package/dist/assets/illustrations/edit-document.png.cjs.map +1 -0
- package/dist/assets/illustrations/edit-document.png.js +5 -0
- package/dist/assets/illustrations/edit-document.png.js.map +1 -0
- package/dist/assets/illustrations/empty-no-results.png.cjs +2 -0
- package/dist/assets/illustrations/empty-no-results.png.cjs.map +1 -0
- package/dist/assets/illustrations/empty-no-results.png.js +5 -0
- package/dist/assets/illustrations/empty-no-results.png.js.map +1 -0
- package/dist/assets/illustrations/empty-not-found.png.cjs +2 -0
- package/dist/assets/illustrations/empty-not-found.png.cjs.map +1 -0
- package/dist/assets/illustrations/empty-not-found.png.js +5 -0
- package/dist/assets/illustrations/empty-not-found.png.js.map +1 -0
- package/dist/assets/illustrations/empty-task-approved.png.cjs +2 -0
- package/dist/assets/illustrations/empty-task-approved.png.cjs.map +1 -0
- package/dist/assets/illustrations/empty-task-approved.png.js +5 -0
- package/dist/assets/illustrations/empty-task-approved.png.js.map +1 -0
- package/dist/assets/illustrations/empty-workflow-status.png.cjs +2 -0
- package/dist/assets/illustrations/empty-workflow-status.png.cjs.map +1 -0
- package/dist/assets/illustrations/empty-workflow-status.png.js +5 -0
- package/dist/assets/illustrations/empty-workflow-status.png.js.map +1 -0
- package/dist/assets/illustrations/integrations.png.cjs +2 -0
- package/dist/assets/illustrations/integrations.png.cjs.map +1 -0
- package/dist/assets/illustrations/integrations.png.js +5 -0
- package/dist/assets/illustrations/integrations.png.js.map +1 -0
- package/dist/assets/illustrations/onboarding-tips.png.cjs +2 -0
- package/dist/assets/illustrations/onboarding-tips.png.cjs.map +1 -0
- package/dist/assets/illustrations/onboarding-tips.png.js +5 -0
- package/dist/assets/illustrations/onboarding-tips.png.js.map +1 -0
- package/dist/assets/illustrations/scheduled-tasks.png.cjs +2 -0
- package/dist/assets/illustrations/scheduled-tasks.png.cjs.map +1 -0
- package/dist/assets/illustrations/scheduled-tasks.png.js +5 -0
- package/dist/assets/illustrations/scheduled-tasks.png.js.map +1 -0
- package/dist/assets/illustrations/search-documents.png.cjs +2 -0
- package/dist/assets/illustrations/search-documents.png.cjs.map +1 -0
- package/dist/assets/illustrations/search-documents.png.js +5 -0
- package/dist/assets/illustrations/search-documents.png.js.map +1 -0
- package/dist/assets/illustrations/success-checkmark.png.cjs +2 -0
- package/dist/assets/illustrations/success-checkmark.png.cjs.map +1 -0
- package/dist/assets/illustrations/success-checkmark.png.js +5 -0
- package/dist/assets/illustrations/success-checkmark.png.js.map +1 -0
- package/dist/components/ui/brand-colors.cjs +2 -0
- package/dist/components/ui/brand-colors.cjs.map +1 -0
- package/dist/components/ui/brand-colors.js +8 -0
- package/dist/components/ui/brand-colors.js.map +1 -0
- package/dist/components/ui/charts/chart.cjs +8 -0
- package/dist/components/ui/charts/chart.cjs.map +1 -0
- package/dist/components/ui/charts/chart.js +214 -0
- package/dist/components/ui/charts/chart.js.map +1 -0
- package/dist/components/ui/charts/donut-chart.cjs +2 -0
- package/dist/components/ui/charts/donut-chart.cjs.map +1 -0
- package/dist/components/ui/charts/donut-chart.js +285 -0
- package/dist/components/ui/charts/donut-chart.js.map +1 -0
- package/dist/components/ui/charts/kpi-card.cjs +2 -0
- package/dist/components/ui/charts/kpi-card.cjs.map +1 -0
- package/dist/components/ui/charts/kpi-card.js +71 -0
- package/dist/components/ui/charts/kpi-card.js.map +1 -0
- package/dist/components/ui/data/advanced-data-table.cjs +2 -0
- package/dist/components/ui/data/advanced-data-table.cjs.map +1 -0
- package/dist/components/ui/data/advanced-data-table.js +69 -0
- package/dist/components/ui/data/advanced-data-table.js.map +1 -0
- package/dist/components/ui/data/comment-system.cjs +2 -0
- package/dist/components/ui/data/comment-system.cjs.map +1 -0
- package/dist/components/ui/data/comment-system.js +492 -0
- package/dist/components/ui/data/comment-system.js.map +1 -0
- package/dist/components/ui/data/data-table-empty-state.cjs +2 -0
- package/dist/components/ui/data/data-table-empty-state.cjs.map +1 -0
- package/dist/components/ui/data/data-table-empty-state.js +40 -0
- package/dist/components/ui/data/data-table-empty-state.js.map +1 -0
- package/dist/components/ui/data/data-table-toolbar.cjs +2 -0
- package/dist/components/ui/data/data-table-toolbar.cjs.map +1 -0
- package/dist/components/ui/data/data-table-toolbar.js +85 -0
- package/dist/components/ui/data/data-table-toolbar.js.map +1 -0
- package/dist/components/ui/data/data-table.cjs +2 -0
- package/dist/components/ui/data/data-table.cjs.map +1 -0
- package/dist/components/ui/data/data-table.js +181 -0
- package/dist/components/ui/data/data-table.js.map +1 -0
- package/dist/components/ui/data/document-editor.cjs +2 -0
- package/dist/components/ui/data/document-editor.cjs.map +1 -0
- package/dist/components/ui/data/document-editor.js +158 -0
- package/dist/components/ui/data/document-editor.js.map +1 -0
- package/dist/components/ui/data/editorial-calendar.cjs +2 -0
- package/dist/components/ui/data/editorial-calendar.cjs.map +1 -0
- package/dist/components/ui/data/editorial-calendar.js +840 -0
- package/dist/components/ui/data/editorial-calendar.js.map +1 -0
- package/dist/components/ui/data/filter-bar.cjs +2 -0
- package/dist/components/ui/data/filter-bar.cjs.map +1 -0
- package/dist/components/ui/data/filter-bar.js +60 -0
- package/dist/components/ui/data/filter-bar.js.map +1 -0
- package/dist/components/ui/data/filter-builder.cjs +2 -0
- package/dist/components/ui/data/filter-builder.cjs.map +1 -0
- package/dist/components/ui/data/filter-builder.js +378 -0
- package/dist/components/ui/data/filter-builder.js.map +1 -0
- package/dist/components/ui/data/filter-chip.cjs +2 -0
- package/dist/components/ui/data/filter-chip.cjs.map +1 -0
- package/dist/components/ui/data/filter-chip.js +39 -0
- package/dist/components/ui/data/filter-chip.js.map +1 -0
- package/dist/components/ui/data/mention-list.cjs +2 -0
- package/dist/components/ui/data/mention-list.cjs.map +1 -0
- package/dist/components/ui/data/mention-list.js +46 -0
- package/dist/components/ui/data/mention-list.js.map +1 -0
- package/dist/components/ui/data/table-pagination.cjs +2 -0
- package/dist/components/ui/data/table-pagination.cjs.map +1 -0
- package/dist/components/ui/data/table-pagination.js +176 -0
- package/dist/components/ui/data/table-pagination.js.map +1 -0
- package/dist/components/ui/data/table-types.cjs +2 -0
- package/dist/components/ui/data/table-types.cjs.map +1 -0
- package/dist/components/ui/data/table-types.js +14 -0
- package/dist/components/ui/data/table-types.js.map +1 -0
- package/dist/components/ui/data/table.cjs +2 -0
- package/dist/components/ui/data/table.cjs.map +1 -0
- package/dist/components/ui/data/table.js +130 -0
- package/dist/components/ui/data/table.js.map +1 -0
- package/dist/components/ui/feedback/alert.cjs +2 -0
- package/dist/components/ui/feedback/alert.cjs.map +1 -0
- package/dist/components/ui/feedback/alert.js +67 -0
- package/dist/components/ui/feedback/alert.js.map +1 -0
- package/dist/components/ui/feedback/empty-state.cjs +2 -0
- package/dist/components/ui/feedback/empty-state.cjs.map +1 -0
- package/dist/components/ui/feedback/empty-state.js +78 -0
- package/dist/components/ui/feedback/empty-state.js.map +1 -0
- package/dist/components/ui/feedback/illustrations.cjs +2 -0
- package/dist/components/ui/feedback/illustrations.cjs.map +1 -0
- package/dist/components/ui/feedback/illustrations.js +157 -0
- package/dist/components/ui/feedback/illustrations.js.map +1 -0
- package/dist/components/ui/feedback/toast.cjs +2 -0
- package/dist/components/ui/feedback/toast.cjs.map +1 -0
- package/dist/components/ui/feedback/toast.js +38 -0
- package/dist/components/ui/feedback/toast.js.map +1 -0
- package/dist/components/ui/forms/calendar.cjs +2 -0
- package/dist/components/ui/forms/calendar.cjs.map +1 -0
- package/dist/components/ui/forms/calendar.js +65 -0
- package/dist/components/ui/forms/calendar.js.map +1 -0
- package/dist/components/ui/forms/checkbox.cjs +2 -0
- package/dist/components/ui/forms/checkbox.cjs.map +1 -0
- package/dist/components/ui/forms/checkbox.js +31 -0
- package/dist/components/ui/forms/checkbox.js.map +1 -0
- package/dist/components/ui/forms/color-picker.cjs +2 -0
- package/dist/components/ui/forms/color-picker.cjs.map +1 -0
- package/dist/components/ui/forms/color-picker.js +151 -0
- package/dist/components/ui/forms/color-picker.js.map +1 -0
- package/dist/components/ui/forms/combobox.cjs +2 -0
- package/dist/components/ui/forms/combobox.cjs.map +1 -0
- package/dist/components/ui/forms/combobox.js +208 -0
- package/dist/components/ui/forms/combobox.js.map +1 -0
- package/dist/components/ui/forms/currency-input.cjs +2 -0
- package/dist/components/ui/forms/currency-input.cjs.map +1 -0
- package/dist/components/ui/forms/currency-input.js +81 -0
- package/dist/components/ui/forms/currency-input.js.map +1 -0
- package/dist/components/ui/forms/date-picker.cjs +2 -0
- package/dist/components/ui/forms/date-picker.cjs.map +1 -0
- package/dist/components/ui/forms/date-picker.js +197 -0
- package/dist/components/ui/forms/date-picker.js.map +1 -0
- package/dist/components/ui/forms/date-range-picker.cjs +2 -0
- package/dist/components/ui/forms/date-range-picker.cjs.map +1 -0
- package/dist/components/ui/forms/date-range-picker.js +303 -0
- package/dist/components/ui/forms/date-range-picker.js.map +1 -0
- package/dist/components/ui/forms/editable-badge.cjs +2 -0
- package/dist/components/ui/forms/editable-badge.cjs.map +1 -0
- package/dist/components/ui/forms/editable-badge.js +137 -0
- package/dist/components/ui/forms/editable-badge.js.map +1 -0
- package/dist/components/ui/forms/file-attachment-list.cjs +2 -0
- package/dist/components/ui/forms/file-attachment-list.cjs.map +1 -0
- package/dist/components/ui/forms/file-attachment-list.js +235 -0
- package/dist/components/ui/forms/file-attachment-list.js.map +1 -0
- package/dist/components/ui/forms/file-upload-zone.cjs +3 -0
- package/dist/components/ui/forms/file-upload-zone.cjs.map +1 -0
- package/dist/components/ui/forms/file-upload-zone.js +142 -0
- package/dist/components/ui/forms/file-upload-zone.js.map +1 -0
- package/dist/components/ui/forms/form.cjs +2 -0
- package/dist/components/ui/forms/form.cjs.map +1 -0
- package/dist/components/ui/forms/form.js +109 -0
- package/dist/components/ui/forms/form.js.map +1 -0
- package/dist/components/ui/forms/input-group.cjs +2 -0
- package/dist/components/ui/forms/input-group.cjs.map +1 -0
- package/dist/components/ui/forms/input-group.js +131 -0
- package/dist/components/ui/forms/input-group.js.map +1 -0
- package/dist/components/ui/forms/input-otp.cjs +2 -0
- package/dist/components/ui/forms/input-otp.cjs.map +1 -0
- package/dist/components/ui/forms/input-otp.js +63 -0
- package/dist/components/ui/forms/input-otp.js.map +1 -0
- package/dist/components/ui/forms/input-validation.cjs +2 -0
- package/dist/components/ui/forms/input-validation.cjs.map +1 -0
- package/dist/components/ui/forms/input-validation.js +55 -0
- package/dist/components/ui/forms/input-validation.js.map +1 -0
- package/dist/components/ui/forms/input.cjs +2 -0
- package/dist/components/ui/forms/input.cjs.map +1 -0
- package/dist/components/ui/forms/input.js +26 -0
- package/dist/components/ui/forms/input.js.map +1 -0
- package/dist/components/ui/forms/month-range-picker.cjs +2 -0
- package/dist/components/ui/forms/month-range-picker.cjs.map +1 -0
- package/dist/components/ui/forms/month-range-picker.js +261 -0
- package/dist/components/ui/forms/month-range-picker.js.map +1 -0
- package/dist/components/ui/forms/multi-select.cjs +2 -0
- package/dist/components/ui/forms/multi-select.cjs.map +1 -0
- package/dist/components/ui/forms/multi-select.js +251 -0
- package/dist/components/ui/forms/multi-select.js.map +1 -0
- package/dist/components/ui/forms/number-input.cjs +2 -0
- package/dist/components/ui/forms/number-input.cjs.map +1 -0
- package/dist/components/ui/forms/number-input.js +220 -0
- package/dist/components/ui/forms/number-input.js.map +1 -0
- package/dist/components/ui/forms/password-input.cjs +2 -0
- package/dist/components/ui/forms/password-input.cjs.map +1 -0
- package/dist/components/ui/forms/password-input.js +43 -0
- package/dist/components/ui/forms/password-input.js.map +1 -0
- package/dist/components/ui/forms/radio-group.cjs +2 -0
- package/dist/components/ui/forms/radio-group.cjs.map +1 -0
- package/dist/components/ui/forms/radio-group.js +41 -0
- package/dist/components/ui/forms/radio-group.js.map +1 -0
- package/dist/components/ui/forms/select.cjs +2 -0
- package/dist/components/ui/forms/select.cjs.map +1 -0
- package/dist/components/ui/forms/select.js +140 -0
- package/dist/components/ui/forms/select.js.map +1 -0
- package/dist/components/ui/forms/slider.cjs +2 -0
- package/dist/components/ui/forms/slider.cjs.map +1 -0
- package/dist/components/ui/forms/slider.js +62 -0
- package/dist/components/ui/forms/slider.js.map +1 -0
- package/dist/components/ui/forms/social-button.cjs +2 -0
- package/dist/components/ui/forms/social-button.cjs.map +1 -0
- package/dist/components/ui/forms/social-button.js +86 -0
- package/dist/components/ui/forms/social-button.js.map +1 -0
- package/dist/components/ui/forms/switch.cjs +2 -0
- package/dist/components/ui/forms/switch.cjs.map +1 -0
- package/dist/components/ui/forms/switch.js +31 -0
- package/dist/components/ui/forms/switch.js.map +1 -0
- package/dist/components/ui/forms/textarea.cjs +2 -0
- package/dist/components/ui/forms/textarea.cjs.map +1 -0
- package/dist/components/ui/forms/textarea.js +22 -0
- package/dist/components/ui/forms/textarea.js.map +1 -0
- package/dist/components/ui/forms/time-picker.cjs +2 -0
- package/dist/components/ui/forms/time-picker.cjs.map +1 -0
- package/dist/components/ui/forms/time-picker.js +195 -0
- package/dist/components/ui/forms/time-picker.js.map +1 -0
- package/dist/components/ui/forms/toggle-group.cjs +2 -0
- package/dist/components/ui/forms/toggle-group.cjs.map +1 -0
- package/dist/components/ui/forms/toggle-group.js +53 -0
- package/dist/components/ui/forms/toggle-group.js.map +1 -0
- package/dist/components/ui/forms/toggle.cjs +2 -0
- package/dist/components/ui/forms/toggle.cjs.map +1 -0
- package/dist/components/ui/forms/toggle.js +40 -0
- package/dist/components/ui/forms/toggle.js.map +1 -0
- package/dist/components/ui/layout/accordion.cjs +2 -0
- package/dist/components/ui/layout/accordion.cjs.map +1 -0
- package/dist/components/ui/layout/accordion.js +53 -0
- package/dist/components/ui/layout/accordion.js.map +1 -0
- package/dist/components/ui/layout/auth-layout.cjs +2 -0
- package/dist/components/ui/layout/auth-layout.cjs.map +1 -0
- package/dist/components/ui/layout/auth-layout.js +74 -0
- package/dist/components/ui/layout/auth-layout.js.map +1 -0
- package/dist/components/ui/layout/card.cjs +2 -0
- package/dist/components/ui/layout/card.cjs.map +1 -0
- package/dist/components/ui/layout/card.js +104 -0
- package/dist/components/ui/layout/card.js.map +1 -0
- package/dist/components/ui/layout/carousel.cjs +2 -0
- package/dist/components/ui/layout/carousel.cjs.map +1 -0
- package/dist/components/ui/layout/carousel.js +189 -0
- package/dist/components/ui/layout/carousel.js.map +1 -0
- package/dist/components/ui/layout/collapsible.cjs +2 -0
- package/dist/components/ui/layout/collapsible.cjs.map +1 -0
- package/dist/components/ui/layout/collapsible.js +30 -0
- package/dist/components/ui/layout/collapsible.js.map +1 -0
- package/dist/components/ui/layout/page-header.cjs +2 -0
- package/dist/components/ui/layout/page-header.cjs.map +1 -0
- package/dist/components/ui/layout/page-header.js +81 -0
- package/dist/components/ui/layout/page-header.js.map +1 -0
- package/dist/components/ui/layout/resizable.cjs +2 -0
- package/dist/components/ui/layout/resizable.cjs.map +1 -0
- package/dist/components/ui/layout/resizable.js +45 -0
- package/dist/components/ui/layout/resizable.js.map +1 -0
- package/dist/components/ui/layout/scroll-area.cjs +2 -0
- package/dist/components/ui/layout/scroll-area.cjs.map +1 -0
- package/dist/components/ui/layout/scroll-area.js +56 -0
- package/dist/components/ui/layout/scroll-area.js.map +1 -0
- package/dist/components/ui/navigation/breadcrumb.cjs +2 -0
- package/dist/components/ui/navigation/breadcrumb.cjs.map +1 -0
- package/dist/components/ui/navigation/breadcrumb.js +94 -0
- package/dist/components/ui/navigation/breadcrumb.js.map +1 -0
- package/dist/components/ui/navigation/navigation-menu.cjs +2 -0
- package/dist/components/ui/navigation/navigation-menu.cjs.map +1 -0
- package/dist/components/ui/navigation/navigation-menu.js +144 -0
- package/dist/components/ui/navigation/navigation-menu.js.map +1 -0
- package/dist/components/ui/navigation/pagination.cjs +2 -0
- package/dist/components/ui/navigation/pagination.cjs.map +1 -0
- package/dist/components/ui/navigation/pagination.js +106 -0
- package/dist/components/ui/navigation/pagination.js.map +1 -0
- package/dist/components/ui/navigation/sidebar.cjs +2 -0
- package/dist/components/ui/navigation/sidebar.cjs.map +1 -0
- package/dist/components/ui/navigation/sidebar.js +579 -0
- package/dist/components/ui/navigation/sidebar.js.map +1 -0
- package/dist/components/ui/navigation/tabs.cjs +2 -0
- package/dist/components/ui/navigation/tabs.cjs.map +1 -0
- package/dist/components/ui/navigation/tabs.js +58 -0
- package/dist/components/ui/navigation/tabs.js.map +1 -0
- package/dist/components/ui/navigation/underline-tabs.cjs +2 -0
- package/dist/components/ui/navigation/underline-tabs.cjs.map +1 -0
- package/dist/components/ui/navigation/underline-tabs.js +109 -0
- package/dist/components/ui/navigation/underline-tabs.js.map +1 -0
- package/dist/components/ui/overlays/alert-dialog.cjs +2 -0
- package/dist/components/ui/overlays/alert-dialog.cjs.map +1 -0
- package/dist/components/ui/overlays/alert-dialog.js +135 -0
- package/dist/components/ui/overlays/alert-dialog.js.map +1 -0
- package/dist/components/ui/overlays/command.cjs +2 -0
- package/dist/components/ui/overlays/command.cjs.map +1 -0
- package/dist/components/ui/overlays/command.js +143 -0
- package/dist/components/ui/overlays/command.js.map +1 -0
- package/dist/components/ui/overlays/context-menu.cjs +2 -0
- package/dist/components/ui/overlays/context-menu.cjs.map +1 -0
- package/dist/components/ui/overlays/context-menu.js +197 -0
- package/dist/components/ui/overlays/context-menu.js.map +1 -0
- package/dist/components/ui/overlays/dialog.cjs +2 -0
- package/dist/components/ui/overlays/dialog.cjs.map +1 -0
- package/dist/components/ui/overlays/dialog.js +112 -0
- package/dist/components/ui/overlays/dialog.js.map +1 -0
- package/dist/components/ui/overlays/drawer.cjs +2 -0
- package/dist/components/ui/overlays/drawer.cjs.map +1 -0
- package/dist/components/ui/overlays/drawer.js +109 -0
- package/dist/components/ui/overlays/drawer.js.map +1 -0
- package/dist/components/ui/overlays/dropdown-menu.cjs +2 -0
- package/dist/components/ui/overlays/dropdown-menu.cjs.map +1 -0
- package/dist/components/ui/overlays/dropdown-menu.js +198 -0
- package/dist/components/ui/overlays/dropdown-menu.js.map +1 -0
- package/dist/components/ui/overlays/hover-card.cjs +2 -0
- package/dist/components/ui/overlays/hover-card.cjs.map +1 -0
- package/dist/components/ui/overlays/hover-card.js +40 -0
- package/dist/components/ui/overlays/hover-card.js.map +1 -0
- package/dist/components/ui/overlays/menubar.cjs +2 -0
- package/dist/components/ui/overlays/menubar.cjs.map +1 -0
- package/dist/components/ui/overlays/menubar.js +213 -0
- package/dist/components/ui/overlays/menubar.js.map +1 -0
- package/dist/components/ui/overlays/popover.cjs +2 -0
- package/dist/components/ui/overlays/popover.cjs.map +1 -0
- package/dist/components/ui/overlays/popover.js +36 -0
- package/dist/components/ui/overlays/popover.js.map +1 -0
- package/dist/components/ui/overlays/sheet.cjs +2 -0
- package/dist/components/ui/overlays/sheet.cjs.map +1 -0
- package/dist/components/ui/overlays/sheet.js +109 -0
- package/dist/components/ui/overlays/sheet.js.map +1 -0
- package/dist/components/ui/overlays/side-panel.cjs +16 -0
- package/dist/components/ui/overlays/side-panel.cjs.map +1 -0
- package/dist/components/ui/overlays/side-panel.js +117 -0
- package/dist/components/ui/overlays/side-panel.js.map +1 -0
- package/dist/components/ui/overlays/tooltip.cjs +2 -0
- package/dist/components/ui/overlays/tooltip.cjs.map +1 -0
- package/dist/components/ui/overlays/tooltip.js +50 -0
- package/dist/components/ui/overlays/tooltip.js.map +1 -0
- package/dist/components/ui/primitives/aspect-ratio.cjs +2 -0
- package/dist/components/ui/primitives/aspect-ratio.cjs.map +1 -0
- package/dist/components/ui/primitives/aspect-ratio.js +10 -0
- package/dist/components/ui/primitives/aspect-ratio.js.map +1 -0
- package/dist/components/ui/primitives/avatar.cjs +2 -0
- package/dist/components/ui/primitives/avatar.cjs.map +1 -0
- package/dist/components/ui/primitives/avatar.js +63 -0
- package/dist/components/ui/primitives/avatar.js.map +1 -0
- package/dist/components/ui/primitives/badge.cjs +2 -0
- package/dist/components/ui/primitives/badge.cjs.map +1 -0
- package/dist/components/ui/primitives/badge.js +50 -0
- package/dist/components/ui/primitives/badge.js.map +1 -0
- package/dist/components/ui/primitives/brand-logo.cjs +2 -0
- package/dist/components/ui/primitives/brand-logo.cjs.map +1 -0
- package/dist/components/ui/primitives/brand-logo.js +74 -0
- package/dist/components/ui/primitives/brand-logo.js.map +1 -0
- package/dist/components/ui/primitives/brand-logo.negative-paths.cjs +2 -0
- package/dist/components/ui/primitives/brand-logo.negative-paths.cjs.map +1 -0
- package/dist/components/ui/primitives/brand-logo.negative-paths.js +15 -0
- package/dist/components/ui/primitives/brand-logo.negative-paths.js.map +1 -0
- package/dist/components/ui/primitives/brand-logo.positive-paths.cjs +2 -0
- package/dist/components/ui/primitives/brand-logo.positive-paths.cjs.map +1 -0
- package/dist/components/ui/primitives/brand-logo.positive-paths.js +15 -0
- package/dist/components/ui/primitives/brand-logo.positive-paths.js.map +1 -0
- package/dist/components/ui/primitives/brand-logo.symbol-paths.cjs +2 -0
- package/dist/components/ui/primitives/brand-logo.symbol-paths.cjs.map +1 -0
- package/dist/components/ui/primitives/brand-logo.symbol-paths.js +8 -0
- package/dist/components/ui/primitives/brand-logo.symbol-paths.js.map +1 -0
- package/dist/components/ui/primitives/button.cjs +2 -0
- package/dist/components/ui/primitives/button.cjs.map +1 -0
- package/dist/components/ui/primitives/button.js +52 -0
- package/dist/components/ui/primitives/button.js.map +1 -0
- package/dist/components/ui/primitives/label.cjs +2 -0
- package/dist/components/ui/primitives/label.cjs.map +1 -0
- package/dist/components/ui/primitives/label.js +22 -0
- package/dist/components/ui/primitives/label.js.map +1 -0
- package/dist/components/ui/primitives/progress.cjs +2 -0
- package/dist/components/ui/primitives/progress.cjs.map +1 -0
- package/dist/components/ui/primitives/progress.js +30 -0
- package/dist/components/ui/primitives/progress.js.map +1 -0
- package/dist/components/ui/primitives/separator.cjs +2 -0
- package/dist/components/ui/primitives/separator.cjs.map +1 -0
- package/dist/components/ui/primitives/separator.js +26 -0
- package/dist/components/ui/primitives/separator.js.map +1 -0
- package/dist/components/ui/primitives/skeleton.cjs +2 -0
- package/dist/components/ui/primitives/skeleton.cjs.map +1 -0
- package/dist/components/ui/primitives/skeleton.js +31 -0
- package/dist/components/ui/primitives/skeleton.js.map +1 -0
- package/dist/components/ui/utils.cjs +2 -0
- package/dist/components/ui/utils.cjs.map +1 -0
- package/dist/components/ui/utils.js +20 -0
- package/dist/components/ui/utils.js.map +1 -0
- package/dist/editor.cjs +2 -0
- package/dist/editor.cjs.map +1 -0
- package/dist/editor.d.cts +114 -0
- package/dist/editor.d.ts +114 -0
- package/dist/editor.js +12 -0
- package/dist/editor.js.map +1 -0
- package/dist/hooks/use-data-table-filters.cjs +2 -0
- package/dist/hooks/use-data-table-filters.cjs.map +1 -0
- package/dist/hooks/use-data-table-filters.js +118 -0
- package/dist/hooks/use-data-table-filters.js.map +1 -0
- package/dist/hooks/use-data-table.cjs +2 -0
- package/dist/hooks/use-data-table.cjs.map +1 -0
- package/dist/hooks/use-data-table.js +84 -0
- package/dist/hooks/use-data-table.js.map +1 -0
- package/dist/hooks/use-mobile.cjs +2 -0
- package/dist/hooks/use-mobile.cjs.map +1 -0
- package/dist/hooks/use-mobile.js +17 -0
- package/dist/hooks/use-mobile.js.map +1 -0
- package/dist/hooks/use-table-pagination.cjs +2 -0
- package/dist/hooks/use-table-pagination.cjs.map +1 -0
- package/dist/hooks/use-table-pagination.js +44 -0
- package/dist/hooks/use-table-pagination.js.map +1 -0
- package/dist/index.cjs +1 -242
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.cts +2918 -0
- package/dist/index.d.ts +2918 -149
- package/dist/index.js +375 -63146
- package/dist/index.js.map +1 -1
- package/dist/preset.css +352 -0
- package/dist/toast-theme.css +100 -0
- package/dist/tokens.css +471 -0
- package/package.json +144 -45
- package/scripts/codemod-v2-renames.mjs +101 -0
- package/scripts/codemod-v2-toast.mjs +84 -0
- package/dist/components/figma/ImageWithFallback.d.ts +0 -3
- package/dist/components/figma/ImageWithFallback.d.ts.map +0 -1
- package/dist/components/print-templates/ContractTemplate.d.ts +0 -89
- package/dist/components/print-templates/ContractTemplate.d.ts.map +0 -1
- package/dist/components/print-templates/ProposalTemplate.d.ts +0 -41
- package/dist/components/print-templates/ProposalTemplate.d.ts.map +0 -1
- package/dist/components/print-templates/index.d.ts +0 -22
- package/dist/components/print-templates/index.d.ts.map +0 -1
- package/dist/components/print-templates/shared/PrintFooter.d.ts +0 -21
- package/dist/components/print-templates/shared/PrintFooter.d.ts.map +0 -1
- package/dist/components/print-templates/shared/PrintHeader.d.ts +0 -38
- package/dist/components/print-templates/shared/PrintHeader.d.ts.map +0 -1
- package/dist/components/print-templates/shared/PrintInfoGrid.d.ts +0 -22
- package/dist/components/print-templates/shared/PrintInfoGrid.d.ts.map +0 -1
- package/dist/components/print-templates/shared/PrintSection.d.ts +0 -29
- package/dist/components/print-templates/shared/PrintSection.d.ts.map +0 -1
- package/dist/components/print-templates/shared/PrintSignature.d.ts +0 -27
- package/dist/components/print-templates/shared/PrintSignature.d.ts.map +0 -1
- package/dist/components/print-templates/shared/PrintTable.d.ts +0 -44
- package/dist/components/print-templates/shared/PrintTable.d.ts.map +0 -1
- package/dist/components/timeline-demo.d.ts +0 -3
- package/dist/components/timeline-demo.d.ts.map +0 -1
- package/dist/components/ui/accordion.d.ts +0 -8
- package/dist/components/ui/accordion.d.ts.map +0 -1
- package/dist/components/ui/advanced-data-table.d.ts +0 -100
- package/dist/components/ui/advanced-data-table.d.ts.map +0 -1
- package/dist/components/ui/alert-dialog.d.ts +0 -15
- package/dist/components/ui/alert-dialog.d.ts.map +0 -1
- package/dist/components/ui/alert-toast.d.ts +0 -11
- package/dist/components/ui/alert-toast.d.ts.map +0 -1
- package/dist/components/ui/alert.d.ts +0 -10
- package/dist/components/ui/alert.d.ts.map +0 -1
- package/dist/components/ui/app-layout-primary-nav.d.ts +0 -30
- package/dist/components/ui/app-layout-primary-nav.d.ts.map +0 -1
- package/dist/components/ui/app-layout-secondary-nav.d.ts +0 -34
- package/dist/components/ui/app-layout-secondary-nav.d.ts.map +0 -1
- package/dist/components/ui/app-layout-user-menu.d.ts +0 -28
- package/dist/components/ui/app-layout-user-menu.d.ts.map +0 -1
- package/dist/components/ui/aspect-ratio.d.ts +0 -4
- package/dist/components/ui/aspect-ratio.d.ts.map +0 -1
- package/dist/components/ui/auth-layout.d.ts +0 -28
- package/dist/components/ui/auth-layout.d.ts.map +0 -1
- package/dist/components/ui/avatar.d.ts +0 -21
- package/dist/components/ui/avatar.d.ts.map +0 -1
- package/dist/components/ui/badge.d.ts +0 -18
- package/dist/components/ui/badge.d.ts.map +0 -1
- package/dist/components/ui/brand-logo.d.ts +0 -7
- package/dist/components/ui/brand-logo.d.ts.map +0 -1
- package/dist/components/ui/breadcrumb.d.ts +0 -12
- package/dist/components/ui/breadcrumb.d.ts.map +0 -1
- package/dist/components/ui/button.d.ts +0 -15
- package/dist/components/ui/button.d.ts.map +0 -1
- package/dist/components/ui/calendar.d.ts +0 -31
- package/dist/components/ui/calendar.d.ts.map +0 -1
- package/dist/components/ui/card.d.ts +0 -10
- package/dist/components/ui/card.d.ts.map +0 -1
- package/dist/components/ui/carousel.d.ts +0 -20
- package/dist/components/ui/carousel.d.ts.map +0 -1
- package/dist/components/ui/chart.d.ts +0 -45
- package/dist/components/ui/chart.d.ts.map +0 -1
- package/dist/components/ui/checkbox.d.ts +0 -5
- package/dist/components/ui/checkbox.d.ts.map +0 -1
- package/dist/components/ui/collapsible.d.ts +0 -6
- package/dist/components/ui/collapsible.d.ts.map +0 -1
- package/dist/components/ui/color-picker.d.ts +0 -13
- package/dist/components/ui/color-picker.d.ts.map +0 -1
- package/dist/components/ui/combobox.d.ts +0 -118
- package/dist/components/ui/combobox.d.ts.map +0 -1
- package/dist/components/ui/command.d.ts +0 -17
- package/dist/components/ui/command.d.ts.map +0 -1
- package/dist/components/ui/comment-system.d.ts +0 -43
- package/dist/components/ui/comment-system.d.ts.map +0 -1
- package/dist/components/ui/context-menu.d.ts +0 -26
- package/dist/components/ui/context-menu.d.ts.map +0 -1
- package/dist/components/ui/contract-print.d.ts +0 -82
- package/dist/components/ui/contract-print.d.ts.map +0 -1
- package/dist/components/ui/currency-input.d.ts +0 -11
- package/dist/components/ui/currency-input.d.ts.map +0 -1
- package/dist/components/ui/data-table.d.ts +0 -30
- package/dist/components/ui/data-table.d.ts.map +0 -1
- package/dist/components/ui/date-picker.d.ts +0 -111
- package/dist/components/ui/date-picker.d.ts.map +0 -1
- package/dist/components/ui/date-range-picker.d.ts +0 -128
- package/dist/components/ui/date-range-picker.d.ts.map +0 -1
- package/dist/components/ui/dialog.d.ts +0 -14
- package/dist/components/ui/dialog.d.ts.map +0 -1
- package/dist/components/ui/document-editor.d.ts +0 -14
- package/dist/components/ui/document-editor.d.ts.map +0 -1
- package/dist/components/ui/donut-chart.d.ts +0 -32
- package/dist/components/ui/donut-chart.d.ts.map +0 -1
- package/dist/components/ui/drawer.d.ts +0 -14
- package/dist/components/ui/drawer.d.ts.map +0 -1
- package/dist/components/ui/dropdown-menu.d.ts +0 -26
- package/dist/components/ui/dropdown-menu.d.ts.map +0 -1
- package/dist/components/ui/editable-badge.d.ts +0 -98
- package/dist/components/ui/editable-badge.d.ts.map +0 -1
- package/dist/components/ui/editorial-calendar.d.ts +0 -22
- package/dist/components/ui/editorial-calendar.d.ts.map +0 -1
- package/dist/components/ui/empty-state.d.ts +0 -59
- package/dist/components/ui/empty-state.d.ts.map +0 -1
- package/dist/components/ui/filter-bar.d.ts +0 -16
- package/dist/components/ui/filter-bar.d.ts.map +0 -1
- package/dist/components/ui/filter-builder.d.ts +0 -39
- package/dist/components/ui/filter-builder.d.ts.map +0 -1
- package/dist/components/ui/filter-chip.d.ts +0 -8
- package/dist/components/ui/filter-chip.d.ts.map +0 -1
- package/dist/components/ui/form.d.ts +0 -25
- package/dist/components/ui/form.d.ts.map +0 -1
- package/dist/components/ui/gantt-chart.d.ts +0 -28
- package/dist/components/ui/gantt-chart.d.ts.map +0 -1
- package/dist/components/ui/hover-card.d.ts +0 -7
- package/dist/components/ui/hover-card.d.ts.map +0 -1
- package/dist/components/ui/illustrations.d.ts +0 -76
- package/dist/components/ui/illustrations.d.ts.map +0 -1
- package/dist/components/ui/index.d.ts +0 -91
- package/dist/components/ui/index.d.ts.map +0 -1
- package/dist/components/ui/input-group.d.ts +0 -19
- package/dist/components/ui/input-group.d.ts.map +0 -1
- package/dist/components/ui/input-otp.d.ts +0 -12
- package/dist/components/ui/input-otp.d.ts.map +0 -1
- package/dist/components/ui/input-validation.d.ts +0 -35
- package/dist/components/ui/input-validation.d.ts.map +0 -1
- package/dist/components/ui/input.d.ts +0 -4
- package/dist/components/ui/input.d.ts.map +0 -1
- package/dist/components/ui/kanban-card.d.ts +0 -59
- package/dist/components/ui/kanban-card.d.ts.map +0 -1
- package/dist/components/ui/kanban-generic-card.d.ts +0 -43
- package/dist/components/ui/kanban-generic-card.d.ts.map +0 -1
- package/dist/components/ui/kpi-card.d.ts +0 -45
- package/dist/components/ui/kpi-card.d.ts.map +0 -1
- package/dist/components/ui/label.d.ts +0 -5
- package/dist/components/ui/label.d.ts.map +0 -1
- package/dist/components/ui/lista-anexos-arquivo.d.ts +0 -47
- package/dist/components/ui/lista-anexos-arquivo.d.ts.map +0 -1
- package/dist/components/ui/mention-list.d.ts +0 -7
- package/dist/components/ui/mention-list.d.ts.map +0 -1
- package/dist/components/ui/menubar.d.ts +0 -27
- package/dist/components/ui/menubar.d.ts.map +0 -1
- package/dist/components/ui/month-range-picker.d.ts +0 -71
- package/dist/components/ui/month-range-picker.d.ts.map +0 -1
- package/dist/components/ui/multi-select.d.ts +0 -98
- package/dist/components/ui/multi-select.d.ts.map +0 -1
- package/dist/components/ui/navigation-menu.d.ts +0 -15
- package/dist/components/ui/navigation-menu.d.ts.map +0 -1
- package/dist/components/ui/number-input.d.ts +0 -83
- package/dist/components/ui/number-input.d.ts.map +0 -1
- package/dist/components/ui/page-header.d.ts +0 -32
- package/dist/components/ui/page-header.d.ts.map +0 -1
- package/dist/components/ui/pagination.d.ts +0 -14
- package/dist/components/ui/pagination.d.ts.map +0 -1
- package/dist/components/ui/password-input.d.ts +0 -7
- package/dist/components/ui/password-input.d.ts.map +0 -1
- package/dist/components/ui/popover.d.ts +0 -8
- package/dist/components/ui/popover.d.ts.map +0 -1
- package/dist/components/ui/progress-timeline.d.ts +0 -42
- package/dist/components/ui/progress-timeline.d.ts.map +0 -1
- package/dist/components/ui/progress.d.ts +0 -7
- package/dist/components/ui/progress.d.ts.map +0 -1
- package/dist/components/ui/radio-group.d.ts +0 -6
- package/dist/components/ui/radio-group.d.ts.map +0 -1
- package/dist/components/ui/resizable.d.ts +0 -9
- package/dist/components/ui/resizable.d.ts.map +0 -1
- package/dist/components/ui/saved-filters.d.ts +0 -16
- package/dist/components/ui/saved-filters.d.ts.map +0 -1
- package/dist/components/ui/scroll-area.d.ts +0 -8
- package/dist/components/ui/scroll-area.d.ts.map +0 -1
- package/dist/components/ui/select.d.ts +0 -16
- package/dist/components/ui/select.d.ts.map +0 -1
- package/dist/components/ui/separator.d.ts +0 -5
- package/dist/components/ui/separator.d.ts.map +0 -1
- package/dist/components/ui/sheet.d.ts +0 -14
- package/dist/components/ui/sheet.d.ts.map +0 -1
- package/dist/components/ui/side-panel.d.ts +0 -40
- package/dist/components/ui/side-panel.d.ts.map +0 -1
- package/dist/components/ui/sidebar.d.ts +0 -70
- package/dist/components/ui/sidebar.d.ts.map +0 -1
- package/dist/components/ui/skeleton.d.ts +0 -8
- package/dist/components/ui/skeleton.d.ts.map +0 -1
- package/dist/components/ui/slider.d.ts +0 -5
- package/dist/components/ui/slider.d.ts.map +0 -1
- package/dist/components/ui/social-button.d.ts +0 -13
- package/dist/components/ui/social-button.d.ts.map +0 -1
- package/dist/components/ui/switch.d.ts +0 -5
- package/dist/components/ui/switch.d.ts.map +0 -1
- package/dist/components/ui/table-pagination.d.ts +0 -131
- package/dist/components/ui/table-pagination.d.ts.map +0 -1
- package/dist/components/ui/table-types.d.ts +0 -320
- package/dist/components/ui/table-types.d.ts.map +0 -1
- package/dist/components/ui/table.d.ts +0 -34
- package/dist/components/ui/table.d.ts.map +0 -1
- package/dist/components/ui/tabs.d.ts +0 -8
- package/dist/components/ui/tabs.d.ts.map +0 -1
- package/dist/components/ui/task-edit-dialog.d.ts +0 -15
- package/dist/components/ui/task-edit-dialog.d.ts.map +0 -1
- package/dist/components/ui/textarea.d.ts +0 -4
- package/dist/components/ui/textarea.d.ts.map +0 -1
- package/dist/components/ui/time-picker.d.ts +0 -85
- package/dist/components/ui/time-picker.d.ts.map +0 -1
- package/dist/components/ui/timeline.d.ts +0 -63
- package/dist/components/ui/timeline.d.ts.map +0 -1
- package/dist/components/ui/toast.d.ts +0 -5
- package/dist/components/ui/toast.d.ts.map +0 -1
- package/dist/components/ui/toggle-group.d.ts +0 -8
- package/dist/components/ui/toggle-group.d.ts.map +0 -1
- package/dist/components/ui/toggle.d.ts +0 -10
- package/dist/components/ui/toggle.d.ts.map +0 -1
- package/dist/components/ui/tooltip.d.ts +0 -8
- package/dist/components/ui/tooltip.d.ts.map +0 -1
- package/dist/components/ui/underline-tabs.d.ts +0 -29
- package/dist/components/ui/underline-tabs.d.ts.map +0 -1
- package/dist/components/ui/use-mobile.d.ts +0 -2
- package/dist/components/ui/use-mobile.d.ts.map +0 -1
- package/dist/components/ui/use-print-contract.d.ts +0 -37
- package/dist/components/ui/use-print-contract.d.ts.map +0 -1
- package/dist/components/ui/utils.d.ts +0 -3
- package/dist/components/ui/utils.d.ts.map +0 -1
- package/dist/components/ui/zona-upload-arquivo.d.ts +0 -34
- package/dist/components/ui/zona-upload-arquivo.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-pagination.cjs","sources":["../../../../src/components/ui/data/table-pagination.tsx"],"sourcesContent":["\"use client\";\n\nimport { cn } from \"../utils\";\nimport { Button } from \"../primitives/button\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../forms/select\";\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n} from \"lucide-react\";\n\n// ============================================================================\n// TIPOS\n// ============================================================================\n\n/**\n * Labels para internacionalização\n */\nexport interface TablePaginationLabels {\n /** \"Anterior\" */\n previous?: string;\n /** \"Próxima\" */\n next?: string;\n /** \"Primeira\" */\n first?: string;\n /** \"Última\" */\n last?: string;\n /** \"Mostrando\" */\n showing?: string;\n /** \"de\" */\n of?: string;\n /** \"resultados\" */\n results?: string;\n /** \"Itens por página\" */\n itemsPerPage?: string;\n /** \"Página\" */\n page?: string;\n}\n\n/**\n\n * Props para o componente TablePagination\n *\n * @example\n * ```tsx\n * // Com hook useTablePagination\n * const pagination = useTablePagination(data, { pageSize: 10 });\n *\n * <TablePagination\n * currentPage={pagination.currentPage}\n * totalPages={pagination.totalPages}\n * pageSize={pagination.pageSize}\n * totalItems={pagination.totalItems}\n * onPageChange={pagination.goToPage}\n * onPageSizeChange={pagination.setPageSize}\n * />\n * ```\n */\nexport interface TablePaginationProps {\n /** Número da página atual (1-indexed) */\n currentPage: number;\n /** Número total de páginas */\n totalPages: number;\n /** Tamanho da página atual */\n pageSize: number;\n /** Número total de itens */\n totalItems: number;\n /** Callback quando a página muda */\n onPageChange: (page: number) => void;\n /** Callback quando o tamanho da página muda */\n onPageSizeChange?: (size: number) => void;\n /** Opções de tamanho de página disponíveis */\n pageSizeOptions?: number[];\n /** Número máximo de botões de página visíveis */\n maxVisiblePages?: number;\n /** Mostrar informação \"Mostrando X de Y\" */\n showInfo?: boolean;\n /** Mostrar botões de número de página */\n showPageNumbers?: boolean;\n /** Mostrar seletor de tamanho de página */\n showPageSizeSelector?: boolean;\n /** Mostrar botões de primeira/última página */\n showFirstLastButtons?: boolean;\n /** Rótulos personalizados para i18n */\n labels?: TablePaginationLabels;\n /** className adicional */\n className?: string;\n}\n\n// ============================================================================\n// VALORES PADRÃO\n// ============================================================================\n\nconst defaultLabels: Required<TablePaginationLabels> = {\n previous: \"Anterior\",\n next: \"Próxima\",\n first: \"Primeira\",\n last: \"Última\",\n showing: \"Mostrando\",\n of: \"de\",\n results: \"resultados\",\n itemsPerPage: \"Itens por página\",\n page: \"Página\",\n};\n\nconst defaultPageSizeOptions = [10, 20, 30, 50, 100];\n\n// ============================================================================\n// HELPER FUNCTION\n// ============================================================================\n\n/**\n * Generate array of page numbers with ellipsis\n */\nfunction getPageNumbers(\n currentPage: number,\n totalPages: number,\n maxVisible: number = 5\n): (number | \"ellipsis\")[] {\n if (totalPages <= maxVisible) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const pages: (number | \"ellipsis\")[] = [];\n const halfVisible = Math.floor(maxVisible / 2);\n\n // Always show first page\n pages.push(1);\n\n // Calculate middle range\n let start = Math.max(2, currentPage - halfVisible);\n let end = Math.min(totalPages - 1, currentPage + halfVisible);\n\n // Adjust if near start or end\n if (currentPage <= halfVisible + 1) {\n end = maxVisible - 1;\n } else if (currentPage >= totalPages - halfVisible) {\n start = totalPages - maxVisible + 2;\n }\n\n // Add ellipsis after first page if needed\n if (start > 2) {\n pages.push(\"ellipsis\");\n }\n\n // Add page numbers\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n\n // Add ellipsis before last page if needed\n if (end < totalPages - 1) {\n pages.push(\"ellipsis\");\n }\n\n // Always show last page\n if (totalPages > 1) {\n pages.push(totalPages);\n }\n\n return pages;\n}\n\n// ============================================================================\n// MAIN COMPONENT\n// ============================================================================\n\n/**\n * TablePagination Component\n * \n * A complete, ready-to-use pagination component for tables and data grids.\n * Integrates seamlessly with the `useTablePagination` hook.\n * \n * @example\n * ```tsx\n * import { useTablePagination, TablePagination, Table, TableBody, ... } from \"@iclips/ui\";\n * \n * function MyTable({ data }) {\n * const pagination = useTablePagination(data, { pageSize: 10 });\n * \n * return (\n * <>\n * <Table>\n * <TableBody>\n * {pagination.paginatedData.map(item => (\n * <TableRow key={item.id}>...</TableRow>\n * ))}\n * </TableBody>\n * </Table>\n * \n * <TablePagination\n * currentPage={pagination.currentPage}\n * totalPages={pagination.totalPages}\n * pageSize={pagination.pageSize}\n * totalItems={pagination.totalItems}\n * onPageChange={pagination.goToPage}\n * onPageSizeChange={pagination.setPageSize}\n * />\n * </>\n * );\n * }\n * ```\n * \n * @example\n * ```tsx\n * // Minimal usage (without page size selector)\n * <TablePagination\n * currentPage={1}\n * totalPages={10}\n * pageSize={20}\n * totalItems={200}\n * onPageChange={(page) => setCurrentPage(page)}\n * showPageSizeSelector={false}\n * />\n * ```\n */\nexport function TablePagination({\n currentPage,\n totalPages,\n pageSize,\n totalItems,\n onPageChange,\n onPageSizeChange,\n pageSizeOptions = defaultPageSizeOptions,\n maxVisiblePages = 5,\n showInfo = true,\n showPageNumbers = true,\n showPageSizeSelector = true,\n showFirstLastButtons = true,\n labels: customLabels,\n className,\n}: TablePaginationProps) {\n const labels = { ...defaultLabels, ...customLabels };\n const pages = getPageNumbers(currentPage, totalPages, maxVisiblePages);\n\n const startItem = (currentPage - 1) * pageSize + 1;\n const endItem = Math.min(currentPage * pageSize, totalItems);\n\n const hasPreviousPage = currentPage > 1;\n const hasNextPage = currentPage < totalPages;\n\n // Don't render if no pages\n if (totalPages === 0) {\n return null;\n }\n\n return (\n <div\n className={cn(\n \"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\",\n className\n )}\n role=\"navigation\"\n aria-label=\"Paginação da tabela\"\n >\n {/* Left side: Info text */}\n {showInfo && (\n <p className=\"text-sm text-muted-foreground order-2 sm:order-1\">\n {labels.showing}{\" \"}\n <span className=\"font-medium text-foreground\">{startItem}</span>\n {\" - \"}\n <span className=\"font-medium text-foreground\">{endItem}</span>\n {\" \"}{labels.of}{\" \"}\n <span className=\"font-medium text-foreground\">{totalItems}</span>\n {\" \"}{labels.results}\n </p>\n )}\n\n {/* Right side: Controls */}\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:gap-4 order-1 sm:order-2\">\n {/* Page size selector */}\n {showPageSizeSelector && onPageSizeChange && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground whitespace-nowrap\">\n {labels.itemsPerPage}\n </span>\n <Select\n value={String(pageSize)}\n onValueChange={(value) => onPageSizeChange(Number(value))}\n >\n <SelectTrigger className=\"h-8 w-[70px]\" aria-label={labels.itemsPerPage}>\n <SelectValue placeholder={pageSize} />\n </SelectTrigger>\n <SelectContent>\n {pageSizeOptions.map((option) => (\n <SelectItem key={option} value={String(option)}>\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n\n {/* Page info for small screens */}\n <span className=\"text-sm text-muted-foreground sm:hidden\">\n {labels.page} {currentPage} {labels.of} {totalPages}\n </span>\n\n {/* Navigation buttons */}\n <div className=\"flex items-center gap-1\">\n {/* First page button */}\n {showFirstLastButtons && (\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onPageChange(1)}\n disabled={!hasPreviousPage}\n aria-label={labels.first}\n >\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n )}\n\n {/* Previous button */}\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onPageChange(currentPage - 1)}\n disabled={!hasPreviousPage}\n aria-label={labels.previous}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n\n {/* Page numbers */}\n {showPageNumbers && (\n <div className=\"hidden sm:flex items-center gap-1\">\n {pages.map((page, index) =>\n page === \"ellipsis\" ? (\n <span\n key={`ellipsis-${index}`}\n className=\"flex items-center justify-center w-8 h-8 text-muted-foreground\"\n aria-hidden\n >\n ...\n </span>\n ) : (\n <Button\n key={page}\n variant={currentPage === page ? \"default\" : \"outline\"}\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onPageChange(page)}\n aria-label={`${labels.page} ${page}`}\n aria-current={currentPage === page ? \"page\" : undefined}\n >\n {page}\n </Button>\n )\n )}\n </div>\n )}\n\n {/* Next button */}\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onPageChange(currentPage + 1)}\n disabled={!hasNextPage}\n aria-label={labels.next}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n\n {/* Last page button */}\n {showFirstLastButtons && (\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onPageChange(totalPages)}\n disabled={!hasNextPage}\n aria-label={labels.last}\n >\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nTablePagination.displayName = \"TablePagination\";\n\n// ============================================================================\n// EXPORTS\n// ============================================================================\n\nexport { getPageNumbers };\n"],"names":["defaultLabels","defaultPageSizeOptions","getPageNumbers","currentPage","totalPages","maxVisible","_","i","pages","halfVisible","start","end","TablePagination","pageSize","totalItems","onPageChange","onPageSizeChange","pageSizeOptions","maxVisiblePages","showInfo","showPageNumbers","showPageSizeSelector","showFirstLastButtons","customLabels","className","labels","startItem","endItem","hasPreviousPage","hasNextPage","jsxs","cn","jsx","Select","value","SelectTrigger","SelectValue","SelectContent","option","SelectItem","Button","ChevronsLeft","ChevronLeft","page","index","ChevronRight","ChevronsRight"],"mappings":"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"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as m, jsx as e } from "react/jsx-runtime";
|
|
3
|
+
import { cn as y } from "../utils.js";
|
|
4
|
+
import { Button as h } from "../primitives/button.js";
|
|
5
|
+
import { Select as S, SelectTrigger as I, SelectValue as T, SelectContent as $, SelectItem as z } from "../forms/select.js";
|
|
6
|
+
import { ChevronsLeft as A, ChevronLeft as L, ChevronRight as R, ChevronsRight as g } from "lucide-react";
|
|
7
|
+
const O = {
|
|
8
|
+
previous: "Anterior",
|
|
9
|
+
next: "Próxima",
|
|
10
|
+
first: "Primeira",
|
|
11
|
+
last: "Última",
|
|
12
|
+
showing: "Mostrando",
|
|
13
|
+
of: "de",
|
|
14
|
+
results: "resultados",
|
|
15
|
+
itemsPerPage: "Itens por página",
|
|
16
|
+
page: "Página"
|
|
17
|
+
}, _ = [10, 20, 30, 50, 100];
|
|
18
|
+
function q(i, s, n = 5) {
|
|
19
|
+
if (s <= n)
|
|
20
|
+
return Array.from({ length: s }, (c, f) => f + 1);
|
|
21
|
+
const t = [], a = Math.floor(n / 2);
|
|
22
|
+
t.push(1);
|
|
23
|
+
let o = Math.max(2, i - a), d = Math.min(s - 1, i + a);
|
|
24
|
+
i <= a + 1 ? d = n - 1 : i >= s - a && (o = s - n + 2), o > 2 && t.push("ellipsis");
|
|
25
|
+
for (let c = o; c <= d; c++)
|
|
26
|
+
t.push(c);
|
|
27
|
+
return d < s - 1 && t.push("ellipsis"), s > 1 && t.push(s), t;
|
|
28
|
+
}
|
|
29
|
+
function B({
|
|
30
|
+
currentPage: i,
|
|
31
|
+
totalPages: s,
|
|
32
|
+
pageSize: n,
|
|
33
|
+
totalItems: t,
|
|
34
|
+
onPageChange: a,
|
|
35
|
+
onPageSizeChange: o,
|
|
36
|
+
pageSizeOptions: d = _,
|
|
37
|
+
maxVisiblePages: c = 5,
|
|
38
|
+
showInfo: f = !0,
|
|
39
|
+
showPageNumbers: N = !0,
|
|
40
|
+
showPageSizeSelector: v = !0,
|
|
41
|
+
showFirstLastButtons: u = !0,
|
|
42
|
+
labels: b,
|
|
43
|
+
className: w
|
|
44
|
+
}) {
|
|
45
|
+
const r = { ...O, ...b }, C = q(i, s, c), k = (i - 1) * n + 1, M = Math.min(i * n, t), p = i > 1, x = i < s;
|
|
46
|
+
return s === 0 ? null : /* @__PURE__ */ m(
|
|
47
|
+
"div",
|
|
48
|
+
{
|
|
49
|
+
className: y(
|
|
50
|
+
"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
|
|
51
|
+
w
|
|
52
|
+
),
|
|
53
|
+
role: "navigation",
|
|
54
|
+
"aria-label": "Paginação da tabela",
|
|
55
|
+
children: [
|
|
56
|
+
f && /* @__PURE__ */ m("p", { className: "text-sm text-muted-foreground order-2 sm:order-1", children: [
|
|
57
|
+
r.showing,
|
|
58
|
+
" ",
|
|
59
|
+
/* @__PURE__ */ e("span", { className: "font-medium text-foreground", children: k }),
|
|
60
|
+
" - ",
|
|
61
|
+
/* @__PURE__ */ e("span", { className: "font-medium text-foreground", children: M }),
|
|
62
|
+
" ",
|
|
63
|
+
r.of,
|
|
64
|
+
" ",
|
|
65
|
+
/* @__PURE__ */ e("span", { className: "font-medium text-foreground", children: t }),
|
|
66
|
+
" ",
|
|
67
|
+
r.results
|
|
68
|
+
] }),
|
|
69
|
+
/* @__PURE__ */ m("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-center sm:gap-4 order-1 sm:order-2", children: [
|
|
70
|
+
v && o && /* @__PURE__ */ m("div", { className: "flex items-center gap-2", children: [
|
|
71
|
+
/* @__PURE__ */ e("span", { className: "text-sm text-muted-foreground whitespace-nowrap", children: r.itemsPerPage }),
|
|
72
|
+
/* @__PURE__ */ m(
|
|
73
|
+
S,
|
|
74
|
+
{
|
|
75
|
+
value: String(n),
|
|
76
|
+
onValueChange: (l) => o(Number(l)),
|
|
77
|
+
children: [
|
|
78
|
+
/* @__PURE__ */ e(I, { className: "h-8 w-[70px]", "aria-label": r.itemsPerPage, children: /* @__PURE__ */ e(T, { placeholder: n }) }),
|
|
79
|
+
/* @__PURE__ */ e($, { children: d.map((l) => /* @__PURE__ */ e(z, { value: String(l), children: l }, l)) })
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
)
|
|
83
|
+
] }),
|
|
84
|
+
/* @__PURE__ */ m("span", { className: "text-sm text-muted-foreground sm:hidden", children: [
|
|
85
|
+
r.page,
|
|
86
|
+
" ",
|
|
87
|
+
i,
|
|
88
|
+
" ",
|
|
89
|
+
r.of,
|
|
90
|
+
" ",
|
|
91
|
+
s
|
|
92
|
+
] }),
|
|
93
|
+
/* @__PURE__ */ m("div", { className: "flex items-center gap-1", children: [
|
|
94
|
+
u && /* @__PURE__ */ e(
|
|
95
|
+
h,
|
|
96
|
+
{
|
|
97
|
+
variant: "outline",
|
|
98
|
+
size: "icon",
|
|
99
|
+
className: "h-8 w-8",
|
|
100
|
+
onClick: () => a(1),
|
|
101
|
+
disabled: !p,
|
|
102
|
+
"aria-label": r.first,
|
|
103
|
+
children: /* @__PURE__ */ e(A, { className: "h-4 w-4" })
|
|
104
|
+
}
|
|
105
|
+
),
|
|
106
|
+
/* @__PURE__ */ e(
|
|
107
|
+
h,
|
|
108
|
+
{
|
|
109
|
+
variant: "outline",
|
|
110
|
+
size: "icon",
|
|
111
|
+
className: "h-8 w-8",
|
|
112
|
+
onClick: () => a(i - 1),
|
|
113
|
+
disabled: !p,
|
|
114
|
+
"aria-label": r.previous,
|
|
115
|
+
children: /* @__PURE__ */ e(L, { className: "h-4 w-4" })
|
|
116
|
+
}
|
|
117
|
+
),
|
|
118
|
+
N && /* @__PURE__ */ e("div", { className: "hidden sm:flex items-center gap-1", children: C.map(
|
|
119
|
+
(l, j) => l === "ellipsis" ? /* @__PURE__ */ e(
|
|
120
|
+
"span",
|
|
121
|
+
{
|
|
122
|
+
className: "flex items-center justify-center w-8 h-8 text-muted-foreground",
|
|
123
|
+
"aria-hidden": !0,
|
|
124
|
+
children: "..."
|
|
125
|
+
},
|
|
126
|
+
`ellipsis-${j}`
|
|
127
|
+
) : /* @__PURE__ */ e(
|
|
128
|
+
h,
|
|
129
|
+
{
|
|
130
|
+
variant: i === l ? "default" : "outline",
|
|
131
|
+
size: "icon",
|
|
132
|
+
className: "h-8 w-8",
|
|
133
|
+
onClick: () => a(l),
|
|
134
|
+
"aria-label": `${r.page} ${l}`,
|
|
135
|
+
"aria-current": i === l ? "page" : void 0,
|
|
136
|
+
children: l
|
|
137
|
+
},
|
|
138
|
+
l
|
|
139
|
+
)
|
|
140
|
+
) }),
|
|
141
|
+
/* @__PURE__ */ e(
|
|
142
|
+
h,
|
|
143
|
+
{
|
|
144
|
+
variant: "outline",
|
|
145
|
+
size: "icon",
|
|
146
|
+
className: "h-8 w-8",
|
|
147
|
+
onClick: () => a(i + 1),
|
|
148
|
+
disabled: !x,
|
|
149
|
+
"aria-label": r.next,
|
|
150
|
+
children: /* @__PURE__ */ e(R, { className: "h-4 w-4" })
|
|
151
|
+
}
|
|
152
|
+
),
|
|
153
|
+
u && /* @__PURE__ */ e(
|
|
154
|
+
h,
|
|
155
|
+
{
|
|
156
|
+
variant: "outline",
|
|
157
|
+
size: "icon",
|
|
158
|
+
className: "h-8 w-8",
|
|
159
|
+
onClick: () => a(s),
|
|
160
|
+
disabled: !x,
|
|
161
|
+
"aria-label": r.last,
|
|
162
|
+
children: /* @__PURE__ */ e(g, { className: "h-4 w-4" })
|
|
163
|
+
}
|
|
164
|
+
)
|
|
165
|
+
] })
|
|
166
|
+
] })
|
|
167
|
+
]
|
|
168
|
+
}
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
B.displayName = "TablePagination";
|
|
172
|
+
export {
|
|
173
|
+
B as TablePagination,
|
|
174
|
+
q as getPageNumbers
|
|
175
|
+
};
|
|
176
|
+
//# sourceMappingURL=table-pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-pagination.js","sources":["../../../../src/components/ui/data/table-pagination.tsx"],"sourcesContent":["\"use client\";\n\nimport { cn } from \"../utils\";\nimport { Button } from \"../primitives/button\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../forms/select\";\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n} from \"lucide-react\";\n\n// ============================================================================\n// TIPOS\n// ============================================================================\n\n/**\n * Labels para internacionalização\n */\nexport interface TablePaginationLabels {\n /** \"Anterior\" */\n previous?: string;\n /** \"Próxima\" */\n next?: string;\n /** \"Primeira\" */\n first?: string;\n /** \"Última\" */\n last?: string;\n /** \"Mostrando\" */\n showing?: string;\n /** \"de\" */\n of?: string;\n /** \"resultados\" */\n results?: string;\n /** \"Itens por página\" */\n itemsPerPage?: string;\n /** \"Página\" */\n page?: string;\n}\n\n/**\n\n * Props para o componente TablePagination\n *\n * @example\n * ```tsx\n * // Com hook useTablePagination\n * const pagination = useTablePagination(data, { pageSize: 10 });\n *\n * <TablePagination\n * currentPage={pagination.currentPage}\n * totalPages={pagination.totalPages}\n * pageSize={pagination.pageSize}\n * totalItems={pagination.totalItems}\n * onPageChange={pagination.goToPage}\n * onPageSizeChange={pagination.setPageSize}\n * />\n * ```\n */\nexport interface TablePaginationProps {\n /** Número da página atual (1-indexed) */\n currentPage: number;\n /** Número total de páginas */\n totalPages: number;\n /** Tamanho da página atual */\n pageSize: number;\n /** Número total de itens */\n totalItems: number;\n /** Callback quando a página muda */\n onPageChange: (page: number) => void;\n /** Callback quando o tamanho da página muda */\n onPageSizeChange?: (size: number) => void;\n /** Opções de tamanho de página disponíveis */\n pageSizeOptions?: number[];\n /** Número máximo de botões de página visíveis */\n maxVisiblePages?: number;\n /** Mostrar informação \"Mostrando X de Y\" */\n showInfo?: boolean;\n /** Mostrar botões de número de página */\n showPageNumbers?: boolean;\n /** Mostrar seletor de tamanho de página */\n showPageSizeSelector?: boolean;\n /** Mostrar botões de primeira/última página */\n showFirstLastButtons?: boolean;\n /** Rótulos personalizados para i18n */\n labels?: TablePaginationLabels;\n /** className adicional */\n className?: string;\n}\n\n// ============================================================================\n// VALORES PADRÃO\n// ============================================================================\n\nconst defaultLabels: Required<TablePaginationLabels> = {\n previous: \"Anterior\",\n next: \"Próxima\",\n first: \"Primeira\",\n last: \"Última\",\n showing: \"Mostrando\",\n of: \"de\",\n results: \"resultados\",\n itemsPerPage: \"Itens por página\",\n page: \"Página\",\n};\n\nconst defaultPageSizeOptions = [10, 20, 30, 50, 100];\n\n// ============================================================================\n// HELPER FUNCTION\n// ============================================================================\n\n/**\n * Generate array of page numbers with ellipsis\n */\nfunction getPageNumbers(\n currentPage: number,\n totalPages: number,\n maxVisible: number = 5\n): (number | \"ellipsis\")[] {\n if (totalPages <= maxVisible) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const pages: (number | \"ellipsis\")[] = [];\n const halfVisible = Math.floor(maxVisible / 2);\n\n // Always show first page\n pages.push(1);\n\n // Calculate middle range\n let start = Math.max(2, currentPage - halfVisible);\n let end = Math.min(totalPages - 1, currentPage + halfVisible);\n\n // Adjust if near start or end\n if (currentPage <= halfVisible + 1) {\n end = maxVisible - 1;\n } else if (currentPage >= totalPages - halfVisible) {\n start = totalPages - maxVisible + 2;\n }\n\n // Add ellipsis after first page if needed\n if (start > 2) {\n pages.push(\"ellipsis\");\n }\n\n // Add page numbers\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n\n // Add ellipsis before last page if needed\n if (end < totalPages - 1) {\n pages.push(\"ellipsis\");\n }\n\n // Always show last page\n if (totalPages > 1) {\n pages.push(totalPages);\n }\n\n return pages;\n}\n\n// ============================================================================\n// MAIN COMPONENT\n// ============================================================================\n\n/**\n * TablePagination Component\n * \n * A complete, ready-to-use pagination component for tables and data grids.\n * Integrates seamlessly with the `useTablePagination` hook.\n * \n * @example\n * ```tsx\n * import { useTablePagination, TablePagination, Table, TableBody, ... } from \"@iclips/ui\";\n * \n * function MyTable({ data }) {\n * const pagination = useTablePagination(data, { pageSize: 10 });\n * \n * return (\n * <>\n * <Table>\n * <TableBody>\n * {pagination.paginatedData.map(item => (\n * <TableRow key={item.id}>...</TableRow>\n * ))}\n * </TableBody>\n * </Table>\n * \n * <TablePagination\n * currentPage={pagination.currentPage}\n * totalPages={pagination.totalPages}\n * pageSize={pagination.pageSize}\n * totalItems={pagination.totalItems}\n * onPageChange={pagination.goToPage}\n * onPageSizeChange={pagination.setPageSize}\n * />\n * </>\n * );\n * }\n * ```\n * \n * @example\n * ```tsx\n * // Minimal usage (without page size selector)\n * <TablePagination\n * currentPage={1}\n * totalPages={10}\n * pageSize={20}\n * totalItems={200}\n * onPageChange={(page) => setCurrentPage(page)}\n * showPageSizeSelector={false}\n * />\n * ```\n */\nexport function TablePagination({\n currentPage,\n totalPages,\n pageSize,\n totalItems,\n onPageChange,\n onPageSizeChange,\n pageSizeOptions = defaultPageSizeOptions,\n maxVisiblePages = 5,\n showInfo = true,\n showPageNumbers = true,\n showPageSizeSelector = true,\n showFirstLastButtons = true,\n labels: customLabels,\n className,\n}: TablePaginationProps) {\n const labels = { ...defaultLabels, ...customLabels };\n const pages = getPageNumbers(currentPage, totalPages, maxVisiblePages);\n\n const startItem = (currentPage - 1) * pageSize + 1;\n const endItem = Math.min(currentPage * pageSize, totalItems);\n\n const hasPreviousPage = currentPage > 1;\n const hasNextPage = currentPage < totalPages;\n\n // Don't render if no pages\n if (totalPages === 0) {\n return null;\n }\n\n return (\n <div\n className={cn(\n \"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\",\n className\n )}\n role=\"navigation\"\n aria-label=\"Paginação da tabela\"\n >\n {/* Left side: Info text */}\n {showInfo && (\n <p className=\"text-sm text-muted-foreground order-2 sm:order-1\">\n {labels.showing}{\" \"}\n <span className=\"font-medium text-foreground\">{startItem}</span>\n {\" - \"}\n <span className=\"font-medium text-foreground\">{endItem}</span>\n {\" \"}{labels.of}{\" \"}\n <span className=\"font-medium text-foreground\">{totalItems}</span>\n {\" \"}{labels.results}\n </p>\n )}\n\n {/* Right side: Controls */}\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:gap-4 order-1 sm:order-2\">\n {/* Page size selector */}\n {showPageSizeSelector && onPageSizeChange && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground whitespace-nowrap\">\n {labels.itemsPerPage}\n </span>\n <Select\n value={String(pageSize)}\n onValueChange={(value) => onPageSizeChange(Number(value))}\n >\n <SelectTrigger className=\"h-8 w-[70px]\" aria-label={labels.itemsPerPage}>\n <SelectValue placeholder={pageSize} />\n </SelectTrigger>\n <SelectContent>\n {pageSizeOptions.map((option) => (\n <SelectItem key={option} value={String(option)}>\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n\n {/* Page info for small screens */}\n <span className=\"text-sm text-muted-foreground sm:hidden\">\n {labels.page} {currentPage} {labels.of} {totalPages}\n </span>\n\n {/* Navigation buttons */}\n <div className=\"flex items-center gap-1\">\n {/* First page button */}\n {showFirstLastButtons && (\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onPageChange(1)}\n disabled={!hasPreviousPage}\n aria-label={labels.first}\n >\n <ChevronsLeft className=\"h-4 w-4\" />\n </Button>\n )}\n\n {/* Previous button */}\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onPageChange(currentPage - 1)}\n disabled={!hasPreviousPage}\n aria-label={labels.previous}\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </Button>\n\n {/* Page numbers */}\n {showPageNumbers && (\n <div className=\"hidden sm:flex items-center gap-1\">\n {pages.map((page, index) =>\n page === \"ellipsis\" ? (\n <span\n key={`ellipsis-${index}`}\n className=\"flex items-center justify-center w-8 h-8 text-muted-foreground\"\n aria-hidden\n >\n ...\n </span>\n ) : (\n <Button\n key={page}\n variant={currentPage === page ? \"default\" : \"outline\"}\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onPageChange(page)}\n aria-label={`${labels.page} ${page}`}\n aria-current={currentPage === page ? \"page\" : undefined}\n >\n {page}\n </Button>\n )\n )}\n </div>\n )}\n\n {/* Next button */}\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onPageChange(currentPage + 1)}\n disabled={!hasNextPage}\n aria-label={labels.next}\n >\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n\n {/* Last page button */}\n {showFirstLastButtons && (\n <Button\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8\"\n onClick={() => onPageChange(totalPages)}\n disabled={!hasNextPage}\n aria-label={labels.last}\n >\n <ChevronsRight className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nTablePagination.displayName = \"TablePagination\";\n\n// ============================================================================\n// EXPORTS\n// ============================================================================\n\nexport { getPageNumbers };\n"],"names":["defaultLabels","defaultPageSizeOptions","getPageNumbers","currentPage","totalPages","maxVisible","_","i","pages","halfVisible","start","end","TablePagination","pageSize","totalItems","onPageChange","onPageSizeChange","pageSizeOptions","maxVisiblePages","showInfo","showPageNumbers","showPageSizeSelector","showFirstLastButtons","customLabels","className","labels","startItem","endItem","hasPreviousPage","hasNextPage","jsxs","cn","jsx","Select","value","SelectTrigger","SelectValue","SelectContent","option","SelectItem","Button","ChevronsLeft","ChevronLeft","page","index","ChevronRight","ChevronsRight"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function s(c){const{currentPage:t,pageSize:a,totalItems:e}=c,n=Math.ceil(e/a),o=(t-1)*a,i=Math.min(o+a,e);return{totalPages:n,startIndex:o,endIndex:i,hasNextPage:t<n,hasPreviousPage:t>1}}exports.calculatePaginationMetadata=s;
|
|
2
|
+
//# sourceMappingURL=table-types.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-types.cjs","sources":["../../../../src/components/ui/data/table-types.ts"],"sourcesContent":["/**\n * Utility types for DataTable implementations\n * \n * These types provide standard interfaces for common DataTable patterns\n * like sorting, pagination, column definitions, and selection.\n */\n\nimport { type LucideIcon } from \"lucide-react\";\nimport type { EmptyStateAction, EmptyStateVariant } from \"../feedback/empty-state\";\n\n// ============================================================================\n// SORT TYPES\n// ============================================================================\n\n/**\n * Direction of sorting\n */\nexport type SortDirection = \"asc\" | \"desc\" | null;\n\n/**\n * Sort configuration for a table\n * \n * @example\n * ```tsx\n * const [sortConfig, setSortConfig] = useState<SortConfig<User>>({\n * column: \"name\",\n * direction: \"asc\"\n * });\n * ```\n */\nexport interface SortConfig<T> {\n column: keyof T | null;\n direction: SortDirection;\n}\n\n// ============================================================================\n// COLUMN TYPES\n// ============================================================================\n\n/**\n * Column definition for a DataTable\n * \n * @example\n * ```tsx\n * const columns: ColumnDef<User>[] = [\n * {\n * key: \"name\",\n * header: \"Name\",\n * sortable: true,\n * width: \"200px\"\n * },\n * {\n * key: \"email\",\n * header: \"Email\",\n * render: (value, row) => <a href={`mailto:${value}`}>{value}</a>\n * }\n * ];\n * ```\n */\nexport interface ColumnDef<T extends object> {\n /** Key of the data property to display */\n key: keyof T;\n\n /** Header label or React node */\n header: string | React.ReactNode;\n\n /** Whether this column is sortable */\n sortable?: boolean;\n\n /** Column width (CSS value) */\n width?: string | number;\n\n /** Text alignment */\n align?: \"left\" | \"center\" | \"right\";\n\n /** Custom render function for the cell content */\n render?: (value: T[keyof T], row: T, index: number) => React.ReactNode;\n\n /** Additional className for the cell */\n className?: string;\n\n /** Additional className for the header */\n headerClassName?: string;\n\n /**\n * Callback chamado quando a célula é clicada.\n * Quando definido, aplica automaticamente `cursor-pointer` e `hover:text-primary` na célula inteira.\n *\n * @example\n * ```tsx\n * {\n * key: \"id\",\n * header: \"ID\",\n * onCellClick: (value, row) => navigate(`/contratos/${row.id}`)\n * }\n * ```\n */\n onCellClick?: (value: T[keyof T], row: T, index: number) => void;\n}\n\n// ============================================================================\n// PAGINATION TYPES\n// ============================================================================\n\n/**\n * Pagination configuration\n * \n * @example\n * ```tsx\n * const [pagination, setPagination] = useState<PaginationConfig>({\n * currentPage: 1,\n * pageSize: 10,\n * totalItems: 100\n * });\n * ```\n */\nexport interface PaginationConfig {\n /** Current page number (1-indexed) */\n currentPage: number;\n\n /** Number of items per page */\n pageSize: number;\n\n /** Total number of items */\n totalItems: number;\n\n /** Callback when page changes */\n onPageChange?: (page: number) => void;\n\n /** Callback when page size changes */\n onPageSizeChange?: (size: number) => void;\n}\n\n/**\n * Helper to calculate pagination metadata\n */\nexport interface PaginationMetadata {\n totalPages: number;\n startIndex: number;\n endIndex: number;\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n}\n\n// ============================================================================\n// SELECTION TYPES\n// ============================================================================\n\n/**\n * Selection state for table rows\n * \n * @example\n * ```tsx\n * const [selection, setSelection] = useState<SelectionState>({\n * selectedIds: new Set([\"1\", \"2\"]),\n * isAllSelected: false\n * });\n * ```\n */\nexport interface SelectionState {\n /** Set of selected row IDs */\n selectedIds: Set<string | number>;\n\n /** Whether all rows are selected */\n isAllSelected: boolean;\n}\n\n// ============================================================================\n// TABLE STATE TYPES\n// ============================================================================\n\n/**\n * Complete table state with all common features\n * \n * @example\n * ```tsx\n * const [tableState, setTableState] = useState<TableState<User>>({\n * data: users,\n * sort: { column: \"name\", direction: \"asc\" },\n * pagination: { currentPage: 1, pageSize: 10, totalItems: 100 },\n * selection: { selectedIds: new Set(), isAllSelected: false }\n * });\n * ```\n */\nexport interface TableState<T extends object> {\n /** Table data */\n data: T[];\n\n /** Sort configuration */\n sort?: SortConfig<T>;\n\n /** Pagination configuration */\n pagination?: PaginationConfig;\n\n /** Selection state */\n selection?: SelectionState;\n\n /** Loading state */\n isLoading?: boolean;\n\n /** Error state */\n error?: string | null;\n}\n\n// ============================================================================\n// FILTER TYPES\n// ============================================================================\n\n/**\n * Filter operator types\n */\nexport type FilterOperator =\n | \"equals\"\n | \"contains\"\n | \"startsWith\"\n | \"endsWith\"\n | \"greaterThan\"\n | \"greaterThanOrEqual\"\n | \"lessThan\"\n | \"lessThanOrEqual\"\n | \"between\"\n | \"in\";\n\n/**\n * Configuração para modo server-side\n * Quando fornecido, o componente delega filtros/paginação/ordenação para o servidor\n */\nexport interface ServerSideConfig<T extends object> {\n /**\n * Total de items no servidor (necessário para paginação correta)\n */\n totalItems: number;\n\n /**\n * Página atual do servidor (1-indexed)\n * Quando fornecido, sincroniza o estado visual da paginação com o servidor\n */\n currentPage?: number;\n\n /**\n * Tamanho da página atual do servidor\n * Quando fornecido, sincroniza o pageSize visual com o servidor\n */\n currentPageSize?: number;\n\n /**\n * Callback quando filtros ou busca mudam.\n * `filters` continua `any[]` de propósito: é a fronteira pública onde o consumidor\n * recebe as condições de filtro e monta a própria query server-side, indexando o\n * array livremente. Trocar para `unknown[]`/`FilterCondition[]` mudaria a forma do\n * tipo exportado e quebraria consumidores existentes.\n */\n onFilterChange?: (filters: any[], searchQuery: string) => Promise<void> | void; // eslint-disable-line @typescript-eslint/no-explicit-any\n\n /**\n * Callback quando ordenação muda\n */\n onSortChange?: (sortConfig: SortConfig<T>) => Promise<void> | void;\n\n /**\n * Callback quando página muda\n */\n onPageChange?: (page: number, pageSize: number) => Promise<void> | void;\n\n /**\n * Estado de loading externo (opcional - se não fornecido usa isLoading prop)\n */\n isLoadingData?: boolean;\n}\n\n/**\n * Filter configuration for a column\n * \n * @example\n * ```tsx\n * const filters: FilterConfig<User>[] = [\n * {\n * column: \"status\",\n * operator: \"in\",\n * value: [\"active\", \"pending\"]\n * },\n * {\n * column: \"age\",\n * operator: \"greaterThan\",\n * value: 18\n * }\n * ];\n * ```\n */\nexport interface FilterConfig<T> {\n column: keyof T;\n operator: FilterOperator;\n /**\n * Operando do filtro: string, número, boolean, Date ou array (operadores `in`/`between`).\n * Continua `any` de propósito — `FilterConfig` é exportado e apertar para `unknown`\n * forçaria casts em todo consumidor que lê `.value`. As comparações que usam esse\n * valor ficam isoladas em `use-data-table.ts`.\n */\n value: any; // eslint-disable-line @typescript-eslint/no-explicit-any\n}\n\n// ============================================================================\n// DRAG & DROP TYPES\n// ============================================================================\n\n/**\n * Configuration for draggable rows\n */\nexport interface DragDropConfig {\n /** Whether drag and drop is enabled */\n enabled: boolean;\n\n /** Callback when a row is dropped */\n onDrop?: (dragIndex: number, dropIndex: number) => void;\n\n /** Custom drag handle component */\n dragHandle?: React.ReactNode;\n}\n\n// ============================================================================\n// ROW EXPANSION TYPES\n// ============================================================================\n\n/**\n * Configuration for expandable rows\n * \n * @example\n * ```tsx\n * const expandConfig: RowExpansionConfig<User> = {\n * enabled: true,\n * expandedRows: new Set([\"1\", \"3\"]),\n * renderExpandedContent: (row) => (\n * <div>Details for {row.name}</div>\n * )\n * };\n * ```\n */\nexport interface RowExpansionConfig<T extends object> {\n /** Whether row expansion is enabled */\n enabled: boolean;\n\n /** Set of expanded row IDs */\n expandedRows?: Set<string | number>;\n\n /** Callback when row expansion changes */\n onExpansionChange?: (rowId: string | number, isExpanded: boolean) => void;\n\n /** Custom content to render when row is expanded */\n renderExpandedContent?: (row: T, index: number) => React.ReactNode;\n}\n\n// ============================================================================\n// UTILITY FUNCTIONS TYPES\n// ============================================================================\n\n/**\n * Sort function type\n */\nexport type SortFunction<T extends object> = (a: T, b: T, config: SortConfig<T>) => number;\n\n/**\n * Filter function type\n */\nexport type FilterFunction<T extends object> = (row: T, filters: FilterConfig<T>[]) => boolean;\n\n/**\n * Helper function to calculate pagination metadata\n */\nexport function calculatePaginationMetadata(\n config: PaginationConfig\n): PaginationMetadata {\n const { currentPage, pageSize, totalItems } = config;\n const totalPages = Math.ceil(totalItems / pageSize);\n const startIndex = (currentPage - 1) * pageSize;\n const endIndex = Math.min(startIndex + pageSize, totalItems);\n\n return {\n totalPages,\n startIndex,\n endIndex,\n hasNextPage: currentPage < totalPages,\n hasPreviousPage: currentPage > 1,\n };\n}\n\n// ============================================================================\n// EMPTY STATE TYPES\n// ============================================================================\n\n// EmptyStateVariant and EmptyStateAction are defined in ./empty-state\n// and imported here for use in EmptyStateConfig (no re-export to avoid duplicates).\n\n/**\n * Configuration for table empty states\n * \n * Supports both simple (string-only) and rich (icon + actions) empty states.\n * \n * @example Simple usage:\n * ```tsx\n * emptyState={{\n * title: \"Nenhum contrato encontrado\",\n * description: \"Comece criando seu primeiro contrato.\"\n * }}\n * ```\n * \n * @example Rich usage with icon:\n * ```tsx\n * emptyState={{\n * icon: FileText,\n * title: \"Nenhum contrato cadastrado\",\n * description: \"Crie contratos para gerenciar seus empenhos.\",\n * variant: \"first-use\",\n * primaryAction: {\n * label: \"Criar Primeiro Contrato\",\n * onClick: () => navigate('/contratos/novo')\n * }\n * }}\n * ```\n * \n * @example With PNG illustration:\n * ```tsx\n * emptyState={{\n * illustration: \"/illustrations/contract-agreement.png\",\n * title: \"Nenhum contrato cadastrado\",\n * description: \"Crie contratos para gerenciar seus empenhos.\",\n * variant: \"first-use\",\n * primaryAction: {\n * label: \"Criar Primeiro Contrato\",\n * onClick: () => navigate('/contratos/novo')\n * }\n * }}\n * ```\n */\nexport interface EmptyStateConfig {\n /** Icon component (Lucide icon) */\n icon?: LucideIcon;\n /** Illustration PNG from design system (alternative to icon) */\n illustration?: string;\n /** Title - short and situation-oriented */\n title: string;\n /** Description - explains value and next step */\n description: string;\n /** Semantic variant (affects icon styling) */\n variant?: EmptyStateVariant;\n /** Primary call-to-action button */\n primaryAction?: EmptyStateAction;\n /** Secondary action button */\n secondaryAction?: EmptyStateAction;\n}"],"names":["calculatePaginationMetadata","config","currentPage","pageSize","totalItems","totalPages","startIndex","endIndex"],"mappings":"gFAgXO,SAASA,EACdC,EACoB,CACpB,KAAM,CAAE,YAAAC,EAAa,SAAAC,EAAU,WAAAC,CAAA,EAAeH,EACxCI,EAAa,KAAK,KAAKD,EAAaD,CAAQ,EAC5CG,GAAcJ,EAAc,GAAKC,EACjCI,EAAW,KAAK,IAAID,EAAaH,EAAUC,CAAU,EAE3D,MAAO,CACL,WAAAC,EACA,WAAAC,EACA,SAAAC,EACA,YAAaL,EAAcG,EAC3B,gBAAiBH,EAAc,CAAA,CAEnC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
function i(s) {
|
|
2
|
+
const { currentPage: t, pageSize: a, totalItems: e } = s, n = Math.ceil(e / a), o = (t - 1) * a, c = Math.min(o + a, e);
|
|
3
|
+
return {
|
|
4
|
+
totalPages: n,
|
|
5
|
+
startIndex: o,
|
|
6
|
+
endIndex: c,
|
|
7
|
+
hasNextPage: t < n,
|
|
8
|
+
hasPreviousPage: t > 1
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export {
|
|
12
|
+
i as calculatePaginationMetadata
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=table-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-types.js","sources":["../../../../src/components/ui/data/table-types.ts"],"sourcesContent":["/**\n * Utility types for DataTable implementations\n * \n * These types provide standard interfaces for common DataTable patterns\n * like sorting, pagination, column definitions, and selection.\n */\n\nimport { type LucideIcon } from \"lucide-react\";\nimport type { EmptyStateAction, EmptyStateVariant } from \"../feedback/empty-state\";\n\n// ============================================================================\n// SORT TYPES\n// ============================================================================\n\n/**\n * Direction of sorting\n */\nexport type SortDirection = \"asc\" | \"desc\" | null;\n\n/**\n * Sort configuration for a table\n * \n * @example\n * ```tsx\n * const [sortConfig, setSortConfig] = useState<SortConfig<User>>({\n * column: \"name\",\n * direction: \"asc\"\n * });\n * ```\n */\nexport interface SortConfig<T> {\n column: keyof T | null;\n direction: SortDirection;\n}\n\n// ============================================================================\n// COLUMN TYPES\n// ============================================================================\n\n/**\n * Column definition for a DataTable\n * \n * @example\n * ```tsx\n * const columns: ColumnDef<User>[] = [\n * {\n * key: \"name\",\n * header: \"Name\",\n * sortable: true,\n * width: \"200px\"\n * },\n * {\n * key: \"email\",\n * header: \"Email\",\n * render: (value, row) => <a href={`mailto:${value}`}>{value}</a>\n * }\n * ];\n * ```\n */\nexport interface ColumnDef<T extends object> {\n /** Key of the data property to display */\n key: keyof T;\n\n /** Header label or React node */\n header: string | React.ReactNode;\n\n /** Whether this column is sortable */\n sortable?: boolean;\n\n /** Column width (CSS value) */\n width?: string | number;\n\n /** Text alignment */\n align?: \"left\" | \"center\" | \"right\";\n\n /** Custom render function for the cell content */\n render?: (value: T[keyof T], row: T, index: number) => React.ReactNode;\n\n /** Additional className for the cell */\n className?: string;\n\n /** Additional className for the header */\n headerClassName?: string;\n\n /**\n * Callback chamado quando a célula é clicada.\n * Quando definido, aplica automaticamente `cursor-pointer` e `hover:text-primary` na célula inteira.\n *\n * @example\n * ```tsx\n * {\n * key: \"id\",\n * header: \"ID\",\n * onCellClick: (value, row) => navigate(`/contratos/${row.id}`)\n * }\n * ```\n */\n onCellClick?: (value: T[keyof T], row: T, index: number) => void;\n}\n\n// ============================================================================\n// PAGINATION TYPES\n// ============================================================================\n\n/**\n * Pagination configuration\n * \n * @example\n * ```tsx\n * const [pagination, setPagination] = useState<PaginationConfig>({\n * currentPage: 1,\n * pageSize: 10,\n * totalItems: 100\n * });\n * ```\n */\nexport interface PaginationConfig {\n /** Current page number (1-indexed) */\n currentPage: number;\n\n /** Number of items per page */\n pageSize: number;\n\n /** Total number of items */\n totalItems: number;\n\n /** Callback when page changes */\n onPageChange?: (page: number) => void;\n\n /** Callback when page size changes */\n onPageSizeChange?: (size: number) => void;\n}\n\n/**\n * Helper to calculate pagination metadata\n */\nexport interface PaginationMetadata {\n totalPages: number;\n startIndex: number;\n endIndex: number;\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n}\n\n// ============================================================================\n// SELECTION TYPES\n// ============================================================================\n\n/**\n * Selection state for table rows\n * \n * @example\n * ```tsx\n * const [selection, setSelection] = useState<SelectionState>({\n * selectedIds: new Set([\"1\", \"2\"]),\n * isAllSelected: false\n * });\n * ```\n */\nexport interface SelectionState {\n /** Set of selected row IDs */\n selectedIds: Set<string | number>;\n\n /** Whether all rows are selected */\n isAllSelected: boolean;\n}\n\n// ============================================================================\n// TABLE STATE TYPES\n// ============================================================================\n\n/**\n * Complete table state with all common features\n * \n * @example\n * ```tsx\n * const [tableState, setTableState] = useState<TableState<User>>({\n * data: users,\n * sort: { column: \"name\", direction: \"asc\" },\n * pagination: { currentPage: 1, pageSize: 10, totalItems: 100 },\n * selection: { selectedIds: new Set(), isAllSelected: false }\n * });\n * ```\n */\nexport interface TableState<T extends object> {\n /** Table data */\n data: T[];\n\n /** Sort configuration */\n sort?: SortConfig<T>;\n\n /** Pagination configuration */\n pagination?: PaginationConfig;\n\n /** Selection state */\n selection?: SelectionState;\n\n /** Loading state */\n isLoading?: boolean;\n\n /** Error state */\n error?: string | null;\n}\n\n// ============================================================================\n// FILTER TYPES\n// ============================================================================\n\n/**\n * Filter operator types\n */\nexport type FilterOperator =\n | \"equals\"\n | \"contains\"\n | \"startsWith\"\n | \"endsWith\"\n | \"greaterThan\"\n | \"greaterThanOrEqual\"\n | \"lessThan\"\n | \"lessThanOrEqual\"\n | \"between\"\n | \"in\";\n\n/**\n * Configuração para modo server-side\n * Quando fornecido, o componente delega filtros/paginação/ordenação para o servidor\n */\nexport interface ServerSideConfig<T extends object> {\n /**\n * Total de items no servidor (necessário para paginação correta)\n */\n totalItems: number;\n\n /**\n * Página atual do servidor (1-indexed)\n * Quando fornecido, sincroniza o estado visual da paginação com o servidor\n */\n currentPage?: number;\n\n /**\n * Tamanho da página atual do servidor\n * Quando fornecido, sincroniza o pageSize visual com o servidor\n */\n currentPageSize?: number;\n\n /**\n * Callback quando filtros ou busca mudam.\n * `filters` continua `any[]` de propósito: é a fronteira pública onde o consumidor\n * recebe as condições de filtro e monta a própria query server-side, indexando o\n * array livremente. Trocar para `unknown[]`/`FilterCondition[]` mudaria a forma do\n * tipo exportado e quebraria consumidores existentes.\n */\n onFilterChange?: (filters: any[], searchQuery: string) => Promise<void> | void; // eslint-disable-line @typescript-eslint/no-explicit-any\n\n /**\n * Callback quando ordenação muda\n */\n onSortChange?: (sortConfig: SortConfig<T>) => Promise<void> | void;\n\n /**\n * Callback quando página muda\n */\n onPageChange?: (page: number, pageSize: number) => Promise<void> | void;\n\n /**\n * Estado de loading externo (opcional - se não fornecido usa isLoading prop)\n */\n isLoadingData?: boolean;\n}\n\n/**\n * Filter configuration for a column\n * \n * @example\n * ```tsx\n * const filters: FilterConfig<User>[] = [\n * {\n * column: \"status\",\n * operator: \"in\",\n * value: [\"active\", \"pending\"]\n * },\n * {\n * column: \"age\",\n * operator: \"greaterThan\",\n * value: 18\n * }\n * ];\n * ```\n */\nexport interface FilterConfig<T> {\n column: keyof T;\n operator: FilterOperator;\n /**\n * Operando do filtro: string, número, boolean, Date ou array (operadores `in`/`between`).\n * Continua `any` de propósito — `FilterConfig` é exportado e apertar para `unknown`\n * forçaria casts em todo consumidor que lê `.value`. As comparações que usam esse\n * valor ficam isoladas em `use-data-table.ts`.\n */\n value: any; // eslint-disable-line @typescript-eslint/no-explicit-any\n}\n\n// ============================================================================\n// DRAG & DROP TYPES\n// ============================================================================\n\n/**\n * Configuration for draggable rows\n */\nexport interface DragDropConfig {\n /** Whether drag and drop is enabled */\n enabled: boolean;\n\n /** Callback when a row is dropped */\n onDrop?: (dragIndex: number, dropIndex: number) => void;\n\n /** Custom drag handle component */\n dragHandle?: React.ReactNode;\n}\n\n// ============================================================================\n// ROW EXPANSION TYPES\n// ============================================================================\n\n/**\n * Configuration for expandable rows\n * \n * @example\n * ```tsx\n * const expandConfig: RowExpansionConfig<User> = {\n * enabled: true,\n * expandedRows: new Set([\"1\", \"3\"]),\n * renderExpandedContent: (row) => (\n * <div>Details for {row.name}</div>\n * )\n * };\n * ```\n */\nexport interface RowExpansionConfig<T extends object> {\n /** Whether row expansion is enabled */\n enabled: boolean;\n\n /** Set of expanded row IDs */\n expandedRows?: Set<string | number>;\n\n /** Callback when row expansion changes */\n onExpansionChange?: (rowId: string | number, isExpanded: boolean) => void;\n\n /** Custom content to render when row is expanded */\n renderExpandedContent?: (row: T, index: number) => React.ReactNode;\n}\n\n// ============================================================================\n// UTILITY FUNCTIONS TYPES\n// ============================================================================\n\n/**\n * Sort function type\n */\nexport type SortFunction<T extends object> = (a: T, b: T, config: SortConfig<T>) => number;\n\n/**\n * Filter function type\n */\nexport type FilterFunction<T extends object> = (row: T, filters: FilterConfig<T>[]) => boolean;\n\n/**\n * Helper function to calculate pagination metadata\n */\nexport function calculatePaginationMetadata(\n config: PaginationConfig\n): PaginationMetadata {\n const { currentPage, pageSize, totalItems } = config;\n const totalPages = Math.ceil(totalItems / pageSize);\n const startIndex = (currentPage - 1) * pageSize;\n const endIndex = Math.min(startIndex + pageSize, totalItems);\n\n return {\n totalPages,\n startIndex,\n endIndex,\n hasNextPage: currentPage < totalPages,\n hasPreviousPage: currentPage > 1,\n };\n}\n\n// ============================================================================\n// EMPTY STATE TYPES\n// ============================================================================\n\n// EmptyStateVariant and EmptyStateAction are defined in ./empty-state\n// and imported here for use in EmptyStateConfig (no re-export to avoid duplicates).\n\n/**\n * Configuration for table empty states\n * \n * Supports both simple (string-only) and rich (icon + actions) empty states.\n * \n * @example Simple usage:\n * ```tsx\n * emptyState={{\n * title: \"Nenhum contrato encontrado\",\n * description: \"Comece criando seu primeiro contrato.\"\n * }}\n * ```\n * \n * @example Rich usage with icon:\n * ```tsx\n * emptyState={{\n * icon: FileText,\n * title: \"Nenhum contrato cadastrado\",\n * description: \"Crie contratos para gerenciar seus empenhos.\",\n * variant: \"first-use\",\n * primaryAction: {\n * label: \"Criar Primeiro Contrato\",\n * onClick: () => navigate('/contratos/novo')\n * }\n * }}\n * ```\n * \n * @example With PNG illustration:\n * ```tsx\n * emptyState={{\n * illustration: \"/illustrations/contract-agreement.png\",\n * title: \"Nenhum contrato cadastrado\",\n * description: \"Crie contratos para gerenciar seus empenhos.\",\n * variant: \"first-use\",\n * primaryAction: {\n * label: \"Criar Primeiro Contrato\",\n * onClick: () => navigate('/contratos/novo')\n * }\n * }}\n * ```\n */\nexport interface EmptyStateConfig {\n /** Icon component (Lucide icon) */\n icon?: LucideIcon;\n /** Illustration PNG from design system (alternative to icon) */\n illustration?: string;\n /** Title - short and situation-oriented */\n title: string;\n /** Description - explains value and next step */\n description: string;\n /** Semantic variant (affects icon styling) */\n variant?: EmptyStateVariant;\n /** Primary call-to-action button */\n primaryAction?: EmptyStateAction;\n /** Secondary action button */\n secondaryAction?: EmptyStateAction;\n}"],"names":["calculatePaginationMetadata","config","currentPage","pageSize","totalItems","totalPages","startIndex","endIndex"],"mappings":"AAgXO,SAASA,EACdC,GACoB;AACpB,QAAM,EAAE,aAAAC,GAAa,UAAAC,GAAU,YAAAC,EAAA,IAAeH,GACxCI,IAAa,KAAK,KAAKD,IAAaD,CAAQ,GAC5CG,KAAcJ,IAAc,KAAKC,GACjCI,IAAW,KAAK,IAAID,IAAaH,GAAUC,CAAU;AAE3D,SAAO;AAAA,IACL,YAAAC;AAAA,IACA,YAAAC;AAAA,IACA,UAAAC;AAAA,IACA,aAAaL,IAAcG;AAAA,IAC3B,iBAAiBH,IAAc;AAAA,EAAA;AAEnC;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),p=require("react"),o=require("../utils.cjs");function T(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const a in e)if(a!=="default"){const s=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(t,a,s.get?s:{enumerable:!0,get:()=>e[a]})}}return t.default=e,Object.freeze(t)}const r=T(p),d=r.forwardRef(({className:e,...t},a)=>l.jsx("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto",children:l.jsx("table",{ref:a,"data-slot":"table",className:o.cn("w-full caption-bottom text-sm",e),...t})}));d.displayName="Table";const n=r.forwardRef(({className:e,...t},a)=>l.jsx("thead",{ref:a,"data-slot":"table-header",className:o.cn("[&_tr]:border-b",e),...t}));n.displayName="TableHeader";const c=r.forwardRef(({className:e,...t},a)=>l.jsx("tbody",{ref:a,"data-slot":"table-body",className:o.cn("[&_tr:last-child]:border-0",e),...t}));c.displayName="TableBody";const b=r.forwardRef(({className:e,...t},a)=>l.jsx("tfoot",{ref:a,"data-slot":"table-footer",className:o.cn("bg-muted/50 border-t font-semibold [&>tr]:last:border-b-0",e),...t}));b.displayName="TableFooter";const i=r.forwardRef(({className:e,...t},a)=>l.jsx("tr",{ref:a,"data-slot":"table-row",className:o.cn("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",e),...t}));i.displayName="TableRow";const f=r.forwardRef(({className:e,...t},a)=>l.jsx("th",{ref:a,"data-slot":"table-head",className:o.cn("text-foreground h-10 px-2 text-left align-middle font-semibold whitespace-nowrap","[&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",e),...t}));f.displayName="TableHead";const u=r.forwardRef(({className:e,...t},a)=>l.jsx("td",{ref:a,"data-slot":"table-cell",className:o.cn("p-2 align-middle","[&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",e),...t}));u.displayName="TableCell";const m=r.forwardRef(({className:e,...t},a)=>l.jsx("caption",{ref:a,"data-slot":"table-caption",className:o.cn("text-muted-foreground mt-4 text-sm leading-relaxed",e),...t}));m.displayName="TableCaption";exports.Table=d;exports.TableBody=c;exports.TableCaption=m;exports.TableCell=u;exports.TableFooter=b;exports.TableHead=f;exports.TableHeader=n;exports.TableRow=i;
|
|
2
|
+
//# sourceMappingURL=table.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.cjs","sources":["../../../../src/components/ui/data/table.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../utils\";\n\n// ============================================================================\n// TIPOS\n// ============================================================================\n\nexport interface TableProps extends React.ComponentProps<\"table\"> {}\nexport interface TableHeaderProps extends React.ComponentProps<\"thead\"> {}\nexport interface TableBodyProps extends React.ComponentProps<\"tbody\"> {}\nexport interface TableFooterProps extends React.ComponentProps<\"tfoot\"> {}\nexport interface TableRowProps extends React.ComponentProps<\"tr\"> {}\nexport interface TableHeadProps extends React.ComponentProps<\"th\"> {}\nexport interface TableCellProps extends React.ComponentProps<\"td\"> {}\nexport interface TableCaptionProps extends React.ComponentProps<\"caption\"> {}\n\n// ============================================================================\n// COMPONENTES\n// ============================================================================\n\nconst Table = React.forwardRef<HTMLTableElement, TableProps>(\n ({ className, ...props }, ref) => {\n return (\n <div\n data-slot=\"table-container\"\n className=\"relative w-full overflow-x-auto\"\n >\n <table\n ref={ref}\n data-slot=\"table\"\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n );\n }\n);\nTable.displayName = \"Table\";\n\nconst TableHeader = React.forwardRef<HTMLTableSectionElement, TableHeaderProps>(\n ({ className, ...props }, ref) => {\n return (\n <thead\n ref={ref}\n data-slot=\"table-header\"\n className={cn(\"[&_tr]:border-b\", className)}\n {...props}\n />\n );\n }\n);\nTableHeader.displayName = \"TableHeader\";\n\nconst TableBody = React.forwardRef<HTMLTableSectionElement, TableBodyProps>(\n ({ className, ...props }, ref) => {\n return (\n <tbody\n ref={ref}\n data-slot=\"table-body\"\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n );\n }\n);\nTableBody.displayName = \"TableBody\";\n\nconst TableFooter = React.forwardRef<HTMLTableSectionElement, TableFooterProps>(\n ({ className, ...props }, ref) => {\n return (\n <tfoot\n ref={ref}\n data-slot=\"table-footer\"\n className={cn(\n \"bg-muted/50 border-t font-semibold [&>tr]:last:border-b-0\",\n className,\n )}\n {...props}\n />\n );\n }\n);\nTableFooter.displayName = \"TableFooter\";\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n TableRowProps\n>(({ className, ...props }, ref) => {\n return (\n <tr\n ref={ref}\n data-slot=\"table-row\"\n className={cn(\n \"hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors\",\n className,\n )}\n {...props}\n />\n );\n});\nTableRow.displayName = \"TableRow\";\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(\n ({ className, ...props }, ref) => {\n return (\n <th\n ref={ref}\n data-slot=\"table-head\"\n className={cn(\n \"text-foreground h-10 px-2 text-left align-middle font-semibold whitespace-nowrap\",\n \"[&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className,\n )}\n {...props}\n />\n );\n }\n);\nTableHead.displayName = \"TableHead\";\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ className, ...props }, ref) => {\n return (\n <td\n ref={ref}\n data-slot=\"table-cell\"\n className={cn(\n \"p-2 align-middle\",\n \"[&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className,\n )}\n {...props}\n />\n );\n }\n);\nTableCell.displayName = \"TableCell\";\n\nconst TableCaption = React.forwardRef<HTMLTableCaptionElement, TableCaptionProps>(\n ({ className, ...props }, ref) => {\n return (\n <caption\n ref={ref}\n data-slot=\"table-caption\"\n className={cn(\"text-muted-foreground mt-4 text-sm leading-relaxed\", className)}\n {...props}\n />\n );\n }\n);\nTableCaption.displayName = \"TableCaption\";\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};"],"names":["Table","React","className","props","ref","jsx","cn","TableHeader","TableBody","TableFooter","TableRow","TableHead","TableCell","TableCaption"],"mappings":"ycAuBMA,EAAQC,EAAM,WAClB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAEtBC,EAAAA,IAAC,MAAA,CACC,YAAU,kBACV,UAAU,kCAEV,SAAAA,EAAAA,IAAC,QAAA,CACC,IAAAD,EACA,YAAU,QACV,UAAWE,EAAAA,GAAG,gCAAiCJ,CAAS,EACvD,GAAGC,CAAA,CAAA,CACN,CAAA,CAIR,EACAH,EAAM,YAAc,QAEpB,MAAMO,EAAcN,EAAM,WACxB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAEtBC,EAAAA,IAAC,QAAA,CACC,IAAAD,EACA,YAAU,eACV,UAAWE,EAAAA,GAAG,kBAAmBJ,CAAS,EACzC,GAAGC,CAAA,CAAA,CAIZ,EACAI,EAAY,YAAc,cAE1B,MAAMC,EAAYP,EAAM,WACtB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAEtBC,EAAAA,IAAC,QAAA,CACC,IAAAD,EACA,YAAU,aACV,UAAWE,EAAAA,GAAG,6BAA8BJ,CAAS,EACpD,GAAGC,CAAA,CAAA,CAIZ,EACAK,EAAU,YAAc,YAExB,MAAMC,EAAcR,EAAM,WACxB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAEtBC,EAAAA,IAAC,QAAA,CACC,IAAAD,EACA,YAAU,eACV,UAAWE,EAAAA,GACT,4DACAJ,CAAA,EAED,GAAGC,CAAA,CAAA,CAIZ,EACAM,EAAY,YAAc,cAE1B,MAAMC,EAAWT,EAAM,WAGrB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAExBC,EAAAA,IAAC,KAAA,CACC,IAAAD,EACA,YAAU,YACV,UAAWE,EAAAA,GACT,8EACAJ,CAAA,EAED,GAAGC,CAAA,CAAA,CAGT,EACDO,EAAS,YAAc,WAEvB,MAAMC,EAAYV,EAAM,WACtB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAEtBC,EAAAA,IAAC,KAAA,CACC,IAAAD,EACA,YAAU,aACV,UAAWE,EAAAA,GACT,mFACA,sEACAJ,CAAA,EAED,GAAGC,CAAA,CAAA,CAIZ,EACAQ,EAAU,YAAc,YAExB,MAAMC,EAAYX,EAAM,WACtB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAEtBC,EAAAA,IAAC,KAAA,CACC,IAAAD,EACA,YAAU,aACV,UAAWE,EAAAA,GACT,mBACA,sEACAJ,CAAA,EAED,GAAGC,CAAA,CAAA,CAIZ,EACAS,EAAU,YAAc,YAExB,MAAMC,EAAeZ,EAAM,WACzB,CAAC,CAAE,UAAAC,EAAW,GAAGC,CAAA,EAASC,IAEtBC,EAAAA,IAAC,UAAA,CACC,IAAAD,EACA,YAAU,gBACV,UAAWE,EAAAA,GAAG,qDAAsDJ,CAAS,EAC5E,GAAGC,CAAA,CAAA,CAIZ,EACAU,EAAa,YAAc"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as l } from "react/jsx-runtime";
|
|
3
|
+
import * as o from "react";
|
|
4
|
+
import { cn as r } from "../utils.js";
|
|
5
|
+
const d = o.forwardRef(
|
|
6
|
+
({ className: e, ...a }, t) => /* @__PURE__ */ l(
|
|
7
|
+
"div",
|
|
8
|
+
{
|
|
9
|
+
"data-slot": "table-container",
|
|
10
|
+
className: "relative w-full overflow-x-auto",
|
|
11
|
+
children: /* @__PURE__ */ l(
|
|
12
|
+
"table",
|
|
13
|
+
{
|
|
14
|
+
ref: t,
|
|
15
|
+
"data-slot": "table",
|
|
16
|
+
className: r("w-full caption-bottom text-sm", e),
|
|
17
|
+
...a
|
|
18
|
+
}
|
|
19
|
+
)
|
|
20
|
+
}
|
|
21
|
+
)
|
|
22
|
+
);
|
|
23
|
+
d.displayName = "Table";
|
|
24
|
+
const s = o.forwardRef(
|
|
25
|
+
({ className: e, ...a }, t) => /* @__PURE__ */ l(
|
|
26
|
+
"thead",
|
|
27
|
+
{
|
|
28
|
+
ref: t,
|
|
29
|
+
"data-slot": "table-header",
|
|
30
|
+
className: r("[&_tr]:border-b", e),
|
|
31
|
+
...a
|
|
32
|
+
}
|
|
33
|
+
)
|
|
34
|
+
);
|
|
35
|
+
s.displayName = "TableHeader";
|
|
36
|
+
const b = o.forwardRef(
|
|
37
|
+
({ className: e, ...a }, t) => /* @__PURE__ */ l(
|
|
38
|
+
"tbody",
|
|
39
|
+
{
|
|
40
|
+
ref: t,
|
|
41
|
+
"data-slot": "table-body",
|
|
42
|
+
className: r("[&_tr:last-child]:border-0", e),
|
|
43
|
+
...a
|
|
44
|
+
}
|
|
45
|
+
)
|
|
46
|
+
);
|
|
47
|
+
b.displayName = "TableBody";
|
|
48
|
+
const c = o.forwardRef(
|
|
49
|
+
({ className: e, ...a }, t) => /* @__PURE__ */ l(
|
|
50
|
+
"tfoot",
|
|
51
|
+
{
|
|
52
|
+
ref: t,
|
|
53
|
+
"data-slot": "table-footer",
|
|
54
|
+
className: r(
|
|
55
|
+
"bg-muted/50 border-t font-semibold [&>tr]:last:border-b-0",
|
|
56
|
+
e
|
|
57
|
+
),
|
|
58
|
+
...a
|
|
59
|
+
}
|
|
60
|
+
)
|
|
61
|
+
);
|
|
62
|
+
c.displayName = "TableFooter";
|
|
63
|
+
const n = o.forwardRef(({ className: e, ...a }, t) => /* @__PURE__ */ l(
|
|
64
|
+
"tr",
|
|
65
|
+
{
|
|
66
|
+
ref: t,
|
|
67
|
+
"data-slot": "table-row",
|
|
68
|
+
className: r(
|
|
69
|
+
"hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",
|
|
70
|
+
e
|
|
71
|
+
),
|
|
72
|
+
...a
|
|
73
|
+
}
|
|
74
|
+
));
|
|
75
|
+
n.displayName = "TableRow";
|
|
76
|
+
const m = o.forwardRef(
|
|
77
|
+
({ className: e, ...a }, t) => /* @__PURE__ */ l(
|
|
78
|
+
"th",
|
|
79
|
+
{
|
|
80
|
+
ref: t,
|
|
81
|
+
"data-slot": "table-head",
|
|
82
|
+
className: r(
|
|
83
|
+
"text-foreground h-10 px-2 text-left align-middle font-semibold whitespace-nowrap",
|
|
84
|
+
"[&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
|
|
85
|
+
e
|
|
86
|
+
),
|
|
87
|
+
...a
|
|
88
|
+
}
|
|
89
|
+
)
|
|
90
|
+
);
|
|
91
|
+
m.displayName = "TableHead";
|
|
92
|
+
const i = o.forwardRef(
|
|
93
|
+
({ className: e, ...a }, t) => /* @__PURE__ */ l(
|
|
94
|
+
"td",
|
|
95
|
+
{
|
|
96
|
+
ref: t,
|
|
97
|
+
"data-slot": "table-cell",
|
|
98
|
+
className: r(
|
|
99
|
+
"p-2 align-middle",
|
|
100
|
+
"[&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
|
|
101
|
+
e
|
|
102
|
+
),
|
|
103
|
+
...a
|
|
104
|
+
}
|
|
105
|
+
)
|
|
106
|
+
);
|
|
107
|
+
i.displayName = "TableCell";
|
|
108
|
+
const f = o.forwardRef(
|
|
109
|
+
({ className: e, ...a }, t) => /* @__PURE__ */ l(
|
|
110
|
+
"caption",
|
|
111
|
+
{
|
|
112
|
+
ref: t,
|
|
113
|
+
"data-slot": "table-caption",
|
|
114
|
+
className: r("text-muted-foreground mt-4 text-sm leading-relaxed", e),
|
|
115
|
+
...a
|
|
116
|
+
}
|
|
117
|
+
)
|
|
118
|
+
);
|
|
119
|
+
f.displayName = "TableCaption";
|
|
120
|
+
export {
|
|
121
|
+
d as Table,
|
|
122
|
+
b as TableBody,
|
|
123
|
+
f as TableCaption,
|
|
124
|
+
i as TableCell,
|
|
125
|
+
c as TableFooter,
|
|
126
|
+
m as TableHead,
|
|
127
|
+
s as TableHeader,
|
|
128
|
+
n as TableRow
|
|
129
|
+
};
|
|
130
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sources":["../../../../src/components/ui/data/table.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"../utils\";\n\n// ============================================================================\n// TIPOS\n// ============================================================================\n\nexport interface TableProps extends React.ComponentProps<\"table\"> {}\nexport interface TableHeaderProps extends React.ComponentProps<\"thead\"> {}\nexport interface TableBodyProps extends React.ComponentProps<\"tbody\"> {}\nexport interface TableFooterProps extends React.ComponentProps<\"tfoot\"> {}\nexport interface TableRowProps extends React.ComponentProps<\"tr\"> {}\nexport interface TableHeadProps extends React.ComponentProps<\"th\"> {}\nexport interface TableCellProps extends React.ComponentProps<\"td\"> {}\nexport interface TableCaptionProps extends React.ComponentProps<\"caption\"> {}\n\n// ============================================================================\n// COMPONENTES\n// ============================================================================\n\nconst Table = React.forwardRef<HTMLTableElement, TableProps>(\n ({ className, ...props }, ref) => {\n return (\n <div\n data-slot=\"table-container\"\n className=\"relative w-full overflow-x-auto\"\n >\n <table\n ref={ref}\n data-slot=\"table\"\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n );\n }\n);\nTable.displayName = \"Table\";\n\nconst TableHeader = React.forwardRef<HTMLTableSectionElement, TableHeaderProps>(\n ({ className, ...props }, ref) => {\n return (\n <thead\n ref={ref}\n data-slot=\"table-header\"\n className={cn(\"[&_tr]:border-b\", className)}\n {...props}\n />\n );\n }\n);\nTableHeader.displayName = \"TableHeader\";\n\nconst TableBody = React.forwardRef<HTMLTableSectionElement, TableBodyProps>(\n ({ className, ...props }, ref) => {\n return (\n <tbody\n ref={ref}\n data-slot=\"table-body\"\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n );\n }\n);\nTableBody.displayName = \"TableBody\";\n\nconst TableFooter = React.forwardRef<HTMLTableSectionElement, TableFooterProps>(\n ({ className, ...props }, ref) => {\n return (\n <tfoot\n ref={ref}\n data-slot=\"table-footer\"\n className={cn(\n \"bg-muted/50 border-t font-semibold [&>tr]:last:border-b-0\",\n className,\n )}\n {...props}\n />\n );\n }\n);\nTableFooter.displayName = \"TableFooter\";\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n TableRowProps\n>(({ className, ...props }, ref) => {\n return (\n <tr\n ref={ref}\n data-slot=\"table-row\"\n className={cn(\n \"hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors\",\n className,\n )}\n {...props}\n />\n );\n});\nTableRow.displayName = \"TableRow\";\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(\n ({ className, ...props }, ref) => {\n return (\n <th\n ref={ref}\n data-slot=\"table-head\"\n className={cn(\n \"text-foreground h-10 px-2 text-left align-middle font-semibold whitespace-nowrap\",\n \"[&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className,\n )}\n {...props}\n />\n );\n }\n);\nTableHead.displayName = \"TableHead\";\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ className, ...props }, ref) => {\n return (\n <td\n ref={ref}\n data-slot=\"table-cell\"\n className={cn(\n \"p-2 align-middle\",\n \"[&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]\",\n className,\n )}\n {...props}\n />\n );\n }\n);\nTableCell.displayName = \"TableCell\";\n\nconst TableCaption = React.forwardRef<HTMLTableCaptionElement, TableCaptionProps>(\n ({ className, ...props }, ref) => {\n return (\n <caption\n ref={ref}\n data-slot=\"table-caption\"\n className={cn(\"text-muted-foreground mt-4 text-sm leading-relaxed\", className)}\n {...props}\n />\n );\n }\n);\nTableCaption.displayName = \"TableCaption\";\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};"],"names":["Table","React","className","props","ref","jsx","cn","TableHeader","TableBody","TableFooter","TableRow","TableHead","TableCell","TableCaption"],"mappings":";;;;AAuBA,MAAMA,IAAQC,EAAM;AAAA,EAClB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAEtB,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAU;AAAA,MAEV,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAAD;AAAA,UACA,aAAU;AAAA,UACV,WAAWE,EAAG,iCAAiCJ,CAAS;AAAA,UACvD,GAAGC;AAAA,QAAA;AAAA,MAAA;AAAA,IACN;AAAA,EAAA;AAIR;AACAH,EAAM,cAAc;AAEpB,MAAMO,IAAcN,EAAM;AAAA,EACxB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAEtB,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,aAAU;AAAA,MACV,WAAWE,EAAG,mBAAmBJ,CAAS;AAAA,MACzC,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AACAI,EAAY,cAAc;AAE1B,MAAMC,IAAYP,EAAM;AAAA,EACtB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAEtB,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,aAAU;AAAA,MACV,WAAWE,EAAG,8BAA8BJ,CAAS;AAAA,MACpD,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AACAK,EAAU,cAAc;AAExB,MAAMC,IAAcR,EAAM;AAAA,EACxB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAEtB,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,aAAU;AAAA,MACV,WAAWE;AAAA,QACT;AAAA,QACAJ;AAAA,MAAA;AAAA,MAED,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AACAM,EAAY,cAAc;AAE1B,MAAMC,IAAWT,EAAM,WAGrB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAExB,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAAD;AAAA,IACA,aAAU;AAAA,IACV,WAAWE;AAAA,MACT;AAAA,MACAJ;AAAA,IAAA;AAAA,IAED,GAAGC;AAAA,EAAA;AAAA,CAGT;AACDO,EAAS,cAAc;AAEvB,MAAMC,IAAYV,EAAM;AAAA,EACtB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAEtB,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,aAAU;AAAA,MACV,WAAWE;AAAA,QACT;AAAA,QACA;AAAA,QACAJ;AAAA,MAAA;AAAA,MAED,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AACAQ,EAAU,cAAc;AAExB,MAAMC,IAAYX,EAAM;AAAA,EACtB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAEtB,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,aAAU;AAAA,MACV,WAAWE;AAAA,QACT;AAAA,QACA;AAAA,QACAJ;AAAA,MAAA;AAAA,MAED,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AACAS,EAAU,cAAc;AAExB,MAAMC,IAAeZ,EAAM;AAAA,EACzB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MAEtB,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,aAAU;AAAA,MACV,WAAWE,EAAG,sDAAsDJ,CAAS;AAAA,MAC5E,GAAGC;AAAA,IAAA;AAAA,EAAA;AAIZ;AACAU,EAAa,cAAc;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),d=require("react"),u=require("class-variance-authority"),i=require("../utils.cjs");function g(t){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const e in t)if(e!=="default"){const a=Object.getOwnPropertyDescriptor(t,e);Object.defineProperty(r,e,a.get?a:{enumerable:!0,get:()=>t[e]})}}return r.default=t,Object.freeze(r)}const l=g(d),f=u.cva("relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",{variants:{variant:{default:"bg-card text-card-foreground",destructive:"alert-variant-destructive",info:"alert-variant-info",success:"alert-variant-success",warning:"alert-variant-warning"}},defaultVariants:{variant:"default"}}),n=l.forwardRef(({className:t,variant:r,...e},a)=>s.jsx("div",{ref:a,"data-slot":"alert",role:"alert",className:i.cn(f({variant:r}),t),...e}));n.displayName="Alert";const c=l.forwardRef(({className:t,...r},e)=>s.jsx("div",{ref:e,"data-slot":"alert-title",className:i.cn("col-start-2 line-clamp-1 min-h-4 font-semibold leading-[1.2] tracking-tight",t),...r}));c.displayName="AlertTitle";const o=l.forwardRef(({className:t,...r},e)=>s.jsx("div",{ref:e,"data-slot":"alert-description",className:i.cn("text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",t),...r}));o.displayName="AlertDescription";exports.Alert=n;exports.AlertDescription=o;exports.AlertTitle=c;
|
|
2
|
+
//# sourceMappingURL=alert.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert.cjs","sources":["../../../../src/components/ui/feedback/alert.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"../utils\";\n\nconst alertVariants = cva(\n \"relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\",\n {\n variants: {\n variant: {\n default: \"bg-card text-card-foreground\",\n destructive: \"alert-variant-destructive\",\n // CSS-variable–based variants: adapt automatically in dark/light mode\n // via alert-theme.css (uses --info, --success, --warning, --destructive semantic vars)\n info: \"alert-variant-info\",\n success: \"alert-variant-success\",\n warning: \"alert-variant-warning\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nconst Alert = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\"> & VariantProps<typeof alertVariants>\n>(({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n));\nAlert.displayName = \"Alert\";\n\nconst AlertTitle = React.forwardRef<HTMLDivElement, React.ComponentProps<\"div\">>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"alert-title\"\n className={cn(\n \"col-start-2 line-clamp-1 min-h-4 font-semibold leading-[1.2] tracking-tight\",\n className,\n )}\n {...props}\n />\n ),\n);\nAlertTitle.displayName = \"AlertTitle\";\n\nconst AlertDescription = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<\"div\">\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"alert-description\"\n className={cn(\n \"text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed\",\n className,\n )}\n {...props}\n />\n));\nAlertDescription.displayName = \"AlertDescription\";\n\nexport { Alert, AlertTitle, AlertDescription };\n"],"names":["alertVariants","cva","Alert","React","className","variant","props","ref","jsx","cn","AlertTitle","AlertDescription"],"mappings":"keAKMA,EAAgBC,EAAAA,IACpB,oOACA,CACE,SAAU,CACR,QAAS,CACP,QAAS,+BACT,YAAa,4BAGb,KAAM,qBACN,QAAS,wBACT,QAAS,uBAAA,CACX,EAEF,gBAAiB,CACf,QAAS,SAAA,CACX,CAEJ,EAEMC,EAAQC,EAAM,WAGlB,CAAC,CAAE,UAAAC,EAAW,QAAAC,EAAS,GAAGC,GAASC,IACnCC,EAAAA,IAAC,MAAA,CACC,IAAAD,EACA,YAAU,QACV,KAAK,QACL,UAAWE,EAAAA,GAAGT,EAAc,CAAE,QAAAK,CAAA,CAAS,EAAGD,CAAS,EAClD,GAAGE,CAAA,CACN,CACD,EACDJ,EAAM,YAAc,QAEpB,MAAMQ,EAAaP,EAAM,WACvB,CAAC,CAAE,UAAAC,EAAW,GAAGE,CAAA,EAASC,IACxBC,EAAAA,IAAC,MAAA,CACC,IAAAD,EACA,YAAU,cACV,UAAWE,EAAAA,GACT,8EACAL,CAAA,EAED,GAAGE,CAAA,CAAA,CAGV,EACAI,EAAW,YAAc,aAEzB,MAAMC,EAAmBR,EAAM,WAG7B,CAAC,CAAE,UAAAC,EAAW,GAAGE,CAAA,EAASC,IAC1BC,EAAAA,IAAC,MAAA,CACC,IAAAD,EACA,YAAU,oBACV,UAAWE,EAAAA,GACT,iGACAL,CAAA,EAED,GAAGE,CAAA,CACN,CACD,EACDK,EAAiB,YAAc"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import * as s from "react";
|
|
3
|
+
import { cva as o } from "class-variance-authority";
|
|
4
|
+
import { cn as i } from "../utils.js";
|
|
5
|
+
const n = o(
|
|
6
|
+
"relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",
|
|
7
|
+
{
|
|
8
|
+
variants: {
|
|
9
|
+
variant: {
|
|
10
|
+
default: "bg-card text-card-foreground",
|
|
11
|
+
destructive: "alert-variant-destructive",
|
|
12
|
+
// CSS-variable–based variants: adapt automatically in dark/light mode
|
|
13
|
+
// via alert-theme.css (uses --info, --success, --warning, --destructive semantic vars)
|
|
14
|
+
info: "alert-variant-info",
|
|
15
|
+
success: "alert-variant-success",
|
|
16
|
+
warning: "alert-variant-warning"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
defaultVariants: {
|
|
20
|
+
variant: "default"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
), d = s.forwardRef(({ className: t, variant: a, ...r }, l) => /* @__PURE__ */ e(
|
|
24
|
+
"div",
|
|
25
|
+
{
|
|
26
|
+
ref: l,
|
|
27
|
+
"data-slot": "alert",
|
|
28
|
+
role: "alert",
|
|
29
|
+
className: i(n({ variant: a }), t),
|
|
30
|
+
...r
|
|
31
|
+
}
|
|
32
|
+
));
|
|
33
|
+
d.displayName = "Alert";
|
|
34
|
+
const c = s.forwardRef(
|
|
35
|
+
({ className: t, ...a }, r) => /* @__PURE__ */ e(
|
|
36
|
+
"div",
|
|
37
|
+
{
|
|
38
|
+
ref: r,
|
|
39
|
+
"data-slot": "alert-title",
|
|
40
|
+
className: i(
|
|
41
|
+
"col-start-2 line-clamp-1 min-h-4 font-semibold leading-[1.2] tracking-tight",
|
|
42
|
+
t
|
|
43
|
+
),
|
|
44
|
+
...a
|
|
45
|
+
}
|
|
46
|
+
)
|
|
47
|
+
);
|
|
48
|
+
c.displayName = "AlertTitle";
|
|
49
|
+
const g = s.forwardRef(({ className: t, ...a }, r) => /* @__PURE__ */ e(
|
|
50
|
+
"div",
|
|
51
|
+
{
|
|
52
|
+
ref: r,
|
|
53
|
+
"data-slot": "alert-description",
|
|
54
|
+
className: i(
|
|
55
|
+
"text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",
|
|
56
|
+
t
|
|
57
|
+
),
|
|
58
|
+
...a
|
|
59
|
+
}
|
|
60
|
+
));
|
|
61
|
+
g.displayName = "AlertDescription";
|
|
62
|
+
export {
|
|
63
|
+
d as Alert,
|
|
64
|
+
g as AlertDescription,
|
|
65
|
+
c as AlertTitle
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=alert.js.map
|