@multiplatform.one/table 6.7.0 → 7.1.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 +4 -3
- package/dist/cjs/components/ChildTable/index.cjs +2 -1
- package/dist/cjs/components/ChildTable/index.native.js +2 -1
- package/dist/cjs/components/ChildTable/index.native.js.map +1 -1
- package/dist/cjs/components/ColumnHeaderFilter/index.cjs +17 -9
- package/dist/cjs/components/ColumnHeaderFilter/index.native.js +32 -11
- package/dist/cjs/components/ColumnHeaderFilter/index.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableDocumentList.cjs +222 -0
- package/dist/cjs/components/DataTable/DataTableDocumentList.native.js +237 -0
- package/dist/cjs/components/DataTable/DataTableDocumentList.native.js.map +1 -0
- package/dist/cjs/components/DataTable/DataTableMobileCards.cjs +5 -2
- package/dist/cjs/components/DataTable/DataTableMobileCards.native.js +6 -2
- package/dist/cjs/components/DataTable/DataTableMobileCards.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableRoot.cjs +92 -41
- package/dist/cjs/components/DataTable/DataTableRoot.native.js +97 -43
- package/dist/cjs/components/DataTable/DataTableRoot.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableVirtualized.cjs +8 -2
- package/dist/cjs/components/DataTable/DataTableVirtualized.native.js +9 -3
- package/dist/cjs/components/DataTable/DataTableVirtualized.native.js.map +1 -1
- package/dist/cjs/components/DataTable/documentListSlots.cjs +59 -0
- package/dist/cjs/components/DataTable/documentListSlots.native.js +85 -0
- package/dist/cjs/components/DataTable/documentListSlots.native.js.map +1 -0
- package/dist/cjs/components/DataTable/index.native.js +74 -59
- package/dist/cjs/components/DataTable/index.native.js.map +1 -1
- package/dist/cjs/components/DataTable/rowStateChrome.cjs +55 -0
- package/dist/cjs/components/DataTable/rowStateChrome.native.js +59 -0
- package/dist/cjs/components/DataTable/rowStateChrome.native.js.map +1 -0
- package/dist/cjs/components/DataTableCell/CellModalEditor.cjs +24 -3
- package/dist/cjs/components/DataTableCell/CellModalEditor.native.js +6 -1
- package/dist/cjs/components/DataTableCell/CellModalEditor.native.js.map +1 -1
- package/dist/cjs/components/DataTableCell/CellOptionsEditor.cjs +9 -2
- package/dist/cjs/components/DataTableCell/CellOptionsEditor.native.js +11 -2
- package/dist/cjs/components/DataTableCell/CellOptionsEditor.native.js.map +1 -1
- package/dist/cjs/components/DataTableCell/index.cjs +74 -63
- package/dist/cjs/components/DataTableCell/index.native.js +94 -82
- package/dist/cjs/components/DataTableCell/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableColumnPinning/index.cjs +54 -37
- package/dist/cjs/components/DataTableColumnPinning/index.native.js +59 -38
- package/dist/cjs/components/DataTableColumnPinning/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableDateFilter/index.cjs +33 -14
- package/dist/cjs/components/DataTableDateFilter/index.native.js +33 -12
- package/dist/cjs/components/DataTableDateFilter/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableExport/index.cjs +35 -7
- package/dist/cjs/components/DataTableExport/index.native.js +42 -7
- package/dist/cjs/components/DataTableExport/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableFacetMenu/index.cjs +140 -0
- package/dist/cjs/components/DataTableFacetMenu/index.native.js +156 -0
- package/dist/cjs/components/DataTableFacetMenu/index.native.js.map +1 -0
- package/dist/cjs/components/DataTableFilterButton/index.cjs +51 -32
- package/dist/cjs/components/DataTableFilterButton/index.native.js +63 -40
- package/dist/cjs/components/DataTableFilterButton/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableFilterChips/FilterChip.cjs +143 -0
- package/dist/cjs/components/DataTableFilterChips/FilterChip.native.js +148 -0
- package/dist/cjs/components/DataTableFilterChips/FilterChip.native.js.map +1 -0
- package/dist/cjs/components/DataTableFilterChips/index.cjs +9 -31
- package/dist/cjs/components/DataTableFilterChips/index.native.js +9 -32
- package/dist/cjs/components/DataTableFilterChips/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableFilters/index.cjs +145 -502
- package/dist/cjs/components/DataTableFilters/index.native.js +171 -544
- package/dist/cjs/components/DataTableFilters/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableGrouping/index.cjs +273 -108
- package/dist/cjs/components/DataTableGrouping/index.native.js +310 -157
- package/dist/cjs/components/DataTableGrouping/index.native.js.map +1 -1
- package/dist/cjs/components/DataTablePagination/index.cjs +147 -95
- package/dist/cjs/components/DataTablePagination/index.native.js +159 -106
- package/dist/cjs/components/DataTablePagination/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableSearch/index.cjs +251 -210
- package/dist/cjs/components/DataTableSearch/index.native.js +292 -243
- package/dist/cjs/components/DataTableSearch/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableToolbar/index.cjs +141 -115
- package/dist/cjs/components/DataTableToolbar/index.native.js +163 -148
- package/dist/cjs/components/DataTableToolbar/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableViewOptions/index.cjs +25 -21
- package/dist/cjs/components/DataTableViewOptions/index.native.js +6 -4
- package/dist/cjs/components/DataTableViewOptions/index.native.js.map +1 -1
- package/dist/cjs/components/SimpleTable/index.cjs +336 -46
- package/dist/cjs/components/SimpleTable/index.native.js +356 -48
- package/dist/cjs/components/SimpleTable/index.native.js.map +1 -1
- package/dist/cjs/components/TableInput/index.cjs +147 -38
- package/dist/cjs/components/TableInput/index.native.js +54 -38
- package/dist/cjs/components/TableInput/index.native.js.map +1 -1
- package/dist/cjs/components/TableInput/shared.cjs +36 -1
- package/dist/cjs/components/TableInput/shared.native.js +35 -0
- package/dist/cjs/components/TableInput/shared.native.js.map +1 -1
- package/dist/cjs/hooks/useDataTable.cjs +33 -2
- package/dist/cjs/hooks/useDataTable.native.js +41 -2
- package/dist/cjs/hooks/useDataTable.native.js.map +1 -1
- package/dist/cjs/hooks/useInfiniteRows.cjs +20 -3
- package/dist/cjs/hooks/useInfiniteRows.native.js +20 -3
- package/dist/cjs/hooks/useInfiniteRows.native.js.map +1 -1
- package/dist/cjs/index.cjs +2 -0
- package/dist/cjs/index.native.js +2 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/utils/filterUtils.cjs +12 -5
- package/dist/cjs/utils/filterUtils.native.js +20 -5
- package/dist/cjs/utils/filterUtils.native.js.map +1 -1
- package/dist/esm/components/ChildTable/index.mjs +2 -1
- package/dist/esm/components/ChildTable/index.mjs.map +1 -1
- package/dist/esm/components/ChildTable/index.native.js +2 -1
- package/dist/esm/components/ChildTable/index.native.js.map +1 -1
- package/dist/esm/components/ColumnHeaderFilter/index.mjs +17 -9
- package/dist/esm/components/ColumnHeaderFilter/index.mjs.map +1 -1
- package/dist/esm/components/ColumnHeaderFilter/index.native.js +32 -11
- package/dist/esm/components/ColumnHeaderFilter/index.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableDocumentList.mjs +196 -0
- package/dist/esm/components/DataTable/DataTableDocumentList.mjs.map +1 -0
- package/dist/esm/components/DataTable/DataTableDocumentList.native.js +208 -0
- package/dist/esm/components/DataTable/DataTableDocumentList.native.js.map +1 -0
- package/dist/esm/components/DataTable/DataTableMobileCards.mjs +5 -2
- package/dist/esm/components/DataTable/DataTableMobileCards.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableMobileCards.native.js +6 -2
- package/dist/esm/components/DataTable/DataTableMobileCards.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableRoot.mjs +93 -42
- package/dist/esm/components/DataTable/DataTableRoot.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableRoot.native.js +98 -44
- package/dist/esm/components/DataTable/DataTableRoot.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableVirtualized.mjs +8 -2
- package/dist/esm/components/DataTable/DataTableVirtualized.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableVirtualized.native.js +9 -3
- package/dist/esm/components/DataTable/DataTableVirtualized.native.js.map +1 -1
- package/dist/esm/components/DataTable/documentListSlots.mjs +33 -0
- package/dist/esm/components/DataTable/documentListSlots.mjs.map +1 -0
- package/dist/esm/components/DataTable/documentListSlots.native.js +56 -0
- package/dist/esm/components/DataTable/documentListSlots.native.js.map +1 -0
- package/dist/esm/components/DataTable/index.native.js +52 -37
- package/dist/esm/components/DataTable/index.native.js.map +1 -1
- package/dist/esm/components/DataTable/rowStateChrome.mjs +28 -0
- package/dist/esm/components/DataTable/rowStateChrome.mjs.map +1 -0
- package/dist/esm/components/DataTable/rowStateChrome.native.js +29 -0
- package/dist/esm/components/DataTable/rowStateChrome.native.js.map +1 -0
- package/dist/esm/components/DataTableCell/CellModalEditor.mjs +25 -4
- package/dist/esm/components/DataTableCell/CellModalEditor.mjs.map +1 -1
- package/dist/esm/components/DataTableCell/CellModalEditor.native.js +6 -1
- package/dist/esm/components/DataTableCell/CellModalEditor.native.js.map +1 -1
- package/dist/esm/components/DataTableCell/CellOptionsEditor.mjs +9 -2
- package/dist/esm/components/DataTableCell/CellOptionsEditor.mjs.map +1 -1
- package/dist/esm/components/DataTableCell/CellOptionsEditor.native.js +11 -2
- package/dist/esm/components/DataTableCell/CellOptionsEditor.native.js.map +1 -1
- package/dist/esm/components/DataTableCell/index.mjs +75 -64
- package/dist/esm/components/DataTableCell/index.mjs.map +1 -1
- package/dist/esm/components/DataTableCell/index.native.js +95 -83
- package/dist/esm/components/DataTableCell/index.native.js.map +1 -1
- package/dist/esm/components/DataTableColumnPinning/index.mjs +54 -37
- package/dist/esm/components/DataTableColumnPinning/index.mjs.map +1 -1
- package/dist/esm/components/DataTableColumnPinning/index.native.js +59 -38
- package/dist/esm/components/DataTableColumnPinning/index.native.js.map +1 -1
- package/dist/esm/components/DataTableDateFilter/index.mjs +34 -15
- package/dist/esm/components/DataTableDateFilter/index.mjs.map +1 -1
- package/dist/esm/components/DataTableDateFilter/index.native.js +34 -13
- package/dist/esm/components/DataTableDateFilter/index.native.js.map +1 -1
- package/dist/esm/components/DataTableExport/index.mjs +36 -8
- package/dist/esm/components/DataTableExport/index.mjs.map +1 -1
- package/dist/esm/components/DataTableExport/index.native.js +43 -8
- package/dist/esm/components/DataTableExport/index.native.js.map +1 -1
- package/dist/esm/components/DataTableFacetMenu/index.mjs +115 -0
- package/dist/esm/components/DataTableFacetMenu/index.mjs.map +1 -0
- package/dist/esm/components/DataTableFacetMenu/index.native.js +128 -0
- package/dist/esm/components/DataTableFacetMenu/index.native.js.map +1 -0
- package/dist/esm/components/DataTableFilterButton/index.mjs +54 -35
- package/dist/esm/components/DataTableFilterButton/index.mjs.map +1 -1
- package/dist/esm/components/DataTableFilterButton/index.native.js +66 -43
- package/dist/esm/components/DataTableFilterButton/index.native.js.map +1 -1
- package/dist/esm/components/DataTableFilterChips/FilterChip.mjs +118 -0
- package/dist/esm/components/DataTableFilterChips/FilterChip.mjs.map +1 -0
- package/dist/esm/components/DataTableFilterChips/FilterChip.native.js +120 -0
- package/dist/esm/components/DataTableFilterChips/FilterChip.native.js.map +1 -0
- package/dist/esm/components/DataTableFilterChips/index.mjs +9 -32
- package/dist/esm/components/DataTableFilterChips/index.mjs.map +1 -1
- package/dist/esm/components/DataTableFilterChips/index.native.js +9 -33
- package/dist/esm/components/DataTableFilterChips/index.native.js.map +1 -1
- package/dist/esm/components/DataTableFilters/index.mjs +149 -506
- package/dist/esm/components/DataTableFilters/index.mjs.map +1 -1
- package/dist/esm/components/DataTableFilters/index.native.js +175 -548
- package/dist/esm/components/DataTableFilters/index.native.js.map +1 -1
- package/dist/esm/components/DataTableGrouping/index.mjs +275 -110
- package/dist/esm/components/DataTableGrouping/index.mjs.map +1 -1
- package/dist/esm/components/DataTableGrouping/index.native.js +287 -134
- package/dist/esm/components/DataTableGrouping/index.native.js.map +1 -1
- package/dist/esm/components/DataTablePagination/index.mjs +148 -96
- package/dist/esm/components/DataTablePagination/index.mjs.map +1 -1
- package/dist/esm/components/DataTablePagination/index.native.js +160 -107
- package/dist/esm/components/DataTablePagination/index.native.js.map +1 -1
- package/dist/esm/components/DataTableSearch/index.mjs +256 -215
- package/dist/esm/components/DataTableSearch/index.mjs.map +1 -1
- package/dist/esm/components/DataTableSearch/index.native.js +297 -248
- package/dist/esm/components/DataTableSearch/index.native.js.map +1 -1
- package/dist/esm/components/DataTableToolbar/index.mjs +145 -119
- package/dist/esm/components/DataTableToolbar/index.mjs.map +1 -1
- package/dist/esm/components/DataTableToolbar/index.native.js +167 -152
- package/dist/esm/components/DataTableToolbar/index.native.js.map +1 -1
- package/dist/esm/components/DataTableViewOptions/index.mjs +26 -22
- package/dist/esm/components/DataTableViewOptions/index.mjs.map +1 -1
- package/dist/esm/components/DataTableViewOptions/index.native.js +7 -5
- package/dist/esm/components/DataTableViewOptions/index.native.js.map +1 -1
- package/dist/esm/components/SimpleTable/index.mjs +338 -48
- package/dist/esm/components/SimpleTable/index.mjs.map +1 -1
- package/dist/esm/components/SimpleTable/index.native.js +358 -50
- package/dist/esm/components/SimpleTable/index.native.js.map +1 -1
- package/dist/esm/components/TableInput/index.mjs +150 -41
- package/dist/esm/components/TableInput/index.mjs.map +1 -1
- package/dist/esm/components/TableInput/index.native.js +55 -39
- package/dist/esm/components/TableInput/index.native.js.map +1 -1
- package/dist/esm/components/TableInput/shared.mjs +34 -1
- package/dist/esm/components/TableInput/shared.mjs.map +1 -1
- package/dist/esm/components/TableInput/shared.native.js +34 -1
- package/dist/esm/components/TableInput/shared.native.js.map +1 -1
- package/dist/esm/hooks/useDataTable.mjs +33 -2
- package/dist/esm/hooks/useDataTable.mjs.map +1 -1
- package/dist/esm/hooks/useDataTable.native.js +41 -2
- package/dist/esm/hooks/useDataTable.native.js.map +1 -1
- package/dist/esm/hooks/useInfiniteRows.mjs +20 -3
- package/dist/esm/hooks/useInfiniteRows.mjs.map +1 -1
- package/dist/esm/hooks/useInfiniteRows.native.js +20 -3
- package/dist/esm/hooks/useInfiniteRows.native.js.map +1 -1
- package/dist/esm/index.mjs +2 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +2 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/utils/filterUtils.mjs +12 -5
- package/dist/esm/utils/filterUtils.mjs.map +1 -1
- package/dist/esm/utils/filterUtils.native.js +20 -5
- package/dist/esm/utils/filterUtils.native.js.map +1 -1
- package/dist/jsx/components/ChildTable/index.mjs +2 -1
- package/dist/jsx/components/ChildTable/index.mjs.map +1 -1
- package/dist/jsx/components/ChildTable/index.native.js +2 -1
- package/dist/jsx/components/ChildTable/index.native.js.map +1 -1
- package/dist/jsx/components/ColumnHeaderFilter/index.mjs +17 -9
- package/dist/jsx/components/ColumnHeaderFilter/index.mjs.map +1 -1
- package/dist/jsx/components/ColumnHeaderFilter/index.native.js +32 -11
- package/dist/jsx/components/ColumnHeaderFilter/index.native.js.map +1 -1
- package/dist/jsx/components/DataTable/DataTableDocumentList.mjs +196 -0
- package/dist/jsx/components/DataTable/DataTableDocumentList.mjs.map +1 -0
- package/dist/jsx/components/DataTable/DataTableDocumentList.native.js +237 -0
- package/dist/jsx/components/DataTable/DataTableDocumentList.native.js.map +1 -0
- package/dist/jsx/components/DataTable/DataTableMobileCards.mjs +5 -2
- package/dist/jsx/components/DataTable/DataTableMobileCards.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableMobileCards.native.js +6 -2
- package/dist/jsx/components/DataTable/DataTableMobileCards.native.js.map +1 -1
- package/dist/jsx/components/DataTable/DataTableRoot.mjs +93 -42
- package/dist/jsx/components/DataTable/DataTableRoot.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableRoot.native.js +97 -43
- package/dist/jsx/components/DataTable/DataTableRoot.native.js.map +1 -1
- package/dist/jsx/components/DataTable/DataTableVirtualized.mjs +8 -2
- package/dist/jsx/components/DataTable/DataTableVirtualized.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableVirtualized.native.js +9 -3
- package/dist/jsx/components/DataTable/DataTableVirtualized.native.js.map +1 -1
- package/dist/jsx/components/DataTable/documentListSlots.mjs +33 -0
- package/dist/jsx/components/DataTable/documentListSlots.mjs.map +1 -0
- package/dist/jsx/components/DataTable/documentListSlots.native.js +85 -0
- package/dist/jsx/components/DataTable/documentListSlots.native.js.map +1 -0
- package/dist/jsx/components/DataTable/index.native.js +74 -59
- package/dist/jsx/components/DataTable/index.native.js.map +1 -1
- package/dist/jsx/components/DataTable/rowStateChrome.mjs +28 -0
- package/dist/jsx/components/DataTable/rowStateChrome.mjs.map +1 -0
- package/dist/jsx/components/DataTable/rowStateChrome.native.js +59 -0
- package/dist/jsx/components/DataTable/rowStateChrome.native.js.map +1 -0
- package/dist/jsx/components/DataTableCell/CellModalEditor.mjs +25 -4
- package/dist/jsx/components/DataTableCell/CellModalEditor.mjs.map +1 -1
- package/dist/jsx/components/DataTableCell/CellModalEditor.native.js +6 -1
- package/dist/jsx/components/DataTableCell/CellModalEditor.native.js.map +1 -1
- package/dist/jsx/components/DataTableCell/CellOptionsEditor.mjs +9 -2
- package/dist/jsx/components/DataTableCell/CellOptionsEditor.mjs.map +1 -1
- package/dist/jsx/components/DataTableCell/CellOptionsEditor.native.js +11 -2
- package/dist/jsx/components/DataTableCell/CellOptionsEditor.native.js.map +1 -1
- package/dist/jsx/components/DataTableCell/index.mjs +75 -64
- package/dist/jsx/components/DataTableCell/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableCell/index.native.js +94 -82
- package/dist/jsx/components/DataTableCell/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableColumnPinning/index.mjs +54 -37
- package/dist/jsx/components/DataTableColumnPinning/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableColumnPinning/index.native.js +59 -38
- package/dist/jsx/components/DataTableColumnPinning/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableDateFilter/index.mjs +34 -15
- package/dist/jsx/components/DataTableDateFilter/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableDateFilter/index.native.js +33 -12
- package/dist/jsx/components/DataTableDateFilter/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableExport/index.mjs +36 -8
- package/dist/jsx/components/DataTableExport/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableExport/index.native.js +42 -7
- package/dist/jsx/components/DataTableExport/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableFacetMenu/index.mjs +115 -0
- package/dist/jsx/components/DataTableFacetMenu/index.mjs.map +1 -0
- package/dist/jsx/components/DataTableFacetMenu/index.native.js +156 -0
- package/dist/jsx/components/DataTableFacetMenu/index.native.js.map +1 -0
- package/dist/jsx/components/DataTableFilterButton/index.mjs +54 -35
- package/dist/jsx/components/DataTableFilterButton/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableFilterButton/index.native.js +63 -40
- package/dist/jsx/components/DataTableFilterButton/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableFilterChips/FilterChip.mjs +118 -0
- package/dist/jsx/components/DataTableFilterChips/FilterChip.mjs.map +1 -0
- package/dist/jsx/components/DataTableFilterChips/FilterChip.native.js +148 -0
- package/dist/jsx/components/DataTableFilterChips/FilterChip.native.js.map +1 -0
- package/dist/jsx/components/DataTableFilterChips/index.mjs +9 -32
- package/dist/jsx/components/DataTableFilterChips/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableFilterChips/index.native.js +9 -32
- package/dist/jsx/components/DataTableFilterChips/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableFilters/index.mjs +149 -506
- package/dist/jsx/components/DataTableFilters/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableFilters/index.native.js +171 -544
- package/dist/jsx/components/DataTableFilters/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableGrouping/index.mjs +275 -110
- package/dist/jsx/components/DataTableGrouping/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableGrouping/index.native.js +310 -157
- package/dist/jsx/components/DataTableGrouping/index.native.js.map +1 -1
- package/dist/jsx/components/DataTablePagination/index.mjs +148 -96
- package/dist/jsx/components/DataTablePagination/index.mjs.map +1 -1
- package/dist/jsx/components/DataTablePagination/index.native.js +159 -106
- package/dist/jsx/components/DataTablePagination/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableSearch/index.mjs +256 -215
- package/dist/jsx/components/DataTableSearch/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableSearch/index.native.js +292 -243
- package/dist/jsx/components/DataTableSearch/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableToolbar/index.mjs +145 -119
- package/dist/jsx/components/DataTableToolbar/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableToolbar/index.native.js +163 -148
- package/dist/jsx/components/DataTableToolbar/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableViewOptions/index.mjs +26 -22
- package/dist/jsx/components/DataTableViewOptions/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableViewOptions/index.native.js +6 -4
- package/dist/jsx/components/DataTableViewOptions/index.native.js.map +1 -1
- package/dist/jsx/components/SimpleTable/index.mjs +338 -48
- package/dist/jsx/components/SimpleTable/index.mjs.map +1 -1
- package/dist/jsx/components/SimpleTable/index.native.js +356 -48
- package/dist/jsx/components/SimpleTable/index.native.js.map +1 -1
- package/dist/jsx/components/TableInput/index.mjs +150 -41
- package/dist/jsx/components/TableInput/index.mjs.map +1 -1
- package/dist/jsx/components/TableInput/index.native.js +54 -38
- package/dist/jsx/components/TableInput/index.native.js.map +1 -1
- package/dist/jsx/components/TableInput/shared.mjs +34 -1
- package/dist/jsx/components/TableInput/shared.mjs.map +1 -1
- package/dist/jsx/components/TableInput/shared.native.js +35 -0
- package/dist/jsx/components/TableInput/shared.native.js.map +1 -1
- package/dist/jsx/hooks/useDataTable.mjs +33 -2
- package/dist/jsx/hooks/useDataTable.mjs.map +1 -1
- package/dist/jsx/hooks/useDataTable.native.js +41 -2
- package/dist/jsx/hooks/useDataTable.native.js.map +1 -1
- package/dist/jsx/hooks/useInfiniteRows.mjs +20 -3
- package/dist/jsx/hooks/useInfiniteRows.mjs.map +1 -1
- package/dist/jsx/hooks/useInfiniteRows.native.js +20 -3
- package/dist/jsx/hooks/useInfiniteRows.native.js.map +1 -1
- package/dist/jsx/index.js +2 -1
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +2 -1
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +2 -0
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/utils/filterUtils.mjs +12 -5
- package/dist/jsx/utils/filterUtils.mjs.map +1 -1
- package/dist/jsx/utils/filterUtils.native.js +20 -5
- package/dist/jsx/utils/filterUtils.native.js.map +1 -1
- package/package.json +15 -15
- package/src/components/ChildTable/index.tsx +1 -0
- package/src/components/ColumnHeaderFilter/ColumnHeaderFilter.spec.tsx +85 -0
- package/src/components/ColumnHeaderFilter/index.tsx +28 -10
- package/src/components/DataTable/DataTable.stories.tsx +30 -0
- package/src/components/DataTable/DataTableDocumentList.tsx +224 -0
- package/src/components/DataTable/DataTableMobileCards.tsx +20 -8
- package/src/components/DataTable/DataTableRoot.tsx +135 -58
- package/src/components/DataTable/DataTableVirtualized.tsx +8 -11
- package/src/components/DataTable/cardLayout.spec.tsx +89 -0
- package/src/components/DataTable/documentListSlots.ts +57 -0
- package/src/components/DataTable/index.native.tsx +76 -50
- package/src/components/DataTable/keepPreviousData.spec.tsx +137 -0
- package/src/components/DataTable/rowRing.spec.tsx +118 -0
- package/src/components/DataTable/rowStateChrome.ts +38 -0
- package/src/components/DataTableCell/CellModalEditor.native.tsx +4 -0
- package/src/components/DataTableCell/CellModalEditor.tsx +31 -3
- package/src/components/DataTableCell/CellOptionsEditor.tsx +29 -12
- package/src/components/DataTableCell/DataTableCell.stories.tsx +3 -3
- package/src/components/DataTableCell/cellDraftPolicy.spec.tsx +131 -4
- package/src/components/DataTableCell/dataTableCell.spec.tsx +36 -1
- package/src/components/DataTableCell/index.tsx +121 -86
- package/src/components/DataTableColumnPinning/DataTableColumnPinning.spec.tsx +66 -0
- package/src/components/DataTableColumnPinning/index.tsx +32 -17
- package/src/components/DataTableDateFilter/DataTableDateFilter.spec.tsx +9 -1
- package/src/components/DataTableDateFilter/dateFilterZones.spec.ts +316 -0
- package/src/components/DataTableDateFilter/index.tsx +42 -22
- package/src/components/DataTableExport/exportDateZones.spec.tsx +348 -0
- package/src/components/DataTableExport/index.tsx +107 -63
- package/src/components/DataTableFacetMenu/DataTableFacetMenu.spec.tsx +264 -0
- package/src/components/DataTableFacetMenu/DataTableFacetMenu.stories.tsx +212 -0
- package/src/components/DataTableFacetMenu/index.tsx +202 -0
- package/src/components/DataTableFilterButton/index.tsx +66 -49
- package/src/components/DataTableFilterChips/DataTableFilterChips.spec.tsx +22 -0
- package/src/components/DataTableFilterChips/FilterChip.tsx +122 -0
- package/src/components/DataTableFilterChips/index.tsx +13 -29
- package/src/components/DataTableFilters/DataTableFilters.spec.tsx +56 -0
- package/src/components/DataTableFilters/index.tsx +169 -584
- package/src/components/DataTableGrouping/DataTableGrouping.spec.tsx +85 -0
- package/src/components/DataTableGrouping/index.tsx +270 -130
- package/src/components/DataTablePagination/DataTablePagination.spec.tsx +79 -4
- package/src/components/DataTablePagination/index.tsx +168 -112
- package/src/components/DataTableSearch/DataTableSearch.spec.tsx +40 -0
- package/src/components/DataTableSearch/DataTableSearch.stories.tsx +1 -1
- package/src/components/DataTableSearch/index.tsx +192 -163
- package/src/components/DataTableToolbar/DataTableToolbar.spec.tsx +48 -18
- package/src/components/DataTableToolbar/DataTableToolbar.stories.tsx +5 -45
- package/src/components/DataTableToolbar/index.tsx +128 -99
- package/src/components/DataTableViewOptions/index.tsx +29 -22
- package/src/components/SimpleTable/SimpleTable.stories.tsx +29 -5
- package/src/components/SimpleTable/index.tsx +442 -61
- package/src/components/SimpleTable/simpleTable.spec.tsx +140 -12
- package/src/components/TableInput/index.native.tsx +91 -81
- package/src/components/TableInput/index.tsx +191 -50
- package/src/components/TableInput/shared.ts +57 -0
- package/src/components/TableInput/tableInput.spec.tsx +104 -0
- package/src/hooks/useDataTable.spec.ts +100 -3
- package/src/hooks/useDataTable.ts +44 -1
- package/src/hooks/useInfiniteRows.spec.tsx +37 -0
- package/src/hooks/useInfiniteRows.ts +34 -4
- package/src/index.ts +7 -0
- package/src/types.ts +54 -3
- package/src/utils/filterUtils.ts +27 -5
- package/types/components/ChildTable/index.d.ts.map +1 -1
- package/types/components/ColumnHeaderFilter/index.d.ts.map +1 -1
- package/types/components/DataTable/DataTableDocumentList.d.ts +32 -0
- package/types/components/DataTable/DataTableDocumentList.d.ts.map +1 -0
- package/types/components/DataTable/DataTableMobileCards.d.ts +3 -1
- package/types/components/DataTable/DataTableMobileCards.d.ts.map +1 -1
- package/types/components/DataTable/DataTableRoot.d.ts +1 -1
- package/types/components/DataTable/DataTableRoot.d.ts.map +1 -1
- package/types/components/DataTable/DataTableVirtualized.d.ts +1 -2
- package/types/components/DataTable/DataTableVirtualized.d.ts.map +1 -1
- package/types/components/DataTable/documentListSlots.d.ts +26 -0
- package/types/components/DataTable/documentListSlots.d.ts.map +1 -0
- package/types/components/DataTable/index.native.d.ts +1 -1
- package/types/components/DataTable/index.native.d.ts.map +1 -1
- package/types/components/DataTable/rowStateChrome.d.ts +18 -0
- package/types/components/DataTable/rowStateChrome.d.ts.map +1 -0
- package/types/components/DataTableCell/CellModalEditor.d.ts +6 -1
- package/types/components/DataTableCell/CellModalEditor.d.ts.map +1 -1
- package/types/components/DataTableCell/CellModalEditor.native.d.ts +1 -1
- package/types/components/DataTableCell/CellModalEditor.native.d.ts.map +1 -1
- package/types/components/DataTableCell/CellOptionsEditor.d.ts +11 -3
- package/types/components/DataTableCell/CellOptionsEditor.d.ts.map +1 -1
- package/types/components/DataTableCell/index.d.ts +1 -1
- package/types/components/DataTableCell/index.d.ts.map +1 -1
- package/types/components/DataTableColumnPinning/index.d.ts.map +1 -1
- package/types/components/DataTableDateFilter/index.d.ts.map +1 -1
- package/types/components/DataTableExport/index.d.ts +17 -6
- package/types/components/DataTableExport/index.d.ts.map +1 -1
- package/types/components/DataTableFacetMenu/index.d.ts +84 -0
- package/types/components/DataTableFacetMenu/index.d.ts.map +1 -0
- package/types/components/DataTableFilterButton/index.d.ts.map +1 -1
- package/types/components/DataTableFilterChips/FilterChip.d.ts +15 -0
- package/types/components/DataTableFilterChips/FilterChip.d.ts.map +1 -0
- package/types/components/DataTableFilterChips/index.d.ts +5 -0
- package/types/components/DataTableFilterChips/index.d.ts.map +1 -1
- package/types/components/DataTableFilters/index.d.ts +11 -0
- package/types/components/DataTableFilters/index.d.ts.map +1 -1
- package/types/components/DataTableGrouping/index.d.ts.map +1 -1
- package/types/components/DataTablePagination/index.d.ts +5 -0
- package/types/components/DataTablePagination/index.d.ts.map +1 -1
- package/types/components/DataTableSearch/index.d.ts.map +1 -1
- package/types/components/DataTableToolbar/index.d.ts +2 -0
- package/types/components/DataTableToolbar/index.d.ts.map +1 -1
- package/types/components/SimpleTable/index.d.ts +27 -5
- package/types/components/SimpleTable/index.d.ts.map +1 -1
- package/types/components/TableInput/index.d.ts +6 -1
- package/types/components/TableInput/index.d.ts.map +1 -1
- package/types/components/TableInput/index.native.d.ts +6 -1
- package/types/components/TableInput/index.native.d.ts.map +1 -1
- package/types/components/TableInput/shared.d.ts +38 -0
- package/types/components/TableInput/shared.d.ts.map +1 -1
- package/types/hooks/useDataTable.d.ts +1 -1
- package/types/hooks/useDataTable.d.ts.map +1 -1
- package/types/hooks/useInfiniteRows.d.ts +8 -1
- package/types/hooks/useInfiniteRows.d.ts.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/types.d.ts +54 -3
- package/types/types.d.ts.map +1 -1
- package/types/utils/filterUtils.d.ts.map +1 -1
|
@@ -54,6 +54,15 @@ describe("DataTableToolbar", () => {
|
|
|
54
54
|
expect(searchInput).toBeDefined();
|
|
55
55
|
});
|
|
56
56
|
|
|
57
|
+
it("shows a toolbar spinner while isFetching without hiding search", () => {
|
|
58
|
+
const { container, getByRole } = renderWithProviders(
|
|
59
|
+
<DataTableToolbar {...defaultProps} isFetching />,
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
expect(getByRole("searchbox")).toBeDefined();
|
|
63
|
+
expect(container.querySelector("[data-table-fetching='true']")).toBeTruthy();
|
|
64
|
+
});
|
|
65
|
+
|
|
57
66
|
it("should not render search input when enableGlobalSearch is false", () => {
|
|
58
67
|
const { container } = renderWithProviders(
|
|
59
68
|
<DataTableToolbar {...defaultProps} enableGlobalSearch={false} />,
|
|
@@ -191,45 +200,60 @@ describe("DataTableToolbar", () => {
|
|
|
191
200
|
|
|
192
201
|
describe("views functionality", () => {
|
|
193
202
|
it("should not render view selector when enableViews is false", () => {
|
|
194
|
-
const {
|
|
203
|
+
const { queryByRole } = renderWithProviders(
|
|
195
204
|
<DataTableToolbar {...defaultProps} enableViews={false} />,
|
|
196
205
|
);
|
|
197
206
|
|
|
198
|
-
expect(
|
|
207
|
+
expect(queryByRole("button", { name: "Saved views" })).toBeNull();
|
|
208
|
+
expect(queryByRole("button", { name: "Save view" })).toBeNull();
|
|
199
209
|
});
|
|
200
210
|
|
|
201
211
|
it("should render view selector when enableViews is true", () => {
|
|
202
|
-
const {
|
|
212
|
+
const { getByRole } = renderWithProviders(
|
|
203
213
|
<DataTableToolbar {...defaultProps} enableViews={true} views={sampleViews} />,
|
|
204
214
|
);
|
|
205
215
|
|
|
206
|
-
expect(
|
|
216
|
+
expect(getByRole("button", { name: "Saved views" })).toBeDefined();
|
|
207
217
|
});
|
|
208
218
|
|
|
209
|
-
it("should display
|
|
210
|
-
const {
|
|
211
|
-
<DataTableToolbar
|
|
219
|
+
it("should display the active view name on the picker", () => {
|
|
220
|
+
const { getByRole } = renderWithProviders(
|
|
221
|
+
<DataTableToolbar
|
|
222
|
+
{...defaultProps}
|
|
223
|
+
enableViews={true}
|
|
224
|
+
views={sampleViews}
|
|
225
|
+
activeViewId="view1"
|
|
226
|
+
/>,
|
|
212
227
|
);
|
|
213
228
|
|
|
214
|
-
expect(
|
|
229
|
+
expect(getByRole("button", { name: "Saved views" }).textContent).toContain("Default View");
|
|
215
230
|
});
|
|
216
231
|
|
|
217
|
-
it("should call onLoadView when a view is selected", () => {
|
|
232
|
+
it("should call onLoadView when a view is selected", async () => {
|
|
218
233
|
const onLoadView = vi.fn();
|
|
219
|
-
const {
|
|
234
|
+
const { getByRole, getAllByRole } = renderWithProviders(
|
|
220
235
|
<DataTableToolbar
|
|
221
236
|
{...defaultProps}
|
|
222
237
|
enableViews={true}
|
|
223
238
|
views={sampleViews}
|
|
239
|
+
activeViewId="view1"
|
|
224
240
|
onLoadView={onLoadView}
|
|
225
241
|
/>,
|
|
226
242
|
);
|
|
227
243
|
|
|
228
|
-
|
|
244
|
+
fireEvent.click(getByRole("button", { name: "Saved views" }));
|
|
245
|
+
await waitFor(
|
|
246
|
+
() => {
|
|
247
|
+
expect(getAllByRole("menuitemcheckbox").length).toBeGreaterThan(0);
|
|
248
|
+
},
|
|
249
|
+
{ timeout: 3000 },
|
|
250
|
+
);
|
|
251
|
+
fireEvent.click(getAllByRole("menuitemcheckbox")[1]);
|
|
252
|
+
expect(onLoadView).toHaveBeenCalledWith("view2");
|
|
229
253
|
});
|
|
230
254
|
|
|
231
255
|
it("should highlight active view", () => {
|
|
232
|
-
const {
|
|
256
|
+
const { getByRole } = renderWithProviders(
|
|
233
257
|
<DataTableToolbar
|
|
234
258
|
{...defaultProps}
|
|
235
259
|
enableViews={true}
|
|
@@ -238,24 +262,30 @@ describe("DataTableToolbar", () => {
|
|
|
238
262
|
/>,
|
|
239
263
|
);
|
|
240
264
|
|
|
241
|
-
expect(
|
|
265
|
+
expect(getByRole("button", { name: "Saved views" }).textContent).toContain("Default View");
|
|
242
266
|
});
|
|
243
267
|
|
|
244
268
|
it("should show save view dialog", () => {
|
|
245
|
-
const {
|
|
269
|
+
const { getByRole } = renderWithProviders(
|
|
246
270
|
<DataTableToolbar {...defaultProps} enableViews={true} views={sampleViews} />,
|
|
247
271
|
);
|
|
248
272
|
|
|
249
|
-
expect(
|
|
273
|
+
expect(getByRole("button", { name: "Save view" })).toBeDefined();
|
|
250
274
|
});
|
|
251
275
|
|
|
252
|
-
it("should call onSaveView when saving a new view", () => {
|
|
276
|
+
it("should call onSaveView when saving a new view", async () => {
|
|
253
277
|
const onSaveView = vi.fn();
|
|
254
|
-
const {
|
|
278
|
+
const { getByRole } = renderWithProviders(
|
|
255
279
|
<DataTableToolbar {...defaultProps} enableViews={true} onSaveView={onSaveView} />,
|
|
256
280
|
);
|
|
257
281
|
|
|
258
|
-
|
|
282
|
+
fireEvent.click(getByRole("button", { name: "Save view" }));
|
|
283
|
+
const nameField = await waitFor(() => getByRole("textbox", { name: "View name" }), {
|
|
284
|
+
timeout: 3000,
|
|
285
|
+
});
|
|
286
|
+
fireEvent.change(nameField, { target: { value: "My view" } });
|
|
287
|
+
fireEvent.click(getByRole("button", { name: "Save" }));
|
|
288
|
+
expect(onSaveView).toHaveBeenCalledWith("My view");
|
|
259
289
|
});
|
|
260
290
|
});
|
|
261
291
|
|
|
@@ -2,7 +2,7 @@ import { action } from "@multiplatform.one/storybook";
|
|
|
2
2
|
import type { Meta } from "@storybook/react-native-web-vite";
|
|
3
3
|
import { useState } from "react";
|
|
4
4
|
import { Button } from "@multiplatform.one/forms";
|
|
5
|
-
import {
|
|
5
|
+
import { XStack, YStack } from "tamagui";
|
|
6
6
|
import type { DataTableColumn, TableView } from "../../types";
|
|
7
7
|
import { DataTable } from "../DataTable";
|
|
8
8
|
import { DataTableToolbar } from "./index";
|
|
@@ -12,12 +12,6 @@ const meta: Meta<typeof DataTableToolbar> = {
|
|
|
12
12
|
component: DataTableToolbar,
|
|
13
13
|
parameters: {
|
|
14
14
|
status: { type: "stable" },
|
|
15
|
-
docs: {
|
|
16
|
-
description: {
|
|
17
|
-
component:
|
|
18
|
-
"The DataTableToolbar integrates with DataTable to provide search, filters, and view options. It consumes DataTableStateContext when mounted inside a DataTable (compound pattern) or can be driven standalone through explicit props.",
|
|
19
|
-
},
|
|
20
|
-
},
|
|
21
15
|
},
|
|
22
16
|
};
|
|
23
17
|
|
|
@@ -68,21 +62,14 @@ const sampleViews: TableView[] = [
|
|
|
68
62
|
},
|
|
69
63
|
];
|
|
70
64
|
|
|
71
|
-
/**
|
|
72
|
-
* Full toolbar mounted over a live DataTable: typing in the search box
|
|
73
|
-
* filters the rows below, the save-view popover persists views into the
|
|
74
|
-
* table state, and the custom actions slot carries an Export button.
|
|
75
|
-
*/
|
|
76
65
|
const MainStory = () => {
|
|
77
66
|
return (
|
|
78
|
-
<YStack padding="$4"
|
|
67
|
+
<YStack padding="$4">
|
|
79
68
|
<DataTable
|
|
80
69
|
data={employees}
|
|
81
70
|
columns={employeeColumns}
|
|
82
71
|
enableGlobalSearch
|
|
83
72
|
enableViews
|
|
84
|
-
// Rest mid-page so the footer nav renders live — single-page rest
|
|
85
|
-
// bare-disables prev/next and trips the `[theme]` guardrail (UX-P19).
|
|
86
73
|
initialState={{ pagination: { pageIndex: 1, pageSize: 3 } }}
|
|
87
74
|
renderToolbar={(props) => (
|
|
88
75
|
<DataTableToolbar
|
|
@@ -104,32 +91,17 @@ const MainStory = () => {
|
|
|
104
91
|
export const Default = {
|
|
105
92
|
name: "Main",
|
|
106
93
|
render: () => <MainStory />,
|
|
107
|
-
parameters: {
|
|
108
|
-
docs: {
|
|
109
|
-
description: {
|
|
110
|
-
story:
|
|
111
|
-
"Toolbar wired into a DataTable through renderToolbar: global search filters rows live, views can be saved from the popover, and customActions adds an Export button.",
|
|
112
|
-
},
|
|
113
|
-
},
|
|
114
|
-
},
|
|
115
94
|
};
|
|
116
95
|
|
|
117
|
-
/**
|
|
118
|
-
* Default anatomy when used standalone: just the global search section,
|
|
119
|
-
* controlled through explicit props (no DataTable context required).
|
|
120
|
-
*/
|
|
121
96
|
const SearchOnlyStory = () => {
|
|
122
97
|
const [search, setSearch] = useState("");
|
|
123
98
|
return (
|
|
124
|
-
<YStack padding="$4"
|
|
99
|
+
<YStack padding="$4" maxWidth={560}>
|
|
125
100
|
<DataTableToolbar
|
|
126
101
|
globalFilter={search}
|
|
127
102
|
onGlobalFilterChange={setSearch}
|
|
128
103
|
onClearFilters={() => setSearch("")}
|
|
129
104
|
/>
|
|
130
|
-
<Text fontSize="$2" color="$color10">
|
|
131
|
-
{search ? `Searching for "${search}"` : "Type to search — value is controlled by the story"}
|
|
132
|
-
</Text>
|
|
133
105
|
</YStack>
|
|
134
106
|
);
|
|
135
107
|
};
|
|
@@ -138,17 +110,12 @@ export const SearchOnly = {
|
|
|
138
110
|
render: () => <SearchOnlyStory />,
|
|
139
111
|
};
|
|
140
112
|
|
|
141
|
-
/**
|
|
142
|
-
* Views section enabled: floppy-disk button opens the save-view popover,
|
|
143
|
-
* saved views append to the list, and the active view indicator shows the
|
|
144
|
-
* currently loaded view.
|
|
145
|
-
*/
|
|
146
113
|
const WithViewsStory = () => {
|
|
147
114
|
const [search, setSearch] = useState("");
|
|
148
115
|
const [views, setViews] = useState<TableView[]>(sampleViews);
|
|
149
116
|
const [activeViewId, setActiveViewId] = useState("view-engineering");
|
|
150
117
|
return (
|
|
151
|
-
<YStack padding="$4"
|
|
118
|
+
<YStack padding="$4" maxWidth={640}>
|
|
152
119
|
<DataTableToolbar
|
|
153
120
|
globalFilter={search}
|
|
154
121
|
onGlobalFilterChange={setSearch}
|
|
@@ -177,9 +144,6 @@ const WithViewsStory = () => {
|
|
|
177
144
|
action("load-view")(viewId);
|
|
178
145
|
}}
|
|
179
146
|
/>
|
|
180
|
-
<Text fontSize="$2" color="$color10">
|
|
181
|
-
Saved views: {views.map((view) => view.name).join(", ")}
|
|
182
|
-
</Text>
|
|
183
147
|
</YStack>
|
|
184
148
|
);
|
|
185
149
|
};
|
|
@@ -188,14 +152,10 @@ export const WithViews = {
|
|
|
188
152
|
render: () => <WithViewsStory />,
|
|
189
153
|
};
|
|
190
154
|
|
|
191
|
-
/**
|
|
192
|
-
* The customActions slot renders inside the roving-focus action section on
|
|
193
|
-
* the right, separated from search by the toolbar divider.
|
|
194
|
-
*/
|
|
195
155
|
const WithCustomActionsStory = () => {
|
|
196
156
|
const [search, setSearch] = useState("");
|
|
197
157
|
return (
|
|
198
|
-
<YStack padding="$4"
|
|
158
|
+
<YStack padding="$4" maxWidth={640}>
|
|
199
159
|
<DataTableToolbar
|
|
200
160
|
globalFilter={search}
|
|
201
161
|
onGlobalFilterChange={setSearch}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { CaretDownIcon, FloppyDiskIcon } from "@phosphor-icons/react";
|
|
2
|
+
import { DropdownMenu } from "@multiplatform.one/components";
|
|
3
|
+
import { Button, Input, SearchInput, Spinner } from "@multiplatform.one/forms";
|
|
4
|
+
import { hairline, sizeRecipeForToken, useResolvedKnobs } from "@multiplatform.one/theme";
|
|
3
5
|
import { RovingFocusGroup } from "@tamagui/roving-focus";
|
|
4
6
|
import type React from "react";
|
|
5
7
|
import { useState } from "react";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
+
import { Popover, XStack, YStack } from "tamagui";
|
|
9
|
+
import { t } from "../../shared/t";
|
|
8
10
|
import type { TableView } from "../../types";
|
|
9
11
|
import { useDataTableState } from "../DataTable/DataTableStateContext";
|
|
10
12
|
import { DataTableFilterButton } from "../DataTableFilterButton";
|
|
@@ -34,30 +36,27 @@ export interface DataTableToolbarProps {
|
|
|
34
36
|
showFilterCount?: boolean;
|
|
35
37
|
showViewSelector?: boolean;
|
|
36
38
|
customActions?: React.ReactNode;
|
|
39
|
+
/** Subtle refetch indicator — must not unmount the table body. */
|
|
40
|
+
isFetching?: boolean;
|
|
37
41
|
|
|
38
42
|
// Sizing
|
|
39
43
|
size?: string;
|
|
40
44
|
compact?: boolean;
|
|
41
45
|
}
|
|
42
46
|
|
|
43
|
-
// Toolbar
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
width: 1,
|
|
47
|
-
alignSelf: "stretch",
|
|
48
|
-
backgroundColor: "$color6",
|
|
49
|
-
});
|
|
47
|
+
// Toolbar glyphs are control-internal icons (LC-75/LC-79): the generated
|
|
48
|
+
// recipe's icon channel — no handwritten per-token px map.
|
|
49
|
+
const iconSizeForToken = (token: string): number => sizeRecipeForToken(token).iconSize;
|
|
50
50
|
|
|
51
51
|
export function DataTableToolbar(props: DataTableToolbarProps) {
|
|
52
|
-
// Try to consume from DataTableStateContext (compound component pattern)
|
|
53
52
|
const ctx = useDataTableState();
|
|
54
53
|
|
|
55
|
-
// Resolve values: explicit props override context values
|
|
56
54
|
const globalFilter = props.globalFilter ?? ctx?.state.globalFilter ?? "";
|
|
57
55
|
const onGlobalFilterChange =
|
|
58
56
|
props.onGlobalFilterChange ?? ctx?.actions.setGlobalFilter ?? (() => {});
|
|
59
57
|
const onClearFilters = props.onClearFilters ?? ctx?.actions.clearFilters ?? (() => {});
|
|
60
58
|
const onSaveView = props.onSaveView ?? ctx?.actions.saveView ?? (() => {});
|
|
59
|
+
const onLoadView = props.onLoadView ?? ctx?.actions.loadView ?? (() => {});
|
|
61
60
|
const views = props.views ?? ctx?.state.views ?? [];
|
|
62
61
|
const activeViewId = props.activeViewId ?? ctx?.state.activeViewId;
|
|
63
62
|
|
|
@@ -70,7 +69,9 @@ export function DataTableToolbar(props: DataTableToolbarProps) {
|
|
|
70
69
|
customActions,
|
|
71
70
|
size,
|
|
72
71
|
compact: _compact = true,
|
|
72
|
+
isFetching: isFetchingProp,
|
|
73
73
|
} = props;
|
|
74
|
+
const isFetching = isFetchingProp ?? ctx?.state.isFetching ?? false;
|
|
74
75
|
|
|
75
76
|
// Toolbar Filter surface (hidden-column filtering). Needs the compound
|
|
76
77
|
// context — DataTableFilterButton reads fields/actions from it.
|
|
@@ -91,139 +92,167 @@ export function DataTableToolbar(props: DataTableToolbarProps) {
|
|
|
91
92
|
};
|
|
92
93
|
|
|
93
94
|
const { knobProps } = useResolvedKnobs({ size, compact: true });
|
|
95
|
+
const sz = knobProps.sizeToken;
|
|
96
|
+
const iconPx = iconSizeForToken(String(sz));
|
|
97
|
+
const searchMaxWidth = sz === "$3" ? 280 : sz === "$5" ? 400 : 320;
|
|
98
|
+
const controlSize = "$2" as const;
|
|
99
|
+
const searchSize = "$3" as const;
|
|
100
|
+
|
|
101
|
+
const showViewPicker = enableViews && showViewSelector && views.length > 0;
|
|
102
|
+
const showSave = enableViews && showViewSelector;
|
|
103
|
+
const showActionCluster = Boolean(
|
|
104
|
+
customActions || showFilterButton || showViewPicker || showSave,
|
|
105
|
+
);
|
|
106
|
+
const hasTrailing = showActionCluster || isFetching;
|
|
94
107
|
|
|
95
108
|
return (
|
|
96
109
|
<XStack
|
|
97
|
-
alignItems="
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
110
|
+
alignItems="center"
|
|
111
|
+
// LC-39: flush band — no painted panel, so no horizontal inset.
|
|
112
|
+
paddingVertical={knobProps.panelPadding.padding}
|
|
113
|
+
paddingHorizontal={0}
|
|
114
|
+
{...knobProps.gap}
|
|
115
|
+
{...hairline.bottom}
|
|
116
|
+
borderColor="$borderColor"
|
|
117
|
+
flexWrap="nowrap"
|
|
118
|
+
justifyContent={enableGlobalSearch && hasTrailing ? "space-between" : "flex-start"}
|
|
105
119
|
role="toolbar"
|
|
106
|
-
aria-label="Table toolbar"
|
|
120
|
+
aria-label={t("Table toolbar")}
|
|
121
|
+
aria-busy={isFetching || undefined}
|
|
107
122
|
>
|
|
108
|
-
{/* Search Section - fills available space. Consumes the catalog
|
|
109
|
-
SearchInput (census item 6) instead of re-composing the
|
|
110
|
-
icon + field + clear anatomy locally. */}
|
|
111
123
|
{enableGlobalSearch && (
|
|
112
|
-
<XStack flex={1}
|
|
113
|
-
<
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
</View>
|
|
124
|
+
<XStack flex={1} minWidth={160} maxWidth={searchMaxWidth} flexShrink={1}>
|
|
125
|
+
<SearchInput
|
|
126
|
+
value={globalFilter}
|
|
127
|
+
onChange={onGlobalFilterChange}
|
|
128
|
+
// Clear-X semantics follow filter ownership: when the toolbar
|
|
129
|
+
// owns a filter surface (enableFiltering) the X clears search
|
|
130
|
+
// AND filters (explicit clear intent). When the filter chrome
|
|
131
|
+
// is suppressed (enableFiltering=false — an outer surface owns
|
|
132
|
+
// filtering and injects tuples via initialState/state), the X
|
|
133
|
+
// must not mutate those injected filters; SearchInput already
|
|
134
|
+
// clears the text through onChange("").
|
|
135
|
+
onClear={enableFiltering ? onClearFilters : undefined}
|
|
136
|
+
placeholder={t("Search")}
|
|
137
|
+
aria-label={t("Search table data")}
|
|
138
|
+
compact
|
|
139
|
+
size={searchSize}
|
|
140
|
+
/>
|
|
130
141
|
</XStack>
|
|
131
142
|
)}
|
|
132
143
|
|
|
133
|
-
{
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
144
|
+
{hasTrailing && (
|
|
145
|
+
<XStack
|
|
146
|
+
alignItems="center"
|
|
147
|
+
{...knobProps.gap}
|
|
148
|
+
flexShrink={0}
|
|
149
|
+
marginInlineStart={enableGlobalSearch ? "auto" : 0}
|
|
150
|
+
>
|
|
151
|
+
{showActionCluster && (
|
|
152
|
+
<RovingFocusGroup orientation="horizontal" loop asChild>
|
|
153
|
+
<XStack alignItems="center" {...knobProps.gap}>
|
|
154
|
+
{showFilterButton && <DataTableFilterButton />}
|
|
155
|
+
|
|
156
|
+
{customActions}
|
|
157
|
+
|
|
158
|
+
{showViewPicker && (
|
|
159
|
+
<DropdownMenu closeOnSelect placement="bottom-end">
|
|
160
|
+
<DropdownMenu.Trigger asChild>
|
|
161
|
+
<RovingFocusGroup.Item focusable asChild>
|
|
162
|
+
<Button
|
|
163
|
+
chromeless
|
|
164
|
+
size={controlSize}
|
|
165
|
+
iconAfter={<CaretDownIcon size={iconPx} />}
|
|
166
|
+
aria-label={t("Saved views")}
|
|
167
|
+
aria-haspopup="menu"
|
|
168
|
+
>
|
|
169
|
+
{activeView?.name ?? t("Views")}
|
|
170
|
+
</Button>
|
|
171
|
+
</RovingFocusGroup.Item>
|
|
172
|
+
</DropdownMenu.Trigger>
|
|
173
|
+
<DropdownMenu.Content>
|
|
174
|
+
{views.map((view) => (
|
|
175
|
+
<DropdownMenu.CheckboxItem
|
|
176
|
+
key={view.id}
|
|
177
|
+
checked={view.id === activeViewId}
|
|
178
|
+
closeOnSelect
|
|
179
|
+
onSelect={() => onLoadView(view.id)}
|
|
180
|
+
>
|
|
181
|
+
{view.name}
|
|
182
|
+
</DropdownMenu.CheckboxItem>
|
|
183
|
+
))}
|
|
184
|
+
</DropdownMenu.Content>
|
|
185
|
+
</DropdownMenu>
|
|
186
|
+
)}
|
|
187
|
+
|
|
188
|
+
{showSave && (
|
|
164
189
|
<Popover open={showSaveViewDialog} onOpenChange={setShowSaveViewDialog}>
|
|
165
190
|
<Popover.Trigger asChild>
|
|
166
191
|
<RovingFocusGroup.Item focusable asChild>
|
|
167
192
|
<Button
|
|
168
193
|
chromeless
|
|
169
|
-
size=
|
|
170
|
-
icon={<FloppyDiskIcon size={
|
|
171
|
-
aria-label="Save view"
|
|
172
|
-
focusStyle={{ outlineColor: "$accentBackground", outlineWidth: 2 }}
|
|
194
|
+
size={controlSize}
|
|
195
|
+
icon={<FloppyDiskIcon size={iconPx} />}
|
|
196
|
+
aria-label={t("Save view")}
|
|
173
197
|
/>
|
|
174
198
|
</RovingFocusGroup.Item>
|
|
175
199
|
</Popover.Trigger>
|
|
176
200
|
<Popover.Content
|
|
201
|
+
{...knobProps.elevatedSurface}
|
|
177
202
|
{...knobProps.borderRadius}
|
|
178
203
|
borderColor="$color6"
|
|
204
|
+
// LC-24: enter/exitStyle need a `transition` driver on the
|
|
205
|
+
// same element ({...string} spread set nothing).
|
|
179
206
|
transition={knobProps.transition}
|
|
180
207
|
enterStyle={{ x: 0, y: -10, opacity: 0 }}
|
|
181
208
|
exitStyle={{ x: 0, y: -10, opacity: 0 }}
|
|
209
|
+
data-dismiss-class="compose"
|
|
182
210
|
>
|
|
183
|
-
<YStack {...knobProps.gap} {...knobProps.panelPadding} minWidth={
|
|
184
|
-
<Text fontWeight="600">Save Current View</Text>
|
|
211
|
+
<YStack {...knobProps.gap} {...knobProps.panelPadding} minWidth={240}>
|
|
185
212
|
<Input
|
|
186
|
-
placeholder="
|
|
213
|
+
placeholder={t("View name")}
|
|
187
214
|
value={newViewName}
|
|
188
215
|
onChangeText={setNewViewName}
|
|
189
|
-
size=
|
|
216
|
+
size={searchSize}
|
|
190
217
|
compact
|
|
191
218
|
inputProps={{
|
|
219
|
+
"aria-label": t("View name"),
|
|
192
220
|
onKeyDown: (e: React.KeyboardEvent) => {
|
|
193
221
|
if (e.key === "Enter") handleSaveView();
|
|
194
222
|
},
|
|
195
223
|
}}
|
|
196
224
|
/>
|
|
197
|
-
<XStack gap
|
|
225
|
+
<XStack {...knobProps.gap} justifyContent="flex-end">
|
|
198
226
|
<Button
|
|
199
227
|
size="$2"
|
|
200
228
|
variant="outlined"
|
|
201
229
|
onPress={() => setShowSaveViewDialog(false)}
|
|
202
230
|
>
|
|
203
|
-
Cancel
|
|
231
|
+
{t("Cancel")}
|
|
204
232
|
</Button>
|
|
205
|
-
<Button
|
|
206
|
-
|
|
233
|
+
<Button
|
|
234
|
+
size="$2"
|
|
235
|
+
onPress={handleSaveView}
|
|
236
|
+
disabled={!newViewName.trim()}
|
|
237
|
+
disabledReason={t("Enter a view name")}
|
|
238
|
+
>
|
|
239
|
+
{t("Save")}
|
|
207
240
|
</Button>
|
|
208
241
|
</XStack>
|
|
209
242
|
</YStack>
|
|
210
243
|
</Popover.Content>
|
|
211
244
|
</Popover>
|
|
245
|
+
)}
|
|
246
|
+
</XStack>
|
|
247
|
+
</RovingFocusGroup>
|
|
248
|
+
)}
|
|
212
249
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
<EyeIcon size={14} />
|
|
217
|
-
<Text fontSize="$2" color="$color10">
|
|
218
|
-
{activeView.name}
|
|
219
|
-
</Text>
|
|
220
|
-
</XStack>
|
|
221
|
-
)}
|
|
222
|
-
</>
|
|
223
|
-
)}
|
|
250
|
+
{isFetching && (
|
|
251
|
+
<XStack alignItems="center" aria-live="polite" data-table-fetching="true">
|
|
252
|
+
<Spinner size="small" />
|
|
224
253
|
</XStack>
|
|
225
|
-
|
|
226
|
-
|
|
254
|
+
)}
|
|
255
|
+
</XStack>
|
|
227
256
|
)}
|
|
228
257
|
</XStack>
|
|
229
258
|
);
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
FloppyDiskIcon,
|
|
6
6
|
GearIcon,
|
|
7
7
|
} from "@phosphor-icons/react";
|
|
8
|
-
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
8
|
+
import { getGroupPosition, stackRadiusProps, useResolvedKnobs } from "@multiplatform.one/theme";
|
|
9
9
|
import React, { useState } from "react";
|
|
10
10
|
import { Button, Input, Slider, Switch } from "@multiplatform.one/forms";
|
|
11
11
|
import { DropdownMenu } from "@multiplatform.one/components";
|
|
@@ -469,28 +469,35 @@ function ViewManagementSection({
|
|
|
469
469
|
|
|
470
470
|
{/* Saved Views List */}
|
|
471
471
|
{views.length > 0 && (
|
|
472
|
-
<YStack
|
|
473
|
-
{views.map((view) =>
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
disabled={activeViewId === view.id}
|
|
472
|
+
<YStack>
|
|
473
|
+
{views.map((view, index) => {
|
|
474
|
+
const corners = stackRadiusProps(
|
|
475
|
+
getGroupPosition(index, views.length),
|
|
476
|
+
knobProps.borderRadius.borderRadius,
|
|
477
|
+
);
|
|
478
|
+
return (
|
|
479
|
+
<XStack
|
|
480
|
+
key={view.id}
|
|
481
|
+
alignItems="center"
|
|
482
|
+
justifyContent="space-between"
|
|
483
|
+
padding="$2"
|
|
484
|
+
overflow="hidden"
|
|
485
|
+
{...corners}
|
|
486
|
+
backgroundColor={activeViewId === view.id ? "$color2" : "transparent"}
|
|
487
|
+
hoverStyle={{ backgroundColor: "$color1", ...corners }}
|
|
489
488
|
>
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
489
|
+
<Text fontSize="$3">{view.name}</Text>
|
|
490
|
+
<Button
|
|
491
|
+
size="$2"
|
|
492
|
+
variant="outlined"
|
|
493
|
+
onPress={() => onLoadView(view.id)}
|
|
494
|
+
disabled={activeViewId === view.id}
|
|
495
|
+
>
|
|
496
|
+
{t("Load")}
|
|
497
|
+
</Button>
|
|
498
|
+
</XStack>
|
|
499
|
+
);
|
|
500
|
+
})}
|
|
494
501
|
</YStack>
|
|
495
502
|
)}
|
|
496
503
|
</YStack>
|