@multiplatform.one/table 6.0.4 → 6.3.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/README.md +125 -65
- package/dist/cjs/components/ChildTable/index.cjs +44 -9
- package/dist/cjs/components/ChildTable/index.native.js +56 -13
- package/dist/cjs/components/ChildTable/index.native.js.map +1 -1
- package/dist/cjs/components/ColumnHeaderFilter/index.cjs +27 -110
- package/dist/cjs/components/ColumnHeaderFilter/index.native.js +27 -119
- package/dist/cjs/components/ColumnHeaderFilter/index.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableCardControls.cjs +133 -0
- package/dist/cjs/components/DataTable/DataTableCardControls.native.js +140 -0
- package/dist/cjs/components/DataTable/DataTableCardControls.native.js.map +1 -0
- package/dist/cjs/components/DataTable/DataTableMobileCards.cjs +125 -59
- package/dist/cjs/components/DataTable/DataTableMobileCards.native.js +114 -49
- package/dist/cjs/components/DataTable/DataTableMobileCards.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableRoot.cjs +574 -170
- package/dist/cjs/components/DataTable/DataTableRoot.native.js +699 -178
- package/dist/cjs/components/DataTable/DataTableRoot.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableStateContext.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableVirtualized.cjs +78 -3
- package/dist/cjs/components/DataTable/DataTableVirtualized.native.js +86 -3
- package/dist/cjs/components/DataTable/DataTableVirtualized.native.js.map +1 -1
- package/dist/cjs/components/DataTable/index.cjs +2 -0
- package/dist/cjs/components/DataTable/index.native.js +170 -72
- package/dist/cjs/components/DataTable/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableBulkActions/index.cjs +62 -146
- package/dist/cjs/components/DataTableBulkActions/index.native.js +77 -153
- package/dist/cjs/components/DataTableBulkActions/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableCell/CellModalEditor.cjs +61 -8
- package/dist/cjs/components/DataTableCell/CellModalEditor.native.js +73 -66
- package/dist/cjs/components/DataTableCell/CellModalEditor.native.js.map +1 -1
- package/dist/cjs/components/DataTableCell/CellOptionsEditor.cjs +87 -0
- package/dist/cjs/components/DataTableCell/CellOptionsEditor.native.js +100 -0
- package/dist/cjs/components/DataTableCell/CellOptionsEditor.native.js.map +1 -0
- package/dist/cjs/components/DataTableCell/index.cjs +524 -147
- package/dist/cjs/components/DataTableCell/index.native.js +666 -210
- package/dist/cjs/components/DataTableCell/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableColumnPinning/index.cjs +95 -24
- package/dist/cjs/components/DataTableColumnPinning/index.native.js +101 -25
- package/dist/cjs/components/DataTableColumnPinning/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableDateFilter/index.cjs +385 -197
- package/dist/cjs/components/DataTableDateFilter/index.native.js +414 -213
- package/dist/cjs/components/DataTableDateFilter/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableExport/index.cjs +223 -195
- package/dist/cjs/components/DataTableExport/index.native.js +318 -217
- package/dist/cjs/components/DataTableExport/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableFilterButton/index.cjs +349 -0
- package/dist/cjs/components/DataTableFilterButton/index.native.js +402 -0
- package/dist/cjs/components/DataTableFilterButton/index.native.js.map +1 -0
- package/dist/cjs/components/DataTableFilterChips/index.cjs +120 -0
- package/dist/cjs/components/DataTableFilterChips/index.native.js +187 -0
- package/dist/cjs/components/DataTableFilterChips/index.native.js.map +1 -0
- package/dist/cjs/components/DataTableFilters/index.cjs +36 -31
- package/dist/cjs/components/DataTableFilters/index.native.js +36 -31
- package/dist/cjs/components/DataTableFilters/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableGrouping/index.cjs +246 -189
- package/dist/cjs/components/DataTableGrouping/index.native.js +283 -203
- package/dist/cjs/components/DataTableGrouping/index.native.js.map +1 -1
- package/dist/cjs/components/DataTablePagination/index.cjs +103 -329
- package/dist/cjs/components/DataTablePagination/index.native.js +115 -377
- package/dist/cjs/components/DataTablePagination/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableSearch/index.cjs +132 -155
- package/dist/cjs/components/DataTableSearch/index.native.js +164 -170
- package/dist/cjs/components/DataTableSearch/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableToolbar/index.cjs +71 -116
- package/dist/cjs/components/DataTableToolbar/index.native.js +98 -123
- package/dist/cjs/components/DataTableToolbar/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableViewOptions/index.cjs +73 -169
- package/dist/cjs/components/DataTableViewOptions/index.native.js +88 -184
- package/dist/cjs/components/DataTableViewOptions/index.native.js.map +1 -1
- package/dist/cjs/components/FilterManager.cjs +7 -5
- package/dist/cjs/components/FilterManager.native.js +21 -8
- package/dist/cjs/components/FilterManager.native.js.map +1 -1
- package/dist/cjs/components/FilterOperatorValueEditor/index.cjs +109 -0
- package/dist/cjs/components/FilterOperatorValueEditor/index.native.js +121 -0
- package/dist/cjs/components/FilterOperatorValueEditor/index.native.js.map +1 -0
- package/dist/cjs/components/SavedFilterDropdown.cjs +3 -3
- package/dist/cjs/components/SavedFilterDropdown.native.js +3 -3
- package/dist/cjs/components/SavedFilterDropdown.native.js.map +1 -1
- package/dist/cjs/components/SimpleTable/index.cjs +22 -15
- package/dist/cjs/components/SimpleTable/index.native.js +31 -19
- package/dist/cjs/components/SimpleTable/index.native.js.map +1 -1
- package/dist/cjs/components/TableInput/index.cjs +149 -49
- package/dist/cjs/components/TableInput/index.native.js +181 -71
- package/dist/cjs/components/TableInput/index.native.js.map +1 -1
- package/dist/cjs/components/TableInput/shared.cjs +36 -0
- package/dist/cjs/components/TableInput/shared.native.js +41 -0
- package/dist/cjs/components/TableInput/shared.native.js.map +1 -0
- package/dist/cjs/hooks/useDataTable.cjs +114 -21
- package/dist/cjs/hooks/useDataTable.native.js +126 -25
- package/dist/cjs/hooks/useDataTable.native.js.map +1 -1
- package/dist/cjs/hooks/useInfiniteRows.cjs +193 -0
- package/dist/cjs/hooks/useInfiniteRows.native.js +203 -0
- package/dist/cjs/hooks/useInfiniteRows.native.js.map +1 -0
- package/dist/cjs/hooks/useTableFiltering.cjs +14 -18
- package/dist/cjs/hooks/useTableFiltering.native.js +17 -23
- package/dist/cjs/hooks/useTableFiltering.native.js.map +1 -1
- package/dist/cjs/hooks/useTablePagination.cjs +2 -2
- package/dist/cjs/hooks/useTablePagination.native.js +2 -2
- package/dist/cjs/hooks/useTablePagination.native.js.map +1 -1
- package/dist/cjs/index.cjs +26 -1
- package/dist/cjs/index.native.js +25 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/shared/t.cjs +50 -0
- package/dist/cjs/shared/t.native.js +55 -0
- package/dist/cjs/shared/t.native.js.map +1 -0
- package/dist/cjs/utils/columnAlign.cjs +60 -0
- package/dist/cjs/utils/columnAlign.native.js +67 -0
- package/dist/cjs/utils/columnAlign.native.js.map +1 -0
- package/dist/cjs/utils/filterFields.cjs +185 -0
- package/dist/cjs/utils/filterFields.native.js +247 -0
- package/dist/cjs/utils/filterFields.native.js.map +1 -0
- package/dist/cjs/utils/filterUtils.cjs +39 -20
- package/dist/cjs/utils/filterUtils.native.js +39 -20
- package/dist/cjs/utils/filterUtils.native.js.map +1 -1
- package/dist/cjs/utils/paginationDefaults.cjs +32 -0
- package/dist/cjs/utils/paginationDefaults.native.js +35 -0
- package/dist/cjs/utils/paginationDefaults.native.js.map +1 -0
- package/dist/cjs/utils/urlStateUtils.cjs +2 -1
- package/dist/cjs/utils/urlStateUtils.native.js +2 -1
- package/dist/cjs/utils/urlStateUtils.native.js.map +1 -1
- package/dist/cjs/utils/viewData.cjs +45 -0
- package/dist/cjs/utils/viewData.native.js +69 -0
- package/dist/cjs/utils/viewData.native.js.map +1 -0
- package/dist/cjs/utils/withInterp.cjs +39 -0
- package/dist/cjs/utils/withInterp.native.js +42 -0
- package/dist/cjs/utils/withInterp.native.js.map +1 -0
- package/dist/esm/components/ChildTable/index.mjs +45 -10
- package/dist/esm/components/ChildTable/index.mjs.map +1 -1
- package/dist/esm/components/ChildTable/index.native.js +57 -14
- package/dist/esm/components/ChildTable/index.native.js.map +1 -1
- package/dist/esm/components/ColumnHeaderFilter/index.mjs +29 -111
- package/dist/esm/components/ColumnHeaderFilter/index.mjs.map +1 -1
- package/dist/esm/components/ColumnHeaderFilter/index.native.js +30 -121
- package/dist/esm/components/ColumnHeaderFilter/index.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableCardControls.mjs +108 -0
- package/dist/esm/components/DataTable/DataTableCardControls.mjs.map +1 -0
- package/dist/esm/components/DataTable/DataTableCardControls.native.js +112 -0
- package/dist/esm/components/DataTable/DataTableCardControls.native.js.map +1 -0
- package/dist/esm/components/DataTable/DataTableMobileCards.mjs +128 -62
- package/dist/esm/components/DataTable/DataTableMobileCards.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableMobileCards.native.js +117 -52
- package/dist/esm/components/DataTable/DataTableMobileCards.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableRoot.mjs +578 -174
- package/dist/esm/components/DataTable/DataTableRoot.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableRoot.native.js +703 -182
- package/dist/esm/components/DataTable/DataTableRoot.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableStateContext.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableStateContext.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableVirtualized.mjs +79 -4
- package/dist/esm/components/DataTable/DataTableVirtualized.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableVirtualized.native.js +87 -4
- package/dist/esm/components/DataTable/DataTableVirtualized.native.js.map +1 -1
- package/dist/esm/components/DataTable/index.mjs +2 -0
- package/dist/esm/components/DataTable/index.mjs.map +1 -1
- package/dist/esm/components/DataTable/index.native.js +172 -74
- package/dist/esm/components/DataTable/index.native.js.map +1 -1
- package/dist/esm/components/DataTableBulkActions/index.mjs +65 -147
- package/dist/esm/components/DataTableBulkActions/index.mjs.map +1 -1
- package/dist/esm/components/DataTableBulkActions/index.native.js +80 -154
- package/dist/esm/components/DataTableBulkActions/index.native.js.map +1 -1
- package/dist/esm/components/DataTableCell/CellModalEditor.mjs +62 -9
- package/dist/esm/components/DataTableCell/CellModalEditor.mjs.map +1 -1
- package/dist/esm/components/DataTableCell/CellModalEditor.native.js +74 -67
- package/dist/esm/components/DataTableCell/CellModalEditor.native.js.map +1 -1
- package/dist/esm/components/DataTableCell/CellOptionsEditor.mjs +62 -0
- package/dist/esm/components/DataTableCell/CellOptionsEditor.mjs.map +1 -0
- package/dist/esm/components/DataTableCell/CellOptionsEditor.native.js +72 -0
- package/dist/esm/components/DataTableCell/CellOptionsEditor.native.js.map +1 -0
- package/dist/esm/components/DataTableCell/index.mjs +527 -149
- package/dist/esm/components/DataTableCell/index.mjs.map +1 -1
- package/dist/esm/components/DataTableCell/index.native.js +670 -213
- package/dist/esm/components/DataTableCell/index.native.js.map +1 -1
- package/dist/esm/components/DataTableColumnPinning/index.mjs +99 -28
- package/dist/esm/components/DataTableColumnPinning/index.mjs.map +1 -1
- package/dist/esm/components/DataTableColumnPinning/index.native.js +105 -29
- package/dist/esm/components/DataTableColumnPinning/index.native.js.map +1 -1
- package/dist/esm/components/DataTableDateFilter/index.mjs +387 -200
- package/dist/esm/components/DataTableDateFilter/index.mjs.map +1 -1
- package/dist/esm/components/DataTableDateFilter/index.native.js +416 -216
- package/dist/esm/components/DataTableDateFilter/index.native.js.map +1 -1
- package/dist/esm/components/DataTableExport/index.mjs +223 -195
- package/dist/esm/components/DataTableExport/index.mjs.map +1 -1
- package/dist/esm/components/DataTableExport/index.native.js +318 -217
- package/dist/esm/components/DataTableExport/index.native.js.map +1 -1
- package/dist/esm/components/DataTableFilterButton/index.mjs +324 -0
- package/dist/esm/components/DataTableFilterButton/index.mjs.map +1 -0
- package/dist/esm/components/DataTableFilterButton/index.native.js +374 -0
- package/dist/esm/components/DataTableFilterButton/index.native.js.map +1 -0
- package/dist/esm/components/DataTableFilterChips/index.mjs +95 -0
- package/dist/esm/components/DataTableFilterChips/index.mjs.map +1 -0
- package/dist/esm/components/DataTableFilterChips/index.native.js +159 -0
- package/dist/esm/components/DataTableFilterChips/index.native.js.map +1 -0
- package/dist/esm/components/DataTableFilters/index.mjs +36 -31
- package/dist/esm/components/DataTableFilters/index.mjs.map +1 -1
- package/dist/esm/components/DataTableFilters/index.native.js +36 -31
- package/dist/esm/components/DataTableFilters/index.native.js.map +1 -1
- package/dist/esm/components/DataTableGrouping/index.mjs +248 -191
- package/dist/esm/components/DataTableGrouping/index.mjs.map +1 -1
- package/dist/esm/components/DataTableGrouping/index.native.js +285 -205
- package/dist/esm/components/DataTableGrouping/index.native.js.map +1 -1
- package/dist/esm/components/DataTablePagination/index.mjs +105 -329
- package/dist/esm/components/DataTablePagination/index.mjs.map +1 -1
- package/dist/esm/components/DataTablePagination/index.native.js +117 -366
- package/dist/esm/components/DataTablePagination/index.native.js.map +1 -1
- package/dist/esm/components/DataTableSearch/index.mjs +135 -156
- package/dist/esm/components/DataTableSearch/index.mjs.map +1 -1
- package/dist/esm/components/DataTableSearch/index.native.js +167 -171
- package/dist/esm/components/DataTableSearch/index.native.js.map +1 -1
- package/dist/esm/components/DataTableToolbar/index.mjs +75 -118
- package/dist/esm/components/DataTableToolbar/index.mjs.map +1 -1
- package/dist/esm/components/DataTableToolbar/index.native.js +102 -125
- package/dist/esm/components/DataTableToolbar/index.native.js.map +1 -1
- package/dist/esm/components/DataTableViewOptions/index.mjs +75 -171
- package/dist/esm/components/DataTableViewOptions/index.mjs.map +1 -1
- package/dist/esm/components/DataTableViewOptions/index.native.js +90 -186
- package/dist/esm/components/DataTableViewOptions/index.native.js.map +1 -1
- package/dist/esm/components/FilterManager.mjs +7 -5
- package/dist/esm/components/FilterManager.mjs.map +1 -1
- package/dist/esm/components/FilterManager.native.js +21 -8
- package/dist/esm/components/FilterManager.native.js.map +1 -1
- package/dist/esm/components/FilterOperatorValueEditor/index.mjs +84 -0
- package/dist/esm/components/FilterOperatorValueEditor/index.mjs.map +1 -0
- package/dist/esm/components/FilterOperatorValueEditor/index.native.js +93 -0
- package/dist/esm/components/FilterOperatorValueEditor/index.native.js.map +1 -0
- package/dist/esm/components/SavedFilterDropdown.mjs +3 -3
- package/dist/esm/components/SavedFilterDropdown.mjs.map +1 -1
- package/dist/esm/components/SavedFilterDropdown.native.js +3 -3
- package/dist/esm/components/SavedFilterDropdown.native.js.map +1 -1
- package/dist/esm/components/SimpleTable/index.mjs +22 -15
- package/dist/esm/components/SimpleTable/index.mjs.map +1 -1
- package/dist/esm/components/SimpleTable/index.native.js +31 -19
- package/dist/esm/components/SimpleTable/index.native.js.map +1 -1
- package/dist/esm/components/TableInput/index.mjs +149 -49
- package/dist/esm/components/TableInput/index.mjs.map +1 -1
- package/dist/esm/components/TableInput/index.native.js +181 -71
- package/dist/esm/components/TableInput/index.native.js.map +1 -1
- package/dist/esm/components/TableInput/shared.mjs +9 -0
- package/dist/esm/components/TableInput/shared.mjs.map +1 -0
- package/dist/esm/components/TableInput/shared.native.js +11 -0
- package/dist/esm/components/TableInput/shared.native.js.map +1 -0
- package/dist/esm/hooks/useDataTable.mjs +115 -22
- package/dist/esm/hooks/useDataTable.mjs.map +1 -1
- package/dist/esm/hooks/useDataTable.native.js +127 -26
- package/dist/esm/hooks/useDataTable.native.js.map +1 -1
- package/dist/esm/hooks/useInfiniteRows.mjs +168 -0
- package/dist/esm/hooks/useInfiniteRows.mjs.map +1 -0
- package/dist/esm/hooks/useInfiniteRows.native.js +175 -0
- package/dist/esm/hooks/useInfiniteRows.native.js.map +1 -0
- package/dist/esm/hooks/useTableFiltering.mjs +14 -18
- package/dist/esm/hooks/useTableFiltering.mjs.map +1 -1
- package/dist/esm/hooks/useTableFiltering.native.js +17 -23
- package/dist/esm/hooks/useTableFiltering.native.js.map +1 -1
- package/dist/esm/hooks/useTablePagination.mjs +2 -2
- package/dist/esm/hooks/useTablePagination.mjs.map +1 -1
- package/dist/esm/hooks/useTablePagination.native.js +2 -2
- package/dist/esm/hooks/useTablePagination.native.js.map +1 -1
- package/dist/esm/index.mjs +8 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +8 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/shared/t.mjs +14 -0
- package/dist/esm/shared/t.mjs.map +1 -0
- package/dist/esm/shared/t.native.js +16 -0
- package/dist/esm/shared/t.native.js.map +1 -0
- package/dist/esm/utils/columnAlign.mjs +34 -0
- package/dist/esm/utils/columnAlign.mjs.map +1 -0
- package/dist/esm/utils/columnAlign.native.js +38 -0
- package/dist/esm/utils/columnAlign.native.js.map +1 -0
- package/dist/esm/utils/filterFields.mjs +149 -0
- package/dist/esm/utils/filterFields.mjs.map +1 -0
- package/dist/esm/utils/filterFields.native.js +208 -0
- package/dist/esm/utils/filterFields.native.js.map +1 -0
- package/dist/esm/utils/filterUtils.mjs +39 -20
- package/dist/esm/utils/filterUtils.mjs.map +1 -1
- package/dist/esm/utils/filterUtils.native.js +39 -20
- package/dist/esm/utils/filterUtils.native.js.map +1 -1
- package/dist/esm/utils/paginationDefaults.mjs +5 -0
- package/dist/esm/utils/paginationDefaults.mjs.map +1 -0
- package/dist/esm/utils/paginationDefaults.native.js +5 -0
- package/dist/esm/utils/paginationDefaults.native.js.map +1 -0
- package/dist/esm/utils/urlStateUtils.mjs +2 -1
- package/dist/esm/utils/urlStateUtils.mjs.map +1 -1
- package/dist/esm/utils/urlStateUtils.native.js +2 -1
- package/dist/esm/utils/urlStateUtils.native.js.map +1 -1
- package/dist/esm/utils/viewData.mjs +20 -0
- package/dist/esm/utils/viewData.mjs.map +1 -0
- package/dist/esm/utils/viewData.native.js +41 -0
- package/dist/esm/utils/viewData.native.js.map +1 -0
- package/dist/esm/utils/withInterp.mjs +13 -0
- package/dist/esm/utils/withInterp.mjs.map +1 -0
- package/dist/esm/utils/withInterp.native.js +13 -0
- package/dist/esm/utils/withInterp.native.js.map +1 -0
- package/dist/jsx/components/ChildTable/index.mjs +45 -10
- package/dist/jsx/components/ChildTable/index.mjs.map +1 -1
- package/dist/jsx/components/ChildTable/index.native.js +56 -13
- package/dist/jsx/components/ChildTable/index.native.js.map +1 -1
- package/dist/jsx/components/ColumnHeaderFilter/index.mjs +29 -111
- package/dist/jsx/components/ColumnHeaderFilter/index.mjs.map +1 -1
- package/dist/jsx/components/ColumnHeaderFilter/index.native.js +27 -119
- package/dist/jsx/components/ColumnHeaderFilter/index.native.js.map +1 -1
- package/dist/jsx/components/DataTable/DataTableCardControls.mjs +108 -0
- package/dist/jsx/components/DataTable/DataTableCardControls.mjs.map +1 -0
- package/dist/jsx/components/DataTable/DataTableCardControls.native.js +140 -0
- package/dist/jsx/components/DataTable/DataTableCardControls.native.js.map +1 -0
- package/dist/jsx/components/DataTable/DataTableMobileCards.mjs +128 -62
- package/dist/jsx/components/DataTable/DataTableMobileCards.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableMobileCards.native.js +114 -49
- package/dist/jsx/components/DataTable/DataTableMobileCards.native.js.map +1 -1
- package/dist/jsx/components/DataTable/DataTableRoot.mjs +578 -174
- package/dist/jsx/components/DataTable/DataTableRoot.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableRoot.native.js +699 -178
- package/dist/jsx/components/DataTable/DataTableRoot.native.js.map +1 -1
- package/dist/jsx/components/DataTable/DataTableStateContext.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableStateContext.native.js.map +1 -1
- package/dist/jsx/components/DataTable/DataTableVirtualized.mjs +79 -4
- package/dist/jsx/components/DataTable/DataTableVirtualized.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableVirtualized.native.js +86 -3
- package/dist/jsx/components/DataTable/DataTableVirtualized.native.js.map +1 -1
- package/dist/jsx/components/DataTable/index.mjs +2 -0
- package/dist/jsx/components/DataTable/index.mjs.map +1 -1
- package/dist/jsx/components/DataTable/index.native.js +170 -72
- package/dist/jsx/components/DataTable/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableBulkActions/index.mjs +65 -147
- package/dist/jsx/components/DataTableBulkActions/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableBulkActions/index.native.js +77 -153
- package/dist/jsx/components/DataTableBulkActions/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableCell/CellModalEditor.mjs +62 -9
- package/dist/jsx/components/DataTableCell/CellModalEditor.mjs.map +1 -1
- package/dist/jsx/components/DataTableCell/CellModalEditor.native.js +73 -66
- package/dist/jsx/components/DataTableCell/CellModalEditor.native.js.map +1 -1
- package/dist/jsx/components/DataTableCell/CellOptionsEditor.mjs +62 -0
- package/dist/jsx/components/DataTableCell/CellOptionsEditor.mjs.map +1 -0
- package/dist/jsx/components/DataTableCell/CellOptionsEditor.native.js +100 -0
- package/dist/jsx/components/DataTableCell/CellOptionsEditor.native.js.map +1 -0
- package/dist/jsx/components/DataTableCell/index.mjs +527 -149
- package/dist/jsx/components/DataTableCell/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableCell/index.native.js +666 -210
- package/dist/jsx/components/DataTableCell/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableColumnPinning/index.mjs +99 -28
- package/dist/jsx/components/DataTableColumnPinning/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableColumnPinning/index.native.js +101 -25
- package/dist/jsx/components/DataTableColumnPinning/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableDateFilter/index.mjs +387 -200
- package/dist/jsx/components/DataTableDateFilter/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableDateFilter/index.native.js +414 -213
- package/dist/jsx/components/DataTableDateFilter/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableExport/index.mjs +223 -195
- package/dist/jsx/components/DataTableExport/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableExport/index.native.js +318 -217
- package/dist/jsx/components/DataTableExport/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableFilterButton/index.mjs +324 -0
- package/dist/jsx/components/DataTableFilterButton/index.mjs.map +1 -0
- package/dist/jsx/components/DataTableFilterButton/index.native.js +402 -0
- package/dist/jsx/components/DataTableFilterButton/index.native.js.map +1 -0
- package/dist/jsx/components/DataTableFilterChips/index.mjs +95 -0
- package/dist/jsx/components/DataTableFilterChips/index.mjs.map +1 -0
- package/dist/jsx/components/DataTableFilterChips/index.native.js +187 -0
- package/dist/jsx/components/DataTableFilterChips/index.native.js.map +1 -0
- package/dist/jsx/components/DataTableFilters/index.mjs +36 -31
- package/dist/jsx/components/DataTableFilters/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableFilters/index.native.js +36 -31
- package/dist/jsx/components/DataTableFilters/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableGrouping/index.mjs +248 -191
- package/dist/jsx/components/DataTableGrouping/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableGrouping/index.native.js +283 -203
- package/dist/jsx/components/DataTableGrouping/index.native.js.map +1 -1
- package/dist/jsx/components/DataTablePagination/index.mjs +105 -329
- package/dist/jsx/components/DataTablePagination/index.mjs.map +1 -1
- package/dist/jsx/components/DataTablePagination/index.native.js +115 -377
- package/dist/jsx/components/DataTablePagination/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableSearch/index.mjs +135 -156
- package/dist/jsx/components/DataTableSearch/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableSearch/index.native.js +164 -170
- package/dist/jsx/components/DataTableSearch/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableToolbar/index.mjs +75 -118
- package/dist/jsx/components/DataTableToolbar/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableToolbar/index.native.js +98 -123
- package/dist/jsx/components/DataTableToolbar/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableViewOptions/index.mjs +75 -171
- package/dist/jsx/components/DataTableViewOptions/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableViewOptions/index.native.js +88 -184
- package/dist/jsx/components/DataTableViewOptions/index.native.js.map +1 -1
- package/dist/jsx/components/FilterManager.mjs +7 -5
- package/dist/jsx/components/FilterManager.mjs.map +1 -1
- package/dist/jsx/components/FilterManager.native.js +21 -8
- package/dist/jsx/components/FilterManager.native.js.map +1 -1
- package/dist/jsx/components/FilterOperatorValueEditor/index.mjs +84 -0
- package/dist/jsx/components/FilterOperatorValueEditor/index.mjs.map +1 -0
- package/dist/jsx/components/FilterOperatorValueEditor/index.native.js +121 -0
- package/dist/jsx/components/FilterOperatorValueEditor/index.native.js.map +1 -0
- package/dist/jsx/components/SavedFilterDropdown.mjs +3 -3
- package/dist/jsx/components/SavedFilterDropdown.mjs.map +1 -1
- package/dist/jsx/components/SavedFilterDropdown.native.js +3 -3
- package/dist/jsx/components/SavedFilterDropdown.native.js.map +1 -1
- package/dist/jsx/components/SimpleTable/index.mjs +22 -15
- package/dist/jsx/components/SimpleTable/index.mjs.map +1 -1
- package/dist/jsx/components/SimpleTable/index.native.js +31 -19
- package/dist/jsx/components/SimpleTable/index.native.js.map +1 -1
- package/dist/jsx/components/TableInput/index.mjs +149 -49
- package/dist/jsx/components/TableInput/index.mjs.map +1 -1
- package/dist/jsx/components/TableInput/index.native.js +181 -71
- package/dist/jsx/components/TableInput/index.native.js.map +1 -1
- package/dist/jsx/components/TableInput/shared.mjs +9 -0
- package/dist/jsx/components/TableInput/shared.mjs.map +1 -0
- package/dist/jsx/components/TableInput/shared.native.js +41 -0
- package/dist/jsx/components/TableInput/shared.native.js.map +1 -0
- package/dist/jsx/hooks/useDataTable.mjs +115 -22
- package/dist/jsx/hooks/useDataTable.mjs.map +1 -1
- package/dist/jsx/hooks/useDataTable.native.js +126 -25
- package/dist/jsx/hooks/useDataTable.native.js.map +1 -1
- package/dist/jsx/hooks/useInfiniteRows.mjs +168 -0
- package/dist/jsx/hooks/useInfiniteRows.mjs.map +1 -0
- package/dist/jsx/hooks/useInfiniteRows.native.js +203 -0
- package/dist/jsx/hooks/useInfiniteRows.native.js.map +1 -0
- package/dist/jsx/hooks/useTableFiltering.mjs +14 -18
- package/dist/jsx/hooks/useTableFiltering.mjs.map +1 -1
- package/dist/jsx/hooks/useTableFiltering.native.js +17 -23
- package/dist/jsx/hooks/useTableFiltering.native.js.map +1 -1
- package/dist/jsx/hooks/useTablePagination.mjs +2 -2
- package/dist/jsx/hooks/useTablePagination.mjs.map +1 -1
- package/dist/jsx/hooks/useTablePagination.native.js +2 -2
- package/dist/jsx/hooks/useTablePagination.native.js.map +1 -1
- package/dist/jsx/index.js +8 -1
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +8 -1
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +25 -0
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/shared/t.mjs +14 -0
- package/dist/jsx/shared/t.mjs.map +1 -0
- package/dist/jsx/shared/t.native.js +55 -0
- package/dist/jsx/shared/t.native.js.map +1 -0
- package/dist/jsx/utils/columnAlign.mjs +34 -0
- package/dist/jsx/utils/columnAlign.mjs.map +1 -0
- package/dist/jsx/utils/columnAlign.native.js +67 -0
- package/dist/jsx/utils/columnAlign.native.js.map +1 -0
- package/dist/jsx/utils/filterFields.mjs +149 -0
- package/dist/jsx/utils/filterFields.mjs.map +1 -0
- package/dist/jsx/utils/filterFields.native.js +247 -0
- package/dist/jsx/utils/filterFields.native.js.map +1 -0
- package/dist/jsx/utils/filterUtils.mjs +39 -20
- package/dist/jsx/utils/filterUtils.mjs.map +1 -1
- package/dist/jsx/utils/filterUtils.native.js +39 -20
- package/dist/jsx/utils/filterUtils.native.js.map +1 -1
- package/dist/jsx/utils/paginationDefaults.mjs +5 -0
- package/dist/jsx/utils/paginationDefaults.mjs.map +1 -0
- package/dist/jsx/utils/paginationDefaults.native.js +35 -0
- package/dist/jsx/utils/paginationDefaults.native.js.map +1 -0
- package/dist/jsx/utils/urlStateUtils.mjs +2 -1
- package/dist/jsx/utils/urlStateUtils.mjs.map +1 -1
- package/dist/jsx/utils/urlStateUtils.native.js +2 -1
- package/dist/jsx/utils/urlStateUtils.native.js.map +1 -1
- package/dist/jsx/utils/viewData.mjs +20 -0
- package/dist/jsx/utils/viewData.mjs.map +1 -0
- package/dist/jsx/utils/viewData.native.js +69 -0
- package/dist/jsx/utils/viewData.native.js.map +1 -0
- package/dist/jsx/utils/withInterp.mjs +13 -0
- package/dist/jsx/utils/withInterp.mjs.map +1 -0
- package/dist/jsx/utils/withInterp.native.js +42 -0
- package/dist/jsx/utils/withInterp.native.js.map +1 -0
- package/package.json +29 -19
- package/src/components/ChildTable/index.tsx +70 -9
- package/src/components/ColumnHeaderFilter/index.tsx +43 -161
- package/src/components/DataTable/DataTable.spec.tsx +347 -0
- package/src/components/DataTable/DataTable.stories.tsx +363 -9
- package/src/components/DataTable/DataTableCardControls.tsx +148 -0
- package/src/components/DataTable/DataTableMobileCards.tsx +153 -80
- package/src/components/DataTable/DataTableRoot.tsx +847 -181
- package/src/components/DataTable/DataTableStateContext.ts +24 -1
- package/src/components/DataTable/DataTableVirtualized.tsx +98 -4
- package/src/components/DataTable/FieldsInCells.stories.tsx +296 -6
- package/src/components/DataTable/cardLayout.spec.tsx +294 -0
- package/src/components/DataTable/chromeInterplay.spec.tsx +282 -0
- package/src/components/DataTable/compoundComponent.spec.tsx +6 -1
- package/src/components/DataTable/disabledContract.spec.tsx +242 -0
- package/src/components/DataTable/expandCaretRtl.spec.tsx +80 -0
- package/src/components/DataTable/headerSorting.spec.tsx +155 -0
- package/src/components/DataTable/index.native.tsx +220 -77
- package/src/components/DataTable/index.tsx +2 -0
- package/src/components/DataTable/infiniteMode.spec.tsx +118 -0
- package/src/components/DataTable/pinningGeometry.spec.tsx +144 -0
- package/src/components/DataTable/rowActionLabels.spec.tsx +97 -0
- package/src/components/DataTable/virtualizedGrouping.spec.tsx +99 -0
- package/src/components/DataTableBulkActions/DataTableBulkActions.spec.tsx +276 -3
- package/src/components/DataTableBulkActions/DataTableBulkActions.stories.tsx +1 -0
- package/src/components/DataTableBulkActions/index.tsx +119 -184
- package/src/components/DataTableCell/CellModalEditor.native.tsx +116 -0
- package/src/components/DataTableCell/CellModalEditor.tsx +83 -11
- package/src/components/DataTableCell/CellOptionsEditor.tsx +91 -0
- package/src/components/DataTableCell/DataTableCell.stories.tsx +514 -9
- package/src/components/DataTableCell/cellDraftPolicy.spec.tsx +638 -0
- package/src/components/DataTableCell/dataTableCell.spec.tsx +174 -26
- package/src/components/DataTableCell/index.tsx +730 -191
- package/src/components/DataTableColumnPinning/DataTableColumnPinning.stories.tsx +14 -0
- package/src/components/DataTableColumnPinning/index.tsx +130 -36
- package/src/components/DataTableDateFilter/DataTableDateFilter.spec.tsx +234 -80
- package/src/components/DataTableDateFilter/DataTableDateFilter.stories.tsx +7 -32
- package/src/components/DataTableDateFilter/index.tsx +357 -160
- package/src/components/DataTableExport/DataTableExport.spec.tsx +225 -8
- package/src/components/DataTableExport/index.tsx +241 -186
- package/src/components/DataTableFilterButton/index.tsx +406 -0
- package/src/components/DataTableFilterChips/DataTableFilterChips.spec.tsx +190 -0
- package/src/components/DataTableFilterChips/index.tsx +127 -0
- package/src/components/DataTableFilters/index.tsx +39 -31
- package/src/components/DataTableGrouping/DataTableGrouping.spec.tsx +173 -1
- package/src/components/DataTableGrouping/index.tsx +233 -140
- package/src/components/DataTablePagination/DataTablePagination.spec.tsx +91 -12
- package/src/components/DataTablePagination/DataTablePagination.stories.tsx +182 -6
- package/src/components/DataTablePagination/index.tsx +97 -324
- package/src/components/DataTableSearch/DataTableSearch.spec.tsx +14 -14
- package/src/components/DataTableSearch/index.tsx +106 -118
- package/src/components/DataTableToolbar/DataTableToolbar.spec.tsx +51 -11
- package/src/components/DataTableToolbar/DataTableToolbar.stories.tsx +205 -8
- package/src/components/DataTableToolbar/index.tsx +86 -123
- package/src/components/DataTableViewOptions/DataTableViewOptions.spec.tsx +5 -5
- package/src/components/DataTableViewOptions/DataTableViewOptions.stories.tsx +41 -3
- package/src/components/DataTableViewOptions/index.tsx +89 -183
- package/src/components/FilterManager.spec.tsx +7 -4
- package/src/components/FilterManager.tsx +25 -5
- package/src/components/FilterOperatorValueEditor/index.tsx +124 -0
- package/src/components/SavedFilterDropdown.tsx +7 -5
- package/src/components/SimpleTable/SimpleTable.stories.tsx +114 -0
- package/src/components/SimpleTable/index.tsx +35 -17
- package/src/components/SimpleTable/simpleTable.spec.tsx +25 -5
- package/src/components/Table/Table.stories.tsx +105 -0
- package/src/components/Table/accessibility.spec.tsx +24 -8
- package/src/components/TableInput/TableInput.stories.tsx +266 -8
- package/src/components/TableInput/index.native.tsx +202 -51
- package/src/components/TableInput/index.tsx +236 -56
- package/src/components/TableInput/shared.ts +20 -0
- package/src/components/TableInput/tableInput.spec.tsx +458 -0
- package/src/components/componentConsistency.spec.tsx +19 -13
- package/src/hooks/hookDecomposition.spec.ts +35 -1
- package/src/hooks/useDataTable.ts +169 -24
- package/src/hooks/useInfiniteRows.spec.tsx +215 -0
- package/src/hooks/useInfiniteRows.ts +242 -0
- package/src/hooks/useTableFiltering.ts +22 -21
- package/src/hooks/useTablePagination.ts +2 -3
- package/src/index.ts +37 -1
- package/src/shared/t.ts +24 -0
- package/src/types.ts +217 -5
- package/src/utils/columnAlign.spec.ts +53 -0
- package/src/utils/columnAlign.ts +60 -0
- package/src/utils/filterFields.spec.ts +237 -0
- package/src/utils/filterFields.ts +273 -0
- package/src/utils/filterUtils.ts +34 -24
- package/src/utils/filterUtilsContracts.spec.ts +190 -0
- package/src/utils/paginationDefaults.spec.ts +43 -0
- package/src/utils/paginationDefaults.ts +21 -0
- package/src/utils/urlStateUtils.spec.ts +2 -2
- package/src/utils/urlStateUtils.ts +2 -1
- package/src/utils/viewData.ts +27 -0
- package/src/utils/withInterp.spec.ts +30 -0
- package/src/utils/withInterp.ts +31 -0
- package/types/components/ChildTable/index.d.ts +28 -0
- package/types/components/ChildTable/index.d.ts.map +1 -0
- package/types/components/ColumnHeaderFilter/index.d.ts +23 -0
- package/types/components/ColumnHeaderFilter/index.d.ts.map +1 -0
- package/types/components/DataTable/DataTableCardControls.d.ts +30 -0
- package/types/components/DataTable/DataTableCardControls.d.ts.map +1 -0
- package/types/components/DataTable/DataTableContext.d.ts +11 -0
- package/types/components/DataTable/DataTableContext.d.ts.map +1 -0
- package/types/components/DataTable/DataTableMobileCards.d.ts +37 -0
- package/types/components/DataTable/DataTableMobileCards.d.ts.map +1 -0
- package/types/components/DataTable/DataTableRoot.d.ts +22 -0
- package/types/components/DataTable/DataTableRoot.d.ts.map +1 -0
- package/types/components/DataTable/DataTableStateContext.d.ts +77 -0
- package/types/components/DataTable/DataTableStateContext.d.ts.map +1 -0
- package/types/components/DataTable/DataTableVirtualized.d.ts +36 -0
- package/types/components/DataTable/DataTableVirtualized.d.ts.map +1 -0
- package/types/components/DataTable/index.d.ts +42 -0
- package/types/components/DataTable/index.d.ts.map +1 -0
- package/types/components/DataTable/index.native.d.ts +33 -0
- package/types/components/DataTable/index.native.d.ts.map +1 -0
- package/types/components/DataTableBulkActions/index.d.ts +33 -0
- package/types/components/DataTableBulkActions/index.d.ts.map +1 -0
- package/types/components/DataTableCell/CellModalEditor.d.ts +34 -0
- package/types/components/DataTableCell/CellModalEditor.d.ts.map +1 -0
- package/types/components/DataTableCell/CellModalEditor.native.d.ts +20 -0
- package/types/components/DataTableCell/CellModalEditor.native.d.ts.map +1 -0
- package/types/components/DataTableCell/CellOptionsEditor.d.ts +30 -0
- package/types/components/DataTableCell/CellOptionsEditor.d.ts.map +1 -0
- package/types/components/DataTableCell/index.d.ts +51 -0
- package/types/components/DataTableCell/index.d.ts.map +1 -0
- package/types/components/DataTableColumnPinning/index.d.ts +53 -0
- package/types/components/DataTableColumnPinning/index.d.ts.map +1 -0
- package/types/components/DataTableDateFilter/index.d.ts +54 -0
- package/types/components/DataTableDateFilter/index.d.ts.map +1 -0
- package/types/components/DataTableExport/index.d.ts +37 -0
- package/types/components/DataTableExport/index.d.ts.map +1 -0
- package/types/components/DataTableFilterButton/index.d.ts +16 -0
- package/types/components/DataTableFilterButton/index.d.ts.map +1 -0
- package/types/components/DataTableFilterChips/index.d.ts +12 -0
- package/types/components/DataTableFilterChips/index.d.ts.map +1 -0
- package/types/components/DataTableFilters/index.d.ts +19 -0
- package/types/components/DataTableFilters/index.d.ts.map +1 -0
- package/types/components/DataTableGrouping/index.d.ts +79 -0
- package/types/components/DataTableGrouping/index.d.ts.map +1 -0
- package/types/components/DataTablePagination/index.d.ts +23 -0
- package/types/components/DataTablePagination/index.d.ts.map +1 -0
- package/types/components/DataTableSearch/index.d.ts +57 -0
- package/types/components/DataTableSearch/index.d.ts.map +1 -0
- package/types/components/DataTableToolbar/index.d.ts +23 -0
- package/types/components/DataTableToolbar/index.d.ts.map +1 -0
- package/types/components/DataTableViewOptions/index.d.ts +28 -0
- package/types/components/DataTableViewOptions/index.d.ts.map +1 -0
- package/types/components/FilterManager.d.ts +16 -0
- package/types/components/FilterManager.d.ts.map +1 -0
- package/types/components/FilterOperatorValueEditor/index.d.ts +23 -0
- package/types/components/FilterOperatorValueEditor/index.d.ts.map +1 -0
- package/types/components/KnobDialog.d.ts +57 -0
- package/types/components/KnobDialog.d.ts.map +1 -0
- package/types/components/SavedFilterDropdown.d.ts +11 -0
- package/types/components/SavedFilterDropdown.d.ts.map +1 -0
- package/types/components/SimpleTable/index.d.ts +45 -0
- package/types/components/SimpleTable/index.d.ts.map +1 -0
- package/types/components/TableInput/index.d.ts +66 -0
- package/types/components/TableInput/index.d.ts.map +1 -0
- package/types/components/TableInput/index.native.d.ts +55 -0
- package/types/components/TableInput/index.native.d.ts.map +1 -0
- package/types/components/TableInput/shared.d.ts +12 -0
- package/types/components/TableInput/shared.d.ts.map +1 -0
- package/types/hooks/useDataTable.d.ts +16 -0
- package/types/hooks/useDataTable.d.ts.map +1 -0
- package/types/hooks/useDataTableKeyboard.d.ts +22 -0
- package/types/hooks/useDataTableKeyboard.d.ts.map +1 -0
- package/types/hooks/useDragScroll.d.ts +10 -0
- package/types/hooks/useDragScroll.d.ts.map +1 -0
- package/types/hooks/useInfiniteRows.d.ts +57 -0
- package/types/hooks/useInfiniteRows.d.ts.map +1 -0
- package/types/hooks/useSavedFilters.d.ts +78 -0
- package/types/hooks/useSavedFilters.d.ts.map +1 -0
- package/types/hooks/useTableColumnPinning.d.ts +12 -0
- package/types/hooks/useTableColumnPinning.d.ts.map +1 -0
- package/types/hooks/useTableFiltering.d.ts +27 -0
- package/types/hooks/useTableFiltering.d.ts.map +1 -0
- package/types/hooks/useTableGrouping.d.ts +33 -0
- package/types/hooks/useTableGrouping.d.ts.map +1 -0
- package/types/hooks/useTableKeyboard.d.ts +24 -0
- package/types/hooks/useTableKeyboard.d.ts.map +1 -0
- package/types/hooks/useTablePagination.d.ts +17 -0
- package/types/hooks/useTablePagination.d.ts.map +1 -0
- package/types/hooks/useTableSearch.d.ts +27 -0
- package/types/hooks/useTableSearch.d.ts.map +1 -0
- package/types/hooks/useTableSelection.d.ts +14 -0
- package/types/hooks/useTableSelection.d.ts.map +1 -0
- package/types/hooks/useTableSorting.d.ts +12 -0
- package/types/hooks/useTableSorting.d.ts.map +1 -0
- package/types/hooks/useTableUrlSync.d.ts +15 -0
- package/types/hooks/useTableUrlSync.d.ts.map +1 -0
- package/types/hooks/useTableViews.d.ts +26 -0
- package/types/hooks/useTableViews.d.ts.map +1 -0
- package/types/index.d.ts +68 -0
- package/types/index.d.ts.map +1 -0
- package/types/shared/t.d.ts +10 -0
- package/types/shared/t.d.ts.map +1 -0
- package/types/shims/primitives.d.ts +3 -0
- package/types/shims/primitives.d.ts.map +1 -0
- package/types/shims/tableCellContext.d.ts +3 -0
- package/types/shims/tableCellContext.d.ts.map +1 -0
- package/types/types.d.ts +525 -0
- package/types/types.d.ts.map +1 -0
- package/types/utils/columnAlign.d.ts +23 -0
- package/types/utils/columnAlign.d.ts.map +1 -0
- package/types/utils/filterFields.d.ts +57 -0
- package/types/utils/filterFields.d.ts.map +1 -0
- package/types/utils/filterUtils.d.ts +24 -0
- package/types/utils/filterUtils.d.ts.map +1 -0
- package/types/utils/paginationDefaults.d.ts +18 -0
- package/types/utils/paginationDefaults.d.ts.map +1 -0
- package/types/utils/urlStateUtils.d.ts +8 -0
- package/types/utils/urlStateUtils.d.ts.map +1 -0
- package/types/utils/viewData.d.ts +11 -0
- package/types/utils/viewData.d.ts.map +1 -0
- package/types/utils/withInterp.d.ts +19 -0
- package/types/utils/withInterp.d.ts.map +1 -0
- package/dist/cjs/components/ColumnHeaderFilter/ColumnHeaderFilter.stories.cjs +0 -50
- package/dist/cjs/components/ColumnHeaderFilter/ColumnHeaderFilter.stories.native.js +0 -55
- package/dist/cjs/components/ColumnHeaderFilter/ColumnHeaderFilter.stories.native.js.map +0 -1
- package/dist/cjs/components/DataTable/DataTable.spec.cjs +0 -516
- package/dist/cjs/components/DataTable/DataTable.spec.native.js +0 -539
- package/dist/cjs/components/DataTable/DataTable.spec.native.js.map +0 -1
- package/dist/cjs/components/DataTable/DataTable.stories.cjs +0 -2779
- package/dist/cjs/components/DataTable/DataTable.stories.native.js +0 -2912
- package/dist/cjs/components/DataTable/DataTable.stories.native.js.map +0 -1
- package/dist/cjs/components/DataTable/FieldsInCells.stories.cjs +0 -244
- package/dist/cjs/components/DataTable/FieldsInCells.stories.native.js +0 -265
- package/dist/cjs/components/DataTable/FieldsInCells.stories.native.js.map +0 -1
- package/dist/cjs/components/DataTable/compoundComponent.spec.cjs +0 -334
- package/dist/cjs/components/DataTable/compoundComponent.spec.native.js +0 -348
- package/dist/cjs/components/DataTable/compoundComponent.spec.native.js.map +0 -1
- package/dist/cjs/components/DataTableBulkActions/DataTableBulkActions.spec.cjs +0 -305
- package/dist/cjs/components/DataTableBulkActions/DataTableBulkActions.spec.native.js +0 -340
- package/dist/cjs/components/DataTableBulkActions/DataTableBulkActions.spec.native.js.map +0 -1
- package/dist/cjs/components/DataTableBulkActions/DataTableBulkActions.stories.cjs +0 -347
- package/dist/cjs/components/DataTableBulkActions/DataTableBulkActions.stories.native.js +0 -372
- package/dist/cjs/components/DataTableBulkActions/DataTableBulkActions.stories.native.js.map +0 -1
- package/dist/cjs/components/DataTableCell/DataTableCell.stories.cjs +0 -50
- package/dist/cjs/components/DataTableCell/DataTableCell.stories.native.js +0 -55
- package/dist/cjs/components/DataTableCell/DataTableCell.stories.native.js.map +0 -1
- package/dist/cjs/components/DataTableCell/dataTableCell.spec.cjs +0 -203
- package/dist/cjs/components/DataTableCell/dataTableCell.spec.native.js +0 -220
- package/dist/cjs/components/DataTableCell/dataTableCell.spec.native.js.map +0 -1
- package/dist/cjs/components/DataTableColumnPinning/DataTableColumnPinning.spec.cjs +0 -287
- package/dist/cjs/components/DataTableColumnPinning/DataTableColumnPinning.spec.native.js +0 -315
- package/dist/cjs/components/DataTableColumnPinning/DataTableColumnPinning.spec.native.js.map +0 -1
- package/dist/cjs/components/DataTableColumnPinning/DataTableColumnPinning.stories.cjs +0 -486
- package/dist/cjs/components/DataTableColumnPinning/DataTableColumnPinning.stories.native.js +0 -541
- package/dist/cjs/components/DataTableColumnPinning/DataTableColumnPinning.stories.native.js.map +0 -1
- package/dist/cjs/components/DataTableDateFilter/DataTableDateFilter.spec.cjs +0 -409
- package/dist/cjs/components/DataTableDateFilter/DataTableDateFilter.spec.native.js +0 -459
- package/dist/cjs/components/DataTableDateFilter/DataTableDateFilter.spec.native.js.map +0 -1
- package/dist/cjs/components/DataTableDateFilter/DataTableDateFilter.stories.cjs +0 -368
- package/dist/cjs/components/DataTableDateFilter/DataTableDateFilter.stories.native.js +0 -375
- package/dist/cjs/components/DataTableDateFilter/DataTableDateFilter.stories.native.js.map +0 -1
- package/dist/cjs/components/DataTableExport/DataTableExport.spec.cjs +0 -334
- package/dist/cjs/components/DataTableExport/DataTableExport.spec.native.js +0 -349
- package/dist/cjs/components/DataTableExport/DataTableExport.spec.native.js.map +0 -1
- package/dist/cjs/components/DataTableExport/DataTableExport.stories.cjs +0 -452
- package/dist/cjs/components/DataTableExport/DataTableExport.stories.native.js +0 -479
- package/dist/cjs/components/DataTableExport/DataTableExport.stories.native.js.map +0 -1
- package/dist/cjs/components/DataTableFilters/DataTableFilters.spec.cjs +0 -687
- package/dist/cjs/components/DataTableFilters/DataTableFilters.spec.native.js +0 -698
- package/dist/cjs/components/DataTableFilters/DataTableFilters.spec.native.js.map +0 -1
- package/dist/cjs/components/DataTableFilters/DataTableFilters.stories.cjs +0 -551
- package/dist/cjs/components/DataTableFilters/DataTableFilters.stories.native.js +0 -564
- package/dist/cjs/components/DataTableFilters/DataTableFilters.stories.native.js.map +0 -1
- package/dist/cjs/components/DataTableGrouping/DataTableGrouping.spec.cjs +0 -249
- package/dist/cjs/components/DataTableGrouping/DataTableGrouping.spec.native.js +0 -284
- package/dist/cjs/components/DataTableGrouping/DataTableGrouping.spec.native.js.map +0 -1
- package/dist/cjs/components/DataTableGrouping/DataTableGrouping.stories.cjs +0 -523
- package/dist/cjs/components/DataTableGrouping/DataTableGrouping.stories.native.js +0 -545
- package/dist/cjs/components/DataTableGrouping/DataTableGrouping.stories.native.js.map +0 -1
- package/dist/cjs/components/DataTablePagination/DataTablePagination.spec.cjs +0 -386
- package/dist/cjs/components/DataTablePagination/DataTablePagination.spec.native.js +0 -389
- package/dist/cjs/components/DataTablePagination/DataTablePagination.spec.native.js.map +0 -1
- package/dist/cjs/components/DataTablePagination/DataTablePagination.stories.cjs +0 -604
- package/dist/cjs/components/DataTablePagination/DataTablePagination.stories.native.js +0 -627
- package/dist/cjs/components/DataTablePagination/DataTablePagination.stories.native.js.map +0 -1
- package/dist/cjs/components/DataTableSearch/DataTableSearch.spec.cjs +0 -469
- package/dist/cjs/components/DataTableSearch/DataTableSearch.spec.native.js +0 -472
- package/dist/cjs/components/DataTableSearch/DataTableSearch.spec.native.js.map +0 -1
- package/dist/cjs/components/DataTableSearch/DataTableSearch.stories.cjs +0 -82
- package/dist/cjs/components/DataTableSearch/DataTableSearch.stories.native.js +0 -89
- package/dist/cjs/components/DataTableSearch/DataTableSearch.stories.native.js.map +0 -1
- package/dist/cjs/components/DataTableToolbar/DataTableToolbar.spec.cjs +0 -572
- package/dist/cjs/components/DataTableToolbar/DataTableToolbar.spec.native.js +0 -575
- package/dist/cjs/components/DataTableToolbar/DataTableToolbar.spec.native.js.map +0 -1
- package/dist/cjs/components/DataTableToolbar/DataTableToolbar.stories.cjs +0 -51
- package/dist/cjs/components/DataTableToolbar/DataTableToolbar.stories.native.js +0 -56
- package/dist/cjs/components/DataTableToolbar/DataTableToolbar.stories.native.js.map +0 -1
- package/dist/cjs/components/DataTableViewOptions/DataTableViewOptions.spec.cjs +0 -126
- package/dist/cjs/components/DataTableViewOptions/DataTableViewOptions.spec.native.js +0 -129
- package/dist/cjs/components/DataTableViewOptions/DataTableViewOptions.spec.native.js.map +0 -1
- package/dist/cjs/components/DataTableViewOptions/DataTableViewOptions.stories.cjs +0 -436
- package/dist/cjs/components/DataTableViewOptions/DataTableViewOptions.stories.native.js +0 -458
- package/dist/cjs/components/DataTableViewOptions/DataTableViewOptions.stories.native.js.map +0 -1
- package/dist/cjs/components/FilterManager.spec.cjs +0 -52
- package/dist/cjs/components/FilterManager.spec.native.js +0 -55
- package/dist/cjs/components/FilterManager.spec.native.js.map +0 -1
- package/dist/cjs/components/SavedFilterDropdown.spec.cjs +0 -83
- package/dist/cjs/components/SavedFilterDropdown.spec.native.js +0 -86
- package/dist/cjs/components/SavedFilterDropdown.spec.native.js.map +0 -1
- package/dist/cjs/components/SimpleTable/simpleTable.spec.cjs +0 -162
- package/dist/cjs/components/SimpleTable/simpleTable.spec.native.js +0 -165
- package/dist/cjs/components/SimpleTable/simpleTable.spec.native.js.map +0 -1
- package/dist/cjs/components/Table/Table.stories.cjs +0 -196
- package/dist/cjs/components/Table/Table.stories.native.js +0 -207
- package/dist/cjs/components/Table/Table.stories.native.js.map +0 -1
- package/dist/cjs/components/Table/accessibility.spec.cjs +0 -186
- package/dist/cjs/components/Table/accessibility.spec.native.js +0 -216
- package/dist/cjs/components/Table/accessibility.spec.native.js.map +0 -1
- package/dist/cjs/components/TableInput/TableInput.stories.cjs +0 -50
- package/dist/cjs/components/TableInput/TableInput.stories.native.js +0 -55
- package/dist/cjs/components/TableInput/TableInput.stories.native.js.map +0 -1
- package/dist/cjs/components/componentConsistency.spec.cjs +0 -37
- package/dist/cjs/components/componentConsistency.spec.native.js +0 -48
- package/dist/cjs/components/componentConsistency.spec.native.js.map +0 -1
- package/dist/cjs/hooks/hookDecomposition.spec.cjs +0 -326
- package/dist/cjs/hooks/hookDecomposition.spec.native.js +0 -351
- package/dist/cjs/hooks/hookDecomposition.spec.native.js.map +0 -1
- package/dist/cjs/hooks/useDataTable.spec.cjs +0 -10
- package/dist/cjs/hooks/useDataTable.spec.native.js +0 -13
- package/dist/cjs/hooks/useDataTable.spec.native.js.map +0 -1
- package/dist/cjs/hooks/useSavedFilters.spec.cjs +0 -212
- package/dist/cjs/hooks/useSavedFilters.spec.native.js +0 -240
- package/dist/cjs/hooks/useSavedFilters.spec.native.js.map +0 -1
- package/dist/cjs/utils/filterUtils.spec.cjs +0 -350
- package/dist/cjs/utils/filterUtils.spec.native.js +0 -353
- package/dist/cjs/utils/filterUtils.spec.native.js.map +0 -1
- package/dist/cjs/utils/urlStateUtils.spec.cjs +0 -234
- package/dist/cjs/utils/urlStateUtils.spec.native.js +0 -239
- package/dist/cjs/utils/urlStateUtils.spec.native.js.map +0 -1
- package/dist/esm/components/ColumnHeaderFilter/ColumnHeaderFilter.stories.mjs +0 -24
- package/dist/esm/components/ColumnHeaderFilter/ColumnHeaderFilter.stories.mjs.map +0 -1
- package/dist/esm/components/ColumnHeaderFilter/ColumnHeaderFilter.stories.native.js +0 -26
- package/dist/esm/components/ColumnHeaderFilter/ColumnHeaderFilter.stories.native.js.map +0 -1
- package/dist/esm/components/DataTable/DataTable.spec.mjs +0 -517
- package/dist/esm/components/DataTable/DataTable.spec.mjs.map +0 -1
- package/dist/esm/components/DataTable/DataTable.spec.native.js +0 -537
- package/dist/esm/components/DataTable/DataTable.spec.native.js.map +0 -1
- package/dist/esm/components/DataTable/DataTable.stories.mjs +0 -2672
- package/dist/esm/components/DataTable/DataTable.stories.mjs.map +0 -1
- package/dist/esm/components/DataTable/DataTable.stories.native.js +0 -2802
- package/dist/esm/components/DataTable/DataTable.stories.native.js.map +0 -1
- package/dist/esm/components/DataTable/FieldsInCells.stories.mjs +0 -217
- package/dist/esm/components/DataTable/FieldsInCells.stories.mjs.map +0 -1
- package/dist/esm/components/DataTable/FieldsInCells.stories.native.js +0 -224
- package/dist/esm/components/DataTable/FieldsInCells.stories.native.js.map +0 -1
- package/dist/esm/components/DataTable/compoundComponent.spec.mjs +0 -335
- package/dist/esm/components/DataTable/compoundComponent.spec.mjs.map +0 -1
- package/dist/esm/components/DataTable/compoundComponent.spec.native.js +0 -346
- package/dist/esm/components/DataTable/compoundComponent.spec.native.js.map +0 -1
- package/dist/esm/components/DataTableBulkActions/DataTableBulkActions.spec.mjs +0 -306
- package/dist/esm/components/DataTableBulkActions/DataTableBulkActions.spec.mjs.map +0 -1
- package/dist/esm/components/DataTableBulkActions/DataTableBulkActions.spec.native.js +0 -338
- package/dist/esm/components/DataTableBulkActions/DataTableBulkActions.spec.native.js.map +0 -1
- package/dist/esm/components/DataTableBulkActions/DataTableBulkActions.stories.mjs +0 -304
- package/dist/esm/components/DataTableBulkActions/DataTableBulkActions.stories.mjs.map +0 -1
- package/dist/esm/components/DataTableBulkActions/DataTableBulkActions.stories.native.js +0 -326
- package/dist/esm/components/DataTableBulkActions/DataTableBulkActions.stories.native.js.map +0 -1
- package/dist/esm/components/DataTableCell/DataTableCell.stories.mjs +0 -24
- package/dist/esm/components/DataTableCell/DataTableCell.stories.mjs.map +0 -1
- package/dist/esm/components/DataTableCell/DataTableCell.stories.native.js +0 -26
- package/dist/esm/components/DataTableCell/DataTableCell.stories.native.js.map +0 -1
- package/dist/esm/components/DataTableCell/dataTableCell.spec.mjs +0 -180
- package/dist/esm/components/DataTableCell/dataTableCell.spec.mjs.map +0 -1
- package/dist/esm/components/DataTableCell/dataTableCell.spec.native.js +0 -194
- package/dist/esm/components/DataTableCell/dataTableCell.spec.native.js.map +0 -1
- package/dist/esm/components/DataTableColumnPinning/DataTableColumnPinning.spec.mjs +0 -264
- package/dist/esm/components/DataTableColumnPinning/DataTableColumnPinning.spec.mjs.map +0 -1
- package/dist/esm/components/DataTableColumnPinning/DataTableColumnPinning.spec.native.js +0 -289
- package/dist/esm/components/DataTableColumnPinning/DataTableColumnPinning.spec.native.js.map +0 -1
- package/dist/esm/components/DataTableColumnPinning/DataTableColumnPinning.stories.mjs +0 -457
- package/dist/esm/components/DataTableColumnPinning/DataTableColumnPinning.stories.mjs.map +0 -1
- package/dist/esm/components/DataTableColumnPinning/DataTableColumnPinning.stories.native.js +0 -509
- package/dist/esm/components/DataTableColumnPinning/DataTableColumnPinning.stories.native.js.map +0 -1
- package/dist/esm/components/DataTableDateFilter/DataTableDateFilter.spec.mjs +0 -386
- package/dist/esm/components/DataTableDateFilter/DataTableDateFilter.spec.mjs.map +0 -1
- package/dist/esm/components/DataTableDateFilter/DataTableDateFilter.spec.native.js +0 -433
- package/dist/esm/components/DataTableDateFilter/DataTableDateFilter.spec.native.js.map +0 -1
- package/dist/esm/components/DataTableDateFilter/DataTableDateFilter.stories.mjs +0 -325
- package/dist/esm/components/DataTableDateFilter/DataTableDateFilter.stories.mjs.map +0 -1
- package/dist/esm/components/DataTableDateFilter/DataTableDateFilter.stories.native.js +0 -329
- package/dist/esm/components/DataTableDateFilter/DataTableDateFilter.stories.native.js.map +0 -1
- package/dist/esm/components/DataTableExport/DataTableExport.spec.mjs +0 -335
- package/dist/esm/components/DataTableExport/DataTableExport.spec.mjs.map +0 -1
- package/dist/esm/components/DataTableExport/DataTableExport.spec.native.js +0 -347
- package/dist/esm/components/DataTableExport/DataTableExport.spec.native.js.map +0 -1
- package/dist/esm/components/DataTableExport/DataTableExport.stories.mjs +0 -419
- package/dist/esm/components/DataTableExport/DataTableExport.stories.mjs.map +0 -1
- package/dist/esm/components/DataTableExport/DataTableExport.stories.native.js +0 -443
- package/dist/esm/components/DataTableExport/DataTableExport.stories.native.js.map +0 -1
- package/dist/esm/components/DataTableFilters/DataTableFilters.spec.mjs +0 -688
- package/dist/esm/components/DataTableFilters/DataTableFilters.spec.mjs.map +0 -1
- package/dist/esm/components/DataTableFilters/DataTableFilters.spec.native.js +0 -696
- package/dist/esm/components/DataTableFilters/DataTableFilters.spec.native.js.map +0 -1
- package/dist/esm/components/DataTableFilters/DataTableFilters.stories.mjs +0 -499
- package/dist/esm/components/DataTableFilters/DataTableFilters.stories.mjs.map +0 -1
- package/dist/esm/components/DataTableFilters/DataTableFilters.stories.native.js +0 -509
- package/dist/esm/components/DataTableFilters/DataTableFilters.stories.native.js.map +0 -1
- package/dist/esm/components/DataTableGrouping/DataTableGrouping.spec.mjs +0 -249
- package/dist/esm/components/DataTableGrouping/DataTableGrouping.spec.mjs.map +0 -1
- package/dist/esm/components/DataTableGrouping/DataTableGrouping.spec.native.js +0 -281
- package/dist/esm/components/DataTableGrouping/DataTableGrouping.spec.native.js.map +0 -1
- package/dist/esm/components/DataTableGrouping/DataTableGrouping.stories.mjs +0 -479
- package/dist/esm/components/DataTableGrouping/DataTableGrouping.stories.mjs.map +0 -1
- package/dist/esm/components/DataTableGrouping/DataTableGrouping.stories.native.js +0 -498
- package/dist/esm/components/DataTableGrouping/DataTableGrouping.stories.native.js.map +0 -1
- package/dist/esm/components/DataTablePagination/DataTablePagination.spec.mjs +0 -387
- package/dist/esm/components/DataTablePagination/DataTablePagination.spec.mjs.map +0 -1
- package/dist/esm/components/DataTablePagination/DataTablePagination.spec.native.js +0 -387
- package/dist/esm/components/DataTablePagination/DataTablePagination.spec.native.js.map +0 -1
- package/dist/esm/components/DataTablePagination/DataTablePagination.stories.mjs +0 -546
- package/dist/esm/components/DataTablePagination/DataTablePagination.stories.mjs.map +0 -1
- package/dist/esm/components/DataTablePagination/DataTablePagination.stories.native.js +0 -566
- package/dist/esm/components/DataTablePagination/DataTablePagination.stories.native.js.map +0 -1
- package/dist/esm/components/DataTableSearch/DataTableSearch.spec.mjs +0 -470
- package/dist/esm/components/DataTableSearch/DataTableSearch.spec.mjs.map +0 -1
- package/dist/esm/components/DataTableSearch/DataTableSearch.spec.native.js +0 -470
- package/dist/esm/components/DataTableSearch/DataTableSearch.spec.native.js.map +0 -1
- package/dist/esm/components/DataTableSearch/DataTableSearch.stories.mjs +0 -56
- package/dist/esm/components/DataTableSearch/DataTableSearch.stories.mjs.map +0 -1
- package/dist/esm/components/DataTableSearch/DataTableSearch.stories.native.js +0 -60
- package/dist/esm/components/DataTableSearch/DataTableSearch.stories.native.js.map +0 -1
- package/dist/esm/components/DataTableToolbar/DataTableToolbar.spec.mjs +0 -573
- package/dist/esm/components/DataTableToolbar/DataTableToolbar.spec.mjs.map +0 -1
- package/dist/esm/components/DataTableToolbar/DataTableToolbar.spec.native.js +0 -573
- package/dist/esm/components/DataTableToolbar/DataTableToolbar.spec.native.js.map +0 -1
- package/dist/esm/components/DataTableToolbar/DataTableToolbar.stories.mjs +0 -25
- package/dist/esm/components/DataTableToolbar/DataTableToolbar.stories.mjs.map +0 -1
- package/dist/esm/components/DataTableToolbar/DataTableToolbar.stories.native.js +0 -27
- package/dist/esm/components/DataTableToolbar/DataTableToolbar.stories.native.js.map +0 -1
- package/dist/esm/components/DataTableViewOptions/DataTableViewOptions.spec.mjs +0 -126
- package/dist/esm/components/DataTableViewOptions/DataTableViewOptions.spec.mjs.map +0 -1
- package/dist/esm/components/DataTableViewOptions/DataTableViewOptions.spec.native.js +0 -126
- package/dist/esm/components/DataTableViewOptions/DataTableViewOptions.spec.native.js.map +0 -1
- package/dist/esm/components/DataTableViewOptions/DataTableViewOptions.stories.mjs +0 -393
- package/dist/esm/components/DataTableViewOptions/DataTableViewOptions.stories.mjs.map +0 -1
- package/dist/esm/components/DataTableViewOptions/DataTableViewOptions.stories.native.js +0 -412
- package/dist/esm/components/DataTableViewOptions/DataTableViewOptions.stories.native.js.map +0 -1
- package/dist/esm/components/FilterManager.spec.mjs +0 -53
- package/dist/esm/components/FilterManager.spec.mjs.map +0 -1
- package/dist/esm/components/FilterManager.spec.native.js +0 -53
- package/dist/esm/components/FilterManager.spec.native.js.map +0 -1
- package/dist/esm/components/SavedFilterDropdown.spec.mjs +0 -84
- package/dist/esm/components/SavedFilterDropdown.spec.mjs.map +0 -1
- package/dist/esm/components/SavedFilterDropdown.spec.native.js +0 -84
- package/dist/esm/components/SavedFilterDropdown.spec.native.js.map +0 -1
- package/dist/esm/components/SimpleTable/simpleTable.spec.mjs +0 -163
- package/dist/esm/components/SimpleTable/simpleTable.spec.mjs.map +0 -1
- package/dist/esm/components/SimpleTable/simpleTable.spec.native.js +0 -163
- package/dist/esm/components/SimpleTable/simpleTable.spec.native.js.map +0 -1
- package/dist/esm/components/Table/Table.stories.mjs +0 -167
- package/dist/esm/components/Table/Table.stories.mjs.map +0 -1
- package/dist/esm/components/Table/Table.stories.native.js +0 -175
- package/dist/esm/components/Table/Table.stories.native.js.map +0 -1
- package/dist/esm/components/Table/accessibility.spec.mjs +0 -187
- package/dist/esm/components/Table/accessibility.spec.mjs.map +0 -1
- package/dist/esm/components/Table/accessibility.spec.native.js +0 -214
- package/dist/esm/components/Table/accessibility.spec.native.js.map +0 -1
- package/dist/esm/components/TableInput/TableInput.stories.mjs +0 -24
- package/dist/esm/components/TableInput/TableInput.stories.mjs.map +0 -1
- package/dist/esm/components/TableInput/TableInput.stories.native.js +0 -26
- package/dist/esm/components/TableInput/TableInput.stories.native.js.map +0 -1
- package/dist/esm/components/componentConsistency.spec.mjs +0 -38
- package/dist/esm/components/componentConsistency.spec.mjs.map +0 -1
- package/dist/esm/components/componentConsistency.spec.native.js +0 -46
- package/dist/esm/components/componentConsistency.spec.native.js.map +0 -1
- package/dist/esm/hooks/hookDecomposition.spec.mjs +0 -327
- package/dist/esm/hooks/hookDecomposition.spec.mjs.map +0 -1
- package/dist/esm/hooks/hookDecomposition.spec.native.js +0 -349
- package/dist/esm/hooks/hookDecomposition.spec.native.js.map +0 -1
- package/dist/esm/hooks/useDataTable.spec.mjs +0 -11
- package/dist/esm/hooks/useDataTable.spec.mjs.map +0 -1
- package/dist/esm/hooks/useDataTable.spec.native.js +0 -11
- package/dist/esm/hooks/useDataTable.spec.native.js.map +0 -1
- package/dist/esm/hooks/useSavedFilters.spec.mjs +0 -213
- package/dist/esm/hooks/useSavedFilters.spec.mjs.map +0 -1
- package/dist/esm/hooks/useSavedFilters.spec.native.js +0 -238
- package/dist/esm/hooks/useSavedFilters.spec.native.js.map +0 -1
- package/dist/esm/utils/filterUtils.spec.mjs +0 -351
- package/dist/esm/utils/filterUtils.spec.mjs.map +0 -1
- package/dist/esm/utils/filterUtils.spec.native.js +0 -351
- package/dist/esm/utils/filterUtils.spec.native.js.map +0 -1
- package/dist/esm/utils/urlStateUtils.spec.mjs +0 -235
- package/dist/esm/utils/urlStateUtils.spec.mjs.map +0 -1
- package/dist/esm/utils/urlStateUtils.spec.native.js +0 -237
- package/dist/esm/utils/urlStateUtils.spec.native.js.map +0 -1
- package/dist/jsx/components/ColumnHeaderFilter/ColumnHeaderFilter.stories.mjs +0 -24
- package/dist/jsx/components/ColumnHeaderFilter/ColumnHeaderFilter.stories.mjs.map +0 -1
- package/dist/jsx/components/ColumnHeaderFilter/ColumnHeaderFilter.stories.native.js +0 -55
- package/dist/jsx/components/ColumnHeaderFilter/ColumnHeaderFilter.stories.native.js.map +0 -1
- package/dist/jsx/components/DataTable/DataTable.spec.mjs +0 -517
- package/dist/jsx/components/DataTable/DataTable.spec.mjs.map +0 -1
- package/dist/jsx/components/DataTable/DataTable.spec.native.js +0 -539
- package/dist/jsx/components/DataTable/DataTable.spec.native.js.map +0 -1
- package/dist/jsx/components/DataTable/DataTable.stories.mjs +0 -2672
- package/dist/jsx/components/DataTable/DataTable.stories.mjs.map +0 -1
- package/dist/jsx/components/DataTable/DataTable.stories.native.js +0 -2912
- package/dist/jsx/components/DataTable/DataTable.stories.native.js.map +0 -1
- package/dist/jsx/components/DataTable/FieldsInCells.stories.mjs +0 -217
- package/dist/jsx/components/DataTable/FieldsInCells.stories.mjs.map +0 -1
- package/dist/jsx/components/DataTable/FieldsInCells.stories.native.js +0 -265
- package/dist/jsx/components/DataTable/FieldsInCells.stories.native.js.map +0 -1
- package/dist/jsx/components/DataTable/compoundComponent.spec.mjs +0 -335
- package/dist/jsx/components/DataTable/compoundComponent.spec.mjs.map +0 -1
- package/dist/jsx/components/DataTable/compoundComponent.spec.native.js +0 -348
- package/dist/jsx/components/DataTable/compoundComponent.spec.native.js.map +0 -1
- package/dist/jsx/components/DataTableBulkActions/DataTableBulkActions.spec.mjs +0 -306
- package/dist/jsx/components/DataTableBulkActions/DataTableBulkActions.spec.mjs.map +0 -1
- package/dist/jsx/components/DataTableBulkActions/DataTableBulkActions.spec.native.js +0 -340
- package/dist/jsx/components/DataTableBulkActions/DataTableBulkActions.spec.native.js.map +0 -1
- package/dist/jsx/components/DataTableBulkActions/DataTableBulkActions.stories.mjs +0 -304
- package/dist/jsx/components/DataTableBulkActions/DataTableBulkActions.stories.mjs.map +0 -1
- package/dist/jsx/components/DataTableBulkActions/DataTableBulkActions.stories.native.js +0 -372
- package/dist/jsx/components/DataTableBulkActions/DataTableBulkActions.stories.native.js.map +0 -1
- package/dist/jsx/components/DataTableCell/DataTableCell.stories.mjs +0 -24
- package/dist/jsx/components/DataTableCell/DataTableCell.stories.mjs.map +0 -1
- package/dist/jsx/components/DataTableCell/DataTableCell.stories.native.js +0 -55
- package/dist/jsx/components/DataTableCell/DataTableCell.stories.native.js.map +0 -1
- package/dist/jsx/components/DataTableCell/dataTableCell.spec.mjs +0 -180
- package/dist/jsx/components/DataTableCell/dataTableCell.spec.mjs.map +0 -1
- package/dist/jsx/components/DataTableCell/dataTableCell.spec.native.js +0 -220
- package/dist/jsx/components/DataTableCell/dataTableCell.spec.native.js.map +0 -1
- package/dist/jsx/components/DataTableColumnPinning/DataTableColumnPinning.spec.mjs +0 -264
- package/dist/jsx/components/DataTableColumnPinning/DataTableColumnPinning.spec.mjs.map +0 -1
- package/dist/jsx/components/DataTableColumnPinning/DataTableColumnPinning.spec.native.js +0 -315
- package/dist/jsx/components/DataTableColumnPinning/DataTableColumnPinning.spec.native.js.map +0 -1
- package/dist/jsx/components/DataTableColumnPinning/DataTableColumnPinning.stories.mjs +0 -457
- package/dist/jsx/components/DataTableColumnPinning/DataTableColumnPinning.stories.mjs.map +0 -1
- package/dist/jsx/components/DataTableColumnPinning/DataTableColumnPinning.stories.native.js +0 -541
- package/dist/jsx/components/DataTableColumnPinning/DataTableColumnPinning.stories.native.js.map +0 -1
- package/dist/jsx/components/DataTableDateFilter/DataTableDateFilter.spec.mjs +0 -386
- package/dist/jsx/components/DataTableDateFilter/DataTableDateFilter.spec.mjs.map +0 -1
- package/dist/jsx/components/DataTableDateFilter/DataTableDateFilter.spec.native.js +0 -459
- package/dist/jsx/components/DataTableDateFilter/DataTableDateFilter.spec.native.js.map +0 -1
- package/dist/jsx/components/DataTableDateFilter/DataTableDateFilter.stories.mjs +0 -325
- package/dist/jsx/components/DataTableDateFilter/DataTableDateFilter.stories.mjs.map +0 -1
- package/dist/jsx/components/DataTableDateFilter/DataTableDateFilter.stories.native.js +0 -375
- package/dist/jsx/components/DataTableDateFilter/DataTableDateFilter.stories.native.js.map +0 -1
- package/dist/jsx/components/DataTableExport/DataTableExport.spec.mjs +0 -335
- package/dist/jsx/components/DataTableExport/DataTableExport.spec.mjs.map +0 -1
- package/dist/jsx/components/DataTableExport/DataTableExport.spec.native.js +0 -349
- package/dist/jsx/components/DataTableExport/DataTableExport.spec.native.js.map +0 -1
- package/dist/jsx/components/DataTableExport/DataTableExport.stories.mjs +0 -419
- package/dist/jsx/components/DataTableExport/DataTableExport.stories.mjs.map +0 -1
- package/dist/jsx/components/DataTableExport/DataTableExport.stories.native.js +0 -479
- package/dist/jsx/components/DataTableExport/DataTableExport.stories.native.js.map +0 -1
- package/dist/jsx/components/DataTableFilters/DataTableFilters.spec.mjs +0 -688
- package/dist/jsx/components/DataTableFilters/DataTableFilters.spec.mjs.map +0 -1
- package/dist/jsx/components/DataTableFilters/DataTableFilters.spec.native.js +0 -698
- package/dist/jsx/components/DataTableFilters/DataTableFilters.spec.native.js.map +0 -1
- package/dist/jsx/components/DataTableFilters/DataTableFilters.stories.mjs +0 -499
- package/dist/jsx/components/DataTableFilters/DataTableFilters.stories.mjs.map +0 -1
- package/dist/jsx/components/DataTableFilters/DataTableFilters.stories.native.js +0 -564
- package/dist/jsx/components/DataTableFilters/DataTableFilters.stories.native.js.map +0 -1
- package/dist/jsx/components/DataTableGrouping/DataTableGrouping.spec.mjs +0 -249
- package/dist/jsx/components/DataTableGrouping/DataTableGrouping.spec.mjs.map +0 -1
- package/dist/jsx/components/DataTableGrouping/DataTableGrouping.spec.native.js +0 -284
- package/dist/jsx/components/DataTableGrouping/DataTableGrouping.spec.native.js.map +0 -1
- package/dist/jsx/components/DataTableGrouping/DataTableGrouping.stories.mjs +0 -479
- package/dist/jsx/components/DataTableGrouping/DataTableGrouping.stories.mjs.map +0 -1
- package/dist/jsx/components/DataTableGrouping/DataTableGrouping.stories.native.js +0 -545
- package/dist/jsx/components/DataTableGrouping/DataTableGrouping.stories.native.js.map +0 -1
- package/dist/jsx/components/DataTablePagination/DataTablePagination.spec.mjs +0 -387
- package/dist/jsx/components/DataTablePagination/DataTablePagination.spec.mjs.map +0 -1
- package/dist/jsx/components/DataTablePagination/DataTablePagination.spec.native.js +0 -389
- package/dist/jsx/components/DataTablePagination/DataTablePagination.spec.native.js.map +0 -1
- package/dist/jsx/components/DataTablePagination/DataTablePagination.stories.mjs +0 -546
- package/dist/jsx/components/DataTablePagination/DataTablePagination.stories.mjs.map +0 -1
- package/dist/jsx/components/DataTablePagination/DataTablePagination.stories.native.js +0 -627
- package/dist/jsx/components/DataTablePagination/DataTablePagination.stories.native.js.map +0 -1
- package/dist/jsx/components/DataTableSearch/DataTableSearch.spec.mjs +0 -470
- package/dist/jsx/components/DataTableSearch/DataTableSearch.spec.mjs.map +0 -1
- package/dist/jsx/components/DataTableSearch/DataTableSearch.spec.native.js +0 -472
- package/dist/jsx/components/DataTableSearch/DataTableSearch.spec.native.js.map +0 -1
- package/dist/jsx/components/DataTableSearch/DataTableSearch.stories.mjs +0 -56
- package/dist/jsx/components/DataTableSearch/DataTableSearch.stories.mjs.map +0 -1
- package/dist/jsx/components/DataTableSearch/DataTableSearch.stories.native.js +0 -89
- package/dist/jsx/components/DataTableSearch/DataTableSearch.stories.native.js.map +0 -1
- package/dist/jsx/components/DataTableToolbar/DataTableToolbar.spec.mjs +0 -573
- package/dist/jsx/components/DataTableToolbar/DataTableToolbar.spec.mjs.map +0 -1
- package/dist/jsx/components/DataTableToolbar/DataTableToolbar.spec.native.js +0 -575
- package/dist/jsx/components/DataTableToolbar/DataTableToolbar.spec.native.js.map +0 -1
- package/dist/jsx/components/DataTableToolbar/DataTableToolbar.stories.mjs +0 -25
- package/dist/jsx/components/DataTableToolbar/DataTableToolbar.stories.mjs.map +0 -1
- package/dist/jsx/components/DataTableToolbar/DataTableToolbar.stories.native.js +0 -56
- package/dist/jsx/components/DataTableToolbar/DataTableToolbar.stories.native.js.map +0 -1
- package/dist/jsx/components/DataTableViewOptions/DataTableViewOptions.spec.mjs +0 -126
- package/dist/jsx/components/DataTableViewOptions/DataTableViewOptions.spec.mjs.map +0 -1
- package/dist/jsx/components/DataTableViewOptions/DataTableViewOptions.spec.native.js +0 -129
- package/dist/jsx/components/DataTableViewOptions/DataTableViewOptions.spec.native.js.map +0 -1
- package/dist/jsx/components/DataTableViewOptions/DataTableViewOptions.stories.mjs +0 -393
- package/dist/jsx/components/DataTableViewOptions/DataTableViewOptions.stories.mjs.map +0 -1
- package/dist/jsx/components/DataTableViewOptions/DataTableViewOptions.stories.native.js +0 -458
- package/dist/jsx/components/DataTableViewOptions/DataTableViewOptions.stories.native.js.map +0 -1
- package/dist/jsx/components/FilterManager.spec.mjs +0 -53
- package/dist/jsx/components/FilterManager.spec.mjs.map +0 -1
- package/dist/jsx/components/FilterManager.spec.native.js +0 -55
- package/dist/jsx/components/FilterManager.spec.native.js.map +0 -1
- package/dist/jsx/components/SavedFilterDropdown.spec.mjs +0 -84
- package/dist/jsx/components/SavedFilterDropdown.spec.mjs.map +0 -1
- package/dist/jsx/components/SavedFilterDropdown.spec.native.js +0 -86
- package/dist/jsx/components/SavedFilterDropdown.spec.native.js.map +0 -1
- package/dist/jsx/components/SimpleTable/simpleTable.spec.mjs +0 -163
- package/dist/jsx/components/SimpleTable/simpleTable.spec.mjs.map +0 -1
- package/dist/jsx/components/SimpleTable/simpleTable.spec.native.js +0 -165
- package/dist/jsx/components/SimpleTable/simpleTable.spec.native.js.map +0 -1
- package/dist/jsx/components/Table/Table.stories.mjs +0 -167
- package/dist/jsx/components/Table/Table.stories.mjs.map +0 -1
- package/dist/jsx/components/Table/Table.stories.native.js +0 -207
- package/dist/jsx/components/Table/Table.stories.native.js.map +0 -1
- package/dist/jsx/components/Table/accessibility.spec.mjs +0 -187
- package/dist/jsx/components/Table/accessibility.spec.mjs.map +0 -1
- package/dist/jsx/components/Table/accessibility.spec.native.js +0 -216
- package/dist/jsx/components/Table/accessibility.spec.native.js.map +0 -1
- package/dist/jsx/components/TableInput/TableInput.stories.mjs +0 -24
- package/dist/jsx/components/TableInput/TableInput.stories.mjs.map +0 -1
- package/dist/jsx/components/TableInput/TableInput.stories.native.js +0 -55
- package/dist/jsx/components/TableInput/TableInput.stories.native.js.map +0 -1
- package/dist/jsx/components/componentConsistency.spec.mjs +0 -38
- package/dist/jsx/components/componentConsistency.spec.mjs.map +0 -1
- package/dist/jsx/components/componentConsistency.spec.native.js +0 -48
- package/dist/jsx/components/componentConsistency.spec.native.js.map +0 -1
- package/dist/jsx/hooks/hookDecomposition.spec.mjs +0 -327
- package/dist/jsx/hooks/hookDecomposition.spec.mjs.map +0 -1
- package/dist/jsx/hooks/hookDecomposition.spec.native.js +0 -351
- package/dist/jsx/hooks/hookDecomposition.spec.native.js.map +0 -1
- package/dist/jsx/hooks/useDataTable.spec.mjs +0 -11
- package/dist/jsx/hooks/useDataTable.spec.mjs.map +0 -1
- package/dist/jsx/hooks/useDataTable.spec.native.js +0 -13
- package/dist/jsx/hooks/useDataTable.spec.native.js.map +0 -1
- package/dist/jsx/hooks/useSavedFilters.spec.mjs +0 -213
- package/dist/jsx/hooks/useSavedFilters.spec.mjs.map +0 -1
- package/dist/jsx/hooks/useSavedFilters.spec.native.js +0 -240
- package/dist/jsx/hooks/useSavedFilters.spec.native.js.map +0 -1
- package/dist/jsx/utils/filterUtils.spec.mjs +0 -351
- package/dist/jsx/utils/filterUtils.spec.mjs.map +0 -1
- package/dist/jsx/utils/filterUtils.spec.native.js +0 -353
- package/dist/jsx/utils/filterUtils.spec.native.js.map +0 -1
- package/dist/jsx/utils/urlStateUtils.spec.mjs +0 -235
- package/dist/jsx/utils/urlStateUtils.spec.mjs.map +0 -1
- package/dist/jsx/utils/urlStateUtils.spec.native.js +0 -239
- package/dist/jsx/utils/urlStateUtils.spec.native.js.map +0 -1
|
@@ -11,83 +11,79 @@
|
|
|
11
11
|
|
|
12
12
|
import {
|
|
13
13
|
CaretDownIcon,
|
|
14
|
+
CaretLeftIcon,
|
|
14
15
|
CaretRightIcon,
|
|
15
16
|
CaretUpDownIcon,
|
|
16
17
|
PlusIcon,
|
|
17
18
|
TrashIcon,
|
|
18
19
|
} from "@phosphor-icons/react";
|
|
19
|
-
import { Button, Field, useFormField, zIndex } from "@multiplatform.one/forms";
|
|
20
|
+
import { Button, Checkbox, Field, Spinner, useFormField, zIndex } from "@multiplatform.one/forms";
|
|
20
21
|
import { flexRender } from "@tanstack/react-table";
|
|
21
22
|
import { useVirtualizer } from "@tanstack/react-virtual";
|
|
22
|
-
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
23
|
-
import React, { useRef, useMemo, useCallback } from "react";
|
|
24
|
-
import {
|
|
25
|
-
|
|
23
|
+
import { ensureFocusVisibleRing, useResolvedKnobs } from "@multiplatform.one/theme";
|
|
24
|
+
import React, { useEffect, useRef, useMemo, useCallback, useState } from "react";
|
|
25
|
+
import {
|
|
26
|
+
AsyncBoundary,
|
|
27
|
+
EmptyState,
|
|
28
|
+
Skeleton,
|
|
29
|
+
Tooltip,
|
|
30
|
+
useDirection,
|
|
31
|
+
} from "@multiplatform.one/components";
|
|
32
|
+
import { Text, View, isWeb, useMedia } from "tamagui";
|
|
26
33
|
import { useTranslation } from "react-i18next";
|
|
27
34
|
import { useDataTable } from "../../hooks/useDataTable";
|
|
28
35
|
import { useDragScroll } from "../../hooks/useDragScroll";
|
|
29
36
|
import { useDataTableKeyboard } from "../../hooks/useDataTableKeyboard";
|
|
30
|
-
import type {
|
|
37
|
+
import type {
|
|
38
|
+
BulkAction,
|
|
39
|
+
DataTableColumn,
|
|
40
|
+
DataTableField,
|
|
41
|
+
DataTableProps,
|
|
42
|
+
SelectAllScope,
|
|
43
|
+
} from "../../types";
|
|
31
44
|
import { DataTableColumnPinning } from "../DataTableColumnPinning";
|
|
32
45
|
import { DataTablePagination } from "../DataTablePagination";
|
|
33
46
|
import { DataTableToolbar } from "../DataTableToolbar";
|
|
47
|
+
import { DataTableBulkActions } from "../DataTableBulkActions";
|
|
34
48
|
import { DataTableCell } from "../DataTableCell";
|
|
35
49
|
import { ColumnHeaderFilter } from "../ColumnHeaderFilter";
|
|
50
|
+
import { DataTableFilterChips } from "../DataTableFilterChips";
|
|
36
51
|
import { Table } from "@multiplatform.one/table-primitives";
|
|
37
52
|
import { DataTableContext } from "./DataTableContext";
|
|
38
53
|
import { DataTableStateContext } from "./DataTableStateContext";
|
|
39
|
-
import type {
|
|
54
|
+
import type {
|
|
55
|
+
DataTableFilterUi,
|
|
56
|
+
DataTableStateContextValue,
|
|
57
|
+
FilterEditTarget,
|
|
58
|
+
} from "./DataTableStateContext";
|
|
59
|
+
import { DataTableCardControls } from "./DataTableCardControls";
|
|
40
60
|
import { DataTableMobileCards } from "./DataTableMobileCards";
|
|
41
61
|
import { DataTableVirtualized } from "./DataTableVirtualized";
|
|
62
|
+
import { alignToFlex, getDefaultColumnAlign } from "../../utils/columnAlign";
|
|
63
|
+
import { mapFieldToFilterType } from "../../utils/filterFields";
|
|
64
|
+
import { INFINITE_TRIGGER_ROWS } from "../../utils/paginationDefaults";
|
|
65
|
+
import { bidiIsolate, withInterp } from "../../utils/withInterp";
|
|
66
|
+
|
|
67
|
+
const SELECTION_COL_WIDTH = 40;
|
|
42
68
|
|
|
43
69
|
/** Returns the field type for a column, defaulting to "input" */
|
|
44
70
|
function getColumnField(column: DataTableColumn): DataTableField {
|
|
45
71
|
return column.field ?? "input";
|
|
46
72
|
}
|
|
47
73
|
|
|
48
|
-
/**
|
|
49
|
-
function
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
default:
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
74
|
+
/** Resolve DG-TBL-01 column alignment for a column def. */
|
|
75
|
+
function resolveColumnAlign(column: DataTableColumn) {
|
|
76
|
+
return getDefaultColumnAlign({
|
|
77
|
+
id: typeof column.id === "string" ? column.id : undefined,
|
|
78
|
+
align: column.align,
|
|
79
|
+
field: getColumnField(column),
|
|
80
|
+
fieldProps: column.fieldProps,
|
|
81
|
+
meta: column.meta as { align?: "left" | "center" | "right"; role?: string } | undefined,
|
|
82
|
+
});
|
|
60
83
|
}
|
|
61
84
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
field?: DataTableField,
|
|
65
|
-
): "text" | "number" | "date" | "boolean" | "select" {
|
|
66
|
-
switch (field) {
|
|
67
|
-
case "stepper":
|
|
68
|
-
case "slider":
|
|
69
|
-
case "progress":
|
|
70
|
-
case "rating":
|
|
71
|
-
case "duration":
|
|
72
|
-
return "number";
|
|
73
|
-
case "datepicker":
|
|
74
|
-
case "datetimepicker":
|
|
75
|
-
case "timepicker":
|
|
76
|
-
case "daterangepicker":
|
|
77
|
-
case "multidatepicker":
|
|
78
|
-
return "date";
|
|
79
|
-
case "checkbox":
|
|
80
|
-
case "switch":
|
|
81
|
-
return "boolean";
|
|
82
|
-
case "select":
|
|
83
|
-
case "combobox":
|
|
84
|
-
case "radiogroup":
|
|
85
|
-
case "togglegroup":
|
|
86
|
-
return "select";
|
|
87
|
-
default:
|
|
88
|
-
return "text";
|
|
89
|
-
}
|
|
90
|
-
}
|
|
85
|
+
// mapFieldToFilterType moved to utils/filterFields (shared with the filter
|
|
86
|
+
// model — LC-16, one mapping).
|
|
91
87
|
|
|
92
88
|
const rowHeightPx = 40;
|
|
93
89
|
|
|
@@ -107,6 +103,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
107
103
|
columns,
|
|
108
104
|
initialState,
|
|
109
105
|
onStateChange,
|
|
106
|
+
onRetry,
|
|
110
107
|
syncWithUrl = false,
|
|
111
108
|
urlDebounceMs = 500,
|
|
112
109
|
urlStrategy,
|
|
@@ -114,14 +111,19 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
114
111
|
manualPagination = false,
|
|
115
112
|
manualSorting = false,
|
|
116
113
|
enableFiltering = true,
|
|
114
|
+
filterableFields,
|
|
117
115
|
enableSorting = true,
|
|
118
116
|
enablePagination = true,
|
|
117
|
+
pageSizeOptions,
|
|
118
|
+
paginationMode = "pages",
|
|
119
|
+
loadPage,
|
|
119
120
|
enableColumnVisibility = true,
|
|
120
121
|
enableColumnOrdering = false,
|
|
121
122
|
enableColumnResizing = false,
|
|
122
123
|
enableGlobalSearch = true,
|
|
123
124
|
enableViews = false,
|
|
124
125
|
columnLayout = "equal",
|
|
126
|
+
layout = "auto",
|
|
125
127
|
enableVirtualization = false,
|
|
126
128
|
virtualizationHeight,
|
|
127
129
|
virtualizationOverscan = 5,
|
|
@@ -132,6 +134,9 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
132
134
|
maxPinnedColumns = 3,
|
|
133
135
|
enableGrouping = false,
|
|
134
136
|
enableKeyboardNavigation = false,
|
|
137
|
+
enableRowSelection = false,
|
|
138
|
+
selectAllScope: selectAllScopeProp,
|
|
139
|
+
bulkActions,
|
|
135
140
|
readOnly = false,
|
|
136
141
|
onCellChange,
|
|
137
142
|
name,
|
|
@@ -151,7 +156,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
151
156
|
className,
|
|
152
157
|
size,
|
|
153
158
|
compact = false,
|
|
154
|
-
disabled
|
|
159
|
+
disabled = false,
|
|
155
160
|
children,
|
|
156
161
|
"aria-label": ariaLabel,
|
|
157
162
|
"aria-describedby": ariaDescribedBy,
|
|
@@ -159,7 +164,25 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
159
164
|
}: DataTableRootProps<TData>) {
|
|
160
165
|
const { t } = useTranslation();
|
|
161
166
|
const { sm } = useMedia();
|
|
162
|
-
|
|
167
|
+
// Resolved responsive layout: cards below `$sm` (W11 compact class) unless
|
|
168
|
+
// pinned via the `layout` prop. Same table state drives both layouts.
|
|
169
|
+
const showCards = layout === "cards" || (layout === "auto" && sm === false);
|
|
170
|
+
const { knobProps, disabledState } = useResolvedKnobs({
|
|
171
|
+
intent: undefined,
|
|
172
|
+
component: "DataTable",
|
|
173
|
+
compact,
|
|
174
|
+
});
|
|
175
|
+
// Collapsed expand-caret points toward inline-end, so it mirrors in RTL via
|
|
176
|
+
// glyph swap (useDirection, Axiom 15); rotation sign flips so expanded
|
|
177
|
+
// still points down.
|
|
178
|
+
const isRTL = useDirection() === "rtl";
|
|
179
|
+
const ExpandCaretIcon = isRTL ? CaretLeftIcon : CaretRightIcon;
|
|
180
|
+
const expandedCaretRotation = isRTL ? "rotate(-90deg)" : "rotate(90deg)";
|
|
181
|
+
const tableZebraOn = knobProps.tableZebra === "on";
|
|
182
|
+
const bulkBarPlacement = knobProps.bulkBarPlacement === "bottom" ? "bottom" : "top";
|
|
183
|
+
// House selectAllScope knob (DG-TBL-03): prop overrides knob; default page.
|
|
184
|
+
const selectAllScope: SelectAllScope =
|
|
185
|
+
selectAllScopeProp ?? (knobProps.selectAllScope === "filtered" ? "filtered" : "page");
|
|
163
186
|
const { resolvedForm } = useFormField({ form: formProp });
|
|
164
187
|
|
|
165
188
|
const isFormMode = Boolean(name && resolvedForm);
|
|
@@ -176,8 +199,11 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
176
199
|
manualPagination,
|
|
177
200
|
manualSorting,
|
|
178
201
|
enableFiltering,
|
|
202
|
+
filterableFields,
|
|
179
203
|
enableSorting,
|
|
180
204
|
enablePagination,
|
|
205
|
+
paginationMode,
|
|
206
|
+
loadPage,
|
|
181
207
|
enableColumnVisibility,
|
|
182
208
|
enableColumnOrdering,
|
|
183
209
|
enableColumnResizing,
|
|
@@ -194,17 +220,43 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
194
220
|
maxPinnedColumns,
|
|
195
221
|
enableGrouping,
|
|
196
222
|
enableKeyboardNavigation,
|
|
223
|
+
enableRowSelection,
|
|
197
224
|
rowCount,
|
|
198
225
|
pageCount,
|
|
199
226
|
});
|
|
200
227
|
|
|
228
|
+
const resolvedBulkActions = (bulkActions ?? []) as BulkAction<TData>[];
|
|
229
|
+
|
|
230
|
+
const selectAllChecked =
|
|
231
|
+
enableRowSelection &&
|
|
232
|
+
(selectAllScope === "filtered"
|
|
233
|
+
? table.getIsAllRowsSelected()
|
|
234
|
+
: table.getIsAllPageRowsSelected());
|
|
235
|
+
const selectAllIndeterminate =
|
|
236
|
+
enableRowSelection &&
|
|
237
|
+
(selectAllScope === "filtered"
|
|
238
|
+
? table.getIsSomeRowsSelected() && !table.getIsAllRowsSelected()
|
|
239
|
+
: table.getIsSomePageRowsSelected() && !table.getIsAllPageRowsSelected());
|
|
240
|
+
|
|
241
|
+
const toggleSelectAll = useCallback(() => {
|
|
242
|
+
if (selectAllScope === "filtered") {
|
|
243
|
+
table.toggleAllRowsSelected();
|
|
244
|
+
} else {
|
|
245
|
+
table.toggleAllPageRowsSelected();
|
|
246
|
+
}
|
|
247
|
+
}, [selectAllScope, table]);
|
|
248
|
+
|
|
201
249
|
const resolvedSize: "sm" | "md" | "lg" =
|
|
202
250
|
size ?? (knobProps.sizeToken === "$3" ? "sm" : knobProps.sizeToken === "$5" ? "lg" : "md");
|
|
203
251
|
|
|
204
252
|
const cellHeight = resolvedSize === "sm" ? "$3" : resolvedSize === "lg" ? "$5" : "$4";
|
|
205
253
|
|
|
206
254
|
const headerGroups = table.getHeaderGroups();
|
|
207
|
-
const
|
|
255
|
+
const rowModelRows = table.getRowModel().rows;
|
|
256
|
+
// Infinite mode reveals accumulated pages only; loader mode's row model is
|
|
257
|
+
// already just the accumulated rows, so the slice is a no-op there.
|
|
258
|
+
const infinite = computed.infinite;
|
|
259
|
+
const tableRows = infinite ? rowModelRows.slice(0, infinite.visibleRowCount) : rowModelRows;
|
|
208
260
|
const footerGroups = table.getFooterGroups();
|
|
209
261
|
|
|
210
262
|
const hasFooter = footerGroups.some((group: any) =>
|
|
@@ -219,15 +271,35 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
219
271
|
const getColSizeProps = useCallback(
|
|
220
272
|
(col: {
|
|
221
273
|
getSize: () => number;
|
|
274
|
+
getIsPinned?: () => "left" | "right" | false;
|
|
222
275
|
columnDef: { size?: number; minSize?: number; maxSize?: number };
|
|
223
276
|
}) => {
|
|
224
277
|
const hasExplicitSize = col.columnDef.size != null;
|
|
225
|
-
|
|
278
|
+
// A pinned column must render at exactly getSize(): getStickyStyle sums
|
|
279
|
+
// getSize() of preceding pinned columns for the sticky inset, so a
|
|
280
|
+
// flexed pinned column (equal layout) would drift every offset after
|
|
281
|
+
// the first. min/max clamp the box under any flex resolution.
|
|
282
|
+
const isPinned = enableColumnPinning && Boolean(col.getIsPinned?.());
|
|
283
|
+
if (isPinned) {
|
|
284
|
+
const size = col.getSize();
|
|
285
|
+
return {
|
|
286
|
+
width: size,
|
|
287
|
+
minWidth: size,
|
|
288
|
+
maxWidth: size,
|
|
289
|
+
flexGrow: 0,
|
|
290
|
+
flexShrink: 0,
|
|
291
|
+
flexBasis: "auto" as const,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
// Scroll layout needs one concrete width per column (from the column
|
|
295
|
+
// def, TanStack default otherwise) so independent flex rows stay
|
|
296
|
+
// aligned while the table grows past its container.
|
|
297
|
+
if (hasExplicitSize || enableColumnResizing || columnLayout === "scroll") {
|
|
226
298
|
return { width: col.getSize() };
|
|
227
299
|
}
|
|
228
300
|
return {};
|
|
229
301
|
},
|
|
230
|
-
[enableColumnResizing],
|
|
302
|
+
[enableColumnResizing, columnLayout, enableColumnPinning],
|
|
231
303
|
);
|
|
232
304
|
|
|
233
305
|
// HTML5 column drag-and-drop (web only). Reorder swaps the dragged column
|
|
@@ -264,14 +336,17 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
264
336
|
}, [enableColumnOrdering, table]);
|
|
265
337
|
|
|
266
338
|
const bodyScrollRef = useRef<HTMLDivElement>(null);
|
|
339
|
+
// isWeb, not window-presence: RN (Hermes) aliases a window global, but
|
|
340
|
+
// react-virtual needs real DOM scroll elements — keep it inert on native.
|
|
267
341
|
const isVirtualized =
|
|
268
|
-
enableVirtualization &&
|
|
269
|
-
virtualizationHeight != null &&
|
|
270
|
-
virtualizationHeight > 0 &&
|
|
271
|
-
typeof window !== "undefined";
|
|
342
|
+
enableVirtualization && virtualizationHeight != null && virtualizationHeight > 0 && isWeb;
|
|
272
343
|
|
|
344
|
+
// Infinite mode adds one tail row to the virtual count while more pages
|
|
345
|
+
// exist: it renders the appending skeleton and extends the scroll range so
|
|
346
|
+
// appended pages grow geometry instead of collapsing it.
|
|
347
|
+
const hasInfiniteTail = Boolean(infinite && !infinite.exhausted && tableRows.length > 0);
|
|
273
348
|
const virtualizer = useVirtualizer({
|
|
274
|
-
count: tableRows.length,
|
|
349
|
+
count: tableRows.length + (hasInfiniteTail ? 1 : 0),
|
|
275
350
|
getScrollElement: () => bodyScrollRef.current,
|
|
276
351
|
estimateSize: () => rowHeightPx,
|
|
277
352
|
overscan: virtualizationOverscan,
|
|
@@ -281,31 +356,112 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
281
356
|
const virtualItems = isVirtualized ? virtualizer.getVirtualItems() : [];
|
|
282
357
|
const totalSize = isVirtualized ? virtualizer.getTotalSize() : 0;
|
|
283
358
|
|
|
359
|
+
// ---- Infinite mode: load-more triggers ----
|
|
360
|
+
|
|
361
|
+
const loadMoreRef = useRef<(() => void) | undefined>(undefined);
|
|
362
|
+
loadMoreRef.current = infinite?.loadMore;
|
|
363
|
+
|
|
364
|
+
// Virtualized: append when the last rendered virtual row nears the tail
|
|
365
|
+
// (standard TanStack Virtual infinite pattern — overscan gives lead time).
|
|
366
|
+
const lastVirtualIndex = virtualItems.length ? virtualItems[virtualItems.length - 1].index : -1;
|
|
367
|
+
React.useEffect(() => {
|
|
368
|
+
if (!infinite || !isVirtualized || infinite.exhausted) return;
|
|
369
|
+
if (lastVirtualIndex < 0) return;
|
|
370
|
+
if (lastVirtualIndex >= tableRows.length - INFINITE_TRIGGER_ROWS) {
|
|
371
|
+
loadMoreRef.current?.();
|
|
372
|
+
}
|
|
373
|
+
}, [infinite?.exhausted, isVirtualized, lastVirtualIndex, tableRows.length, !!infinite]);
|
|
374
|
+
|
|
375
|
+
// Non-virtualized (grid or card list): IntersectionObserver sentinel below
|
|
376
|
+
// the content. Re-observed on row-count changes so short pages keep loading
|
|
377
|
+
// while the sentinel stays on screen.
|
|
378
|
+
const sentinelRef = useRef<HTMLElement | null>(null);
|
|
379
|
+
React.useEffect(() => {
|
|
380
|
+
if (!infinite || isVirtualized || infinite.exhausted) return;
|
|
381
|
+
if (!isWeb || typeof IntersectionObserver === "undefined") return;
|
|
382
|
+
const node = sentinelRef.current;
|
|
383
|
+
if (!node) return;
|
|
384
|
+
const observer = new IntersectionObserver(
|
|
385
|
+
(entries) => {
|
|
386
|
+
for (const entry of entries) {
|
|
387
|
+
if (entry.isIntersecting) loadMoreRef.current?.();
|
|
388
|
+
}
|
|
389
|
+
},
|
|
390
|
+
{ rootMargin: `${INFINITE_TRIGGER_ROWS * rowHeightPx}px` },
|
|
391
|
+
);
|
|
392
|
+
observer.observe(node);
|
|
393
|
+
return () => observer.disconnect();
|
|
394
|
+
}, [!!infinite, infinite?.exhausted, isVirtualized, tableRows.length]);
|
|
395
|
+
|
|
284
396
|
const isFlexLayout = columnLayout !== "auto";
|
|
285
397
|
const displayMode = isFlexLayout ? ("flex" as const) : ("table" as const);
|
|
286
398
|
|
|
399
|
+
// Column pinning shares the scroll layout's horizontal geometry: the
|
|
400
|
+
// content View is the ONE horizontal scrollport (header + body + footer
|
|
401
|
+
// rows all ride inside it) and the Table floors at max-content so rows
|
|
402
|
+
// never overflow their own boxes. Sticky resolves against the NEAREST
|
|
403
|
+
// scroll container, so with pinning the Table (overflow:hidden base) and
|
|
404
|
+
// Table.Body (overflowY:auto flex variant, which computes overflow-x:auto)
|
|
405
|
+
// must be overridden to overflow:visible — otherwise the body scrolls on
|
|
406
|
+
// its own while the header stays put and pinned cells stick to the wrong
|
|
407
|
+
// scrollport (the LTR pinning breakage).
|
|
408
|
+
const hScroll = isWeb && isFlexLayout && (columnLayout === "scroll" || enableColumnPinning);
|
|
409
|
+
// In the horizontal-overflow modes, body cell content is clipped to the
|
|
410
|
+
// cell box: flex-mode cells default to overflow:visible, so overlong text
|
|
411
|
+
// paints over neighbor cells and bleeds out from under sticky pinned
|
|
412
|
+
// columns (LC-10 containment at the cell grain).
|
|
413
|
+
const clipBodyCells = hScroll;
|
|
414
|
+
|
|
287
415
|
const cellFlexProps = useMemo(() => {
|
|
288
416
|
if (!isFlexLayout) return {};
|
|
289
|
-
if (columnLayout === "scroll")
|
|
290
|
-
|
|
417
|
+
if (columnLayout === "scroll") {
|
|
418
|
+
// flexBasis auto, not the `flex: 0` shorthand: RN expands `flex: 0` to
|
|
419
|
+
// basis 0, which overrides per-column widths and crushes every cell to
|
|
420
|
+
// the minWidth floor (contents then overflow and get clipped).
|
|
421
|
+
return { flexGrow: 0, flexShrink: 0, flexBasis: "auto" as const, minWidth: 80 };
|
|
422
|
+
}
|
|
423
|
+
// Same flexBasis trap as the scroll branch above: `flex: 0` expands to
|
|
424
|
+
// basis 0 and the per-column width from getColSizeProps loses, crushing
|
|
425
|
+
// every resizable cell to the min-width floor (content then overlaps).
|
|
426
|
+
if (enableColumnResizing) {
|
|
427
|
+
return { flexGrow: 0, flexShrink: 0, flexBasis: "auto" as const };
|
|
428
|
+
}
|
|
291
429
|
return { flex: 1, flexShrink: 1, flexGrow: 1, flexBasis: 0, minWidth: 0 };
|
|
292
430
|
}, [isFlexLayout, columnLayout, enableColumnResizing]);
|
|
293
431
|
|
|
294
|
-
|
|
432
|
+
// Columns offered by the card-layout filter builder (grid mode filters
|
|
433
|
+
// through ColumnHeaderFilter in the headers instead).
|
|
434
|
+
const cardFilterColumns = useMemo(
|
|
295
435
|
() =>
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
436
|
+
columns
|
|
437
|
+
.filter((col) => (col as any).enableColumnFilter !== false)
|
|
438
|
+
.map((col) => ({
|
|
439
|
+
id: (col.id as string) || ((col as any).accessorKey as string) || "",
|
|
440
|
+
label:
|
|
441
|
+
typeof col.header === "string"
|
|
442
|
+
? col.header
|
|
443
|
+
: (col.id as string) || ((col as any).accessorKey as string) || "",
|
|
444
|
+
type: mapFieldToFilterType(col.field),
|
|
445
|
+
}))
|
|
446
|
+
.filter((col) => col.id),
|
|
447
|
+
[columns],
|
|
304
448
|
);
|
|
305
449
|
|
|
450
|
+
// DataTableColumnPinning is a hook-style helper (it calls useState/useMemo/
|
|
451
|
+
// useCallback internally), so it must run unconditionally at the top level
|
|
452
|
+
// of this component. Calling it inside useMemo crashed with "Should have a
|
|
453
|
+
// queue. You are likely calling Hooks conditionally."
|
|
454
|
+
const pinningHelpers = DataTableColumnPinning({
|
|
455
|
+
table,
|
|
456
|
+
maxPinnedColumns,
|
|
457
|
+
allowPinning: true,
|
|
458
|
+
disabled,
|
|
459
|
+
});
|
|
460
|
+
const pinning = enableColumnPinning ? pinningHelpers : null;
|
|
461
|
+
|
|
306
462
|
const keyboardNav = useDataTableKeyboard({
|
|
307
463
|
table,
|
|
308
|
-
enabled: enableKeyboardNavigation,
|
|
464
|
+
enabled: enableKeyboardNavigation && !disabled,
|
|
309
465
|
viewportHeight: virtualizationHeight ?? 400,
|
|
310
466
|
onScrollToRow: isVirtualized
|
|
311
467
|
? (idx) => virtualizer.scrollToIndex(idx, { align: "auto" })
|
|
@@ -319,8 +475,11 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
319
475
|
|
|
320
476
|
const handleCellChange = useCallback(
|
|
321
477
|
async (rowIndex: number, columnId: string, newValue: any) => {
|
|
322
|
-
if (readOnly) return;
|
|
478
|
+
if (readOnly || disabled) return;
|
|
323
479
|
const previousValue = data[rowIndex]?.[columnId];
|
|
480
|
+
// Bail on no-op commits so a field that re-emits the same primitive value
|
|
481
|
+
// (e.g. OTP sync effects) cannot force a new data array every render.
|
|
482
|
+
if (Object.is(previousValue, newValue)) return;
|
|
324
483
|
if (onCellChange) {
|
|
325
484
|
const result = await onCellChange(rowIndex, columnId, newValue, previousValue);
|
|
326
485
|
if (result === false) return;
|
|
@@ -331,25 +490,25 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
331
490
|
onDataChange(newData);
|
|
332
491
|
}
|
|
333
492
|
},
|
|
334
|
-
[readOnly, data, onCellChange, isFormMode, onDataChange],
|
|
493
|
+
[readOnly, disabled, data, onCellChange, isFormMode, onDataChange],
|
|
335
494
|
);
|
|
336
495
|
|
|
337
496
|
const handleAddRow = useCallback(() => {
|
|
338
|
-
if (readOnly || (maxRows && data.length >= maxRows)) return;
|
|
497
|
+
if (readOnly || disabled || (maxRows && data.length >= maxRows)) return;
|
|
339
498
|
const newRow = { ...defaultRow, idx: data.length + 1 } as unknown as TData;
|
|
340
499
|
if (!isFormMode && onDataChange) {
|
|
341
500
|
onDataChange([...data, newRow]);
|
|
342
501
|
}
|
|
343
|
-
}, [readOnly, maxRows, data, defaultRow, isFormMode, onDataChange]);
|
|
502
|
+
}, [readOnly, disabled, maxRows, data, defaultRow, isFormMode, onDataChange]);
|
|
344
503
|
|
|
345
504
|
const handleDeleteRow = useCallback(
|
|
346
505
|
(rowIndex: number) => {
|
|
347
|
-
if (readOnly || data.length <= minRows) return;
|
|
506
|
+
if (readOnly || disabled || data.length <= minRows) return;
|
|
348
507
|
if (!isFormMode && onDataChange) {
|
|
349
508
|
onDataChange(data.filter((_, idx) => idx !== rowIndex));
|
|
350
509
|
}
|
|
351
510
|
},
|
|
352
|
-
[readOnly, minRows, data, isFormMode, onDataChange],
|
|
511
|
+
[readOnly, disabled, minRows, data, isFormMode, onDataChange],
|
|
353
512
|
);
|
|
354
513
|
|
|
355
514
|
const isCompact = resolvedSize === "sm" || compact;
|
|
@@ -382,7 +541,9 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
382
541
|
fieldProps={columnDef.fieldProps}
|
|
383
542
|
onChange={(newValue) => handleCellChange(rowIndex, columnId, newValue)}
|
|
384
543
|
readOnly={readOnly}
|
|
544
|
+
disabled={disabled}
|
|
385
545
|
columnId={columnId}
|
|
546
|
+
columnLabel={typeof columnDef.header === "string" ? columnDef.header : undefined}
|
|
386
547
|
rowIndex={rowIndex}
|
|
387
548
|
rowData={rowData}
|
|
388
549
|
size={knobProps.sizeToken}
|
|
@@ -392,12 +553,13 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
392
553
|
/>
|
|
393
554
|
);
|
|
394
555
|
},
|
|
395
|
-
[handleCellChange, readOnly, knobProps.sizeToken, isCompact],
|
|
556
|
+
[handleCellChange, readOnly, disabled, knobProps.sizeToken, isCompact],
|
|
396
557
|
);
|
|
397
558
|
|
|
398
559
|
const isSSR = typeof window === "undefined";
|
|
399
560
|
|
|
400
|
-
const extraColumnsBefore =
|
|
561
|
+
const extraColumnsBefore =
|
|
562
|
+
(enableRowSelection ? 1 : 0) + (showRowNumbers ? 1 : 0) + (enableRowExpansion ? 1 : 0);
|
|
401
563
|
const extraColumnsAfter = showDeleteRow && !readOnly ? 1 : 0;
|
|
402
564
|
|
|
403
565
|
const getStickyStyle = useCallback(
|
|
@@ -418,11 +580,14 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
418
580
|
const col = table.getColumn(leftPinned[i]);
|
|
419
581
|
if (col) leftOffset += col.getSize();
|
|
420
582
|
}
|
|
583
|
+
if (enableRowSelection) leftOffset += SELECTION_COL_WIDTH;
|
|
421
584
|
if (enableRowExpansion) leftOffset += 32;
|
|
422
585
|
if (showRowNumbers) leftOffset += 50;
|
|
586
|
+
// Logical inset (RTL backlog #2): TanStack's "left" bucket is the
|
|
587
|
+
// reading-start side, so the sticky offset must flip with direction.
|
|
423
588
|
return {
|
|
424
589
|
position: "sticky" as const,
|
|
425
|
-
|
|
590
|
+
insetInlineStart: leftOffset,
|
|
426
591
|
zIndex: 2,
|
|
427
592
|
backgroundColor: "$color2",
|
|
428
593
|
};
|
|
@@ -437,7 +602,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
437
602
|
if (showDeleteRow && !readOnly) rightOffset += 60;
|
|
438
603
|
return {
|
|
439
604
|
position: "sticky" as const,
|
|
440
|
-
|
|
605
|
+
insetInlineEnd: rightOffset,
|
|
441
606
|
zIndex: 2,
|
|
442
607
|
backgroundColor: "$color2",
|
|
443
608
|
};
|
|
@@ -449,6 +614,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
449
614
|
enableColumnPinning,
|
|
450
615
|
pinning,
|
|
451
616
|
table,
|
|
617
|
+
enableRowSelection,
|
|
452
618
|
enableRowExpansion,
|
|
453
619
|
showRowNumbers,
|
|
454
620
|
showDeleteRow,
|
|
@@ -457,13 +623,51 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
457
623
|
);
|
|
458
624
|
|
|
459
625
|
const renderRowContent = useCallback(
|
|
460
|
-
|
|
626
|
+
// `cellElement="div"` is the virtualized escape hatch: virtual rows are
|
|
627
|
+
// absolutely-positioned <div role="row"> hosts, and a real <td> is not a
|
|
628
|
+
// valid <div> child (React validateDOMNesting + SSR reparenting). The
|
|
629
|
+
// div cells keep role="cell" from the primitive, preserving the
|
|
630
|
+
// roles-based grid semantics.
|
|
631
|
+
(row: any, rowIndex: number, _isLastRow: boolean, cellElement?: "div") => {
|
|
461
632
|
const rowData = row.original as TData;
|
|
633
|
+
const cellRenderProps = cellElement ? ({ render: cellElement } as any) : {};
|
|
462
634
|
|
|
463
635
|
return (
|
|
464
636
|
<>
|
|
637
|
+
{enableRowSelection && (
|
|
638
|
+
<Table.Cell
|
|
639
|
+
{...cellRenderProps}
|
|
640
|
+
cellWidth={SELECTION_COL_WIDTH}
|
|
641
|
+
cellHeight={cellHeight as any}
|
|
642
|
+
cellLocation="first"
|
|
643
|
+
justifyContent="center"
|
|
644
|
+
>
|
|
645
|
+
<Checkbox
|
|
646
|
+
checked={row.getIsSelected()}
|
|
647
|
+
onChange={(checked) => {
|
|
648
|
+
if (disabled) return;
|
|
649
|
+
row.toggleSelected(!!checked);
|
|
650
|
+
}}
|
|
651
|
+
disabled={disabled}
|
|
652
|
+
checkboxProps={{
|
|
653
|
+
// Row identity in the name so repeated per-row actions are
|
|
654
|
+
// differentiated for screen readers (DG-A11Y-06).
|
|
655
|
+
"aria-label": withInterp(t("Select row {{row}}", { row: rowIndex + 1 }), {
|
|
656
|
+
row: rowIndex + 1,
|
|
657
|
+
}),
|
|
658
|
+
}}
|
|
659
|
+
compact={isCompact}
|
|
660
|
+
/>
|
|
661
|
+
</Table.Cell>
|
|
662
|
+
)}
|
|
663
|
+
|
|
465
664
|
{showRowNumbers && (
|
|
466
|
-
<Table.Cell
|
|
665
|
+
<Table.Cell
|
|
666
|
+
{...cellRenderProps}
|
|
667
|
+
cellWidth={50}
|
|
668
|
+
cellHeight={cellHeight as any}
|
|
669
|
+
cellLocation={enableRowSelection ? "middle" : "first"}
|
|
670
|
+
>
|
|
467
671
|
<Text fontSize={knobProps.sizeToken} color="$color10">
|
|
468
672
|
{rowIndex + 1}
|
|
469
673
|
</Text>
|
|
@@ -472,9 +676,10 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
472
676
|
|
|
473
677
|
{enableRowExpansion && (
|
|
474
678
|
<Table.Cell
|
|
679
|
+
{...cellRenderProps}
|
|
475
680
|
cellWidth={32 + row.depth * 20}
|
|
476
681
|
cellHeight={cellHeight as any}
|
|
477
|
-
cellLocation={showRowNumbers ? "middle" : "first"}
|
|
682
|
+
cellLocation={enableRowSelection || showRowNumbers ? "middle" : "first"}
|
|
478
683
|
paddingLeft={0}
|
|
479
684
|
paddingRight={0}
|
|
480
685
|
>
|
|
@@ -516,18 +721,30 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
516
721
|
)}
|
|
517
722
|
{row.getCanExpand() ? (
|
|
518
723
|
<View
|
|
519
|
-
onPress={() =>
|
|
520
|
-
|
|
724
|
+
onPress={() => {
|
|
725
|
+
if (disabled) return;
|
|
726
|
+
row.toggleExpanded();
|
|
727
|
+
}}
|
|
728
|
+
cursor={disabled ? "not-allowed" : "pointer"}
|
|
729
|
+
aria-disabled={disabled || undefined}
|
|
521
730
|
padding="$1"
|
|
522
731
|
aria-expanded={row.getIsExpanded()}
|
|
523
|
-
aria-label={
|
|
732
|
+
aria-label={
|
|
733
|
+
row.getIsExpanded()
|
|
734
|
+
? withInterp(t("Collapse row {{row}}", { row: rowIndex + 1 }), {
|
|
735
|
+
row: rowIndex + 1,
|
|
736
|
+
})
|
|
737
|
+
: withInterp(t("Expand row {{row}}", { row: rowIndex + 1 }), {
|
|
738
|
+
row: rowIndex + 1,
|
|
739
|
+
})
|
|
740
|
+
}
|
|
524
741
|
hoverStyle={{ backgroundColor: "$color4" }}
|
|
525
742
|
borderRadius="$2"
|
|
526
743
|
>
|
|
527
|
-
<
|
|
744
|
+
<ExpandCaretIcon
|
|
528
745
|
size={14}
|
|
529
746
|
style={{
|
|
530
|
-
transform: row.getIsExpanded() ?
|
|
747
|
+
transform: row.getIsExpanded() ? expandedCaretRotation : "none",
|
|
531
748
|
transition: "transform 0.15s ease",
|
|
532
749
|
}}
|
|
533
750
|
/>
|
|
@@ -540,24 +757,37 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
540
757
|
)}
|
|
541
758
|
|
|
542
759
|
{row.getVisibleCells().map((cell: any, cellIndex: number) => {
|
|
543
|
-
const isFirstDataCell =
|
|
760
|
+
const isFirstDataCell =
|
|
761
|
+
cellIndex === 0 && !enableRowSelection && !showRowNumbers && !enableRowExpansion;
|
|
544
762
|
const isLastDataCell = cellIndex === row.getVisibleCells().length - 1 && !showDeleteRow;
|
|
545
763
|
const cellLocation = isFirstDataCell ? "first" : isLastDataCell ? "last" : "middle";
|
|
546
764
|
const stickyStyle = getStickyStyle(cell.column.id);
|
|
765
|
+
const columnAlign = resolveColumnAlign({
|
|
766
|
+
...(cell.column.columnDef as DataTableColumn),
|
|
767
|
+
id: cell.column.id,
|
|
768
|
+
});
|
|
547
769
|
|
|
548
770
|
return (
|
|
549
771
|
<Table.Cell
|
|
550
772
|
key={cell.id}
|
|
773
|
+
{...cellRenderProps}
|
|
551
774
|
{...cellFlexProps}
|
|
552
775
|
{...getColSizeProps(cell.column)}
|
|
553
776
|
cellHeight={cellHeight as any}
|
|
554
777
|
cellLocation={cellLocation}
|
|
778
|
+
justifyContent={alignToFlex(columnAlign)}
|
|
779
|
+
data-align={columnAlign}
|
|
780
|
+
{...(clipBodyCells ? { overflow: "hidden" as any } : {})}
|
|
555
781
|
{...(isWeb && stickyStyle
|
|
556
782
|
? {
|
|
557
783
|
style: {
|
|
558
784
|
position: "sticky",
|
|
559
|
-
...("
|
|
560
|
-
|
|
785
|
+
...("insetInlineStart" in stickyStyle && {
|
|
786
|
+
insetInlineStart: stickyStyle.insetInlineStart,
|
|
787
|
+
}),
|
|
788
|
+
...("insetInlineEnd" in stickyStyle && {
|
|
789
|
+
insetInlineEnd: stickyStyle.insetInlineEnd,
|
|
790
|
+
}),
|
|
561
791
|
zIndex: 2,
|
|
562
792
|
backgroundColor: "var(--color2)",
|
|
563
793
|
} as React.CSSProperties,
|
|
@@ -571,6 +801,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
571
801
|
|
|
572
802
|
{showDeleteRow && !readOnly && (
|
|
573
803
|
<Table.Cell
|
|
804
|
+
{...cellRenderProps}
|
|
574
805
|
cellWidth={60}
|
|
575
806
|
cellHeight={cellHeight as any}
|
|
576
807
|
cellLocation="last"
|
|
@@ -580,9 +811,11 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
580
811
|
chromeless
|
|
581
812
|
circular
|
|
582
813
|
icon={TrashIcon}
|
|
583
|
-
disabled={data.length <= minRows}
|
|
814
|
+
disabled={disabled || data.length <= minRows}
|
|
584
815
|
onPress={() => handleDeleteRow(rowIndex)}
|
|
585
|
-
aria-label={t("Delete row")
|
|
816
|
+
aria-label={withInterp(t("Delete row {{row}}", { row: rowIndex + 1 }), {
|
|
817
|
+
row: rowIndex + 1,
|
|
818
|
+
})}
|
|
586
819
|
/>
|
|
587
820
|
</Table.Cell>
|
|
588
821
|
)}
|
|
@@ -590,10 +823,12 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
590
823
|
);
|
|
591
824
|
},
|
|
592
825
|
[
|
|
826
|
+
enableRowSelection,
|
|
593
827
|
showRowNumbers,
|
|
594
828
|
enableRowExpansion,
|
|
595
829
|
showDeleteRow,
|
|
596
830
|
readOnly,
|
|
831
|
+
disabled,
|
|
597
832
|
cellHeight,
|
|
598
833
|
knobProps.sizeToken,
|
|
599
834
|
cellFlexProps,
|
|
@@ -603,14 +838,25 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
603
838
|
handleDeleteRow,
|
|
604
839
|
data.length,
|
|
605
840
|
minRows,
|
|
841
|
+
isCompact,
|
|
606
842
|
t,
|
|
843
|
+
ExpandCaretIcon,
|
|
844
|
+
expandedCaretRotation,
|
|
845
|
+
clipBodyCells,
|
|
607
846
|
],
|
|
608
847
|
);
|
|
609
848
|
|
|
849
|
+
// Chip press → toolbar filter editor channel (DataTableFilterButton consumes)
|
|
850
|
+
const [filterEditTarget, setFilterEditTarget] = useState<FilterEditTarget | null>(null);
|
|
851
|
+
const filterUi = useMemo<DataTableFilterUi>(
|
|
852
|
+
() => ({ editTarget: filterEditTarget, requestEdit: setFilterEditTarget }),
|
|
853
|
+
[filterEditTarget],
|
|
854
|
+
);
|
|
855
|
+
|
|
610
856
|
// Build the state context value
|
|
611
857
|
const stateContextValue = useMemo<DataTableStateContextValue<TData>>(
|
|
612
|
-
() => ({ table, state, actions, computed }),
|
|
613
|
-
[table, state, actions, computed],
|
|
858
|
+
() => ({ table, state, actions, computed, selectAllScope, filterUi }),
|
|
859
|
+
[table, state, actions, computed, selectAllScope, filterUi],
|
|
614
860
|
);
|
|
615
861
|
|
|
616
862
|
const renderToolbarComponent = () => {
|
|
@@ -650,11 +896,12 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
650
896
|
};
|
|
651
897
|
|
|
652
898
|
const renderPaginationComponent = () => {
|
|
899
|
+
const resolvedPageSizeOptions = pageSizeOptions ?? [10, 20, 50, 100];
|
|
653
900
|
if (renderPagination) {
|
|
654
901
|
return renderPagination({
|
|
655
902
|
pagination: state.pagination,
|
|
656
903
|
onPaginationChange: actions.setPagination,
|
|
657
|
-
pageSizeOptions:
|
|
904
|
+
pageSizeOptions: resolvedPageSizeOptions,
|
|
658
905
|
});
|
|
659
906
|
}
|
|
660
907
|
|
|
@@ -662,7 +909,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
662
909
|
<DataTablePagination
|
|
663
910
|
pagination={state.pagination}
|
|
664
911
|
onPaginationChange={actions.setPagination}
|
|
665
|
-
pageSizeOptions={
|
|
912
|
+
pageSizeOptions={resolvedPageSizeOptions}
|
|
666
913
|
compact
|
|
667
914
|
/>
|
|
668
915
|
);
|
|
@@ -681,8 +928,61 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
681
928
|
const hasToolbar = enableGlobalSearch || enableFiltering || enableViews;
|
|
682
929
|
const scrollContainerRef = useRef<HTMLDivElement>(null);
|
|
683
930
|
|
|
684
|
-
//
|
|
685
|
-
|
|
931
|
+
// DF-12 / Axiom 6 HONEST STATE — a height-constrained body clips rows
|
|
932
|
+
// silently: macOS overlay scrollbars paint nothing at rest, so the frame
|
|
933
|
+
// reads "this is all the rows". Track whether rows are cut off below the
|
|
934
|
+
// fold and paint a bottom fade until the user reaches the last row.
|
|
935
|
+
const tableBodyRef = useRef<HTMLElement | null>(null);
|
|
936
|
+
const [bodyClipped, setBodyClipped] = useState(false);
|
|
937
|
+
useEffect(() => {
|
|
938
|
+
if (!isWeb || isSSR || showCards) return;
|
|
939
|
+
const el = tableBodyRef.current;
|
|
940
|
+
if (!el) return;
|
|
941
|
+
const update = () => {
|
|
942
|
+
setBodyClipped(el.scrollHeight - (el.scrollTop + el.clientHeight) > 1);
|
|
943
|
+
};
|
|
944
|
+
update();
|
|
945
|
+
el.addEventListener("scroll", update, { passive: true });
|
|
946
|
+
const ro = typeof ResizeObserver !== "undefined" ? new ResizeObserver(update) : null;
|
|
947
|
+
ro?.observe(el);
|
|
948
|
+
return () => {
|
|
949
|
+
el.removeEventListener("scroll", update);
|
|
950
|
+
ro?.disconnect();
|
|
951
|
+
};
|
|
952
|
+
}, [tableRows.length, showCards]);
|
|
953
|
+
|
|
954
|
+
// Enable drag-to-scroll in the horizontal-overflow modes (scroll layout
|
|
955
|
+
// and column pinning share the content-View scrollport).
|
|
956
|
+
useDragScroll(scrollContainerRef, hScroll && !isSSR);
|
|
957
|
+
|
|
958
|
+
// Visible row range for the footer summary (1-based, clamped to total).
|
|
959
|
+
const rangeTotal = state.pagination.totalCount ?? 0;
|
|
960
|
+
const rangeStart =
|
|
961
|
+
rangeTotal === 0 ? 0 : state.pagination.pageIndex * state.pagination.pageSize + 1;
|
|
962
|
+
const rangeEnd = Math.min(
|
|
963
|
+
(state.pagination.pageIndex + 1) * state.pagination.pageSize,
|
|
964
|
+
rangeTotal,
|
|
965
|
+
);
|
|
966
|
+
|
|
967
|
+
// W9 / DG-ST-01,02,04 / DG-TBL-06 — first-class async states.
|
|
968
|
+
// Error wins over empty chrome; initial load uses a table-shaped skeleton.
|
|
969
|
+
// Selection API untouched.
|
|
970
|
+
const resolvedAriaLabel = ariaLabel || t("Data table");
|
|
971
|
+
if (state.error) {
|
|
972
|
+
return (
|
|
973
|
+
<AsyncBoundary
|
|
974
|
+
error={state.error}
|
|
975
|
+
onRetry={onRetry}
|
|
976
|
+
layout="table"
|
|
977
|
+
errorTitle={t("Couldn't load table")}
|
|
978
|
+
compact
|
|
979
|
+
aria-label={resolvedAriaLabel}
|
|
980
|
+
/>
|
|
981
|
+
);
|
|
982
|
+
}
|
|
983
|
+
if ((state.isLoading || infinite?.isInitialLoading) && tableRows.length === 0) {
|
|
984
|
+
return <AsyncBoundary loading layout="table" aria-label={resolvedAriaLabel} />;
|
|
985
|
+
}
|
|
686
986
|
|
|
687
987
|
return (
|
|
688
988
|
<DataTableContext.Provider size={resolvedSize} compact={isCompact}>
|
|
@@ -691,34 +991,101 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
691
991
|
flexDirection="column"
|
|
692
992
|
gap={0}
|
|
693
993
|
width="100%"
|
|
694
|
-
flex={1}
|
|
994
|
+
// flexBasis auto (not flex={1} basis-0): in an auto-height parent
|
|
995
|
+
// a basis-0 chain resolves to 0 and the whole table collapses to
|
|
996
|
+
// a sliver; basis auto sizes to content there while still filling
|
|
997
|
+
// sized parents (grow 1) and allowing inner scroll (shrink 1 +
|
|
998
|
+
// minHeight 0).
|
|
999
|
+
flexGrow={1}
|
|
1000
|
+
flexShrink={1}
|
|
1001
|
+
flexBasis="auto"
|
|
695
1002
|
minHeight={0}
|
|
696
1003
|
{...(isWeb && className ? { className } : {})}
|
|
697
|
-
aria-label={
|
|
1004
|
+
aria-label={resolvedAriaLabel}
|
|
698
1005
|
aria-describedby={ariaDescribedBy}
|
|
699
1006
|
aria-live="polite"
|
|
700
1007
|
aria-atomic="false"
|
|
1008
|
+
// UX-011 / Axiom 6 HONEST STATE: the advertised `disabled` prop
|
|
1009
|
+
// makes the whole assembly inert and says so. `inert` (React 19)
|
|
1010
|
+
// blocks pointer, keyboard, and AT for every control inside —
|
|
1011
|
+
// including chrome (toolbar/pagination) that has no disabled API
|
|
1012
|
+
// of its own. LC-40 assembly fragment carries the dimWhole
|
|
1013
|
+
// visual; keepLabel washes per-control chrome instead (cells,
|
|
1014
|
+
// checkboxes, buttons receive their own `disabled` below).
|
|
1015
|
+
aria-disabled={disabled || undefined}
|
|
1016
|
+
{...(disabled
|
|
1017
|
+
? {
|
|
1018
|
+
...disabledState.assemblyKnobProps,
|
|
1019
|
+
cursor: "not-allowed" as const,
|
|
1020
|
+
...(isWeb ? ({ inert: true } as any) : { pointerEvents: "none" as const }),
|
|
1021
|
+
}
|
|
1022
|
+
: {})}
|
|
701
1023
|
{...props}
|
|
702
1024
|
>
|
|
703
|
-
{/* Toolbar
|
|
704
|
-
|
|
1025
|
+
{/* Toolbar. The width-100% wrapper is the LC-40 carrier for
|
|
1026
|
+
chrome that has no `disabled` API of its own: under keepLabel
|
|
1027
|
+
the chrome fragment dims the region (interaction is already
|
|
1028
|
+
blocked by the root inert). */}
|
|
1029
|
+
{hasToolbar && (
|
|
1030
|
+
<View width="100%" {...(disabled ? disabledState.chromeKnobProps : {})}>
|
|
1031
|
+
{renderToolbarComponent()}
|
|
1032
|
+
</View>
|
|
1033
|
+
)}
|
|
1034
|
+
|
|
1035
|
+
{/* Active filter chips — visibility surface for ALL filters,
|
|
1036
|
+
including hidden-column filters (Axiom 6 HONEST STATE) */}
|
|
1037
|
+
{enableFiltering && (
|
|
1038
|
+
<View width="100%" {...(disabled ? disabledState.chromeKnobProps : {})}>
|
|
1039
|
+
<DataTableFilterChips />
|
|
1040
|
+
</View>
|
|
1041
|
+
)}
|
|
1042
|
+
|
|
1043
|
+
{/* Auto selection toolbar (DG-TBL-02) — placement from house bulkBarPlacement */}
|
|
1044
|
+
{enableRowSelection && bulkBarPlacement === "top" ? (
|
|
1045
|
+
<View width="100%" {...(disabled ? disabledState.chromeKnobProps : {})}>
|
|
1046
|
+
<DataTableBulkActions
|
|
1047
|
+
actions={resolvedBulkActions}
|
|
1048
|
+
maxVisibleActions={5}
|
|
1049
|
+
showSelectionCount
|
|
1050
|
+
placement="top"
|
|
1051
|
+
/>
|
|
1052
|
+
</View>
|
|
1053
|
+
) : null}
|
|
705
1054
|
|
|
706
1055
|
{/* Compound sub-components (children) */}
|
|
707
1056
|
{children}
|
|
708
1057
|
|
|
709
|
-
{/*
|
|
710
|
-
{
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
1058
|
+
{/* Card List View (layout="cards" or auto below $sm) */}
|
|
1059
|
+
{showCards ? (
|
|
1060
|
+
<>
|
|
1061
|
+
{/* Header affordances (sort / per-column filter) live in the
|
|
1062
|
+
grid headers; the card list restores them here. */}
|
|
1063
|
+
<DataTableCardControls
|
|
1064
|
+
table={table}
|
|
1065
|
+
enableSorting={enableSorting}
|
|
1066
|
+
enableFiltering={enableFiltering}
|
|
1067
|
+
availableColumns={cardFilterColumns}
|
|
1068
|
+
compact={isCompact}
|
|
1069
|
+
disabled={disabled}
|
|
1070
|
+
/>
|
|
1071
|
+
<DataTableMobileCards
|
|
1072
|
+
tableRows={tableRows}
|
|
1073
|
+
enableRowSelection={enableRowSelection}
|
|
1074
|
+
showRowNumbers={showRowNumbers}
|
|
1075
|
+
showDeleteRow={showDeleteRow}
|
|
1076
|
+
readOnly={readOnly}
|
|
1077
|
+
disabled={disabled}
|
|
1078
|
+
dataLength={tableData.length}
|
|
1079
|
+
minRows={minRows}
|
|
1080
|
+
hasActiveFilters={computed.hasActiveFilters}
|
|
1081
|
+
renderCellContent={renderCellContent}
|
|
1082
|
+
onDeleteRow={effectiveHandleDeleteRow}
|
|
1083
|
+
selectAllChecked={selectAllChecked}
|
|
1084
|
+
selectAllIndeterminate={selectAllIndeterminate}
|
|
1085
|
+
onToggleSelectAll={toggleSelectAll}
|
|
1086
|
+
compact={isCompact}
|
|
1087
|
+
/>
|
|
1088
|
+
</>
|
|
722
1089
|
) : (
|
|
723
1090
|
/* Table View */
|
|
724
1091
|
<View
|
|
@@ -732,9 +1099,18 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
732
1099
|
}}
|
|
733
1100
|
flexDirection="column"
|
|
734
1101
|
width="100%"
|
|
735
|
-
|
|
1102
|
+
flexGrow={1}
|
|
1103
|
+
flexShrink={1}
|
|
1104
|
+
flexBasis="auto"
|
|
736
1105
|
minHeight={0}
|
|
737
|
-
|
|
1106
|
+
// This View (the drag-scroll ref) is the horizontal scroll
|
|
1107
|
+
// container; the table inside floors at max-content so it
|
|
1108
|
+
// overflows here instead of panning the whole page. With
|
|
1109
|
+
// pinning it is the ONE scrollport sticky cells track.
|
|
1110
|
+
{...(hScroll ? { overflowX: "auto" as any } : {})}
|
|
1111
|
+
aria-label={withInterp(t("{{label}} content", { label: resolvedAriaLabel }), {
|
|
1112
|
+
label: resolvedAriaLabel,
|
|
1113
|
+
})}
|
|
738
1114
|
tabIndex={enableKeyboardNavigation && !isSSR ? 0 : undefined}
|
|
739
1115
|
onKeyDown={
|
|
740
1116
|
enableKeyboardNavigation && !isSSR ? keyboardNav.handleKeyDown : undefined
|
|
@@ -756,21 +1132,21 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
756
1132
|
borderBottomLeftRadius={knobProps.borderRadius.borderRadius}
|
|
757
1133
|
borderBottomRightRadius={knobProps.borderRadius.borderRadius}
|
|
758
1134
|
marginBottom={0}
|
|
759
|
-
aria-label={
|
|
1135
|
+
aria-label={resolvedAriaLabel}
|
|
760
1136
|
aria-rowcount={computed.totalPages * state.pagination.pageSize}
|
|
761
1137
|
aria-colcount={
|
|
762
1138
|
table.getVisibleLeafColumns().length + extraColumnsBefore + extraColumnsAfter
|
|
763
1139
|
}
|
|
764
1140
|
width="100%"
|
|
765
|
-
{...(
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
1141
|
+
{...(hScroll ? { style: { minWidth: "max-content" } } : {})}
|
|
1142
|
+
// Pinning: the Table must NOT be a scroll container (its
|
|
1143
|
+
// overflow:hidden base makes it one) or sticky cells stick
|
|
1144
|
+
// to it instead of the scrolling content View. Content
|
|
1145
|
+
// fits the max-content box, so nothing needs the clip.
|
|
1146
|
+
{...(hScroll && enableColumnPinning ? { overflow: "visible" as any } : {})}
|
|
771
1147
|
>
|
|
772
1148
|
{/* Table Header */}
|
|
773
|
-
<Table.Head zIndex="$1" aria-label="Table headers">
|
|
1149
|
+
<Table.Head zIndex="$1" aria-label={t("Table headers")}>
|
|
774
1150
|
{headerGroups.map((headerGroup: any) => {
|
|
775
1151
|
rowCounter.current++;
|
|
776
1152
|
return (
|
|
@@ -796,11 +1172,43 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
796
1172
|
"aria-rowindex": rowCounter.current,
|
|
797
1173
|
} as any)}
|
|
798
1174
|
>
|
|
1175
|
+
{enableRowSelection && (
|
|
1176
|
+
<Table.HeaderCell
|
|
1177
|
+
cellWidth={SELECTION_COL_WIDTH}
|
|
1178
|
+
cellHeight={cellHeight as any}
|
|
1179
|
+
cellLocation="first"
|
|
1180
|
+
justifyContent="center"
|
|
1181
|
+
>
|
|
1182
|
+
<Checkbox
|
|
1183
|
+
checked={
|
|
1184
|
+
selectAllIndeterminate ? "indeterminate" : selectAllChecked
|
|
1185
|
+
}
|
|
1186
|
+
disabled={disabled}
|
|
1187
|
+
onChange={(checked) => {
|
|
1188
|
+
if (disabled || checked === "indeterminate") return;
|
|
1189
|
+
const shouldSelect = checked === true;
|
|
1190
|
+
const isAll =
|
|
1191
|
+
selectAllScope === "filtered"
|
|
1192
|
+
? table.getIsAllRowsSelected()
|
|
1193
|
+
: table.getIsAllPageRowsSelected();
|
|
1194
|
+
if (shouldSelect !== isAll) toggleSelectAll();
|
|
1195
|
+
}}
|
|
1196
|
+
checkboxProps={{
|
|
1197
|
+
"aria-label":
|
|
1198
|
+
selectAllScope === "filtered"
|
|
1199
|
+
? t("Select all matching rows")
|
|
1200
|
+
: t("Select all rows on page"),
|
|
1201
|
+
}}
|
|
1202
|
+
compact={isCompact}
|
|
1203
|
+
/>
|
|
1204
|
+
</Table.HeaderCell>
|
|
1205
|
+
)}
|
|
1206
|
+
|
|
799
1207
|
{showRowNumbers && (
|
|
800
1208
|
<Table.HeaderCell
|
|
801
1209
|
cellWidth={50}
|
|
802
1210
|
cellHeight={cellHeight as any}
|
|
803
|
-
cellLocation="first"
|
|
1211
|
+
cellLocation={enableRowSelection ? "middle" : "first"}
|
|
804
1212
|
>
|
|
805
1213
|
<Text fontSize="$4" fontWeight="600">
|
|
806
1214
|
#
|
|
@@ -812,7 +1220,9 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
812
1220
|
<Table.HeaderCell
|
|
813
1221
|
cellWidth={32}
|
|
814
1222
|
cellHeight={cellHeight as any}
|
|
815
|
-
cellLocation={
|
|
1223
|
+
cellLocation={
|
|
1224
|
+
enableRowSelection || showRowNumbers ? "middle" : "first"
|
|
1225
|
+
}
|
|
816
1226
|
>
|
|
817
1227
|
<View width={14} />
|
|
818
1228
|
</Table.HeaderCell>
|
|
@@ -828,13 +1238,19 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
828
1238
|
const colMaxSize =
|
|
829
1239
|
header.column.columnDef.maxSize ?? Number.MAX_SAFE_INTEGER;
|
|
830
1240
|
const stickyStyle = getStickyStyle(header.column.id);
|
|
831
|
-
const
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
1241
|
+
const columnDef = header.column.columnDef as DataTableColumn;
|
|
1242
|
+
const columnAlign = resolveColumnAlign({
|
|
1243
|
+
...columnDef,
|
|
1244
|
+
id: header.column.id,
|
|
1245
|
+
});
|
|
1246
|
+
const headerJustify = alignToFlex(columnAlign);
|
|
1247
|
+
const isRightAligned = columnAlign === "right";
|
|
835
1248
|
|
|
836
1249
|
const isFirstHeaderCell =
|
|
837
|
-
headerIndex === 0 &&
|
|
1250
|
+
headerIndex === 0 &&
|
|
1251
|
+
!enableRowSelection &&
|
|
1252
|
+
!showRowNumbers &&
|
|
1253
|
+
!enableRowExpansion;
|
|
838
1254
|
const isLastHeaderCell =
|
|
839
1255
|
headerIndex === headerGroup.headers.length - 1 &&
|
|
840
1256
|
!(showDeleteRow && !readOnly);
|
|
@@ -849,13 +1265,45 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
849
1265
|
key={header.id}
|
|
850
1266
|
id={`${header.column.id}-header`}
|
|
851
1267
|
onPress={
|
|
852
|
-
isSortableHeader
|
|
1268
|
+
isSortableHeader && !disabled
|
|
853
1269
|
? header.column.getToggleSortingHandler()
|
|
854
1270
|
: undefined
|
|
855
1271
|
}
|
|
856
|
-
|
|
1272
|
+
// Keyboard operability (WCAG 2.1.1): the sort
|
|
1273
|
+
// control must not be mouse-only — Tab reaches
|
|
1274
|
+
// sortable headers, Enter/Space toggles (Shift
|
|
1275
|
+
// held = multi-sort, same as shift+click).
|
|
1276
|
+
// Disabled tables drop the handlers (the root
|
|
1277
|
+
// inert already blocks focus on web).
|
|
1278
|
+
{...(isSortableHeader && !disabled && isWeb
|
|
1279
|
+
? ({
|
|
1280
|
+
tabIndex: 0,
|
|
1281
|
+
onKeyDown: (e: React.KeyboardEvent) => {
|
|
1282
|
+
if (
|
|
1283
|
+
e.key === "Enter" ||
|
|
1284
|
+
e.key === " " ||
|
|
1285
|
+
e.key === "Spacebar"
|
|
1286
|
+
) {
|
|
1287
|
+
e.preventDefault();
|
|
1288
|
+
header.column.getToggleSortingHandler()?.(e);
|
|
1289
|
+
}
|
|
1290
|
+
},
|
|
1291
|
+
focusVisibleStyle: ensureFocusVisibleRing({
|
|
1292
|
+
outlineOffset: -2,
|
|
1293
|
+
}),
|
|
1294
|
+
} as any)
|
|
1295
|
+
: {})}
|
|
1296
|
+
cursor={
|
|
1297
|
+
disabled
|
|
1298
|
+
? "not-allowed"
|
|
1299
|
+
: isSortableHeader
|
|
1300
|
+
? "pointer"
|
|
1301
|
+
: "default"
|
|
1302
|
+
}
|
|
857
1303
|
position="relative"
|
|
858
1304
|
cellLocation={headerCellLocation}
|
|
1305
|
+
justifyContent={headerJustify}
|
|
1306
|
+
data-align={columnAlign}
|
|
859
1307
|
aria-sort={
|
|
860
1308
|
isSortableHeader
|
|
861
1309
|
? sortDirection === "asc"
|
|
@@ -865,7 +1313,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
865
1313
|
: "none"
|
|
866
1314
|
: undefined
|
|
867
1315
|
}
|
|
868
|
-
{...(dnd
|
|
1316
|
+
{...(dnd && !disabled
|
|
869
1317
|
? ({
|
|
870
1318
|
draggable: true,
|
|
871
1319
|
onDragStart: (e: React.DragEvent<HTMLElement>) =>
|
|
@@ -881,9 +1329,11 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
881
1329
|
? {
|
|
882
1330
|
style: {
|
|
883
1331
|
position: "sticky",
|
|
884
|
-
...("
|
|
885
|
-
|
|
886
|
-
|
|
1332
|
+
...("insetInlineStart" in stickyStyle && {
|
|
1333
|
+
insetInlineStart: stickyStyle.insetInlineStart,
|
|
1334
|
+
}),
|
|
1335
|
+
...("insetInlineEnd" in stickyStyle && {
|
|
1336
|
+
insetInlineEnd: (stickyStyle as any).insetInlineEnd,
|
|
887
1337
|
}),
|
|
888
1338
|
zIndex: 2,
|
|
889
1339
|
backgroundColor: "var(--color2)",
|
|
@@ -895,15 +1345,15 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
895
1345
|
flexDirection="row"
|
|
896
1346
|
gap="$2"
|
|
897
1347
|
alignItems="center"
|
|
898
|
-
justifyContent={
|
|
1348
|
+
justifyContent={isRightAligned ? "flex-end" : "space-between"}
|
|
899
1349
|
flex={1}
|
|
900
1350
|
>
|
|
901
1351
|
<View
|
|
902
1352
|
flexDirection="row"
|
|
903
1353
|
gap="$2"
|
|
904
1354
|
alignItems="center"
|
|
905
|
-
flex={
|
|
906
|
-
justifyContent={
|
|
1355
|
+
flex={isRightAligned ? undefined : 1}
|
|
1356
|
+
justifyContent={isRightAligned ? "flex-end" : undefined}
|
|
907
1357
|
>
|
|
908
1358
|
<Text fontSize="$4" userSelect="none">
|
|
909
1359
|
{header.isPlaceholder
|
|
@@ -973,16 +1423,10 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
973
1423
|
/>
|
|
974
1424
|
)}
|
|
975
1425
|
{pinning && enableColumnPinning && (
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
/>
|
|
981
|
-
<pinning.PinButton
|
|
982
|
-
columnId={header.column.id}
|
|
983
|
-
position="right"
|
|
984
|
-
/>
|
|
985
|
-
</>
|
|
1426
|
+
/* One compact cycle control per header
|
|
1427
|
+
(left → right → unpin) — two full
|
|
1428
|
+
buttons crowded the header (owner). */
|
|
1429
|
+
<pinning.PinButton columnId={header.column.id} />
|
|
986
1430
|
)}
|
|
987
1431
|
</View>
|
|
988
1432
|
</View>
|
|
@@ -1000,7 +1444,14 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1000
1444
|
aria-valuenow={colSize}
|
|
1001
1445
|
aria-valuemin={colMinSize}
|
|
1002
1446
|
aria-valuemax={colMaxSize}
|
|
1003
|
-
aria-label={
|
|
1447
|
+
aria-label={withInterp(
|
|
1448
|
+
t("Resize {{column}} column", {
|
|
1449
|
+
column: header.column.columnDef.header || header.column.id,
|
|
1450
|
+
}),
|
|
1451
|
+
{
|
|
1452
|
+
column: header.column.columnDef.header || header.column.id,
|
|
1453
|
+
},
|
|
1454
|
+
)}
|
|
1004
1455
|
style={{ touchAction: "none" }}
|
|
1005
1456
|
zIndex={10}
|
|
1006
1457
|
/>
|
|
@@ -1022,29 +1473,60 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1022
1473
|
</Table.Head>
|
|
1023
1474
|
|
|
1024
1475
|
{/* Table Body */}
|
|
1025
|
-
<Table.Body
|
|
1476
|
+
<Table.Body
|
|
1477
|
+
// Virtualized mode hosts a div rowgroup (DataTableVirtualized)
|
|
1478
|
+
// inside a tbody>tr>td bridge; presentation-ing the bridge
|
|
1479
|
+
// keeps the AT grid tree clean: table > rowgroup(thead) +
|
|
1480
|
+
// rowgroup(virtual rows) with no cell-wrapping-rowgroup
|
|
1481
|
+
// noise. aria-label is prohibited on presentation roles.
|
|
1482
|
+
role={isVirtualized ? "presentation" : "rowgroup"}
|
|
1483
|
+
aria-label={isVirtualized ? undefined : t("Table data")}
|
|
1484
|
+
// Pinning: the flex-variant overflowY:auto computes
|
|
1485
|
+
// overflow-x:auto, making the body its own horizontal
|
|
1486
|
+
// scroller — headers (outside it) then never move with
|
|
1487
|
+
// the columns. Visible keeps the sticky chain clean so
|
|
1488
|
+
// the content View is the one scrollport.
|
|
1489
|
+
{...(hScroll && enableColumnPinning
|
|
1490
|
+
? { overflowY: "visible" as any, overflowX: "visible" as any }
|
|
1491
|
+
: {})}
|
|
1492
|
+
ref={(node: any) => {
|
|
1493
|
+
tableBodyRef.current = node ?? null;
|
|
1494
|
+
}}
|
|
1495
|
+
>
|
|
1026
1496
|
{tableRows.length === 0 ? (
|
|
1027
1497
|
<Table.Row>
|
|
1028
1498
|
<Table.Cell>
|
|
1029
|
-
<
|
|
1030
|
-
|
|
1031
|
-
alignItems="center"
|
|
1032
|
-
justifyContent="center"
|
|
1499
|
+
<EmptyState
|
|
1500
|
+
compact
|
|
1033
1501
|
aria-live="polite"
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
{computed.hasActiveFilters
|
|
1502
|
+
title={
|
|
1503
|
+
computed.hasActiveFilters
|
|
1037
1504
|
? t("No results found")
|
|
1038
|
-
: t("No data available")
|
|
1039
|
-
|
|
1040
|
-
|
|
1505
|
+
: t("No data available")
|
|
1506
|
+
}
|
|
1507
|
+
/>
|
|
1041
1508
|
</Table.Cell>
|
|
1042
1509
|
</Table.Row>
|
|
1043
1510
|
) : isVirtualized ? (
|
|
1044
|
-
<Table.Row>
|
|
1511
|
+
<Table.Row role="presentation">
|
|
1045
1512
|
<Table.Cell
|
|
1513
|
+
role="presentation"
|
|
1046
1514
|
padding={0}
|
|
1047
|
-
|
|
1515
|
+
// In the default flex displayMode colSpan is inert
|
|
1516
|
+
// and the context default gives cells a fixed token
|
|
1517
|
+
// width — the virtualized body must fill the row
|
|
1518
|
+
// explicitly or it collapses to that token. (In the
|
|
1519
|
+
// real-<table> displayMode the colSpan attribute
|
|
1520
|
+
// now genuinely spans.)
|
|
1521
|
+
cellWidth="auto"
|
|
1522
|
+
style={
|
|
1523
|
+
{
|
|
1524
|
+
display: "block",
|
|
1525
|
+
overflow: "hidden",
|
|
1526
|
+
width: "100%",
|
|
1527
|
+
minWidth: 0,
|
|
1528
|
+
} as any
|
|
1529
|
+
}
|
|
1048
1530
|
{...({
|
|
1049
1531
|
colSpan:
|
|
1050
1532
|
table.getVisibleLeafColumns().length +
|
|
@@ -1070,6 +1552,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1070
1552
|
extraColumnsBefore={extraColumnsBefore}
|
|
1071
1553
|
extraColumnsAfter={extraColumnsAfter}
|
|
1072
1554
|
table={table}
|
|
1555
|
+
hasInfiniteTail={hasInfiniteTail}
|
|
1073
1556
|
/>
|
|
1074
1557
|
</Table.Cell>
|
|
1075
1558
|
</Table.Row>
|
|
@@ -1099,9 +1582,22 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1099
1582
|
flexDirection="row"
|
|
1100
1583
|
alignItems="center"
|
|
1101
1584
|
gap="$2"
|
|
1102
|
-
|
|
1585
|
+
paddingInlineStart={indent}
|
|
1103
1586
|
cursor="pointer"
|
|
1104
1587
|
onPress={() => row.toggleExpanded()}
|
|
1588
|
+
// Keyboard/AT contract: expandable group
|
|
1589
|
+
// header is a toggle button (Enter/Space).
|
|
1590
|
+
role="button"
|
|
1591
|
+
tabIndex={0}
|
|
1592
|
+
aria-expanded={row.getIsExpanded()}
|
|
1593
|
+
{...({
|
|
1594
|
+
onKeyDown: (e: React.KeyboardEvent) => {
|
|
1595
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
1596
|
+
e.preventDefault();
|
|
1597
|
+
row.toggleExpanded();
|
|
1598
|
+
}
|
|
1599
|
+
},
|
|
1600
|
+
} as any)}
|
|
1105
1601
|
>
|
|
1106
1602
|
<Text fontFamily="$mono" fontSize="$3">
|
|
1107
1603
|
{row.getIsExpanded() ? "▼" : "▶"}
|
|
@@ -1123,9 +1619,9 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1123
1619
|
keyboardNav.isNavigating &&
|
|
1124
1620
|
index === keyboardNav.focusedRowIndex
|
|
1125
1621
|
? "$color4"
|
|
1126
|
-
: index % 2 ===
|
|
1127
|
-
? "$
|
|
1128
|
-
: "$
|
|
1622
|
+
: tableZebraOn && index % 2 === 1
|
|
1623
|
+
? "$color2"
|
|
1624
|
+
: "$color1"
|
|
1129
1625
|
}
|
|
1130
1626
|
{...({ animation: "quick" } as any)}
|
|
1131
1627
|
hoverStyle={{ backgroundColor: "$color3" }}
|
|
@@ -1139,8 +1635,17 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1139
1635
|
}
|
|
1140
1636
|
key={`${row.id}-${index}`}
|
|
1141
1637
|
aria-rowindex={rowCounter.current}
|
|
1142
|
-
aria-label={
|
|
1638
|
+
aria-label={withInterp(t("Row {{row}}", { row: index + 1 }), {
|
|
1639
|
+
row: index + 1,
|
|
1640
|
+
})}
|
|
1143
1641
|
tabIndex={-1}
|
|
1642
|
+
{...({
|
|
1643
|
+
"data-table-zebra": tableZebraOn
|
|
1644
|
+
? index % 2 === 0
|
|
1645
|
+
? "even"
|
|
1646
|
+
: "odd"
|
|
1647
|
+
: "off",
|
|
1648
|
+
} as any)}
|
|
1144
1649
|
>
|
|
1145
1650
|
{renderRowContent(row, index, isLastRow)}
|
|
1146
1651
|
</Table.Row>
|
|
@@ -1184,10 +1689,18 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1184
1689
|
flexBasis={0}
|
|
1185
1690
|
minHeight={0}
|
|
1186
1691
|
>
|
|
1692
|
+
{enableRowSelection && (
|
|
1693
|
+
<Table.Cell
|
|
1694
|
+
cellWidth={SELECTION_COL_WIDTH}
|
|
1695
|
+
cellLocation="first"
|
|
1696
|
+
padding={0}
|
|
1697
|
+
minHeight={0}
|
|
1698
|
+
/>
|
|
1699
|
+
)}
|
|
1187
1700
|
{showRowNumbers && (
|
|
1188
1701
|
<Table.Cell
|
|
1189
1702
|
cellWidth={50}
|
|
1190
|
-
cellLocation="first"
|
|
1703
|
+
cellLocation={enableRowSelection ? "middle" : "first"}
|
|
1191
1704
|
padding={0}
|
|
1192
1705
|
minHeight={0}
|
|
1193
1706
|
/>
|
|
@@ -1195,14 +1708,19 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1195
1708
|
{enableRowExpansion && (
|
|
1196
1709
|
<Table.Cell
|
|
1197
1710
|
cellWidth={32}
|
|
1198
|
-
cellLocation={
|
|
1711
|
+
cellLocation={
|
|
1712
|
+
enableRowSelection || showRowNumbers ? "middle" : "first"
|
|
1713
|
+
}
|
|
1199
1714
|
padding={0}
|
|
1200
1715
|
minHeight={0}
|
|
1201
1716
|
/>
|
|
1202
1717
|
)}
|
|
1203
1718
|
{headerGroups[0]?.headers.map((header: any, headerIndex: number) => {
|
|
1204
1719
|
const isFirstDataCell =
|
|
1205
|
-
headerIndex === 0 &&
|
|
1720
|
+
headerIndex === 0 &&
|
|
1721
|
+
!enableRowSelection &&
|
|
1722
|
+
!showRowNumbers &&
|
|
1723
|
+
!enableRowExpansion;
|
|
1206
1724
|
const isLastDataCell =
|
|
1207
1725
|
headerIndex === headerGroups[0].headers.length - 1 &&
|
|
1208
1726
|
!(showDeleteRow && !readOnly);
|
|
@@ -1234,6 +1752,34 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1234
1752
|
)}
|
|
1235
1753
|
</>
|
|
1236
1754
|
)}
|
|
1755
|
+
{/* DF-12 / Axiom 6: clipped-viewport affordance — rows are
|
|
1756
|
+
cut off below the fold, so the frame says so with a
|
|
1757
|
+
bottom fade that clears once the last row is reached.
|
|
1758
|
+
Sticky inside the scroll container; zero layout cost
|
|
1759
|
+
(negative margin overlays the last visible row).
|
|
1760
|
+
Rendered as a Table.Row: a <div> is not a valid child
|
|
1761
|
+
of the real <tbody> (SSR parsers foster-parent it out
|
|
1762
|
+
of the table). Only reachable in the flex displayMode
|
|
1763
|
+
(bodyClipped needs a scrollable body), where the row
|
|
1764
|
+
renders display:flex like the old View. */}
|
|
1765
|
+
{isWeb && bodyClipped && (
|
|
1766
|
+
<Table.Row
|
|
1767
|
+
aria-hidden={true}
|
|
1768
|
+
role="presentation"
|
|
1769
|
+
position={"sticky" as any}
|
|
1770
|
+
bottom={0}
|
|
1771
|
+
height={28}
|
|
1772
|
+
marginTop={-28}
|
|
1773
|
+
flexShrink={0}
|
|
1774
|
+
zIndex={2}
|
|
1775
|
+
pointerEvents="none"
|
|
1776
|
+
{...({ "data-table-clip-affordance": "true" } as any)}
|
|
1777
|
+
style={{
|
|
1778
|
+
background:
|
|
1779
|
+
"linear-gradient(to bottom, rgba(0,0,0,0), var(--background))",
|
|
1780
|
+
}}
|
|
1781
|
+
/>
|
|
1782
|
+
)}
|
|
1237
1783
|
</Table.Body>
|
|
1238
1784
|
|
|
1239
1785
|
{/* Table Footer */}
|
|
@@ -1256,12 +1802,98 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1256
1802
|
</View>
|
|
1257
1803
|
)}
|
|
1258
1804
|
|
|
1805
|
+
{/* Infinite mode tail: sentinel (non-virtualized trigger), append
|
|
1806
|
+
skeleton (bounded by the actual load — no infinite spinner),
|
|
1807
|
+
and an honest, announced end-of-data state (DG-ST-01/04). */}
|
|
1808
|
+
{infinite ? (
|
|
1809
|
+
<View flexDirection="column" width="100%">
|
|
1810
|
+
{!isVirtualized && !infinite.exhausted && isWeb ? (
|
|
1811
|
+
<View
|
|
1812
|
+
// @ts-ignore web ref for IntersectionObserver
|
|
1813
|
+
ref={sentinelRef as any}
|
|
1814
|
+
height={1}
|
|
1815
|
+
width="100%"
|
|
1816
|
+
aria-hidden
|
|
1817
|
+
{...({ "data-testid": "infinite-sentinel" } as any)}
|
|
1818
|
+
/>
|
|
1819
|
+
) : null}
|
|
1820
|
+
{!isVirtualized && infinite.isAppending ? (
|
|
1821
|
+
<View
|
|
1822
|
+
flexDirection="column"
|
|
1823
|
+
width="100%"
|
|
1824
|
+
{...knobProps.gap}
|
|
1825
|
+
paddingVertical="$2"
|
|
1826
|
+
aria-hidden
|
|
1827
|
+
{...({ "data-testid": "infinite-append-skeleton" } as any)}
|
|
1828
|
+
>
|
|
1829
|
+
{Array.from({ length: 3 }).map((_, i) => (
|
|
1830
|
+
<Skeleton key={i} width="100%" height={rowHeightPx - 8} />
|
|
1831
|
+
))}
|
|
1832
|
+
</View>
|
|
1833
|
+
) : null}
|
|
1834
|
+
<Text
|
|
1835
|
+
role="status"
|
|
1836
|
+
aria-live="polite"
|
|
1837
|
+
textAlign="center"
|
|
1838
|
+
paddingVertical="$2"
|
|
1839
|
+
fontSize={knobProps.sizeToken}
|
|
1840
|
+
color="$color10"
|
|
1841
|
+
{...({ "data-testid": "infinite-status" } as any)}
|
|
1842
|
+
>
|
|
1843
|
+
{/* Numeric labels are bidi-isolated so RTL contexts keep
|
|
1844
|
+
the interpolated runs in order (FSI…PDI). */}
|
|
1845
|
+
{infinite.isAppending
|
|
1846
|
+
? t("Loading more rows…")
|
|
1847
|
+
: infinite.exhausted
|
|
1848
|
+
? typeof infinite.totalCount === "number" && infinite.totalCount > 0
|
|
1849
|
+
? bidiIsolate(
|
|
1850
|
+
withInterp(
|
|
1851
|
+
t("All {{count}} rows loaded", { count: infinite.totalCount }),
|
|
1852
|
+
{
|
|
1853
|
+
count: infinite.totalCount,
|
|
1854
|
+
},
|
|
1855
|
+
),
|
|
1856
|
+
)
|
|
1857
|
+
: t("End of results")
|
|
1858
|
+
: typeof infinite.totalCount === "number"
|
|
1859
|
+
? bidiIsolate(
|
|
1860
|
+
withInterp(
|
|
1861
|
+
t("Showing {{visible}} of {{total}} rows", {
|
|
1862
|
+
visible: tableRows.length,
|
|
1863
|
+
total: infinite.totalCount,
|
|
1864
|
+
}),
|
|
1865
|
+
{ visible: tableRows.length, total: infinite.totalCount },
|
|
1866
|
+
),
|
|
1867
|
+
)
|
|
1868
|
+
: bidiIsolate(
|
|
1869
|
+
withInterp(
|
|
1870
|
+
t("Showing {{visible}} rows", { visible: tableRows.length }),
|
|
1871
|
+
{
|
|
1872
|
+
visible: tableRows.length,
|
|
1873
|
+
},
|
|
1874
|
+
),
|
|
1875
|
+
)}
|
|
1876
|
+
</Text>
|
|
1877
|
+
</View>
|
|
1878
|
+
) : null}
|
|
1879
|
+
|
|
1880
|
+
{enableRowSelection && bulkBarPlacement === "bottom" ? (
|
|
1881
|
+
<View width="100%" {...(disabled ? disabledState.chromeKnobProps : {})}>
|
|
1882
|
+
<DataTableBulkActions
|
|
1883
|
+
actions={resolvedBulkActions}
|
|
1884
|
+
maxVisibleActions={5}
|
|
1885
|
+
showSelectionCount
|
|
1886
|
+
placement="bottom"
|
|
1887
|
+
/>
|
|
1888
|
+
</View>
|
|
1889
|
+
) : null}
|
|
1890
|
+
|
|
1259
1891
|
{/* Add Row Button */}
|
|
1260
1892
|
{showAddRow && !readOnly && (
|
|
1261
1893
|
<View>
|
|
1262
1894
|
<Button
|
|
1263
1895
|
icon={PlusIcon}
|
|
1264
|
-
disabled={maxRows !== undefined && tableData.length >= maxRows}
|
|
1896
|
+
disabled={disabled || (maxRows !== undefined && tableData.length >= maxRows)}
|
|
1265
1897
|
onPress={effectiveHandleAddRow}
|
|
1266
1898
|
aria-label={t("Add Row")}
|
|
1267
1899
|
>
|
|
@@ -1270,8 +1902,42 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1270
1902
|
</View>
|
|
1271
1903
|
)}
|
|
1272
1904
|
|
|
1273
|
-
{/* Pagination */}
|
|
1274
|
-
{enablePagination &&
|
|
1905
|
+
{/* Pagination footer (pages mode only; infinite replaces it with the tail status) */}
|
|
1906
|
+
{enablePagination && !infinite && (
|
|
1907
|
+
<View
|
|
1908
|
+
paddingTop="$3"
|
|
1909
|
+
flexDirection="row"
|
|
1910
|
+
alignItems="center"
|
|
1911
|
+
justifyContent="space-between"
|
|
1912
|
+
flexWrap="wrap"
|
|
1913
|
+
{...knobProps.gap}
|
|
1914
|
+
{...(disabled ? disabledState.chromeKnobProps : {})}
|
|
1915
|
+
>
|
|
1916
|
+
{renderPaginationComponent()}
|
|
1917
|
+
{/* DF-12 / Axiom 6: visible range/total — the footer states how
|
|
1918
|
+
many rows exist even when a height-constrained body clips
|
|
1919
|
+
some below the fold ("1–6 of 6", not "what you see is all"). */}
|
|
1920
|
+
<Text
|
|
1921
|
+
fontSize={knobProps.sizeToken}
|
|
1922
|
+
color="$color11"
|
|
1923
|
+
aria-live="polite"
|
|
1924
|
+
{...({ "data-table-range": "true" } as any)}
|
|
1925
|
+
>
|
|
1926
|
+
{/* Bidi-isolated: an RTL paragraph would otherwise reorder
|
|
1927
|
+
the latin/numeric runs ("1–5 of 5" → "of 5 5–1"). */}
|
|
1928
|
+
{bidiIsolate(
|
|
1929
|
+
withInterp(
|
|
1930
|
+
t("{{start}}–{{end}} of {{total}}", {
|
|
1931
|
+
start: rangeStart,
|
|
1932
|
+
end: rangeEnd,
|
|
1933
|
+
total: rangeTotal,
|
|
1934
|
+
}),
|
|
1935
|
+
{ start: rangeStart, end: rangeEnd, total: rangeTotal },
|
|
1936
|
+
),
|
|
1937
|
+
)}
|
|
1938
|
+
</Text>
|
|
1939
|
+
</View>
|
|
1940
|
+
)}
|
|
1275
1941
|
|
|
1276
1942
|
{/* Loading State */}
|
|
1277
1943
|
{state.isLoading && (
|
|
@@ -1286,7 +1952,7 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1286
1952
|
zIndex={zIndex.loading}
|
|
1287
1953
|
aria-busy={true}
|
|
1288
1954
|
aria-live="assertive"
|
|
1289
|
-
aria-label="Loading table data"
|
|
1955
|
+
aria-label={t("Loading table data")}
|
|
1290
1956
|
role="status"
|
|
1291
1957
|
>
|
|
1292
1958
|
<Spinner size="large" color="$color10" />
|
|
@@ -1309,16 +1975,16 @@ export function DataTableRoot<TData extends Record<string, any> = Record<string,
|
|
|
1309
1975
|
return renderInner(
|
|
1310
1976
|
formData,
|
|
1311
1977
|
() => {
|
|
1312
|
-
if (readOnly || (maxRows && formData.length >= maxRows)) return;
|
|
1978
|
+
if (readOnly || disabled || (maxRows && formData.length >= maxRows)) return;
|
|
1313
1979
|
const newRow = { ...defaultRow, idx: formData.length + 1 } as unknown as TData;
|
|
1314
1980
|
setFormData([...formData, newRow]);
|
|
1315
1981
|
},
|
|
1316
1982
|
(idx: number) => {
|
|
1317
|
-
if (readOnly || formData.length <= minRows) return;
|
|
1983
|
+
if (readOnly || disabled || formData.length <= minRows) return;
|
|
1318
1984
|
setFormData(formData.filter((_, i) => i !== idx));
|
|
1319
1985
|
},
|
|
1320
1986
|
async (rowIndex: number, columnId: string, newValue: any) => {
|
|
1321
|
-
if (readOnly) return;
|
|
1987
|
+
if (readOnly || disabled) return;
|
|
1322
1988
|
const previousValue = formData[rowIndex]?.[columnId];
|
|
1323
1989
|
if (onCellChange) {
|
|
1324
1990
|
const result = await onCellChange(rowIndex, columnId, newValue, previousValue);
|