@lerianstudio/sindarian-ui 1.2.0-beta.13 → 1.2.0-beta.14
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/dist/charts/chart.d.ts +64 -0
- package/dist/charts/chart.d.ts.map +1 -0
- package/dist/charts/chart.js +232 -0
- package/dist/charts/index.d.ts +3 -0
- package/dist/charts/index.d.ts.map +1 -0
- package/dist/charts/index.js +11 -0
- package/dist/components/breadcrumb/get-breadcrumb-paths.js +5 -2
- package/dist/components/form/date-time-picker-field/index.js +1 -1
- package/dist/components/form/file-upload-field/index.d.ts +52 -0
- package/dist/components/form/file-upload-field/index.d.ts.map +1 -0
- package/dist/components/form/file-upload-field/index.js +50 -0
- package/dist/components/form/index.d.ts +3 -0
- package/dist/components/form/index.d.ts.map +1 -1
- package/dist/components/form/index.js +3 -0
- package/dist/components/form/radio-group-field/index.d.ts +32 -0
- package/dist/components/form/radio-group-field/index.d.ts.map +1 -0
- package/dist/components/form/radio-group-field/index.js +29 -0
- package/dist/components/form/renderable-label.d.ts +35 -0
- package/dist/components/form/renderable-label.d.ts.map +1 -0
- package/dist/components/form/renderable-label.js +57 -0
- package/dist/components/form/textarea-field/index.d.ts +31 -0
- package/dist/components/form/textarea-field/index.d.ts.map +1 -0
- package/dist/components/form/textarea-field/index.js +23 -0
- package/dist/components/table/id-table-cell.js +5 -2
- package/dist/components/ui/accordion/index.d.ts +14 -0
- package/dist/components/ui/accordion/index.d.ts.map +1 -0
- package/dist/components/ui/accordion/index.js +62 -0
- package/dist/components/ui/alert-dialog/index.d.ts +15 -0
- package/dist/components/ui/alert-dialog/index.d.ts.map +1 -0
- package/dist/components/ui/alert-dialog/index.js +84 -0
- package/dist/components/ui/autocomplete/index.js +4 -4
- package/dist/components/ui/file-upload/index.d.ts +94 -0
- package/dist/components/ui/file-upload/index.d.ts.map +1 -0
- package/dist/components/ui/file-upload/index.js +230 -0
- package/dist/components/ui/hover-card/index.d.ts +7 -0
- package/dist/components/ui/hover-card/index.d.ts.map +1 -0
- package/dist/components/ui/hover-card/index.js +51 -0
- package/dist/components/ui/input/index.js +2 -2
- package/dist/components/ui/otp-input/index.d.ts.map +1 -1
- package/dist/components/ui/otp-input/index.js +1 -1
- package/dist/components/ui/radio-group/index.d.ts +6 -0
- package/dist/components/ui/radio-group/index.d.ts.map +1 -0
- package/dist/components/ui/radio-group/index.js +48 -0
- package/dist/components/ui/scroll-area/index.d.ts +6 -0
- package/dist/components/ui/scroll-area/index.d.ts.map +1 -0
- package/dist/components/ui/scroll-area/index.js +49 -0
- package/dist/components/ui/sidebar/index.d.ts +1 -0
- package/dist/components/ui/sidebar/index.d.ts.map +1 -1
- package/dist/components/ui/sidebar/index.js +1 -0
- package/dist/components/ui/sidebar/next-router.cjs +44 -0
- package/dist/components/ui/sidebar/next-router.d.cts +7 -0
- package/dist/components/ui/sidebar/sidebar-item-button.d.ts +2 -2
- package/dist/components/ui/sidebar/sidebar-item-button.d.ts.map +1 -1
- package/dist/components/ui/sidebar/sidebar-item-button.js +3 -5
- package/dist/components/ui/sidebar/sidebar-item-icon-button.d.ts +2 -2
- package/dist/components/ui/sidebar/sidebar-item-icon-button.d.ts.map +1 -1
- package/dist/components/ui/sidebar/sidebar-item-icon-button.js +3 -5
- package/dist/components/ui/sidebar/sidebar-item.d.ts.map +1 -1
- package/dist/components/ui/sidebar/sidebar-item.js +3 -2
- package/dist/components/ui/sidebar/sidebar-router.d.ts +82 -0
- package/dist/components/ui/sidebar/sidebar-router.d.ts.map +1 -0
- package/dist/components/ui/sidebar/sidebar-router.js +126 -0
- package/dist/components/ui/toast/index.d.ts +1 -1
- package/dist/components/ui/toast/index.d.ts.map +1 -1
- package/dist/components/ui/toggle-group/index.d.ts +18 -0
- package/dist/components/ui/toggle-group/index.d.ts.map +1 -0
- package/dist/components/ui/toggle-group/index.js +87 -0
- package/dist/domain/blotter/index.d.ts +40 -0
- package/dist/domain/blotter/index.d.ts.map +1 -0
- package/dist/domain/blotter/index.js +16 -0
- package/dist/domain/delinquency-aging/aging-buckets.d.ts +37 -0
- package/dist/domain/delinquency-aging/aging-buckets.d.ts.map +1 -0
- package/dist/domain/delinquency-aging/aging-buckets.js +97 -0
- package/dist/domain/delinquency-aging/index.d.ts +52 -0
- package/dist/domain/delinquency-aging/index.d.ts.map +1 -0
- package/dist/domain/delinquency-aging/index.js +151 -0
- package/dist/domain/figure/index.d.ts +30 -0
- package/dist/domain/figure/index.d.ts.map +1 -0
- package/dist/domain/figure/index.js +18 -0
- package/dist/domain/format.d.ts +57 -0
- package/dist/domain/format.d.ts.map +1 -0
- package/dist/domain/format.js +102 -0
- package/dist/domain/index.d.ts +22 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +43 -0
- package/dist/domain/key-id/index.d.ts +31 -0
- package/dist/domain/key-id/index.d.ts.map +1 -0
- package/dist/domain/key-id/index.js +167 -0
- package/dist/domain/ledger-sheet/index.d.ts +45 -0
- package/dist/domain/ledger-sheet/index.d.ts.map +1 -0
- package/dist/domain/ledger-sheet/index.js +28 -0
- package/dist/domain/money-diff.d.ts +23 -0
- package/dist/domain/money-diff.d.ts.map +1 -0
- package/dist/domain/money-diff.js +48 -0
- package/dist/domain/money-math.d.ts +32 -0
- package/dist/domain/money-math.d.ts.map +1 -0
- package/dist/domain/money-math.js +104 -0
- package/dist/domain/money-text/index.d.ts +37 -0
- package/dist/domain/money-text/index.d.ts.map +1 -0
- package/dist/domain/money-text/index.js +113 -0
- package/dist/domain/section-label/index.d.ts +21 -0
- package/dist/domain/section-label/index.d.ts.map +1 -0
- package/dist/domain/section-label/index.js +9 -0
- package/dist/domain/status-rail/index.d.ts +40 -0
- package/dist/domain/status-rail/index.d.ts.map +1 -0
- package/dist/domain/status-rail/index.js +64 -0
- package/dist/domain/threshold-gauge/index.d.ts +84 -0
- package/dist/domain/threshold-gauge/index.d.ts.map +1 -0
- package/dist/domain/threshold-gauge/index.js +157 -0
- package/dist/enterprise/alert-banner/index.d.ts +30 -0
- package/dist/enterprise/alert-banner/index.d.ts.map +1 -0
- package/dist/enterprise/alert-banner/index.js +24 -0
- package/dist/enterprise/app-shell/index.d.ts +61 -0
- package/dist/enterprise/app-shell/index.d.ts.map +1 -0
- package/dist/enterprise/app-shell/index.js +87 -0
- package/dist/enterprise/cursor-pager/index.d.ts +21 -0
- package/dist/enterprise/cursor-pager/index.d.ts.map +1 -0
- package/dist/enterprise/cursor-pager/index.js +26 -0
- package/dist/enterprise/data-table/index.d.ts +88 -0
- package/dist/enterprise/data-table/index.d.ts.map +1 -0
- package/dist/enterprise/data-table/index.js +245 -0
- package/dist/enterprise/date-range-picker/index.d.ts +37 -0
- package/dist/enterprise/date-range-picker/index.d.ts.map +1 -0
- package/dist/enterprise/date-range-picker/index.js +74 -0
- package/dist/enterprise/detail-panel/index.d.ts +54 -0
- package/dist/enterprise/detail-panel/index.d.ts.map +1 -0
- package/dist/enterprise/detail-panel/index.js +20 -0
- package/dist/enterprise/empty-state/index.d.ts +32 -0
- package/dist/enterprise/empty-state/index.d.ts.map +1 -0
- package/dist/enterprise/empty-state/index.js +13 -0
- package/dist/enterprise/index.d.ts +26 -0
- package/dist/enterprise/index.d.ts.map +1 -0
- package/dist/enterprise/index.js +39 -0
- package/dist/enterprise/number-input/index.d.ts +55 -0
- package/dist/enterprise/number-input/index.d.ts.map +1 -0
- package/dist/enterprise/number-input/index.js +238 -0
- package/dist/enterprise/search-input/index.d.ts +32 -0
- package/dist/enterprise/search-input/index.d.ts.map +1 -0
- package/dist/enterprise/search-input/index.js +114 -0
- package/dist/enterprise/stat-card/index.d.ts +43 -0
- package/dist/enterprise/stat-card/index.d.ts.map +1 -0
- package/dist/enterprise/stat-card/index.js +67 -0
- package/dist/enterprise/status-badge/index.d.ts +31 -0
- package/dist/enterprise/status-badge/index.d.ts.map +1 -0
- package/dist/enterprise/status-badge/index.js +120 -0
- package/dist/enterprise/use-is-mobile.d.ts +11 -0
- package/dist/enterprise/use-is-mobile.d.ts.map +1 -0
- package/dist/enterprise/use-is-mobile.js +59 -0
- package/dist/enterprise/virtualized-table/index.d.ts +26 -0
- package/dist/enterprise/virtualized-table/index.d.ts.map +1 -0
- package/dist/enterprise/virtualized-table/index.js +114 -0
- package/dist/esm/charts/chart.d.ts +64 -0
- package/dist/esm/charts/chart.d.ts.map +1 -0
- package/dist/esm/charts/chart.js +191 -0
- package/dist/esm/charts/index.d.ts +3 -0
- package/dist/esm/charts/index.d.ts.map +1 -0
- package/dist/esm/charts/index.js +3 -0
- package/dist/esm/components/breadcrumb/get-breadcrumb-paths.d.ts +10 -0
- package/dist/esm/components/breadcrumb/get-breadcrumb-paths.d.ts.map +1 -0
- package/dist/esm/components/breadcrumb/get-breadcrumb-paths.js +12 -0
- package/dist/esm/components/breadcrumb/index.d.ts +11 -0
- package/dist/esm/components/breadcrumb/index.d.ts.map +1 -0
- package/dist/esm/components/breadcrumb/index.js +6 -0
- package/dist/esm/components/card/account-card/index.d.ts +32 -0
- package/dist/esm/components/card/account-card/index.d.ts.map +1 -0
- package/dist/esm/components/card/account-card/index.js +53 -0
- package/dist/esm/components/card/basic-card/index.d.ts +6 -0
- package/dist/esm/components/card/basic-card/index.d.ts.map +1 -0
- package/dist/esm/components/card/basic-card/index.js +14 -0
- package/dist/esm/components/card/dashboard-card/index.d.ts +5 -0
- package/dist/esm/components/card/dashboard-card/index.d.ts.map +1 -0
- package/dist/esm/components/card/dashboard-card/index.js +14 -0
- package/dist/esm/components/card/entity-card/index.d.ts +22 -0
- package/dist/esm/components/card/entity-card/index.d.ts.map +1 -0
- package/dist/esm/components/card/entity-card/index.js +48 -0
- package/dist/esm/components/card/index.d.ts +5 -0
- package/dist/esm/components/card/index.d.ts.map +1 -0
- package/dist/esm/components/card/index.js +4 -0
- package/dist/esm/components/dialog/confirmation-dialog/index.d.ts +16 -0
- package/dist/esm/components/dialog/confirmation-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/dialog/confirmation-dialog/index.js +25 -0
- package/dist/esm/components/dialog/confirmation-dialog/use-confirm-dialog.d.ts +31 -0
- package/dist/esm/components/dialog/confirmation-dialog/use-confirm-dialog.d.ts.map +1 -0
- package/dist/esm/components/dialog/confirmation-dialog/use-confirm-dialog.js +49 -0
- package/dist/esm/components/dialog/index.d.ts +4 -0
- package/dist/esm/components/dialog/index.d.ts.map +1 -0
- package/dist/esm/components/dialog/index.js +3 -0
- package/dist/esm/components/dialog/large-dialog/index.d.ts +11 -0
- package/dist/esm/components/dialog/large-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/dialog/large-dialog/index.js +16 -0
- package/dist/esm/components/entity-box/index.d.ts +17 -0
- package/dist/esm/components/entity-box/index.d.ts.map +1 -0
- package/dist/esm/components/entity-box/index.js +31 -0
- package/dist/esm/components/entity-data-table/index.d.ts +17 -0
- package/dist/esm/components/entity-data-table/index.d.ts.map +1 -0
- package/dist/esm/components/entity-data-table/index.js +17 -0
- package/dist/esm/components/form/combo-box-field/index.d.ts +14 -0
- package/dist/esm/components/form/combo-box-field/index.d.ts.map +1 -0
- package/dist/esm/components/form/combo-box-field/index.js +28 -0
- package/dist/esm/components/form/country-field/index.d.ts +5 -0
- package/dist/esm/components/form/country-field/index.d.ts.map +1 -0
- package/dist/esm/components/form/country-field/index.js +7 -0
- package/dist/esm/components/form/date-picker-field/index.d.ts +21 -0
- package/dist/esm/components/form/date-picker-field/index.d.ts.map +1 -0
- package/dist/esm/components/form/date-picker-field/index.js +38 -0
- package/dist/esm/components/form/date-range-field/index.d.ts +21 -0
- package/dist/esm/components/form/date-range-field/index.d.ts.map +1 -0
- package/dist/esm/components/form/date-range-field/index.js +17 -0
- package/dist/esm/components/form/date-time-picker-field/index.d.ts +23 -0
- package/dist/esm/components/form/date-time-picker-field/index.d.ts.map +1 -0
- package/dist/esm/components/form/date-time-picker-field/index.js +73 -0
- package/dist/esm/components/form/file-upload-field/index.d.ts +52 -0
- package/dist/esm/components/form/file-upload-field/index.d.ts.map +1 -0
- package/dist/esm/components/form/file-upload-field/index.js +46 -0
- package/dist/esm/components/form/index.d.ts +16 -0
- package/dist/esm/components/form/index.d.ts.map +1 -0
- package/dist/esm/components/form/index.js +15 -0
- package/dist/esm/components/form/input-field/index.d.ts +26 -0
- package/dist/esm/components/form/input-field/index.d.ts.map +1 -0
- package/dist/esm/components/form/input-field/index.js +10 -0
- package/dist/esm/components/form/otp-field/index.d.ts +18 -0
- package/dist/esm/components/form/otp-field/index.d.ts.map +1 -0
- package/dist/esm/components/form/otp-field/index.js +15 -0
- package/dist/esm/components/form/pagination-limit-field/index.d.ts +9 -0
- package/dist/esm/components/form/pagination-limit-field/index.d.ts.map +1 -0
- package/dist/esm/components/form/pagination-limit-field/index.js +6 -0
- package/dist/esm/components/form/password-field/index.d.ts +14 -0
- package/dist/esm/components/form/password-field/index.d.ts.map +1 -0
- package/dist/esm/components/form/password-field/index.js +10 -0
- package/dist/esm/components/form/radio-group-field/index.d.ts +32 -0
- package/dist/esm/components/form/radio-group-field/index.d.ts.map +1 -0
- package/dist/esm/components/form/radio-group-field/index.js +25 -0
- package/dist/esm/components/form/renderable-label.d.ts +35 -0
- package/dist/esm/components/form/renderable-label.d.ts.map +1 -0
- package/dist/esm/components/form/renderable-label.js +54 -0
- package/dist/esm/components/form/select-field/index.d.ts +20 -0
- package/dist/esm/components/form/select-field/index.d.ts.map +1 -0
- package/dist/esm/components/form/select-field/index.js +16 -0
- package/dist/esm/components/form/state-field/index.d.ts +10 -0
- package/dist/esm/components/form/state-field/index.d.ts.map +1 -0
- package/dist/esm/components/form/state-field/index.js +35 -0
- package/dist/esm/components/form/switch-field/index.d.ts +15 -0
- package/dist/esm/components/form/switch-field/index.d.ts.map +1 -0
- package/dist/esm/components/form/switch-field/index.js +7 -0
- package/dist/esm/components/form/textarea-field/index.d.ts +31 -0
- package/dist/esm/components/form/textarea-field/index.d.ts.map +1 -0
- package/dist/esm/components/form/textarea-field/index.js +19 -0
- package/dist/esm/components/page/index.d.ts +4 -0
- package/dist/esm/components/page/index.d.ts.map +1 -0
- package/dist/esm/components/page/index.js +11 -0
- package/dist/esm/components/page-header/index.d.ts +33 -0
- package/dist/esm/components/page-header/index.d.ts.map +1 -0
- package/dist/esm/components/page-header/index.js +40 -0
- package/dist/esm/components/pagination/index.d.ts +8 -0
- package/dist/esm/components/pagination/index.d.ts.map +1 -0
- package/dist/esm/components/pagination/index.js +6 -0
- package/dist/esm/components/table/id-table-cell.d.ts +7 -0
- package/dist/esm/components/table/id-table-cell.d.ts.map +1 -0
- package/dist/esm/components/table/id-table-cell.js +12 -0
- package/dist/esm/components/table/index.d.ts +3 -0
- package/dist/esm/components/table/index.d.ts.map +1 -0
- package/dist/esm/components/table/index.js +2 -0
- package/dist/esm/components/table/locked-table-actions.d.ts +7 -0
- package/dist/esm/components/table/locked-table-actions.d.ts.map +1 -0
- package/dist/esm/components/table/locked-table-actions.js +7 -0
- package/dist/esm/components/table/name-table-cell.d.ts +6 -0
- package/dist/esm/components/table/name-table-cell.d.ts.map +1 -0
- package/dist/esm/components/table/name-table-cell.js +6 -0
- package/dist/esm/components/ui/accordion/index.d.ts +14 -0
- package/dist/esm/components/ui/accordion/index.d.ts.map +1 -0
- package/dist/esm/components/ui/accordion/index.js +24 -0
- package/dist/esm/components/ui/alert/index.d.ts +15 -0
- package/dist/esm/components/ui/alert/index.d.ts.map +1 -0
- package/dist/esm/components/ui/alert/index.js +38 -0
- package/dist/esm/components/ui/alert-dialog/index.d.ts +15 -0
- package/dist/esm/components/ui/alert-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/ui/alert-dialog/index.js +39 -0
- package/dist/esm/components/ui/autocomplete/index.d.ts +54 -0
- package/dist/esm/components/ui/autocomplete/index.d.ts.map +1 -0
- package/dist/esm/components/ui/autocomplete/index.js +276 -0
- package/dist/esm/components/ui/autosize-textarea/index.d.ts +15 -0
- package/dist/esm/components/ui/autosize-textarea/index.d.ts.map +1 -0
- package/dist/esm/components/ui/autosize-textarea/index.js +51 -0
- package/dist/esm/components/ui/avatar/index.d.ts +7 -0
- package/dist/esm/components/ui/avatar/index.d.ts.map +1 -0
- package/dist/esm/components/ui/avatar/index.js +14 -0
- package/dist/esm/components/ui/badge/index.d.ts +11 -0
- package/dist/esm/components/ui/badge/index.d.ts.map +1 -0
- package/dist/esm/components/ui/badge/index.js +29 -0
- package/dist/esm/components/ui/breadcrumb/index.d.ts +12 -0
- package/dist/esm/components/ui/breadcrumb/index.d.ts.map +1 -0
- package/dist/esm/components/ui/breadcrumb/index.js +27 -0
- package/dist/esm/components/ui/button/index.d.ts +22 -0
- package/dist/esm/components/ui/button/index.d.ts.map +1 -0
- package/dist/esm/components/ui/button/index.js +59 -0
- package/dist/esm/components/ui/calendar/index.d.ts +9 -0
- package/dist/esm/components/ui/calendar/index.d.ts.map +1 -0
- package/dist/esm/components/ui/calendar/index.js +79 -0
- package/dist/esm/components/ui/card/index.d.ts +10 -0
- package/dist/esm/components/ui/card/index.d.ts.map +1 -0
- package/dist/esm/components/ui/card/index.js +24 -0
- package/dist/esm/components/ui/checkbox/index.d.ts +5 -0
- package/dist/esm/components/ui/checkbox/index.d.ts.map +1 -0
- package/dist/esm/components/ui/checkbox/index.js +9 -0
- package/dist/esm/components/ui/collapsible/index.d.ts +6 -0
- package/dist/esm/components/ui/collapsible/index.d.ts.map +1 -0
- package/dist/esm/components/ui/collapsible/index.js +13 -0
- package/dist/esm/components/ui/command/index.d.ts +14 -0
- package/dist/esm/components/ui/command/index.d.ts.map +1 -0
- package/dist/esm/components/ui/command/index.js +51 -0
- package/dist/esm/components/ui/copy-field/index.d.ts +56 -0
- package/dist/esm/components/ui/copy-field/index.d.ts.map +1 -0
- package/dist/esm/components/ui/copy-field/index.js +114 -0
- package/dist/esm/components/ui/dialog/index.d.ts +16 -0
- package/dist/esm/components/ui/dialog/index.d.ts.map +1 -0
- package/dist/esm/components/ui/dialog/index.js +36 -0
- package/dist/esm/components/ui/dropdown-menu/index.d.ts +27 -0
- package/dist/esm/components/ui/dropdown-menu/index.d.ts.map +1 -0
- package/dist/esm/components/ui/dropdown-menu/index.js +57 -0
- package/dist/esm/components/ui/field/index.d.ts +25 -0
- package/dist/esm/components/ui/field/index.d.ts.map +1 -0
- package/dist/esm/components/ui/field/index.js +68 -0
- package/dist/esm/components/ui/file-upload/index.d.ts +94 -0
- package/dist/esm/components/ui/file-upload/index.d.ts.map +1 -0
- package/dist/esm/components/ui/file-upload/index.js +193 -0
- package/dist/esm/components/ui/form.d.ts +39 -0
- package/dist/esm/components/ui/form.d.ts.map +1 -0
- package/dist/esm/components/ui/form.js +67 -0
- package/dist/esm/components/ui/hover-card/index.d.ts +7 -0
- package/dist/esm/components/ui/hover-card/index.d.ts.map +1 -0
- package/dist/esm/components/ui/hover-card/index.js +14 -0
- package/dist/esm/components/ui/icon-button/index.d.ts +13 -0
- package/dist/esm/components/ui/icon-button/index.d.ts.map +1 -0
- package/dist/esm/components/ui/icon-button/index.js +31 -0
- package/dist/esm/components/ui/input/adornment.d.ts +9 -0
- package/dist/esm/components/ui/input/adornment.d.ts.map +1 -0
- package/dist/esm/components/ui/input/adornment.js +17 -0
- package/dist/esm/components/ui/input/index.d.ts +18 -0
- package/dist/esm/components/ui/input/index.d.ts.map +1 -0
- package/dist/esm/components/ui/input/index.js +60 -0
- package/dist/esm/components/ui/label/index.d.ts +7 -0
- package/dist/esm/components/ui/label/index.d.ts.map +1 -0
- package/dist/esm/components/ui/label/index.js +10 -0
- package/dist/esm/components/ui/loading-button/index.d.ts +8 -0
- package/dist/esm/components/ui/loading-button/index.d.ts.map +1 -0
- package/dist/esm/components/ui/loading-button/index.js +7 -0
- package/dist/esm/components/ui/multiple-select/index.d.ts +91 -0
- package/dist/esm/components/ui/multiple-select/index.d.ts.map +1 -0
- package/dist/esm/components/ui/multiple-select/index.js +196 -0
- package/dist/esm/components/ui/otp-input/index.d.ts +13 -0
- package/dist/esm/components/ui/otp-input/index.d.ts.map +1 -0
- package/dist/esm/components/ui/otp-input/index.js +21 -0
- package/dist/esm/components/ui/paper/index.d.ts +4 -0
- package/dist/esm/components/ui/paper/index.d.ts.map +1 -0
- package/dist/esm/components/ui/paper/index.js +5 -0
- package/dist/esm/components/ui/paper-collapsible/index.d.ts +9 -0
- package/dist/esm/components/ui/paper-collapsible/index.d.ts.map +1 -0
- package/dist/esm/components/ui/paper-collapsible/index.js +19 -0
- package/dist/esm/components/ui/popover/index.d.ts +8 -0
- package/dist/esm/components/ui/popover/index.d.ts.map +1 -0
- package/dist/esm/components/ui/popover/index.js +17 -0
- package/dist/esm/components/ui/progress/index.d.ts +8 -0
- package/dist/esm/components/ui/progress/index.d.ts.map +1 -0
- package/dist/esm/components/ui/progress/index.js +8 -0
- package/dist/esm/components/ui/qr-code/index.d.ts +26 -0
- package/dist/esm/components/ui/qr-code/index.d.ts.map +1 -0
- package/dist/esm/components/ui/qr-code/index.js +24 -0
- package/dist/esm/components/ui/radio-group/index.d.ts +6 -0
- package/dist/esm/components/ui/radio-group/index.d.ts.map +1 -0
- package/dist/esm/components/ui/radio-group/index.js +12 -0
- package/dist/esm/components/ui/scroll-area/index.d.ts +6 -0
- package/dist/esm/components/ui/scroll-area/index.d.ts.map +1 -0
- package/dist/esm/components/ui/scroll-area/index.js +13 -0
- package/dist/esm/components/ui/select/index.d.ts +18 -0
- package/dist/esm/components/ui/select/index.d.ts.map +1 -0
- package/dist/esm/components/ui/select/index.js +47 -0
- package/dist/esm/components/ui/separator/index.d.ts +5 -0
- package/dist/esm/components/ui/separator/index.d.ts.map +1 -0
- package/dist/esm/components/ui/separator/index.js +8 -0
- package/dist/esm/components/ui/sheet/index.d.ts +19 -0
- package/dist/esm/components/ui/sheet/index.d.ts.map +1 -0
- package/dist/esm/components/ui/sheet/index.js +59 -0
- package/dist/esm/components/ui/sidebar/index.d.ts +11 -0
- package/dist/esm/components/ui/sidebar/index.d.ts.map +1 -0
- package/dist/esm/components/ui/sidebar/index.js +10 -0
- package/dist/esm/components/ui/sidebar/next-router.cjs +44 -0
- package/dist/esm/components/ui/sidebar/next-router.d.cts +7 -0
- package/dist/esm/components/ui/sidebar/sidebar-back-button.d.ts +3 -0
- package/dist/esm/components/ui/sidebar/sidebar-back-button.d.ts.map +1 -0
- package/dist/esm/components/ui/sidebar/sidebar-back-button.js +5 -0
- package/dist/esm/components/ui/sidebar/sidebar-components.d.ts +23 -0
- package/dist/esm/components/ui/sidebar/sidebar-components.d.ts.map +1 -0
- package/dist/esm/components/ui/sidebar/sidebar-components.js +15 -0
- package/dist/esm/components/ui/sidebar/sidebar-expand-button.d.ts +7 -0
- package/dist/esm/components/ui/sidebar/sidebar-expand-button.d.ts.map +1 -0
- package/dist/esm/components/ui/sidebar/sidebar-expand-button.js +12 -0
- package/dist/esm/components/ui/sidebar/sidebar-item-button.d.ts +12 -0
- package/dist/esm/components/ui/sidebar/sidebar-item-button.d.ts.map +1 -0
- package/dist/esm/components/ui/sidebar/sidebar-item-button.js +18 -0
- package/dist/esm/components/ui/sidebar/sidebar-item-collapsible.d.ts +12 -0
- package/dist/esm/components/ui/sidebar/sidebar-item-collapsible.d.ts.map +1 -0
- package/dist/esm/components/ui/sidebar/sidebar-item-collapsible.js +44 -0
- package/dist/esm/components/ui/sidebar/sidebar-item-icon-button.d.ts +12 -0
- package/dist/esm/components/ui/sidebar/sidebar-item-icon-button.d.ts.map +1 -0
- package/dist/esm/components/ui/sidebar/sidebar-item-icon-button.js +14 -0
- package/dist/esm/components/ui/sidebar/sidebar-item.d.ts +13 -0
- package/dist/esm/components/ui/sidebar/sidebar-item.d.ts.map +1 -0
- package/dist/esm/components/ui/sidebar/sidebar-item.js +16 -0
- package/dist/esm/components/ui/sidebar/sidebar-provider.d.ts +12 -0
- package/dist/esm/components/ui/sidebar/sidebar-provider.d.ts.map +1 -0
- package/dist/esm/components/ui/sidebar/sidebar-provider.js +51 -0
- package/dist/esm/components/ui/sidebar/sidebar-root.d.ts +3 -0
- package/dist/esm/components/ui/sidebar/sidebar-root.d.ts.map +1 -0
- package/dist/esm/components/ui/sidebar/sidebar-root.js +20 -0
- package/dist/esm/components/ui/sidebar/sidebar-router.d.ts +82 -0
- package/dist/esm/components/ui/sidebar/sidebar-router.d.ts.map +1 -0
- package/dist/esm/components/ui/sidebar/sidebar-router.js +89 -0
- package/dist/esm/components/ui/skeleton/index.d.ts +3 -0
- package/dist/esm/components/ui/skeleton/index.d.ts.map +1 -0
- package/dist/esm/components/ui/skeleton/index.js +6 -0
- package/dist/esm/components/ui/stepper/index.d.ts +18 -0
- package/dist/esm/components/ui/stepper/index.d.ts.map +1 -0
- package/dist/esm/components/ui/stepper/index.js +20 -0
- package/dist/esm/components/ui/switch/index.d.ts +5 -0
- package/dist/esm/components/ui/switch/index.d.ts.map +1 -0
- package/dist/esm/components/ui/switch/index.js +8 -0
- package/dist/esm/components/ui/table/index.d.ts +21 -0
- package/dist/esm/components/ui/table/index.d.ts.map +1 -0
- package/dist/esm/components/ui/table/index.js +44 -0
- package/dist/esm/components/ui/tabs/index.d.ts +8 -0
- package/dist/esm/components/ui/tabs/index.d.ts.map +1 -0
- package/dist/esm/components/ui/tabs/index.js +17 -0
- package/dist/esm/components/ui/textarea/index.d.ts +4 -0
- package/dist/esm/components/ui/textarea/index.d.ts.map +1 -0
- package/dist/esm/components/ui/textarea/index.js +6 -0
- package/dist/esm/components/ui/time-picker/index.d.ts +18 -0
- package/dist/esm/components/ui/time-picker/index.d.ts.map +1 -0
- package/dist/esm/components/ui/time-picker/index.js +49 -0
- package/dist/esm/components/ui/toast/index.d.ts +18 -0
- package/dist/esm/components/ui/toast/index.d.ts.map +1 -0
- package/dist/esm/components/ui/toast/index.js +2 -0
- package/dist/esm/components/ui/toast/toaster.d.ts +6 -0
- package/dist/esm/components/ui/toast/toaster.d.ts.map +1 -0
- package/dist/esm/components/ui/toast/toaster.js +8 -0
- package/dist/esm/components/ui/toggle-group/index.d.ts +18 -0
- package/dist/esm/components/ui/toggle-group/index.d.ts.map +1 -0
- package/dist/esm/components/ui/toggle-group/index.js +51 -0
- package/dist/esm/components/ui/tooltip/index.d.ts +11 -0
- package/dist/esm/components/ui/tooltip/index.d.ts.map +1 -0
- package/dist/esm/components/ui/tooltip/index.js +28 -0
- package/dist/esm/domain/blotter/index.d.ts +40 -0
- package/dist/esm/domain/blotter/index.d.ts.map +1 -0
- package/dist/esm/domain/blotter/index.js +12 -0
- package/dist/esm/domain/delinquency-aging/aging-buckets.d.ts +37 -0
- package/dist/esm/domain/delinquency-aging/aging-buckets.d.ts.map +1 -0
- package/dist/esm/domain/delinquency-aging/aging-buckets.js +92 -0
- package/dist/esm/domain/delinquency-aging/index.d.ts +52 -0
- package/dist/esm/domain/delinquency-aging/index.d.ts.map +1 -0
- package/dist/esm/domain/delinquency-aging/index.js +147 -0
- package/dist/esm/domain/figure/index.d.ts +30 -0
- package/dist/esm/domain/figure/index.d.ts.map +1 -0
- package/dist/esm/domain/figure/index.js +14 -0
- package/dist/esm/domain/format.d.ts +57 -0
- package/dist/esm/domain/format.d.ts.map +1 -0
- package/dist/esm/domain/format.js +94 -0
- package/dist/esm/domain/index.d.ts +22 -0
- package/dist/esm/domain/index.d.ts.map +1 -0
- package/dist/esm/domain/index.js +19 -0
- package/dist/esm/domain/key-id/index.d.ts +31 -0
- package/dist/esm/domain/key-id/index.d.ts.map +1 -0
- package/dist/esm/domain/key-id/index.js +162 -0
- package/dist/esm/domain/ledger-sheet/index.d.ts +45 -0
- package/dist/esm/domain/ledger-sheet/index.d.ts.map +1 -0
- package/dist/esm/domain/ledger-sheet/index.js +24 -0
- package/dist/esm/domain/money-diff.d.ts +23 -0
- package/dist/esm/domain/money-diff.d.ts.map +1 -0
- package/dist/esm/domain/money-diff.js +45 -0
- package/dist/esm/domain/money-math.d.ts +32 -0
- package/dist/esm/domain/money-math.d.ts.map +1 -0
- package/dist/esm/domain/money-math.js +98 -0
- package/dist/esm/domain/money-text/index.d.ts +37 -0
- package/dist/esm/domain/money-text/index.d.ts.map +1 -0
- package/dist/esm/domain/money-text/index.js +108 -0
- package/dist/esm/domain/section-label/index.d.ts +21 -0
- package/dist/esm/domain/section-label/index.d.ts.map +1 -0
- package/dist/esm/domain/section-label/index.js +6 -0
- package/dist/esm/domain/status-rail/index.d.ts +40 -0
- package/dist/esm/domain/status-rail/index.d.ts.map +1 -0
- package/dist/esm/domain/status-rail/index.js +59 -0
- package/dist/esm/domain/threshold-gauge/index.d.ts +84 -0
- package/dist/esm/domain/threshold-gauge/index.d.ts.map +1 -0
- package/dist/esm/domain/threshold-gauge/index.js +153 -0
- package/dist/esm/enterprise/alert-banner/index.d.ts +30 -0
- package/dist/esm/enterprise/alert-banner/index.d.ts.map +1 -0
- package/dist/esm/enterprise/alert-banner/index.js +21 -0
- package/dist/esm/enterprise/app-shell/index.d.ts +61 -0
- package/dist/esm/enterprise/app-shell/index.d.ts.map +1 -0
- package/dist/esm/enterprise/app-shell/index.js +51 -0
- package/dist/esm/enterprise/cursor-pager/index.d.ts +21 -0
- package/dist/esm/enterprise/cursor-pager/index.d.ts.map +1 -0
- package/dist/esm/enterprise/cursor-pager/index.js +23 -0
- package/dist/esm/enterprise/data-table/index.d.ts +88 -0
- package/dist/esm/enterprise/data-table/index.d.ts.map +1 -0
- package/dist/esm/enterprise/data-table/index.js +242 -0
- package/dist/esm/enterprise/date-range-picker/index.d.ts +37 -0
- package/dist/esm/enterprise/date-range-picker/index.d.ts.map +1 -0
- package/dist/esm/enterprise/date-range-picker/index.js +71 -0
- package/dist/esm/enterprise/detail-panel/index.d.ts +54 -0
- package/dist/esm/enterprise/detail-panel/index.d.ts.map +1 -0
- package/dist/esm/enterprise/detail-panel/index.js +17 -0
- package/dist/esm/enterprise/empty-state/index.d.ts +32 -0
- package/dist/esm/enterprise/empty-state/index.d.ts.map +1 -0
- package/dist/esm/enterprise/empty-state/index.js +10 -0
- package/dist/esm/enterprise/index.d.ts +26 -0
- package/dist/esm/enterprise/index.d.ts.map +1 -0
- package/dist/esm/enterprise/index.js +22 -0
- package/dist/esm/enterprise/number-input/index.d.ts +55 -0
- package/dist/esm/enterprise/number-input/index.d.ts.map +1 -0
- package/dist/esm/enterprise/number-input/index.js +200 -0
- package/dist/esm/enterprise/search-input/index.d.ts +32 -0
- package/dist/esm/enterprise/search-input/index.d.ts.map +1 -0
- package/dist/esm/enterprise/search-input/index.js +78 -0
- package/dist/esm/enterprise/stat-card/index.d.ts +43 -0
- package/dist/esm/enterprise/stat-card/index.d.ts.map +1 -0
- package/dist/esm/enterprise/stat-card/index.js +64 -0
- package/dist/esm/enterprise/status-badge/index.d.ts +31 -0
- package/dist/esm/enterprise/status-badge/index.d.ts.map +1 -0
- package/dist/esm/enterprise/status-badge/index.js +116 -0
- package/dist/esm/enterprise/use-is-mobile.d.ts +11 -0
- package/dist/esm/enterprise/use-is-mobile.d.ts.map +1 -0
- package/dist/esm/enterprise/use-is-mobile.js +23 -0
- package/dist/esm/enterprise/virtualized-table/index.d.ts +26 -0
- package/dist/esm/enterprise/virtualized-table/index.d.ts.map +1 -0
- package/dist/esm/enterprise/virtualized-table/index.js +111 -0
- package/dist/esm/hooks/use-click-away.d.ts +9 -0
- package/dist/esm/hooks/use-click-away.d.ts.map +1 -0
- package/dist/esm/hooks/use-click-away.js +22 -0
- package/dist/esm/hooks/use-pagination.d.ts +13 -0
- package/dist/esm/hooks/use-pagination.d.ts.map +1 -0
- package/dist/esm/hooks/use-pagination.js +38 -0
- package/dist/esm/hooks/use-stepper.d.ts +11 -0
- package/dist/esm/hooks/use-stepper.d.ts.map +1 -0
- package/dist/esm/hooks/use-stepper.js +22 -0
- package/dist/esm/hooks/use-time.d.ts +6 -0
- package/dist/esm/hooks/use-time.d.ts.map +1 -0
- package/dist/esm/hooks/use-time.js +13 -0
- package/dist/esm/hooks/use-toast.d.ts +31 -0
- package/dist/esm/hooks/use-toast.d.ts.map +1 -0
- package/dist/esm/hooks/use-toast.js +63 -0
- package/dist/esm/index.d.ts +69 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +74 -0
- package/dist/esm/lib/storage/get-storage-object.d.ts +2 -0
- package/dist/esm/lib/storage/get-storage-object.d.ts.map +1 -0
- package/dist/esm/lib/storage/get-storage-object.js +17 -0
- package/dist/esm/lib/storage/get-storage.d.ts +2 -0
- package/dist/esm/lib/storage/get-storage.d.ts.map +1 -0
- package/dist/esm/lib/storage/get-storage.js +14 -0
- package/dist/esm/lib/storage/index.d.ts +3 -0
- package/dist/esm/lib/storage/index.d.ts.map +1 -0
- package/dist/esm/lib/storage/index.js +2 -0
- package/dist/esm/lib/typography.d.ts +17 -0
- package/dist/esm/lib/typography.d.ts.map +1 -0
- package/dist/esm/lib/typography.js +16 -0
- package/dist/esm/lib/utils.d.ts +3 -0
- package/dist/esm/lib/utils.d.ts.map +1 -0
- package/dist/esm/lib/utils.js +5 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/public/countries.json +21210 -0
- package/dist/esm/theme/get-theme-script.d.ts +3 -0
- package/dist/esm/theme/get-theme-script.d.ts.map +1 -0
- package/dist/esm/theme/get-theme-script.js +41 -0
- package/dist/esm/theme/index.d.ts +6 -0
- package/dist/esm/theme/index.d.ts.map +1 -0
- package/dist/esm/theme/index.js +4 -0
- package/dist/esm/theme/mode-toggle.d.ts +25 -0
- package/dist/esm/theme/mode-toggle.d.ts.map +1 -0
- package/dist/esm/theme/mode-toggle.js +27 -0
- package/dist/esm/theme/theme-provider.d.ts +38 -0
- package/dist/esm/theme/theme-provider.d.ts.map +1 -0
- package/dist/esm/theme/theme-provider.js +98 -0
- package/dist/esm/toast/helpers.d.ts +16 -0
- package/dist/esm/toast/helpers.d.ts.map +1 -0
- package/dist/esm/toast/helpers.js +29 -0
- package/dist/esm/toast/index.d.ts +3 -0
- package/dist/esm/toast/index.d.ts.map +1 -0
- package/dist/esm/toast/index.js +4 -0
- package/dist/esm/types/metadata-type.d.ts +2 -0
- package/dist/esm/types/metadata-type.d.ts.map +1 -0
- package/dist/esm/types/metadata-type.js +1 -0
- package/dist/esm/utils/countries.cjs +17 -0
- package/dist/esm/utils/countries.d.cts +14 -0
- package/dist/esm/utils/country-utils.d.ts +17 -0
- package/dist/esm/utils/country-utils.d.ts.map +1 -0
- package/dist/esm/utils/country-utils.js +18 -0
- package/dist/esm/utils/currency-codes.d.ts +5 -0
- package/dist/esm/utils/currency-codes.d.ts.map +1 -0
- package/dist/esm/utils/currency-codes.js +181 -0
- package/dist/globals.css +66 -0
- package/dist/hooks/use-toast.d.ts +1 -1
- package/dist/hooks/use-toast.d.ts.map +1 -1
- package/dist/hooks/use-toast.js +4 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -1
- package/dist/lib/storage/get-storage-object.d.ts.map +1 -1
- package/dist/lib/storage/get-storage-object.js +6 -2
- package/dist/lib/typography.d.ts +17 -0
- package/dist/lib/typography.d.ts.map +1 -0
- package/dist/lib/typography.js +19 -0
- package/dist/public/countries.json +21200 -21200
- package/dist/theme/get-theme-script.d.ts +3 -0
- package/dist/theme/get-theme-script.d.ts.map +1 -0
- package/dist/theme/get-theme-script.js +44 -0
- package/dist/theme/index.d.ts +6 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +11 -0
- package/dist/theme/mode-toggle.d.ts +25 -0
- package/dist/theme/mode-toggle.d.ts.map +1 -0
- package/dist/theme/mode-toggle.js +30 -0
- package/dist/theme/theme-provider.d.ts +38 -0
- package/dist/theme/theme-provider.d.ts.map +1 -0
- package/dist/theme/theme-provider.js +135 -0
- package/dist/toast/helpers.d.ts +16 -0
- package/dist/toast/helpers.d.ts.map +1 -0
- package/dist/toast/helpers.js +34 -0
- package/dist/toast/index.d.ts +3 -0
- package/dist/toast/index.d.ts.map +1 -0
- package/dist/toast/index.js +10 -0
- package/dist/utils/countries.cjs +17 -0
- package/dist/utils/countries.d.cts +14 -0
- package/dist/utils/country-utils.js +2 -2
- package/package.json +54 -18
- package/dist/components/ui/button/button.test.d.ts +0 -2
- package/dist/components/ui/button/button.test.d.ts.map +0 -1
- package/dist/components/ui/button/button.test.js +0 -65
- package/dist/components/ui/copy-field/copy-field.test.d.ts +0 -2
- package/dist/components/ui/copy-field/copy-field.test.d.ts.map +0 -1
- package/dist/components/ui/copy-field/copy-field.test.js +0 -268
- package/dist/components/ui/input/input.test.d.ts +0 -2
- package/dist/components/ui/input/input.test.d.ts.map +0 -1
- package/dist/components/ui/input/input.test.js +0 -52
- package/dist/components/ui/label/label.stories.d.ts +0 -5
- package/dist/components/ui/label/label.stories.d.ts.map +0 -1
- package/dist/components/ui/label/label.stories.js +0 -24
- package/dist/components/ui/qr-code/qr-code.test.d.ts +0 -2
- package/dist/components/ui/qr-code/qr-code.test.d.ts.map +0 -1
- package/dist/components/ui/qr-code/qr-code.test.js +0 -60
- package/dist/components/ui/sidebar/sidebar-provider.test.d.ts +0 -2
- package/dist/components/ui/sidebar/sidebar-provider.test.d.ts.map +0 -1
- package/dist/components/ui/sidebar/sidebar-provider.test.js +0 -170
- package/dist/hooks/use-click-away.test.d.ts +0 -2
- package/dist/hooks/use-click-away.test.d.ts.map +0 -1
- package/dist/hooks/use-click-away.test.js +0 -39
- package/dist/hooks/use-stepper.test.d.ts +0 -2
- package/dist/hooks/use-stepper.test.d.ts.map +0 -1
- package/dist/hooks/use-stepper.test.js +0 -45
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.DataTable = DataTable;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
/**
|
|
7
|
+
* DataTable — a typed, generic wrapper over TanStack Table v8.
|
|
8
|
+
*
|
|
9
|
+
* Pairs with CursorPager (server-driven pagination): pass the page's `items`
|
|
10
|
+
* as `data`; this component does no client-side paging or sorting by default.
|
|
11
|
+
* It owns the three render states the list screens need:
|
|
12
|
+
* - loading → header + skeleton rows
|
|
13
|
+
* - empty → EmptyState (data resolved, zero rows)
|
|
14
|
+
* - data → semantic table rows; cells own any links/actions
|
|
15
|
+
*
|
|
16
|
+
* Columns are standard TanStack `ColumnDef<T>`; cells receive the row's
|
|
17
|
+
* `original` value, so screens compose money / date / status cells directly in
|
|
18
|
+
* their column `cell` renderers.
|
|
19
|
+
*
|
|
20
|
+
* Row selection is opt-in and controlled: pass `enableRowSelection` plus
|
|
21
|
+
* `rowSelection` / `onRowSelectionChange` (TanStack-native types). When
|
|
22
|
+
* enabled, a checkbox column is prepended — header checkbox selects the
|
|
23
|
+
* page (indeterminate for partial), checkbox-cell clicks never bubble to
|
|
24
|
+
* row-level handlers. With the flag off (the default), nothing changes.
|
|
25
|
+
*
|
|
26
|
+
* Keyboard navigation is opt-in via `onRowActivate`: when present, rows get
|
|
27
|
+
* a roving tabindex (Tab enters the table once at the anchor row; the next
|
|
28
|
+
* Tab moves to the row's first tabbable child if it has one, otherwise out
|
|
29
|
+
* of the table — no trap), ArrowUp/Down move row focus clamped to the page,
|
|
30
|
+
* Home/End jump to the page edges, Enter activates the row through the
|
|
31
|
+
* callback, and Space toggles selection when `enableRowSelection` is on.
|
|
32
|
+
* Cmd/Ctrl+Enter opens the row's destination in a new tab when the optional
|
|
33
|
+
* `rowHref` builder is provided (window.open with noopener,noreferrer);
|
|
34
|
+
* without it, modified Enter stays a deliberate no-op — never a same-tab
|
|
35
|
+
* activation. Keydown events originating from interactive children (links,
|
|
36
|
+
* buttons, checkboxes, form fields) are never hijacked.
|
|
37
|
+
*/
|
|
38
|
+
const react_1 = require("react");
|
|
39
|
+
const react_table_1 = require("@tanstack/react-table");
|
|
40
|
+
const table_1 = require("../../components/ui/table");
|
|
41
|
+
const skeleton_1 = require("../../components/ui/skeleton");
|
|
42
|
+
const utils_1 = require("../../lib/utils");
|
|
43
|
+
const empty_state_1 = require("../empty-state");
|
|
44
|
+
const SELECTION_COLUMN_ID = '__select__';
|
|
45
|
+
const CHECKBOX_CLASS = 'accent-primary block size-4';
|
|
46
|
+
/** Right-aligned mono treatment for `meta: { numeric: true }` columns. */
|
|
47
|
+
const NUMERIC_CELL_CLASS = 'text-right font-mono tabular-nums';
|
|
48
|
+
/**
|
|
49
|
+
* Keydown events whose target sits inside one of these are never hijacked
|
|
50
|
+
* by the row-level keyboard handler — Space in a checkbox and Enter on an
|
|
51
|
+
* in-cell link keep their native behavior.
|
|
52
|
+
*/
|
|
53
|
+
const INTERACTIVE_CHILD_SELECTOR = 'a, button, input, select, textarea, [role="checkbox"]';
|
|
54
|
+
/**
|
|
55
|
+
* Inset focus outline for keyboard-navigable rows. Outline, not Tailwind
|
|
56
|
+
* ring: ring is box-shadow, which renders unreliably on display: table-row.
|
|
57
|
+
* `focus-visible`-gated, so mouse users (and visual baselines) see nothing.
|
|
58
|
+
*/
|
|
59
|
+
const ROW_FOCUS_CLASS = 'focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-ring';
|
|
60
|
+
function stopPropagation(event) {
|
|
61
|
+
event.stopPropagation();
|
|
62
|
+
}
|
|
63
|
+
function SelectAllCheckbox({ table }) {
|
|
64
|
+
const allSelected = table.getIsAllPageRowsSelected();
|
|
65
|
+
const someSelected = table.getIsSomePageRowsSelected();
|
|
66
|
+
return ((0, jsx_runtime_1.jsx)("input", { type: "checkbox", className: CHECKBOX_CLASS, "aria-label": "Select all rows on this page", checked: allSelected, ref: (el) => {
|
|
67
|
+
if (el)
|
|
68
|
+
el.indeterminate = !allSelected && someSelected;
|
|
69
|
+
}, onChange: table.getToggleAllPageRowsSelectedHandler() }));
|
|
70
|
+
}
|
|
71
|
+
function RowSelectionCheckbox({ row, getLabel }) {
|
|
72
|
+
return ((0, jsx_runtime_1.jsx)("input", { type: "checkbox", className: CHECKBOX_CLASS, "aria-label": getLabel ? getLabel(row.original) : `Select row ${row.id}`, checked: row.getIsSelected(), disabled: !row.getCanSelect(), onChange: row.getToggleSelectedHandler() }));
|
|
73
|
+
}
|
|
74
|
+
function createSelectionColumn(getLabel) {
|
|
75
|
+
return {
|
|
76
|
+
id: SELECTION_COLUMN_ID,
|
|
77
|
+
header: ({ table }) => (0, jsx_runtime_1.jsx)(SelectAllCheckbox, { table: table }),
|
|
78
|
+
cell: ({ row }) => (0, jsx_runtime_1.jsx)(RowSelectionCheckbox, { row: row, getLabel: getLabel })
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function DataTable({ columns, data, loading = false, skeletonRows = 8, loadingLabel = 'Loading table rows', empty, getRowId, flush = false, density = 'comfortable', enableRowSelection = false, rowSelection, onRowSelectionChange, getRowSelectionLabel, onRowActivate, rowHref, className }) {
|
|
82
|
+
const tableColumns = (0, react_1.useMemo)(() => enableRowSelection
|
|
83
|
+
? [createSelectionColumn(getRowSelectionLabel), ...columns]
|
|
84
|
+
: columns, [columns, enableRowSelection, getRowSelectionLabel]);
|
|
85
|
+
const table = (0, react_table_1.useReactTable)({
|
|
86
|
+
data,
|
|
87
|
+
columns: tableColumns,
|
|
88
|
+
getCoreRowModel: (0, react_table_1.getCoreRowModel)(),
|
|
89
|
+
getRowId,
|
|
90
|
+
enableRowSelection,
|
|
91
|
+
// Controlled-only, exactly as sindarian-x shipped it: this component holds
|
|
92
|
+
// no selection state. The `?? {}` is the JS-consumer safety net; the prop
|
|
93
|
+
// types make the TS path require the controlled pair whenever selection is
|
|
94
|
+
// enabled, so the dead-checkbox configuration is now unrepresentable.
|
|
95
|
+
onRowSelectionChange: enableRowSelection ? onRowSelectionChange : undefined,
|
|
96
|
+
state: {
|
|
97
|
+
rowSelection: enableRowSelection ? (rowSelection ?? {}) : undefined
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
const colCount = tableColumns.length;
|
|
101
|
+
const dataRows = table.getRowModel().rows;
|
|
102
|
+
const rowCount = dataRows.length;
|
|
103
|
+
// Compact density overrides only THIS table's cell padding (tailwind-merge
|
|
104
|
+
// lets the later utility win over TableHead/TableCell's defaults).
|
|
105
|
+
// Comfortable passes nothing, so the default render is unchanged.
|
|
106
|
+
const compact = density === 'compact';
|
|
107
|
+
const headDensityClass = compact ? 'h-8 px-2' : undefined;
|
|
108
|
+
const cellDensityClass = compact ? 'px-2 py-1.5' : undefined;
|
|
109
|
+
// --- Roving row focus (active only when onRowActivate is provided) ---
|
|
110
|
+
const keyboardNav = onRowActivate !== undefined;
|
|
111
|
+
const [focusedIndex, setFocusedIndex] = (0, react_1.useState)(0);
|
|
112
|
+
// ponytail: rowRefs is keyed by render index, while rows are id-keyed
|
|
113
|
+
// (`key={row.id}`). This holds only because DataTable is server-driven with
|
|
114
|
+
// no in-place client reorder, and React 19's per-render ref cleanup defuses
|
|
115
|
+
// stale entries. If client-side reorder is ever added, re-key this Map by
|
|
116
|
+
// row.id to keep focus targets aligned with their rows.
|
|
117
|
+
const rowRefs = (0, react_1.useRef)(new Map());
|
|
118
|
+
const focusWithinRef = (0, react_1.useRef)(false);
|
|
119
|
+
const containerRef = (0, react_1.useRef)(null);
|
|
120
|
+
// Render-time clamp: exactly one anchor row (tabIndex=0) even on the
|
|
121
|
+
// frame where data shrank but state has not caught up yet.
|
|
122
|
+
const anchorIndex = rowCount > 0 ? Math.min(focusedIndex, rowCount - 1) : 0;
|
|
123
|
+
// Data changes clamp the anchor but never steal focus: DOM focus moves
|
|
124
|
+
// only if focus was already inside the table and the focused row vanished
|
|
125
|
+
// (e.g. page flip removed it). Never autofocus on mount.
|
|
126
|
+
(0, react_1.useEffect)(() => {
|
|
127
|
+
if (!keyboardNav)
|
|
128
|
+
return;
|
|
129
|
+
// Clamp the focus target ONCE and drive both the state setter and the
|
|
130
|
+
// .focus() call from the same value — reading `focusedIndex` separately
|
|
131
|
+
// after the functional update would use the stale pre-clamp closure value
|
|
132
|
+
// and try to focus an unmounted row, dropping focus to <body>.
|
|
133
|
+
const max = Math.max(rowCount - 1, 0);
|
|
134
|
+
const target = Math.min(focusedIndex, max);
|
|
135
|
+
setFocusedIndex(target);
|
|
136
|
+
if (!focusWithinRef.current)
|
|
137
|
+
return;
|
|
138
|
+
const active = document.activeElement;
|
|
139
|
+
if (active && containerRef.current?.contains(active))
|
|
140
|
+
return;
|
|
141
|
+
// The target row may have unmounted on a data-shrink frame; walk down to
|
|
142
|
+
// the nearest existing lower index, falling back to the container, so
|
|
143
|
+
// focus never escapes the table.
|
|
144
|
+
for (let i = target; i >= 0; i--) {
|
|
145
|
+
const rowEl = rowRefs.current.get(i);
|
|
146
|
+
if (rowEl) {
|
|
147
|
+
rowEl.focus();
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
containerRef.current?.focus();
|
|
152
|
+
}, [keyboardNav, rowCount, focusedIndex, data]);
|
|
153
|
+
const focusRow = (index) => {
|
|
154
|
+
rowRefs.current.get(index)?.focus();
|
|
155
|
+
};
|
|
156
|
+
const handleRowBlur = (event) => {
|
|
157
|
+
const next = event.relatedTarget;
|
|
158
|
+
if (!next || !containerRef.current?.contains(next)) {
|
|
159
|
+
focusWithinRef.current = false;
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
const handleRowKeyDown = (event, row, rowIndex) => {
|
|
163
|
+
const target = event.target;
|
|
164
|
+
if (target !== event.currentTarget &&
|
|
165
|
+
target.closest(INTERACTIVE_CHILD_SELECTOR) !== null) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
switch (event.key) {
|
|
169
|
+
case 'ArrowDown':
|
|
170
|
+
event.preventDefault();
|
|
171
|
+
focusRow(Math.min(rowIndex + 1, rowCount - 1));
|
|
172
|
+
break;
|
|
173
|
+
case 'ArrowUp':
|
|
174
|
+
event.preventDefault();
|
|
175
|
+
focusRow(Math.max(rowIndex - 1, 0));
|
|
176
|
+
break;
|
|
177
|
+
case 'Home':
|
|
178
|
+
event.preventDefault();
|
|
179
|
+
focusRow(0);
|
|
180
|
+
break;
|
|
181
|
+
case 'End':
|
|
182
|
+
event.preventDefault();
|
|
183
|
+
focusRow(rowCount - 1);
|
|
184
|
+
break;
|
|
185
|
+
case 'Enter':
|
|
186
|
+
// Modified Enter (Cmd/Ctrl) means "open elsewhere" — a same-tab
|
|
187
|
+
// activation would destroy the user's context. With rowHref it
|
|
188
|
+
// opens the row's destination in a new tab; without it (sheet-based
|
|
189
|
+
// tables), it stays a deliberate no-op.
|
|
190
|
+
if (event.metaKey || event.ctrlKey) {
|
|
191
|
+
if (rowHref) {
|
|
192
|
+
window.open(rowHref(row.original), '_blank', 'noopener,noreferrer');
|
|
193
|
+
}
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
onRowActivate?.(row.original);
|
|
197
|
+
break;
|
|
198
|
+
case ' ':
|
|
199
|
+
if (enableRowSelection && row.getCanSelect()) {
|
|
200
|
+
event.preventDefault();
|
|
201
|
+
row.getToggleSelectedHandler()(event);
|
|
202
|
+
}
|
|
203
|
+
break;
|
|
204
|
+
default:
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
return ((0, jsx_runtime_1.jsxs)("div", { ref: containerRef,
|
|
209
|
+
// tabIndex={-1} (keyboard-nav only) makes the container programmatically
|
|
210
|
+
// focusable so the focus-restoration fallback can land here when every
|
|
211
|
+
// row has unmounted, keeping focus inside the table rather than on <body>.
|
|
212
|
+
tabIndex: keyboardNav ? -1 : undefined, className: (0, utils_1.cn)(!flush &&
|
|
213
|
+
'border-border bg-card text-card-foreground rounded-lg border', className), children: [(0, jsx_runtime_1.jsx)("span", { className: "sr-only", role: "status", children: loading
|
|
214
|
+
? loadingLabel
|
|
215
|
+
: rowCount === 0
|
|
216
|
+
? 'No rows'
|
|
217
|
+
: `${rowCount} rows` }), (0, jsx_runtime_1.jsxs)(table_1.Table, { "aria-busy": loading ? 'true' : undefined, children: [(0, jsx_runtime_1.jsx)(table_1.TableHeader, { children: table.getHeaderGroups().map((headerGroup) => ((0, jsx_runtime_1.jsx)(table_1.TableRow, { className: "hover:bg-transparent", children: headerGroup.headers.map((header) => {
|
|
218
|
+
const numeric = header.column.columnDef.meta?.numeric;
|
|
219
|
+
return ((0, jsx_runtime_1.jsx)(table_1.TableHead, { align: numeric ? 'right' : undefined, className: (0, utils_1.cn)('tracking-wide uppercase', headDensityClass, header.column.id === SELECTION_COLUMN_ID && 'w-10'), children: header.isPlaceholder
|
|
220
|
+
? null
|
|
221
|
+
: (0, react_table_1.flexRender)(header.column.columnDef.header, header.getContext()) }, header.id));
|
|
222
|
+
}) }, headerGroup.id))) }), (0, jsx_runtime_1.jsx)(table_1.TableBody, { children: loading ? (Array.from({ length: skeletonRows }).map((_, rowIndex) => ((0, jsx_runtime_1.jsx)(table_1.TableRow, { className: "hover:bg-transparent", children: Array.from({ length: colCount }).map((__, cellIndex) => ((0, jsx_runtime_1.jsx)(table_1.TableCell, { className: cellDensityClass, children: (0, jsx_runtime_1.jsx)(skeleton_1.Skeleton, { className: "h-4 w-full max-w-[160px]" }) }, `skeleton-${rowIndex}-${cellIndex}`))) }, `skeleton-${rowIndex}`)))) : rowCount === 0 ? ((0, jsx_runtime_1.jsx)(table_1.TableRow, { className: "hover:bg-transparent", children: (0, jsx_runtime_1.jsx)(table_1.TableCell, { colSpan: colCount, className: "p-0", children: (0, jsx_runtime_1.jsx)(empty_state_1.EmptyState, { title: empty?.title ?? 'Nothing here yet', description: empty?.description, icon: empty?.icon, action: empty?.action,
|
|
223
|
+
// The DataTable renders the ledger register grammar, so its
|
|
224
|
+
// empty surface reads as a ruled page rather than a centered
|
|
225
|
+
// void. Callers can still override via `empty.ruled = false`.
|
|
226
|
+
ruled: empty?.ruled ?? true }) }) })) : (dataRows.map((row, rowIndex) => ((0, jsx_runtime_1.jsx)(table_1.TableRow, { ref: keyboardNav
|
|
227
|
+
? (el) => {
|
|
228
|
+
if (el)
|
|
229
|
+
rowRefs.current.set(rowIndex, el);
|
|
230
|
+
else
|
|
231
|
+
rowRefs.current.delete(rowIndex);
|
|
232
|
+
}
|
|
233
|
+
: undefined, tabIndex: keyboardNav ? (rowIndex === anchorIndex ? 0 : -1) : undefined, onFocus: keyboardNav
|
|
234
|
+
? () => {
|
|
235
|
+
focusWithinRef.current = true;
|
|
236
|
+
setFocusedIndex(rowIndex);
|
|
237
|
+
}
|
|
238
|
+
: undefined, onBlur: keyboardNav ? handleRowBlur : undefined, onKeyDown: keyboardNav
|
|
239
|
+
? (event) => handleRowKeyDown(event, row, rowIndex)
|
|
240
|
+
: undefined, className: keyboardNav ? ROW_FOCUS_CLASS : undefined, "data-state": enableRowSelection && row.getIsSelected()
|
|
241
|
+
? 'selected'
|
|
242
|
+
: undefined, children: row.getVisibleCells().map((cell) => ((0, jsx_runtime_1.jsx)(table_1.TableCell, { className: (0, utils_1.cn)(cell.column.columnDef.meta?.numeric && NUMERIC_CELL_CLASS, cellDensityClass, cell.column.id === SELECTION_COLUMN_ID && 'w-10'), onClick: cell.column.id === SELECTION_COLUMN_ID
|
|
243
|
+
? stopPropagation
|
|
244
|
+
: undefined, children: (0, react_table_1.flexRender)(cell.column.columnDef.cell, cell.getContext()) }, cell.id))) }, row.id)))) })] })] }));
|
|
245
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ComponentProps, ReactNode } from 'react';
|
|
2
|
+
import { Calendar } from '../../components/ui/calendar';
|
|
3
|
+
/**
|
|
4
|
+
* The calendar's locale type, taken straight off the Calendar props so the
|
|
5
|
+
* public signature stays the react-day-picker/date-fns `Locale` without this
|
|
6
|
+
* package taking a direct date-fns dependency.
|
|
7
|
+
*/
|
|
8
|
+
type CalendarLocale = ComponentProps<typeof Calendar>['locale'];
|
|
9
|
+
export type DateRangeValue = {
|
|
10
|
+
/** YYYY-MM-DD or '' when unset. */
|
|
11
|
+
from: string;
|
|
12
|
+
/** YYYY-MM-DD or '' when unset. */
|
|
13
|
+
to: string;
|
|
14
|
+
};
|
|
15
|
+
export type DateRangePickerProps = {
|
|
16
|
+
value: DateRangeValue;
|
|
17
|
+
onValueChange: (next: DateRangeValue) => void;
|
|
18
|
+
/** id (and de-facto testid) of the "from" trigger; the label points at it. */
|
|
19
|
+
fromId: string;
|
|
20
|
+
toId: string;
|
|
21
|
+
fromLabel: ReactNode;
|
|
22
|
+
toLabel: ReactNode;
|
|
23
|
+
invalid?: boolean;
|
|
24
|
+
/** Wired as aria-describedby on both triggers while `invalid` is set. */
|
|
25
|
+
errorId?: string;
|
|
26
|
+
/** Trigger placeholder when unset. */
|
|
27
|
+
placeholder?: string;
|
|
28
|
+
/** Accessible label for the calendar popover. */
|
|
29
|
+
ariaLabel?: string;
|
|
30
|
+
/** Label for the clear button. */
|
|
31
|
+
clearLabel?: string;
|
|
32
|
+
/** date-fns locale for the calendar. Defaults to en-US. */
|
|
33
|
+
locale?: CalendarLocale;
|
|
34
|
+
};
|
|
35
|
+
export declare function DateRangePicker({ value, onValueChange, fromId, toId, fromLabel, toLabel, invalid, errorId, placeholder, ariaLabel, clearLabel, locale }: DateRangePickerProps): import("react").JSX.Element;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/enterprise/date-range-picker/index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAMtD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAUnD;;;;GAIG;AACH,KAAK,cAAc,GAAG,cAAc,CAAC,OAAO,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAA;AAE/D,MAAM,MAAM,cAAc,GAAG;IAC3B,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,mCAAmC;IACnC,EAAE,EAAE,MAAM,CAAA;CACX,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,cAAc,CAAA;IACrB,aAAa,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAA;IAC7C,8EAA8E;IAC9E,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,SAAS,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kCAAkC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,cAAc,CAAA;CACxB,CAAA;AAkCD,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,aAAa,EACb,MAAM,EACN,IAAI,EACJ,SAAS,EACT,OAAO,EACP,OAAe,EACf,OAAO,EACP,WAAwB,EACxB,SAA+B,EAC/B,UAAoB,EACpB,MAAa,EACd,EAAE,oBAAoB,+BA0FtB"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.DateRangePicker = DateRangePicker;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
/**
|
|
7
|
+
* DateRangePicker — a single popover range control.
|
|
8
|
+
*
|
|
9
|
+
* Two labelled mono trigger segments (from / to) share one two-month
|
|
10
|
+
* react-day-picker range calendar. The external contract is plain YYYY-MM-DD
|
|
11
|
+
* strings (empty string = unset) so state shapes that speak `date_from`/
|
|
12
|
+
* `date_to` stay untouched. The picker guarantees from <= to (react-day-picker
|
|
13
|
+
* reorders inverted picks); aria-invalid/aria-describedby pass-throughs keep
|
|
14
|
+
* external validation wiring alive. i18n is via plain string/locale props.
|
|
15
|
+
*/
|
|
16
|
+
const react_1 = require("react");
|
|
17
|
+
const lucide_react_1 = require("lucide-react");
|
|
18
|
+
const locale_1 = require("react-day-picker/locale");
|
|
19
|
+
const button_1 = require("../../components/ui/button");
|
|
20
|
+
const calendar_1 = require("../../components/ui/calendar");
|
|
21
|
+
const label_1 = require("../../components/ui/label");
|
|
22
|
+
const popover_1 = require("../../components/ui/popover");
|
|
23
|
+
const typography_1 = require("../../lib/typography");
|
|
24
|
+
const utils_1 = require("../../lib/utils");
|
|
25
|
+
/** Leading YYYY-MM-DD of an ISO date (or date-time) string. */
|
|
26
|
+
const ISO_DAY = /^(\d{4})-(\d{2})-(\d{2})/;
|
|
27
|
+
/**
|
|
28
|
+
* Parse a YYYY-MM-DD day into a LOCAL-midnight Date — the calendar works in
|
|
29
|
+
* local time, so building from parts avoids the UTC shift `new Date(string)`
|
|
30
|
+
* applies to date-only input (which can land the picker a day early).
|
|
31
|
+
* Rejects impossible calendar days (e.g. 2024-02-31, which would roll over).
|
|
32
|
+
*/
|
|
33
|
+
function parseDay(value) {
|
|
34
|
+
const match = ISO_DAY.exec(value);
|
|
35
|
+
if (!match)
|
|
36
|
+
return undefined;
|
|
37
|
+
const year = Number(match[1]);
|
|
38
|
+
const month = Number(match[2]);
|
|
39
|
+
const day = Number(match[3]);
|
|
40
|
+
const parsed = new Date(year, month - 1, day);
|
|
41
|
+
return parsed.getFullYear() === year &&
|
|
42
|
+
parsed.getMonth() === month - 1 &&
|
|
43
|
+
parsed.getDate() === day
|
|
44
|
+
? parsed
|
|
45
|
+
: undefined;
|
|
46
|
+
}
|
|
47
|
+
/** Format a Date back to YYYY-MM-DD in LOCAL time (never via toISOString). */
|
|
48
|
+
function toDayString(value) {
|
|
49
|
+
if (!value)
|
|
50
|
+
return '';
|
|
51
|
+
const year = String(value.getFullYear()).padStart(4, '0');
|
|
52
|
+
const month = String(value.getMonth() + 1).padStart(2, '0');
|
|
53
|
+
const day = String(value.getDate()).padStart(2, '0');
|
|
54
|
+
return `${year}-${month}-${day}`;
|
|
55
|
+
}
|
|
56
|
+
function DateRangePicker({ value, onValueChange, fromId, toId, fromLabel, toLabel, invalid = false, errorId, placeholder = 'Any date', ariaLabel = 'Select date range', clearLabel = 'Clear', locale = locale_1.enUS }) {
|
|
57
|
+
const [open, setOpen] = (0, react_1.useState)(false);
|
|
58
|
+
const fromDate = parseDay(value.from);
|
|
59
|
+
const toDate = parseDay(value.to);
|
|
60
|
+
const selected = fromDate || toDate ? { from: fromDate, to: toDate } : undefined;
|
|
61
|
+
// Derived from the RAW strings, not the parsed dates: a value the calendar
|
|
62
|
+
// cannot parse still needs to be clearable, and gating Clear on `fromDate`
|
|
63
|
+
// would strand the field holding text the user can no longer remove.
|
|
64
|
+
const hasValue = value.from !== '' || value.to !== '';
|
|
65
|
+
const onSelect = (range) => {
|
|
66
|
+
onValueChange({
|
|
67
|
+
from: toDayString(range?.from),
|
|
68
|
+
to: toDayString(range?.to)
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
const triggerClass = (0, utils_1.cn)('border-input bg-card hover:bg-secondary focus-visible:ring-ring flex h-9 items-center gap-2 rounded-md border px-3 text-left font-mono text-sm tabular-nums transition-colors duration-150 ease-out focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:outline-none sm:w-40', invalid && 'border-destructive');
|
|
72
|
+
const renderTrigger = (id, label, dateValue) => ((0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col gap-1.5", children: [(0, jsx_runtime_1.jsx)(label_1.Label, { htmlFor: id, className: typography_1.SECTION_LABEL_CLASS, children: label }), (0, jsx_runtime_1.jsxs)("button", { type: "button", id: id, className: triggerClass, "aria-haspopup": "dialog", "aria-expanded": open, "aria-invalid": invalid || undefined, "aria-describedby": invalid ? errorId : undefined, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.CalendarDays, { className: "text-muted-foreground size-4 shrink-0", "aria-hidden": true }), dateValue ? ((0, jsx_runtime_1.jsx)("span", { children: dateValue })) : ((0, jsx_runtime_1.jsx)("span", { className: "text-muted-foreground font-sans", children: placeholder }))] })] }));
|
|
73
|
+
return ((0, jsx_runtime_1.jsxs)(popover_1.Popover, { open: open, onOpenChange: setOpen, children: [(0, jsx_runtime_1.jsx)(popover_1.PopoverTrigger, { asChild: true, children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col gap-3 sm:flex-row sm:items-end", children: [renderTrigger(fromId, fromLabel, value.from), renderTrigger(toId, toLabel, value.to)] }) }), (0, jsx_runtime_1.jsxs)(popover_1.PopoverContent, { align: "start", className: "w-auto p-0", "aria-label": ariaLabel, children: [(0, jsx_runtime_1.jsx)(calendar_1.Calendar, { mode: "range", numberOfMonths: 2, defaultMonth: fromDate ?? toDate ?? new Date(), selected: selected, onSelect: onSelect, locale: locale }), (0, jsx_runtime_1.jsx)("div", { className: "border-border flex items-center justify-end border-t px-3 py-2", children: (0, jsx_runtime_1.jsx)(button_1.Button, { type: "button", variant: "plain", size: "small", disabled: !hasValue, onClick: () => onValueChange({ from: '', to: '' }), children: clearLabel }) })] })] }));
|
|
74
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DetailPanel — the console's right-side slide-over for inspecting and editing a
|
|
3
|
+
* single record without leaving the list behind it. Built on Sheet (a Radix
|
|
4
|
+
* Dialog) with three structural slots:
|
|
5
|
+
*
|
|
6
|
+
* - a STICKY header: the record title, an optional actions cluster, and a
|
|
7
|
+
* close affordance, pinned to the top while the body scrolls;
|
|
8
|
+
* - a SCROLLABLE body carrying `children`;
|
|
9
|
+
* - an optional STICKY footer for the primary/secondary actions
|
|
10
|
+
* (e.g. Cancel / Save), pinned to the bottom.
|
|
11
|
+
*
|
|
12
|
+
* <DetailPanel
|
|
13
|
+
* open={open}
|
|
14
|
+
* onOpenChange={setOpen}
|
|
15
|
+
* title="Transaction txn_8f2a"
|
|
16
|
+
* footer={<>
|
|
17
|
+
* <SheetClose asChild><Button variant="outline">Cancel</Button></SheetClose>
|
|
18
|
+
* <Button onClick={save}>Save</Button>
|
|
19
|
+
* </>}
|
|
20
|
+
* >
|
|
21
|
+
* …long body…
|
|
22
|
+
* </DetailPanel>
|
|
23
|
+
*
|
|
24
|
+
* Controlled only: drive `open` from props and reflect dismissals via
|
|
25
|
+
* `onOpenChange`. `side` defaults to "right".
|
|
26
|
+
*/
|
|
27
|
+
import * as React from 'react';
|
|
28
|
+
export type DetailPanelProps = {
|
|
29
|
+
/** Controlled open state. */
|
|
30
|
+
open: boolean;
|
|
31
|
+
/** Reflects every dismissal (overlay, Esc, close button) and programmatic toggle. */
|
|
32
|
+
onOpenChange: (open: boolean) => void;
|
|
33
|
+
/** Header title; also the accessible dialog name. */
|
|
34
|
+
title: React.ReactNode;
|
|
35
|
+
/** Edge the panel slides in from. Defaults to "right". */
|
|
36
|
+
side?: 'right' | 'left';
|
|
37
|
+
/** Optional header actions, placed left of the close button. */
|
|
38
|
+
actions?: React.ReactNode;
|
|
39
|
+
/** Optional sticky footer (e.g. Cancel / Save). */
|
|
40
|
+
footer?: React.ReactNode;
|
|
41
|
+
/** Accessible label for the close button. Defaults to "Close". */
|
|
42
|
+
closeLabel?: string;
|
|
43
|
+
/** Scrollable body content. */
|
|
44
|
+
children?: React.ReactNode;
|
|
45
|
+
className?: string;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* The slide-over inspector. The header and footer stay pinned; only the body
|
|
49
|
+
* scrolls. Sheet already renders an overlay, focus trap, and Esc/overlay
|
|
50
|
+
* dismissal — we suppress its built-in corner close button (`[&>button.absolute]`)
|
|
51
|
+
* and provide our own inside the header so the layout stays deliberate.
|
|
52
|
+
*/
|
|
53
|
+
export declare function DetailPanel({ open, onOpenChange, title, side, actions, footer, closeLabel, children, className }: DetailPanelProps): React.JSX.Element;
|
|
54
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/enterprise/detail-panel/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAW9B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,6BAA6B;IAC7B,IAAI,EAAE,OAAO,CAAA;IACb,qFAAqF;IACrF,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,qDAAqD;IACrD,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IACvB,gEAAgE;IAChE,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,mDAAmD;IACnD,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACxB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,IAAc,EACd,OAAO,EACP,MAAM,EACN,UAAoB,EACpB,QAAQ,EACR,SAAS,EACV,EAAE,gBAAgB,qBA4ClB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.DetailPanel = DetailPanel;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const lucide_react_1 = require("lucide-react");
|
|
7
|
+
const sheet_1 = require("../../components/ui/sheet");
|
|
8
|
+
const utils_1 = require("../../lib/utils");
|
|
9
|
+
/**
|
|
10
|
+
* The slide-over inspector. The header and footer stay pinned; only the body
|
|
11
|
+
* scrolls. Sheet already renders an overlay, focus trap, and Esc/overlay
|
|
12
|
+
* dismissal — we suppress its built-in corner close button (`[&>button.absolute]`)
|
|
13
|
+
* and provide our own inside the header so the layout stays deliberate.
|
|
14
|
+
*/
|
|
15
|
+
function DetailPanel({ open, onOpenChange, title, side = 'right', actions, footer, closeLabel = 'Close', children, className }) {
|
|
16
|
+
return ((0, jsx_runtime_1.jsx)(sheet_1.Sheet, { open: open, onOpenChange: onOpenChange, children: (0, jsx_runtime_1.jsxs)(sheet_1.SheetContent, { side: side, className: (0, utils_1.cn)(
|
|
17
|
+
// Reset Sheet's padding/gap and hide its built-in close button; we
|
|
18
|
+
// own the three-slot layout and the header close affordance here.
|
|
19
|
+
'flex flex-col gap-0 overflow-hidden p-0', '[&>button.absolute]:hidden', className), children: [(0, jsx_runtime_1.jsxs)("header", { className: "border-border bg-card sticky top-0 z-10 flex shrink-0 items-start justify-between gap-3 border-b px-6 py-4", children: [(0, jsx_runtime_1.jsx)(sheet_1.SheetTitle, { className: "min-w-0 flex-1 truncate text-base font-semibold tracking-tight", children: title }), (0, jsx_runtime_1.jsxs)("div", { className: "flex shrink-0 items-center gap-1.5", children: [actions, (0, jsx_runtime_1.jsx)(sheet_1.SheetClose, { "data-slot": "detail-panel-close", className: "ring-offset-background focus:ring-ring rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:outline-none disabled:pointer-events-none", "aria-label": closeLabel, children: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { className: "size-4", "aria-hidden": true }) })] })] }), (0, jsx_runtime_1.jsx)("div", { className: "min-h-0 flex-1 overflow-y-auto", children: (0, jsx_runtime_1.jsx)("div", { className: "px-6 py-5", children: children }) }), footer ? ((0, jsx_runtime_1.jsx)("footer", { className: "border-border bg-card sticky bottom-0 z-10 flex shrink-0 flex-col-reverse gap-2 border-t px-6 py-4 sm:flex-row sm:justify-end", children: footer })) : null] }) }));
|
|
20
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EmptyState: centered icon + title + optional description and action, for
|
|
3
|
+
* "no data yet" and "no results" surfaces. Keep copy short and neutral.
|
|
4
|
+
*
|
|
5
|
+
* The `ruled` flag is the "ruled page" presentation hook: instead of the
|
|
6
|
+
* floating centered card (which reads as a void inside a ledger register), it
|
|
7
|
+
* renders a quiet, top/left-aligned notation under a hairline rule — so a
|
|
8
|
+
* sparse register reads as ruled stationery waiting for entries rather than an
|
|
9
|
+
* empty pane. The icon bubble drops; the title takes the column-head label
|
|
10
|
+
* voice; the copy aligns to the page baseline. This is the seam a pre-ruled
|
|
11
|
+
* empty-rows register (built app-side) composes with: the EmptyState sits at
|
|
12
|
+
* the head of the page and the faint ruled lines fill below it.
|
|
13
|
+
*/
|
|
14
|
+
import type { LucideIcon } from 'lucide-react';
|
|
15
|
+
import type { ReactNode } from 'react';
|
|
16
|
+
export type EmptyStateProps = {
|
|
17
|
+
/** Lucide icon component. Defaults to Inbox. */
|
|
18
|
+
icon?: LucideIcon;
|
|
19
|
+
title: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
/** Optional action node (e.g. a Button). */
|
|
22
|
+
action?: ReactNode;
|
|
23
|
+
/**
|
|
24
|
+
* Render as a ruled-page notation rather than a centered card. Use inside a
|
|
25
|
+
* ledger register so a short/empty result set reads as ruled stationery, not
|
|
26
|
+
* a void. Pairs with the app-side pre-ruled empty-rows fill. Default off.
|
|
27
|
+
*/
|
|
28
|
+
ruled?: boolean;
|
|
29
|
+
className?: string;
|
|
30
|
+
};
|
|
31
|
+
export declare function EmptyState({ icon: Icon, title, description, action, ruled, className }: EmptyStateProps): import("react").JSX.Element;
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/enterprise/empty-state/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAKtC,MAAM,MAAM,eAAe,GAAG;IAC5B,gDAAgD;IAChD,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,UAAU,CAAC,EACzB,IAAI,EAAE,IAAY,EAClB,KAAK,EACL,WAAW,EACX,MAAM,EACN,KAAa,EACb,SAAS,EACV,EAAE,eAAe,+BA6CjB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EmptyState = EmptyState;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const lucide_react_1 = require("lucide-react");
|
|
6
|
+
const typography_1 = require("../../lib/typography");
|
|
7
|
+
const utils_1 = require("../../lib/utils");
|
|
8
|
+
function EmptyState({ icon: Icon = lucide_react_1.Inbox, title, description, action, ruled = false, className }) {
|
|
9
|
+
if (ruled) {
|
|
10
|
+
return ((0, jsx_runtime_1.jsxs)("div", { "data-variant": "ruled", className: (0, utils_1.cn)('border-border flex flex-col items-start gap-2 border-t px-3 py-6 text-left', className), children: [(0, jsx_runtime_1.jsxs)("div", { className: "text-muted-foreground flex items-center gap-2", children: [(0, jsx_runtime_1.jsx)(Icon, { className: "size-4", "aria-hidden": true }), (0, jsx_runtime_1.jsx)("span", { className: typography_1.LABEL_VOICE_CLASS, children: title })] }), description ? ((0, jsx_runtime_1.jsx)("p", { className: "text-muted-foreground max-w-prose text-sm", children: description })) : null, action ? (0, jsx_runtime_1.jsx)("div", { className: "mt-1", children: action }) : null] }));
|
|
11
|
+
}
|
|
12
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.cn)('flex flex-col items-center justify-center gap-3 px-6 py-16 text-center', className), children: [(0, jsx_runtime_1.jsx)("div", { className: "bg-muted flex size-11 items-center justify-center rounded-full", children: (0, jsx_runtime_1.jsx)(Icon, { className: "text-muted-foreground size-5", "aria-hidden": true }) }), (0, jsx_runtime_1.jsxs)("div", { className: "space-y-1", children: [(0, jsx_runtime_1.jsx)("p", { className: "text-foreground text-sm font-medium", children: title }), description ? ((0, jsx_runtime_1.jsx)("p", { className: "text-muted-foreground mx-auto max-w-sm text-sm", children: description })) : null] }), action ? (0, jsx_runtime_1.jsx)("div", { className: "mt-2", children: action }) : null] }));
|
|
13
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export { AlertBanner } from './alert-banner';
|
|
2
|
+
export type { AlertBannerProps, AlertBannerTone } from './alert-banner';
|
|
3
|
+
export { AppShell } from './app-shell';
|
|
4
|
+
export type { AppShellProps } from './app-shell';
|
|
5
|
+
export { CursorPager } from './cursor-pager';
|
|
6
|
+
export type { CursorPagerProps } from './cursor-pager';
|
|
7
|
+
export { DataTable } from './data-table';
|
|
8
|
+
export type { DataTableProps } from './data-table';
|
|
9
|
+
export { DateRangePicker } from './date-range-picker';
|
|
10
|
+
export type { DateRangePickerProps, DateRangeValue } from './date-range-picker';
|
|
11
|
+
export { DetailPanel } from './detail-panel';
|
|
12
|
+
export type { DetailPanelProps } from './detail-panel';
|
|
13
|
+
export { EmptyState } from './empty-state';
|
|
14
|
+
export type { EmptyStateProps } from './empty-state';
|
|
15
|
+
export { NumberInput } from './number-input';
|
|
16
|
+
export type { NumberInputProps } from './number-input';
|
|
17
|
+
export { SearchInput } from './search-input';
|
|
18
|
+
export type { SearchInputProps } from './search-input';
|
|
19
|
+
export { StatCard } from './stat-card';
|
|
20
|
+
export type { StatCardProps, StatCardRow, StatCardTone } from './stat-card';
|
|
21
|
+
export { DEFAULT_STATUS_VARIANTS, StatusBadge } from './status-badge';
|
|
22
|
+
export type { StatusBadgeProps } from './status-badge';
|
|
23
|
+
export { VirtualizedTable } from './virtualized-table';
|
|
24
|
+
export type { VirtualizedTableProps } from './virtualized-table';
|
|
25
|
+
export { useIsMobile } from './use-is-mobile';
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/enterprise/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAEvE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAE/E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE3E,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACrE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Owned by lane enterprise — see docs/plans/2026-08-26-sindarian-x-retirement/
|
|
3
|
+
//
|
|
4
|
+
// The composed enterprise layer absorbed from @lerianstudio/sindarian-x@0.15.0.
|
|
5
|
+
// Outer public APIs are byte-compatible with that package; internals are
|
|
6
|
+
// recomposed over sindarian-ui primitives and its design tokens.
|
|
7
|
+
//
|
|
8
|
+
// Names already exported by sindarian-ui are NEVER re-exported here (FC-4):
|
|
9
|
+
// consumers adapt to sindarian-ui's API for Button, Badge, Table*, Sidebar*,
|
|
10
|
+
// EntityBox*, Stepper*, PageHeader, ConfirmationDialog and friends.
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.useIsMobile = exports.VirtualizedTable = exports.StatusBadge = exports.DEFAULT_STATUS_VARIANTS = exports.StatCard = exports.SearchInput = exports.NumberInput = exports.EmptyState = exports.DetailPanel = exports.DateRangePicker = exports.DataTable = exports.CursorPager = exports.AppShell = exports.AlertBanner = void 0;
|
|
13
|
+
var alert_banner_1 = require("./alert-banner");
|
|
14
|
+
Object.defineProperty(exports, "AlertBanner", { enumerable: true, get: function () { return alert_banner_1.AlertBanner; } });
|
|
15
|
+
var app_shell_1 = require("./app-shell");
|
|
16
|
+
Object.defineProperty(exports, "AppShell", { enumerable: true, get: function () { return app_shell_1.AppShell; } });
|
|
17
|
+
var cursor_pager_1 = require("./cursor-pager");
|
|
18
|
+
Object.defineProperty(exports, "CursorPager", { enumerable: true, get: function () { return cursor_pager_1.CursorPager; } });
|
|
19
|
+
var data_table_1 = require("./data-table");
|
|
20
|
+
Object.defineProperty(exports, "DataTable", { enumerable: true, get: function () { return data_table_1.DataTable; } });
|
|
21
|
+
var date_range_picker_1 = require("./date-range-picker");
|
|
22
|
+
Object.defineProperty(exports, "DateRangePicker", { enumerable: true, get: function () { return date_range_picker_1.DateRangePicker; } });
|
|
23
|
+
var detail_panel_1 = require("./detail-panel");
|
|
24
|
+
Object.defineProperty(exports, "DetailPanel", { enumerable: true, get: function () { return detail_panel_1.DetailPanel; } });
|
|
25
|
+
var empty_state_1 = require("./empty-state");
|
|
26
|
+
Object.defineProperty(exports, "EmptyState", { enumerable: true, get: function () { return empty_state_1.EmptyState; } });
|
|
27
|
+
var number_input_1 = require("./number-input");
|
|
28
|
+
Object.defineProperty(exports, "NumberInput", { enumerable: true, get: function () { return number_input_1.NumberInput; } });
|
|
29
|
+
var search_input_1 = require("./search-input");
|
|
30
|
+
Object.defineProperty(exports, "SearchInput", { enumerable: true, get: function () { return search_input_1.SearchInput; } });
|
|
31
|
+
var stat_card_1 = require("./stat-card");
|
|
32
|
+
Object.defineProperty(exports, "StatCard", { enumerable: true, get: function () { return stat_card_1.StatCard; } });
|
|
33
|
+
var status_badge_1 = require("./status-badge");
|
|
34
|
+
Object.defineProperty(exports, "DEFAULT_STATUS_VARIANTS", { enumerable: true, get: function () { return status_badge_1.DEFAULT_STATUS_VARIANTS; } });
|
|
35
|
+
Object.defineProperty(exports, "StatusBadge", { enumerable: true, get: function () { return status_badge_1.StatusBadge; } });
|
|
36
|
+
var virtualized_table_1 = require("./virtualized-table");
|
|
37
|
+
Object.defineProperty(exports, "VirtualizedTable", { enumerable: true, get: function () { return virtualized_table_1.VirtualizedTable; } });
|
|
38
|
+
var use_is_mobile_1 = require("./use-is-mobile");
|
|
39
|
+
Object.defineProperty(exports, "useIsMobile", { enumerable: true, get: function () { return use_is_mobile_1.useIsMobile; } });
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NumberInput — a controlled numeric input with +/- steppers.
|
|
3
|
+
*
|
|
4
|
+
* Composes sindarian-ui's Input (the text field) and IconButton (the two
|
|
5
|
+
* steppers). The external contract is a plain `number | null` (null = empty).
|
|
6
|
+
* Steppers step by `step` and clamp the result to [min, max]. While focused the
|
|
7
|
+
* field shows the raw, editable string the user is typing; on blur it reformats
|
|
8
|
+
* the committed number via Intl.NumberFormat(locale, { maximumFractionDigits:
|
|
9
|
+
* precision }) (e.g. 1,234.50). Parsing always emits the raw number, so digits
|
|
10
|
+
* the user types are never silently rewritten mid-edit.
|
|
11
|
+
*/
|
|
12
|
+
import * as React from 'react';
|
|
13
|
+
export type NumberInputProps = {
|
|
14
|
+
/** Committed value. `null` means the field is empty. */
|
|
15
|
+
value: number | null;
|
|
16
|
+
/** Fires on every edit and stepper press; `null` when the field is cleared. */
|
|
17
|
+
onValueChange: (next: number | null) => void;
|
|
18
|
+
min?: number;
|
|
19
|
+
max?: number;
|
|
20
|
+
/** Stepper increment. Defaults to 1. */
|
|
21
|
+
step?: number;
|
|
22
|
+
/** Fraction digits used for the blurred Intl.NumberFormat display. */
|
|
23
|
+
precision?: number;
|
|
24
|
+
/** BCP 47 locale tag for the blurred display. Defaults to the host's. */
|
|
25
|
+
locale?: string;
|
|
26
|
+
disabled?: boolean;
|
|
27
|
+
/** Accessible label for the field; also names the +/- buttons. */
|
|
28
|
+
'aria-label'?: string;
|
|
29
|
+
/** Wired as aria-describedby on the input. */
|
|
30
|
+
'aria-describedby'?: string;
|
|
31
|
+
/** id (and de-facto testid) for the input element. */
|
|
32
|
+
id?: string;
|
|
33
|
+
className?: string;
|
|
34
|
+
placeholder?: string;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Parse the editable string into a number, round-tripping the component's
|
|
38
|
+
* `locale`: strip the locale group separators, swap the locale decimal mark to
|
|
39
|
+
* '.', then `Number()`. Null when empty/unparseable.
|
|
40
|
+
*
|
|
41
|
+
* Internal (not part of the public barrel) but exported for its unit tests —
|
|
42
|
+
* numeric-entry correctness is the load-bearing behavior here.
|
|
43
|
+
*/
|
|
44
|
+
export declare function parseRaw(raw: string, locale?: string): number | null;
|
|
45
|
+
/**
|
|
46
|
+
* A transient partial entry that should not commit yet — a lone sign, a lone
|
|
47
|
+
* decimal mark, sign+decimal, or a value ending in the decimal mark (the user
|
|
48
|
+
* is still typing). Suppressing these keeps the external value from
|
|
49
|
+
* round-tripping through `null` mid-edit.
|
|
50
|
+
*
|
|
51
|
+
* Internal (not part of the public barrel) but exported for its unit tests.
|
|
52
|
+
*/
|
|
53
|
+
export declare function isTransientPartial(raw: string, locale?: string): boolean;
|
|
54
|
+
export declare function NumberInput({ value, onValueChange, min, max, step, precision, locale, disabled, id, className, placeholder, 'aria-label': ariaLabel, 'aria-describedby': ariaDescribedBy }: NumberInputProps): React.JSX.Element;
|
|
55
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/enterprise/number-input/index.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAO9B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,wDAAwD;IACxD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,+EAA+E;IAC/E,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,8CAA8C;IAC9C,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,sDAAsD;IACtD,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAmED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUpE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAMxE;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,aAAa,EACb,GAAG,EACH,GAAG,EACH,IAAQ,EACR,SAAS,EACT,MAAM,EACN,QAAgB,EAChB,EAAE,EACF,SAAS,EACT,WAAW,EACX,YAAY,EAAE,SAAS,EACvB,kBAAkB,EAAE,eAAe,EACpC,EAAE,gBAAgB,qBAwIlB"}
|