@multiplatform.one/table 6.7.0 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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
|
@@ -51,7 +51,7 @@ import { CellModalEditor } from "./CellModalEditor";
|
|
|
51
51
|
import { CellOptionsEditor } from "./CellOptionsEditor";
|
|
52
52
|
import { Star } from "@phosphor-icons/react";
|
|
53
53
|
import { RichTextEditor } from "@multiplatform.one/rich-text";
|
|
54
|
-
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
54
|
+
import { useResolvedKnobs, ensureCompositeFocusRing } from "@multiplatform.one/theme";
|
|
55
55
|
import React, { useCallback, useEffect, useRef, useState } from "react";
|
|
56
56
|
import { View, isWeb } from "tamagui";
|
|
57
57
|
import type { DataTableFieldProps, DataTableField } from "../../types";
|
|
@@ -85,7 +85,7 @@ export interface DataTableCellProps {
|
|
|
85
85
|
rowData?: any;
|
|
86
86
|
/** Size token for field sizing */
|
|
87
87
|
size?: string;
|
|
88
|
-
/** Use compact
|
|
88
|
+
/** Use compact density (tighter layout gaps; control size unchanged) */
|
|
89
89
|
compact?: boolean;
|
|
90
90
|
/**
|
|
91
91
|
* For linked daterange columns: the value of the linked (end date) column.
|
|
@@ -117,6 +117,7 @@ export function DataTableCell({
|
|
|
117
117
|
// Cells are always compact unless caller explicitly opts out — table rows
|
|
118
118
|
// are 40-44px tall, so default-sized fields overflow the row.
|
|
119
119
|
const { knobProps } = useResolvedKnobs({ size, compact: compact ?? true });
|
|
120
|
+
const cellName = (fieldProps as any)["aria-label"] ?? columnLabel ?? columnId;
|
|
120
121
|
const {
|
|
121
122
|
options,
|
|
122
123
|
placeholder,
|
|
@@ -243,7 +244,7 @@ export function DataTableCell({
|
|
|
243
244
|
placeholder={placeholder}
|
|
244
245
|
size={knobProps.sizeToken}
|
|
245
246
|
{...restProps}
|
|
246
|
-
aria-label={(restProps as any)["aria-label"] ??
|
|
247
|
+
aria-label={(restProps as any)["aria-label"] ?? cellName}
|
|
247
248
|
/>
|
|
248
249
|
</CellWrapper>
|
|
249
250
|
);
|
|
@@ -260,7 +261,7 @@ export function DataTableCell({
|
|
|
260
261
|
placeholder={placeholder}
|
|
261
262
|
size={knobProps.sizeToken}
|
|
262
263
|
{...restProps}
|
|
263
|
-
aria-label={(restProps as any)["aria-label"] ??
|
|
264
|
+
aria-label={(restProps as any)["aria-label"] ?? cellName}
|
|
264
265
|
/>
|
|
265
266
|
</CellWrapper>
|
|
266
267
|
);
|
|
@@ -279,7 +280,7 @@ export function DataTableCell({
|
|
|
279
280
|
value={value}
|
|
280
281
|
fieldProps={fieldProps}
|
|
281
282
|
disabled={disabled || readOnly}
|
|
282
|
-
label={
|
|
283
|
+
label={cellName}
|
|
283
284
|
>
|
|
284
285
|
{(close) => (
|
|
285
286
|
<RadioGroup
|
|
@@ -300,17 +301,36 @@ export function DataTableCell({
|
|
|
300
301
|
);
|
|
301
302
|
|
|
302
303
|
case "togglegroup":
|
|
304
|
+
// LC-06: the option strip is wider than a typical column (same clipping
|
|
305
|
+
// class as radiogroup). Face is the current value; options live in an
|
|
306
|
+
// anchored popover (web) / sheet (native). Single-select is COMMIT
|
|
307
|
+
// class (pick closes); allowMultiple is COMPOSE (panel stays open).
|
|
303
308
|
return (
|
|
304
309
|
<CellWrapper>
|
|
305
|
-
<
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
310
|
+
<CellOptionsEditor
|
|
311
|
+
field="togglegroup"
|
|
312
|
+
value={value}
|
|
313
|
+
fieldProps={fieldProps}
|
|
309
314
|
disabled={disabled || readOnly}
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
315
|
+
label={cellName}
|
|
316
|
+
dismissOnPick={!allowMultiple}
|
|
317
|
+
>
|
|
318
|
+
{(close) => (
|
|
319
|
+
<ToggleGroup
|
|
320
|
+
value={allowMultiple ? (Array.isArray(value) ? value : []) : value}
|
|
321
|
+
onValueChange={(next: string | string[]) => {
|
|
322
|
+
handleChange(next);
|
|
323
|
+
if (!allowMultiple) close();
|
|
324
|
+
}}
|
|
325
|
+
options={options ?? []}
|
|
326
|
+
disabled={disabled || readOnly}
|
|
327
|
+
type={allowMultiple ? "multiple" : "single"}
|
|
328
|
+
size={knobProps.sizeToken}
|
|
329
|
+
orientation="vertical"
|
|
330
|
+
{...restProps}
|
|
331
|
+
/>
|
|
332
|
+
)}
|
|
333
|
+
</CellOptionsEditor>
|
|
314
334
|
</CellWrapper>
|
|
315
335
|
);
|
|
316
336
|
|
|
@@ -588,13 +608,14 @@ export function DataTableCell({
|
|
|
588
608
|
|
|
589
609
|
case "mentioninput":
|
|
590
610
|
return (
|
|
591
|
-
<
|
|
611
|
+
<ModalCell
|
|
592
612
|
field="mentioninput"
|
|
593
613
|
value={value}
|
|
594
614
|
fieldProps={fieldProps}
|
|
595
615
|
disabled={disabled}
|
|
596
616
|
readOnly={readOnly}
|
|
597
617
|
onCommit={handleChange}
|
|
618
|
+
label={cellName}
|
|
598
619
|
title={t("Edit text")}
|
|
599
620
|
>
|
|
600
621
|
{(draftValue, onDraftChange) => (
|
|
@@ -611,7 +632,7 @@ export function DataTableCell({
|
|
|
611
632
|
{...restProps}
|
|
612
633
|
/>
|
|
613
634
|
)}
|
|
614
|
-
</
|
|
635
|
+
</ModalCell>
|
|
615
636
|
);
|
|
616
637
|
|
|
617
638
|
case "barcode":
|
|
@@ -620,13 +641,14 @@ export function DataTableCell({
|
|
|
620
641
|
// like other heavy fields — never inline where the scanner would grow
|
|
621
642
|
// the row. The cell face is FieldDisplay's compact drawn-barcode preview.
|
|
622
643
|
return (
|
|
623
|
-
<
|
|
644
|
+
<ModalCell
|
|
624
645
|
field="barcode"
|
|
625
646
|
value={value}
|
|
626
647
|
fieldProps={fieldProps}
|
|
627
648
|
disabled={disabled}
|
|
628
649
|
readOnly={readOnly}
|
|
629
650
|
onCommit={handleChange}
|
|
651
|
+
label={cellName}
|
|
630
652
|
title={t("Barcode")}
|
|
631
653
|
>
|
|
632
654
|
{(draftValue, onDraftChange) => (
|
|
@@ -650,19 +672,20 @@ export function DataTableCell({
|
|
|
650
672
|
/>
|
|
651
673
|
</View>
|
|
652
674
|
)}
|
|
653
|
-
</
|
|
675
|
+
</ModalCell>
|
|
654
676
|
);
|
|
655
677
|
|
|
656
678
|
// ─── File/media inputs ────────────────────────────────────
|
|
657
679
|
case "fileupload":
|
|
658
680
|
return (
|
|
659
|
-
<
|
|
681
|
+
<ModalCell
|
|
660
682
|
field="fileupload"
|
|
661
683
|
value={value}
|
|
662
684
|
fieldProps={fieldProps}
|
|
663
685
|
disabled={disabled}
|
|
664
686
|
readOnly={readOnly}
|
|
665
687
|
onCommit={handleChange}
|
|
688
|
+
label={cellName}
|
|
666
689
|
title={t("Upload file")}
|
|
667
690
|
>
|
|
668
691
|
{(draftValue, onDraftChange) => (
|
|
@@ -677,18 +700,19 @@ export function DataTableCell({
|
|
|
677
700
|
{...restProps}
|
|
678
701
|
/>
|
|
679
702
|
)}
|
|
680
|
-
</
|
|
703
|
+
</ModalCell>
|
|
681
704
|
);
|
|
682
705
|
|
|
683
706
|
case "image":
|
|
684
707
|
return (
|
|
685
|
-
<
|
|
708
|
+
<ModalCell
|
|
686
709
|
field="image"
|
|
687
710
|
value={value}
|
|
688
711
|
fieldProps={fieldProps}
|
|
689
712
|
disabled={disabled}
|
|
690
713
|
readOnly={readOnly}
|
|
691
714
|
onCommit={handleChange}
|
|
715
|
+
label={cellName}
|
|
692
716
|
title={t("Image")}
|
|
693
717
|
>
|
|
694
718
|
{(draftValue, onDraftChange) => (
|
|
@@ -703,18 +727,19 @@ export function DataTableCell({
|
|
|
703
727
|
{...restProps}
|
|
704
728
|
/>
|
|
705
729
|
)}
|
|
706
|
-
</
|
|
730
|
+
</ModalCell>
|
|
707
731
|
);
|
|
708
732
|
|
|
709
733
|
case "signature":
|
|
710
734
|
return (
|
|
711
|
-
<
|
|
735
|
+
<ModalCell
|
|
712
736
|
field="signature"
|
|
713
737
|
value={value}
|
|
714
738
|
fieldProps={fieldProps}
|
|
715
739
|
disabled={disabled}
|
|
716
740
|
readOnly={readOnly}
|
|
717
741
|
onCommit={handleChange}
|
|
742
|
+
label={cellName}
|
|
718
743
|
title={t("Signature")}
|
|
719
744
|
>
|
|
720
745
|
{(draftValue, onDraftChange) => (
|
|
@@ -729,18 +754,19 @@ export function DataTableCell({
|
|
|
729
754
|
{...restProps}
|
|
730
755
|
/>
|
|
731
756
|
)}
|
|
732
|
-
</
|
|
757
|
+
</ModalCell>
|
|
733
758
|
);
|
|
734
759
|
|
|
735
760
|
case "geolocation":
|
|
736
761
|
return (
|
|
737
|
-
<
|
|
762
|
+
<ModalCell
|
|
738
763
|
field="geolocation"
|
|
739
764
|
value={value}
|
|
740
765
|
fieldProps={fieldProps}
|
|
741
766
|
disabled={disabled}
|
|
742
767
|
readOnly={readOnly}
|
|
743
768
|
onCommit={handleChange}
|
|
769
|
+
label={cellName}
|
|
744
770
|
title={t("Location")}
|
|
745
771
|
>
|
|
746
772
|
{(draftValue, onDraftChange) => (
|
|
@@ -761,19 +787,20 @@ export function DataTableCell({
|
|
|
761
787
|
{...restProps}
|
|
762
788
|
/>
|
|
763
789
|
)}
|
|
764
|
-
</
|
|
790
|
+
</ModalCell>
|
|
765
791
|
);
|
|
766
792
|
|
|
767
793
|
// ─── Rich text / code editors ─────────────────────────────
|
|
768
794
|
case "richtexteditor":
|
|
769
795
|
return (
|
|
770
|
-
<
|
|
796
|
+
<ModalCell
|
|
771
797
|
field="richtexteditor"
|
|
772
798
|
value={value}
|
|
773
799
|
fieldProps={fieldProps}
|
|
774
800
|
disabled={disabled}
|
|
775
801
|
readOnly={readOnly}
|
|
776
802
|
onCommit={handleChange}
|
|
803
|
+
label={cellName}
|
|
777
804
|
title={t("Edit")}
|
|
778
805
|
>
|
|
779
806
|
{(draftValue, onDraftChange) => (
|
|
@@ -788,18 +815,19 @@ export function DataTableCell({
|
|
|
788
815
|
{...restProps}
|
|
789
816
|
/>
|
|
790
817
|
)}
|
|
791
|
-
</
|
|
818
|
+
</ModalCell>
|
|
792
819
|
);
|
|
793
820
|
|
|
794
821
|
case "markdowneditor":
|
|
795
822
|
return (
|
|
796
|
-
<
|
|
823
|
+
<ModalCell
|
|
797
824
|
field="markdowneditor"
|
|
798
825
|
value={value}
|
|
799
826
|
fieldProps={fieldProps}
|
|
800
827
|
disabled={disabled}
|
|
801
828
|
readOnly={readOnly}
|
|
802
829
|
onCommit={handleChange}
|
|
830
|
+
label={cellName}
|
|
803
831
|
title={t("Edit markdown")}
|
|
804
832
|
>
|
|
805
833
|
{(draftValue, onDraftChange) => (
|
|
@@ -813,18 +841,19 @@ export function DataTableCell({
|
|
|
813
841
|
{...restProps}
|
|
814
842
|
/>
|
|
815
843
|
)}
|
|
816
|
-
</
|
|
844
|
+
</ModalCell>
|
|
817
845
|
);
|
|
818
846
|
|
|
819
847
|
case "codeeditor":
|
|
820
848
|
return (
|
|
821
|
-
<
|
|
849
|
+
<ModalCell
|
|
822
850
|
field="codeeditor"
|
|
823
851
|
value={value}
|
|
824
852
|
fieldProps={fieldProps}
|
|
825
853
|
disabled={disabled}
|
|
826
854
|
readOnly={readOnly}
|
|
827
855
|
onCommit={handleChange}
|
|
856
|
+
label={cellName}
|
|
828
857
|
title={t("Edit code")}
|
|
829
858
|
>
|
|
830
859
|
{(draftValue, onDraftChange) => (
|
|
@@ -838,25 +867,45 @@ export function DataTableCell({
|
|
|
838
867
|
{...restProps}
|
|
839
868
|
/>
|
|
840
869
|
)}
|
|
841
|
-
</
|
|
870
|
+
</ModalCell>
|
|
842
871
|
);
|
|
843
872
|
|
|
844
873
|
// ─── Text inputs ──────────────────────────────────────────
|
|
845
874
|
case "textarea":
|
|
875
|
+
// LC-06 / Airtable expand / Frappe Text Editor: multiline text is
|
|
876
|
+
// taller than the row. Face is a single-line FieldDisplay; the editor
|
|
877
|
+
// opens in the modal (web) / sheet (native) so the anchor row never
|
|
878
|
+
// grows. Staging matches the other compose editors (Done / Cancel).
|
|
846
879
|
return (
|
|
847
|
-
<
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
880
|
+
<ModalCell
|
|
881
|
+
field="textarea"
|
|
882
|
+
value={value}
|
|
883
|
+
fieldProps={fieldProps}
|
|
884
|
+
disabled={disabled}
|
|
885
|
+
readOnly={readOnly}
|
|
886
|
+
onCommit={handleChange}
|
|
887
|
+
label={cellName}
|
|
888
|
+
title={t("Edit text")}
|
|
889
|
+
>
|
|
890
|
+
{(draftValue, onDraftChange) => (
|
|
891
|
+
<TextArea
|
|
892
|
+
value={draftValue != null ? String(draftValue) : ""}
|
|
893
|
+
onChangeText={onDraftChange}
|
|
894
|
+
placeholder={placeholder}
|
|
895
|
+
disabled={disabled}
|
|
896
|
+
readOnly={readOnly}
|
|
897
|
+
size={knobProps.sizeToken}
|
|
898
|
+
{...restProps}
|
|
899
|
+
textAreaProps={{
|
|
900
|
+
"aria-label": cellName,
|
|
901
|
+
// TextArea has no top-level minHeight prop; the modal editor's
|
|
902
|
+
// taller-than-row height rides the underlying textarea element.
|
|
903
|
+
minHeight: restProps.minHeight ?? 160,
|
|
904
|
+
...(restProps as any).textAreaProps,
|
|
905
|
+
}}
|
|
906
|
+
/>
|
|
907
|
+
)}
|
|
908
|
+
</ModalCell>
|
|
860
909
|
);
|
|
861
910
|
|
|
862
911
|
case "input":
|
|
@@ -887,14 +936,14 @@ function CellStar(props: { size: number; weight: "fill" | "regular"; color: stri
|
|
|
887
936
|
}
|
|
888
937
|
|
|
889
938
|
/**
|
|
890
|
-
* Draft-until-commit wrapper for inline text
|
|
891
|
-
* Typing edits a local draft; Enter
|
|
892
|
-
*
|
|
939
|
+
* Draft-until-commit wrapper for the inline single-line text editor.
|
|
940
|
+
* Typing edits a local draft; Enter or blur commits it via onCommit;
|
|
941
|
+
* Escape restores the pre-edit value without committing. Multiline text
|
|
942
|
+
* is LC-06 oversized and routes through ModalCell instead.
|
|
893
943
|
*/
|
|
894
944
|
function InlineTextEditor({
|
|
895
945
|
value,
|
|
896
946
|
onCommit,
|
|
897
|
-
multiline,
|
|
898
947
|
placeholder,
|
|
899
948
|
disabled,
|
|
900
949
|
readOnly,
|
|
@@ -904,7 +953,6 @@ function InlineTextEditor({
|
|
|
904
953
|
}: {
|
|
905
954
|
value: any;
|
|
906
955
|
onCommit: (value: string) => void;
|
|
907
|
-
multiline?: boolean;
|
|
908
956
|
placeholder?: string;
|
|
909
957
|
disabled?: boolean;
|
|
910
958
|
readOnly?: boolean;
|
|
@@ -949,37 +997,12 @@ function InlineTextEditor({
|
|
|
949
997
|
(event: any) => {
|
|
950
998
|
const key = event?.nativeEvent?.key ?? event?.key;
|
|
951
999
|
if (key === "Escape") cancel();
|
|
952
|
-
else if (key === "Enter"
|
|
1000
|
+
else if (key === "Enter") commit();
|
|
953
1001
|
},
|
|
954
|
-
[cancel, commit
|
|
1002
|
+
[cancel, commit],
|
|
955
1003
|
);
|
|
956
1004
|
|
|
957
|
-
const { inputProps: userInputProps,
|
|
958
|
-
|
|
959
|
-
if (multiline) {
|
|
960
|
-
return (
|
|
961
|
-
<TextArea
|
|
962
|
-
key={resetKey}
|
|
963
|
-
value={draft}
|
|
964
|
-
onChangeText={setDraft}
|
|
965
|
-
onBlur={commit}
|
|
966
|
-
placeholder={placeholder}
|
|
967
|
-
disabled={disabled}
|
|
968
|
-
readOnly={readOnly}
|
|
969
|
-
size={sizeToken}
|
|
970
|
-
{...fieldRest}
|
|
971
|
-
textAreaProps={{
|
|
972
|
-
...(ariaLabel !== undefined ? { "aria-label": ariaLabel } : undefined),
|
|
973
|
-
...userTextAreaProps,
|
|
974
|
-
// Native fires onKeyPress; the DOM keypress event never fires for
|
|
975
|
-
// Escape, so web needs onKeyDown to see it.
|
|
976
|
-
onKeyPress: handleKeyPress,
|
|
977
|
-
onKeyDown: handleKeyPress,
|
|
978
|
-
onBlur: commit,
|
|
979
|
-
}}
|
|
980
|
-
/>
|
|
981
|
-
);
|
|
982
|
-
}
|
|
1005
|
+
const { inputProps: userInputProps, ...fieldRest } = restProps;
|
|
983
1006
|
|
|
984
1007
|
return (
|
|
985
1008
|
<Input
|
|
@@ -1179,6 +1202,14 @@ function DraftFieldEditor({
|
|
|
1179
1202
|
);
|
|
1180
1203
|
}
|
|
1181
1204
|
|
|
1205
|
+
function ModalCell(props: React.ComponentProps<typeof CellModalEditor>) {
|
|
1206
|
+
return (
|
|
1207
|
+
<CellWrapper>
|
|
1208
|
+
<CellModalEditor {...props} />
|
|
1209
|
+
</CellWrapper>
|
|
1210
|
+
);
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1182
1213
|
function CellWrapper({
|
|
1183
1214
|
children,
|
|
1184
1215
|
justify = "flex-start",
|
|
@@ -1191,10 +1222,12 @@ function CellWrapper({
|
|
|
1191
1222
|
minWidth?: number;
|
|
1192
1223
|
}) {
|
|
1193
1224
|
// Fields render chromeless inside cells (useIsInTableCell strips the input
|
|
1194
|
-
// frame), so the cell chrome owns the focus affordance:
|
|
1195
|
-
//
|
|
1196
|
-
// (
|
|
1197
|
-
|
|
1225
|
+
// frame), so the cell chrome owns the focus affordance. LC-71: one ring on
|
|
1226
|
+
// the perceived control boundary (this wrapper). Keyboard-origin focus
|
|
1227
|
+
// rings via :has(:focus-visible); text-entry also rings on any input
|
|
1228
|
+
// focus (the carve-out). Mouse click on a checkbox/switch paints no ring.
|
|
1229
|
+
// Inner field outlines are suppressed by the composite-ring stylesheet.
|
|
1230
|
+
if (isWeb) ensureCompositeFocusRing();
|
|
1198
1231
|
// Column + stretch layout so field roots adopt the cell width (input frames
|
|
1199
1232
|
// carry minWidth 0 and shrink to fit); maxWidth + a horizontal-only clip
|
|
1200
1233
|
// (overflow-x: clip pairs with overflow-y: visible, unlike hidden) catch
|
|
@@ -1214,13 +1247,15 @@ function CellWrapper({
|
|
|
1214
1247
|
width="100%"
|
|
1215
1248
|
maxWidth="100%"
|
|
1216
1249
|
// Per-axis overflow is web-only CSS; RN styles know only `overflow`.
|
|
1217
|
-
{...(isWeb
|
|
1250
|
+
{...(isWeb
|
|
1251
|
+
? {
|
|
1252
|
+
overflowX: "clip" as any,
|
|
1253
|
+
overflowY: "visible" as any,
|
|
1254
|
+
className: "mp-composite-ring mp-composite-ring-deep",
|
|
1255
|
+
}
|
|
1256
|
+
: undefined)}
|
|
1218
1257
|
gap={gap as any}
|
|
1219
1258
|
minWidth={minWidth}
|
|
1220
|
-
// focus-within is a web-only concept; on native the style prop makes the
|
|
1221
|
-
// wrapper claim the responder and Tamagui-driven presses inside the cell
|
|
1222
|
-
// (Checkbox/Switch frames) never fire.
|
|
1223
|
-
{...(isWeb ? { focusWithinStyle: { ...control.focusVisibleKnobProps } } : undefined)}
|
|
1224
1259
|
>
|
|
1225
1260
|
{children}
|
|
1226
1261
|
</View>
|
|
@@ -58,10 +58,12 @@ function TestComponent({
|
|
|
58
58
|
onPinChange,
|
|
59
59
|
maxPinnedColumns = 3,
|
|
60
60
|
allowPinning = true,
|
|
61
|
+
disabled = false,
|
|
61
62
|
}: {
|
|
62
63
|
onPinChange?: (columnId: string, position?: "left" | "right") => void;
|
|
63
64
|
maxPinnedColumns?: number;
|
|
64
65
|
allowPinning?: boolean;
|
|
66
|
+
disabled?: boolean;
|
|
65
67
|
}) {
|
|
66
68
|
const [pinnedColumns, setPinnedColumns] = React.useState<{
|
|
67
69
|
left: string[];
|
|
@@ -95,6 +97,7 @@ function TestComponent({
|
|
|
95
97
|
onPinChange,
|
|
96
98
|
maxPinnedColumns,
|
|
97
99
|
allowPinning,
|
|
100
|
+
disabled,
|
|
98
101
|
});
|
|
99
102
|
|
|
100
103
|
// Force pinning to use current state
|
|
@@ -197,6 +200,69 @@ describe("DataTableColumnPinning", () => {
|
|
|
197
200
|
});
|
|
198
201
|
});
|
|
199
202
|
|
|
203
|
+
// LC-54 amendment (2026-08-13) VERIFY arm: in hover/press the element
|
|
204
|
+
// carrying the press-target outset keeps `background-color: transparent` —
|
|
205
|
+
// painted feedback lives on the glyph-scale ring inside it. jsdom never
|
|
206
|
+
// applies :hover, but tamagui compiles state backgrounds into value-carrying
|
|
207
|
+
// atomic classes (`_bg-0hover-color4`), so the paint channel is asserted
|
|
208
|
+
// through the atoms each node carries — red on the old anatomy (the floor
|
|
209
|
+
// carried the hover AND press fills), green only when the floor is
|
|
210
|
+
// paint-free in every state.
|
|
211
|
+
describe("DataTableColumnPinning press-floor paint (LC-54 amendment)", () => {
|
|
212
|
+
const paintedStateAtom = /_bg-0(?:hover|active)-(?!transparent)/;
|
|
213
|
+
const floorFor = (columnId: string) =>
|
|
214
|
+
screen.getByTestId(`column-${columnId}`).querySelector('[role="button"]') as HTMLElement;
|
|
215
|
+
|
|
216
|
+
it("floor node carries no hover/press background paint", () => {
|
|
217
|
+
renderWithProviders(<TestComponent />);
|
|
218
|
+
expect(floorFor("name").className).not.toMatch(paintedStateAtom);
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
it("positive control: the glyph-scale ring is where the hover fill lives", () => {
|
|
222
|
+
renderWithProviders(<TestComponent />);
|
|
223
|
+
const floor = floorFor("name");
|
|
224
|
+
const ring = floor.firstElementChild as HTMLElement;
|
|
225
|
+
expect(ring).not.toBeNull();
|
|
226
|
+
// Proves the atom detector can see hover paint in this harness (the
|
|
227
|
+
// no-paint assert above is meaningless without this arm), and pins the
|
|
228
|
+
// fill to the ring: icon + one space token, never the 44px floor.
|
|
229
|
+
expect(ring.className).toMatch(/_bg-0hover-color4/);
|
|
230
|
+
expect(ring.querySelector("svg")).not.toBeNull();
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
it("activation bubbles from a press on the glyph ring", async () => {
|
|
234
|
+
const onPinChange = vi.fn();
|
|
235
|
+
renderWithProviders(<TestComponent onPinChange={onPinChange} />);
|
|
236
|
+
// Real pointers land on the glyph-scale ring inside the grown target —
|
|
237
|
+
// activation must bubble through it to the floor's press handler.
|
|
238
|
+
const ring = floorFor("name").firstElementChild as HTMLElement;
|
|
239
|
+
fireEvent.click(ring);
|
|
240
|
+
await waitFor(() => expect(onPinChange).toHaveBeenCalledWith("name", "left"));
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
it("a pinned column keeps full rest opacity (honest active state)", async () => {
|
|
244
|
+
// 0.7 compiles to the `_o-0--7` atom (dots escape as double dashes).
|
|
245
|
+
renderWithProviders(<TestComponent />);
|
|
246
|
+
expect(floorFor("name").className).toMatch(/_o-0--7/);
|
|
247
|
+
fireEvent.click(floorFor("name"));
|
|
248
|
+
await waitFor(() => {
|
|
249
|
+
expect(screen.getByTestId("pinned-name")).toHaveTextContent("pinned");
|
|
250
|
+
});
|
|
251
|
+
expect(floorFor("name").className).not.toMatch(/_o-0--7/);
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
it("an inert trigger keeps its LC-40 dim and paints no ring hover", () => {
|
|
255
|
+
renderWithProviders(<TestComponent disabled />);
|
|
256
|
+
const floor = floorFor("name");
|
|
257
|
+
expect(floor.getAttribute("aria-disabled")).toBe("true");
|
|
258
|
+
expect(floor.className).toMatch(/_o-0--4/);
|
|
259
|
+
// Feedback on an inert control would promise an action it won't take —
|
|
260
|
+
// the ring's hover fill is gated off with the press handler.
|
|
261
|
+
const ring = floor.firstElementChild as HTMLElement;
|
|
262
|
+
expect(ring.className).not.toMatch(paintedStateAtom);
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
|
|
200
266
|
describe("useColumnPinning", () => {
|
|
201
267
|
function HookTestComponent() {
|
|
202
268
|
const table = useReactTable({
|
|
@@ -236,21 +236,26 @@ export function DataTableColumnPinning<TData>(props: DataTableColumnPinningProps
|
|
|
236
236
|
: t("Pin {{column}} column left", { column: columnLabel });
|
|
237
237
|
|
|
238
238
|
return (
|
|
239
|
+
// LC-54 amendment (2026-08-13): the grown press target NEVER paints —
|
|
240
|
+
// hover/press fills on this box spread across the full 44px floor and
|
|
241
|
+
// bled into the neighboring header band via the negative outsets.
|
|
242
|
+
// Floor-wide feedback is subtree opacity; the painted hover chrome
|
|
243
|
+
// rides the glyph-scale ring inside (ColumnHeaderFilter anatomy).
|
|
239
244
|
<View
|
|
240
|
-
padding="$1"
|
|
241
|
-
borderRadius="$2"
|
|
242
245
|
cursor={next === "none" ? "default" : "pointer"}
|
|
243
246
|
{...pressTargetStyle()}
|
|
244
|
-
flexDirection="row"
|
|
245
247
|
alignItems="center"
|
|
246
248
|
justifyContent="center"
|
|
247
|
-
gap={2}
|
|
248
249
|
marginVertical={-PIN_TRIGGER_OUTSET}
|
|
249
250
|
marginHorizontal={-PIN_TRIGGER_OUTSET}
|
|
250
251
|
hitSlop={pressTargetHitSlop(PIN_TRIGGER_VISUAL)}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
252
|
+
// Axiom 6 HONEST STATE: a pinned column is an active signal — it
|
|
253
|
+
// keeps full strength; the idle affordance rests dimmed. An inert
|
|
254
|
+
// trigger (LC-40: table disabled / both sides maxed) keeps its dim
|
|
255
|
+
// in every state — feedback would promise an action it won't take.
|
|
256
|
+
opacity={next === "none" ? 0.4 : pinned ? 1 : 0.7}
|
|
257
|
+
hoverStyle={{ opacity: next === "none" ? 0.4 : 1 }}
|
|
258
|
+
pressStyle={{ opacity: next === "none" ? 0.4 : 0.9 }}
|
|
254
259
|
onPress={(e: any) => {
|
|
255
260
|
e?.stopPropagation?.();
|
|
256
261
|
if (next === "none") return;
|
|
@@ -260,16 +265,26 @@ export function DataTableColumnPinning<TData>(props: DataTableColumnPinningProps
|
|
|
260
265
|
aria-label={label}
|
|
261
266
|
aria-disabled={next === "none" || undefined}
|
|
262
267
|
>
|
|
263
|
-
<
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
268
|
+
<View
|
|
269
|
+
padding="$1"
|
|
270
|
+
borderRadius="$2"
|
|
271
|
+
flexDirection="row"
|
|
272
|
+
alignItems="center"
|
|
273
|
+
justifyContent="center"
|
|
274
|
+
gap={2}
|
|
275
|
+
{...(next === "none" ? undefined : { hoverStyle: { backgroundColor: "$color4" } })}
|
|
276
|
+
>
|
|
277
|
+
<PushPinIcon
|
|
278
|
+
size={14}
|
|
279
|
+
color={pinned ? "var(--accentColor)" : "var(--color10)"}
|
|
280
|
+
weight={pinned ? "fill" : "regular"}
|
|
281
|
+
/>
|
|
282
|
+
{pinned && currentPosition ? (
|
|
283
|
+
<Text fontSize={10} color="$color10">
|
|
284
|
+
{currentPosition === "left" ? "L" : "R"}
|
|
285
|
+
</Text>
|
|
286
|
+
) : null}
|
|
287
|
+
</View>
|
|
273
288
|
</View>
|
|
274
289
|
);
|
|
275
290
|
},
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { fireEvent, screen, waitFor } from "@testing-library/react";
|
|
2
2
|
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
3
|
+
import { formatAbsoluteDate } from "@multiplatform.one/theme";
|
|
3
4
|
import React from "react";
|
|
4
5
|
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
5
6
|
import {
|
|
@@ -67,7 +68,14 @@ describe("DataTableDateFilter", () => {
|
|
|
67
68
|
|
|
68
69
|
renderWithProviders(<DataTableDateFilter value={value} />);
|
|
69
70
|
|
|
70
|
-
|
|
71
|
+
// The trigger renders an instant through the house absolute register
|
|
72
|
+
// (LC-12), which reads it in LOCAL time — so the day it names depends on
|
|
73
|
+
// the ambient zone: this one is Jan 16 at UTC+14. Deriving the label from
|
|
74
|
+
// the same register asserts the register was used, which is the contract;
|
|
75
|
+
// a hard-coded "Jan 15, 2024" asserted the host was at a non-positive
|
|
76
|
+
// offset, which is not.
|
|
77
|
+
const expected = formatAbsoluteDate(value.value, { year: "always" });
|
|
78
|
+
expect(screen.getByText(`Is ${expected}`)).toBeInTheDocument();
|
|
71
79
|
});
|
|
72
80
|
|
|
73
81
|
it("shows different display formats for different operators", () => {
|