@multiplatform.one/table 7.4.1 → 7.5.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/dist/cjs/components/ChildTable/index.cjs +12 -3
- package/dist/cjs/components/ChildTable/index.native.js +14 -3
- package/dist/cjs/components/ChildTable/index.native.js.map +1 -1
- package/dist/cjs/components/ColumnHeaderFilter/index.cjs +11 -13
- package/dist/cjs/components/ColumnHeaderFilter/index.native.js +11 -16
- package/dist/cjs/components/ColumnHeaderFilter/index.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableCardControls.cjs +7 -4
- package/dist/cjs/components/DataTable/DataTableCardControls.native.js +7 -4
- package/dist/cjs/components/DataTable/DataTableCardControls.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableDocumentList.cjs +10 -4
- package/dist/cjs/components/DataTable/DataTableDocumentList.native.js +10 -4
- package/dist/cjs/components/DataTable/DataTableDocumentList.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableMobileCards.cjs +6 -1
- package/dist/cjs/components/DataTable/DataTableMobileCards.native.js +6 -1
- package/dist/cjs/components/DataTable/DataTableMobileCards.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableRoot.cjs +55 -42
- package/dist/cjs/components/DataTable/DataTableRoot.native.js +55 -42
- package/dist/cjs/components/DataTable/DataTableRoot.native.js.map +1 -1
- package/dist/cjs/components/DataTable/DataTableVirtualized.cjs +5 -2
- package/dist/cjs/components/DataTable/DataTableVirtualized.native.js +5 -2
- package/dist/cjs/components/DataTable/DataTableVirtualized.native.js.map +1 -1
- package/dist/cjs/components/DataTable/dataTableChrome.cjs +59 -0
- package/dist/cjs/components/DataTable/dataTableChrome.native.js +62 -0
- package/dist/cjs/components/DataTable/dataTableChrome.native.js.map +1 -0
- package/dist/cjs/components/DataTable/index.native.js +34 -20
- package/dist/cjs/components/DataTable/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableBulkActions/index.cjs +6 -4
- package/dist/cjs/components/DataTableBulkActions/index.native.js +6 -4
- package/dist/cjs/components/DataTableBulkActions/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableCell/CellModalEditor.cjs +9 -31
- package/dist/cjs/components/DataTableCell/CellModalEditor.native.js +2 -5
- package/dist/cjs/components/DataTableCell/CellModalEditor.native.js.map +1 -1
- package/dist/cjs/components/DataTableCell/CellOptionsEditor.cjs +0 -1
- package/dist/cjs/components/DataTableCell/CellOptionsEditor.native.js +0 -1
- package/dist/cjs/components/DataTableCell/CellOptionsEditor.native.js.map +1 -1
- package/dist/cjs/components/DataTableColumnPinning/index.cjs +7 -4
- package/dist/cjs/components/DataTableColumnPinning/index.native.js +7 -4
- package/dist/cjs/components/DataTableColumnPinning/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableDateFilter/index.cjs +24 -22
- package/dist/cjs/components/DataTableDateFilter/index.native.js +24 -22
- package/dist/cjs/components/DataTableDateFilter/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableExport/index.cjs +42 -28
- package/dist/cjs/components/DataTableExport/index.native.js +42 -28
- package/dist/cjs/components/DataTableExport/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableFacetMenu/index.cjs +10 -4
- package/dist/cjs/components/DataTableFacetMenu/index.native.js +10 -4
- package/dist/cjs/components/DataTableFacetMenu/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableFilters/index.cjs +3 -3
- package/dist/cjs/components/DataTableFilters/index.native.js +3 -3
- package/dist/cjs/components/DataTableFilters/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableGrouping/index.cjs +46 -41
- package/dist/cjs/components/DataTableGrouping/index.native.js +46 -41
- package/dist/cjs/components/DataTableGrouping/index.native.js.map +1 -1
- package/dist/cjs/components/DataTablePagination/index.cjs +4 -2
- package/dist/cjs/components/DataTablePagination/index.native.js +4 -2
- package/dist/cjs/components/DataTablePagination/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableSearch/index.cjs +3 -3
- package/dist/cjs/components/DataTableSearch/index.native.js +3 -3
- package/dist/cjs/components/DataTableToolbar/index.cjs +19 -13
- package/dist/cjs/components/DataTableToolbar/index.native.js +19 -15
- package/dist/cjs/components/DataTableToolbar/index.native.js.map +1 -1
- package/dist/cjs/components/DataTableViewOptions/index.cjs +36 -35
- package/dist/cjs/components/DataTableViewOptions/index.native.js +36 -35
- package/dist/cjs/components/DataTableViewOptions/index.native.js.map +1 -1
- package/dist/cjs/components/KnobDialog.cjs +1 -3
- package/dist/cjs/components/KnobDialog.native.js +1 -3
- package/dist/cjs/components/KnobDialog.native.js.map +1 -1
- package/dist/cjs/components/SimpleTable/index.cjs +159 -117
- package/dist/cjs/components/SimpleTable/index.native.js +168 -128
- package/dist/cjs/components/SimpleTable/index.native.js.map +1 -1
- package/dist/cjs/components/TableInput/index.cjs +159 -90
- package/dist/cjs/components/TableInput/index.native.js +3 -3
- package/dist/cjs/components/TableInput/index.native.js.map +1 -1
- package/dist/cjs/utils/chromeIcons.cjs +31 -0
- package/dist/cjs/utils/chromeIcons.native.js +34 -0
- package/dist/cjs/utils/chromeIcons.native.js.map +1 -0
- package/dist/esm/components/ChildTable/index.mjs +12 -3
- package/dist/esm/components/ChildTable/index.mjs.map +1 -1
- package/dist/esm/components/ChildTable/index.native.js +14 -3
- package/dist/esm/components/ChildTable/index.native.js.map +1 -1
- package/dist/esm/components/ColumnHeaderFilter/index.mjs +11 -13
- package/dist/esm/components/ColumnHeaderFilter/index.mjs.map +1 -1
- package/dist/esm/components/ColumnHeaderFilter/index.native.js +11 -16
- package/dist/esm/components/ColumnHeaderFilter/index.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableCardControls.mjs +7 -4
- package/dist/esm/components/DataTable/DataTableCardControls.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableCardControls.native.js +7 -4
- package/dist/esm/components/DataTable/DataTableCardControls.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableDocumentList.mjs +10 -4
- package/dist/esm/components/DataTable/DataTableDocumentList.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableDocumentList.native.js +10 -4
- package/dist/esm/components/DataTable/DataTableDocumentList.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableMobileCards.mjs +6 -1
- package/dist/esm/components/DataTable/DataTableMobileCards.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableMobileCards.native.js +6 -1
- package/dist/esm/components/DataTable/DataTableMobileCards.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableRoot.mjs +55 -42
- package/dist/esm/components/DataTable/DataTableRoot.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableRoot.native.js +55 -42
- package/dist/esm/components/DataTable/DataTableRoot.native.js.map +1 -1
- package/dist/esm/components/DataTable/DataTableVirtualized.mjs +5 -2
- package/dist/esm/components/DataTable/DataTableVirtualized.mjs.map +1 -1
- package/dist/esm/components/DataTable/DataTableVirtualized.native.js +5 -2
- package/dist/esm/components/DataTable/DataTableVirtualized.native.js.map +1 -1
- package/dist/esm/components/DataTable/dataTableChrome.mjs +32 -0
- package/dist/esm/components/DataTable/dataTableChrome.mjs.map +1 -0
- package/dist/esm/components/DataTable/dataTableChrome.native.js +32 -0
- package/dist/esm/components/DataTable/dataTableChrome.native.js.map +1 -0
- package/dist/esm/components/DataTable/index.native.js +34 -20
- package/dist/esm/components/DataTable/index.native.js.map +1 -1
- package/dist/esm/components/DataTableBulkActions/index.mjs +6 -4
- package/dist/esm/components/DataTableBulkActions/index.mjs.map +1 -1
- package/dist/esm/components/DataTableBulkActions/index.native.js +6 -4
- package/dist/esm/components/DataTableBulkActions/index.native.js.map +1 -1
- package/dist/esm/components/DataTableCell/CellModalEditor.mjs +11 -33
- package/dist/esm/components/DataTableCell/CellModalEditor.mjs.map +1 -1
- package/dist/esm/components/DataTableCell/CellModalEditor.native.js +2 -5
- package/dist/esm/components/DataTableCell/CellModalEditor.native.js.map +1 -1
- package/dist/esm/components/DataTableCell/CellOptionsEditor.mjs +0 -1
- package/dist/esm/components/DataTableCell/CellOptionsEditor.mjs.map +1 -1
- package/dist/esm/components/DataTableCell/CellOptionsEditor.native.js +0 -1
- package/dist/esm/components/DataTableCell/CellOptionsEditor.native.js.map +1 -1
- package/dist/esm/components/DataTableColumnPinning/index.mjs +7 -4
- package/dist/esm/components/DataTableColumnPinning/index.mjs.map +1 -1
- package/dist/esm/components/DataTableColumnPinning/index.native.js +7 -4
- package/dist/esm/components/DataTableColumnPinning/index.native.js.map +1 -1
- package/dist/esm/components/DataTableDateFilter/index.mjs +24 -22
- package/dist/esm/components/DataTableDateFilter/index.mjs.map +1 -1
- package/dist/esm/components/DataTableDateFilter/index.native.js +24 -22
- package/dist/esm/components/DataTableDateFilter/index.native.js.map +1 -1
- package/dist/esm/components/DataTableExport/index.mjs +43 -29
- package/dist/esm/components/DataTableExport/index.mjs.map +1 -1
- package/dist/esm/components/DataTableExport/index.native.js +43 -29
- package/dist/esm/components/DataTableExport/index.native.js.map +1 -1
- package/dist/esm/components/DataTableFacetMenu/index.mjs +10 -4
- package/dist/esm/components/DataTableFacetMenu/index.mjs.map +1 -1
- package/dist/esm/components/DataTableFacetMenu/index.native.js +10 -4
- package/dist/esm/components/DataTableFacetMenu/index.native.js.map +1 -1
- package/dist/esm/components/DataTableFilters/index.mjs +3 -3
- package/dist/esm/components/DataTableFilters/index.mjs.map +1 -1
- package/dist/esm/components/DataTableFilters/index.native.js +3 -3
- package/dist/esm/components/DataTableFilters/index.native.js.map +1 -1
- package/dist/esm/components/DataTableGrouping/index.mjs +47 -42
- package/dist/esm/components/DataTableGrouping/index.mjs.map +1 -1
- package/dist/esm/components/DataTableGrouping/index.native.js +47 -42
- package/dist/esm/components/DataTableGrouping/index.native.js.map +1 -1
- package/dist/esm/components/DataTablePagination/index.mjs +4 -2
- package/dist/esm/components/DataTablePagination/index.mjs.map +1 -1
- package/dist/esm/components/DataTablePagination/index.native.js +4 -2
- package/dist/esm/components/DataTablePagination/index.native.js.map +1 -1
- package/dist/esm/components/DataTableSearch/index.mjs +3 -3
- package/dist/esm/components/DataTableSearch/index.native.js +3 -3
- package/dist/esm/components/DataTableToolbar/index.mjs +19 -13
- package/dist/esm/components/DataTableToolbar/index.mjs.map +1 -1
- package/dist/esm/components/DataTableToolbar/index.native.js +19 -15
- package/dist/esm/components/DataTableToolbar/index.native.js.map +1 -1
- package/dist/esm/components/DataTableViewOptions/index.mjs +36 -35
- package/dist/esm/components/DataTableViewOptions/index.mjs.map +1 -1
- package/dist/esm/components/DataTableViewOptions/index.native.js +36 -35
- package/dist/esm/components/DataTableViewOptions/index.native.js.map +1 -1
- package/dist/esm/components/KnobDialog.mjs +1 -3
- package/dist/esm/components/KnobDialog.mjs.map +1 -1
- package/dist/esm/components/KnobDialog.native.js +1 -3
- package/dist/esm/components/KnobDialog.native.js.map +1 -1
- package/dist/esm/components/SimpleTable/index.mjs +160 -118
- package/dist/esm/components/SimpleTable/index.mjs.map +1 -1
- package/dist/esm/components/SimpleTable/index.native.js +169 -129
- package/dist/esm/components/SimpleTable/index.native.js.map +1 -1
- package/dist/esm/components/TableInput/index.mjs +160 -91
- package/dist/esm/components/TableInput/index.mjs.map +1 -1
- package/dist/esm/components/TableInput/index.native.js +3 -3
- package/dist/esm/components/TableInput/index.native.js.map +1 -1
- package/dist/esm/utils/chromeIcons.mjs +6 -0
- package/dist/esm/utils/chromeIcons.mjs.map +1 -0
- package/dist/esm/utils/chromeIcons.native.js +6 -0
- package/dist/esm/utils/chromeIcons.native.js.map +1 -0
- package/dist/jsx/components/ChildTable/index.mjs +12 -3
- package/dist/jsx/components/ChildTable/index.mjs.map +1 -1
- package/dist/jsx/components/ChildTable/index.native.js +14 -3
- package/dist/jsx/components/ChildTable/index.native.js.map +1 -1
- package/dist/jsx/components/ColumnHeaderFilter/index.mjs +11 -13
- package/dist/jsx/components/ColumnHeaderFilter/index.mjs.map +1 -1
- package/dist/jsx/components/ColumnHeaderFilter/index.native.js +11 -16
- package/dist/jsx/components/ColumnHeaderFilter/index.native.js.map +1 -1
- package/dist/jsx/components/DataTable/DataTableCardControls.mjs +7 -4
- package/dist/jsx/components/DataTable/DataTableCardControls.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableCardControls.native.js +7 -4
- package/dist/jsx/components/DataTable/DataTableCardControls.native.js.map +1 -1
- package/dist/jsx/components/DataTable/DataTableDocumentList.mjs +10 -4
- package/dist/jsx/components/DataTable/DataTableDocumentList.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableDocumentList.native.js +10 -4
- package/dist/jsx/components/DataTable/DataTableDocumentList.native.js.map +1 -1
- package/dist/jsx/components/DataTable/DataTableMobileCards.mjs +6 -1
- package/dist/jsx/components/DataTable/DataTableMobileCards.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableMobileCards.native.js +6 -1
- package/dist/jsx/components/DataTable/DataTableMobileCards.native.js.map +1 -1
- package/dist/jsx/components/DataTable/DataTableRoot.mjs +55 -42
- package/dist/jsx/components/DataTable/DataTableRoot.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableRoot.native.js +55 -42
- package/dist/jsx/components/DataTable/DataTableRoot.native.js.map +1 -1
- package/dist/jsx/components/DataTable/DataTableVirtualized.mjs +5 -2
- package/dist/jsx/components/DataTable/DataTableVirtualized.mjs.map +1 -1
- package/dist/jsx/components/DataTable/DataTableVirtualized.native.js +5 -2
- package/dist/jsx/components/DataTable/DataTableVirtualized.native.js.map +1 -1
- package/dist/jsx/components/DataTable/dataTableChrome.mjs +32 -0
- package/dist/jsx/components/DataTable/dataTableChrome.mjs.map +1 -0
- package/dist/jsx/components/DataTable/dataTableChrome.native.js +62 -0
- package/dist/jsx/components/DataTable/dataTableChrome.native.js.map +1 -0
- package/dist/jsx/components/DataTable/index.native.js +34 -20
- package/dist/jsx/components/DataTable/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableBulkActions/index.mjs +6 -4
- package/dist/jsx/components/DataTableBulkActions/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableBulkActions/index.native.js +6 -4
- package/dist/jsx/components/DataTableBulkActions/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableCell/CellModalEditor.mjs +11 -33
- package/dist/jsx/components/DataTableCell/CellModalEditor.mjs.map +1 -1
- package/dist/jsx/components/DataTableCell/CellModalEditor.native.js +2 -5
- package/dist/jsx/components/DataTableCell/CellModalEditor.native.js.map +1 -1
- package/dist/jsx/components/DataTableCell/CellOptionsEditor.mjs +0 -1
- package/dist/jsx/components/DataTableCell/CellOptionsEditor.mjs.map +1 -1
- package/dist/jsx/components/DataTableCell/CellOptionsEditor.native.js +0 -1
- package/dist/jsx/components/DataTableCell/CellOptionsEditor.native.js.map +1 -1
- package/dist/jsx/components/DataTableColumnPinning/index.mjs +7 -4
- package/dist/jsx/components/DataTableColumnPinning/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableColumnPinning/index.native.js +7 -4
- package/dist/jsx/components/DataTableColumnPinning/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableDateFilter/index.mjs +24 -22
- package/dist/jsx/components/DataTableDateFilter/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableDateFilter/index.native.js +24 -22
- package/dist/jsx/components/DataTableDateFilter/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableExport/index.mjs +43 -29
- package/dist/jsx/components/DataTableExport/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableExport/index.native.js +42 -28
- package/dist/jsx/components/DataTableExport/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableFacetMenu/index.mjs +10 -4
- package/dist/jsx/components/DataTableFacetMenu/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableFacetMenu/index.native.js +10 -4
- package/dist/jsx/components/DataTableFacetMenu/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableFilters/index.mjs +3 -3
- package/dist/jsx/components/DataTableFilters/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableFilters/index.native.js +3 -3
- package/dist/jsx/components/DataTableFilters/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableGrouping/index.mjs +47 -42
- package/dist/jsx/components/DataTableGrouping/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableGrouping/index.native.js +46 -41
- package/dist/jsx/components/DataTableGrouping/index.native.js.map +1 -1
- package/dist/jsx/components/DataTablePagination/index.mjs +4 -2
- package/dist/jsx/components/DataTablePagination/index.mjs.map +1 -1
- package/dist/jsx/components/DataTablePagination/index.native.js +4 -2
- package/dist/jsx/components/DataTablePagination/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableSearch/index.mjs +3 -3
- package/dist/jsx/components/DataTableSearch/index.native.js +3 -3
- package/dist/jsx/components/DataTableToolbar/index.mjs +19 -13
- package/dist/jsx/components/DataTableToolbar/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableToolbar/index.native.js +19 -15
- package/dist/jsx/components/DataTableToolbar/index.native.js.map +1 -1
- package/dist/jsx/components/DataTableViewOptions/index.mjs +36 -35
- package/dist/jsx/components/DataTableViewOptions/index.mjs.map +1 -1
- package/dist/jsx/components/DataTableViewOptions/index.native.js +36 -35
- package/dist/jsx/components/DataTableViewOptions/index.native.js.map +1 -1
- package/dist/jsx/components/KnobDialog.mjs +1 -3
- package/dist/jsx/components/KnobDialog.mjs.map +1 -1
- package/dist/jsx/components/KnobDialog.native.js +1 -3
- package/dist/jsx/components/KnobDialog.native.js.map +1 -1
- package/dist/jsx/components/SimpleTable/index.mjs +160 -118
- package/dist/jsx/components/SimpleTable/index.mjs.map +1 -1
- package/dist/jsx/components/SimpleTable/index.native.js +168 -128
- package/dist/jsx/components/SimpleTable/index.native.js.map +1 -1
- package/dist/jsx/components/TableInput/index.mjs +160 -91
- package/dist/jsx/components/TableInput/index.mjs.map +1 -1
- package/dist/jsx/components/TableInput/index.native.js +3 -3
- package/dist/jsx/components/TableInput/index.native.js.map +1 -1
- package/dist/jsx/utils/chromeIcons.mjs +6 -0
- package/dist/jsx/utils/chromeIcons.mjs.map +1 -0
- package/dist/jsx/utils/chromeIcons.native.js +34 -0
- package/dist/jsx/utils/chromeIcons.native.js.map +1 -0
- package/package.json +12 -12
- package/src/components/ChildTable/ChildTable.stories.tsx +144 -0
- package/src/components/ChildTable/childTable.reorder.spec.tsx +65 -0
- package/src/components/ChildTable/childTable.spec.tsx +108 -0
- package/src/components/ChildTable/index.tsx +21 -2
- package/src/components/ColumnHeaderFilter/index.tsx +9 -14
- package/src/components/DataTable/DataTableCardControls.tsx +19 -16
- package/src/components/DataTable/DataTableDocumentList.tsx +7 -4
- package/src/components/DataTable/DataTableMobileCards.tsx +3 -1
- package/src/components/DataTable/DataTableRoot.tsx +52 -41
- package/src/components/DataTable/DataTableVirtualized.tsx +6 -2
- package/src/components/DataTable/FieldsInCells.stories.tsx +10 -5
- package/src/components/DataTable/dataTableChrome.ts +48 -0
- package/src/components/DataTable/designLaw.spec.tsx +114 -0
- package/src/components/DataTable/index.native.tsx +46 -20
- package/src/components/DataTableBulkActions/index.tsx +5 -3
- package/src/components/DataTableCell/CellModalEditor.native.tsx +3 -6
- package/src/components/DataTableCell/CellModalEditor.tsx +11 -22
- package/src/components/DataTableCell/CellOptionsEditor.tsx +0 -1
- package/src/components/DataTableCell/cellDraftPolicy.spec.tsx +8 -1
- package/src/components/DataTableCell/cellModalEditor.spec.tsx +82 -0
- package/src/components/DataTableCell/dataTableCell.spec.tsx +8 -1
- package/src/components/DataTableColumnPinning/index.tsx +6 -4
- package/src/components/DataTableDateFilter/index.tsx +19 -17
- package/src/components/DataTableExport/DataTableExport.spec.tsx +29 -0
- package/src/components/DataTableExport/index.tsx +47 -23
- package/src/components/DataTableFacetMenu/index.tsx +13 -4
- package/src/components/DataTableFilters/index.tsx +3 -3
- package/src/components/DataTableGrouping/index.tsx +42 -35
- package/src/components/DataTablePagination/index.tsx +2 -2
- package/src/components/DataTableSearch/index.tsx +3 -3
- package/src/components/DataTableToolbar/DataTableToolbar.spec.tsx +20 -0
- package/src/components/DataTableToolbar/DataTableToolbar.stories.tsx +1 -9
- package/src/components/DataTableToolbar/index.tsx +19 -14
- package/src/components/DataTableViewOptions/index.tsx +30 -30
- package/src/components/KnobDialog.tsx +1 -3
- package/src/components/SimpleTable/SimpleTable.stories.tsx +13 -0
- package/src/components/SimpleTable/index.tsx +171 -149
- package/src/components/SimpleTable/simpleTable.spec.tsx +120 -0
- package/src/components/TableInput/index.native.tsx +5 -3
- package/src/components/TableInput/index.tsx +207 -113
- package/src/components/chromeDesignLaw.spec.tsx +97 -0
- package/src/utils/chromeIcons.ts +6 -0
- package/types/components/ChildTable/index.d.ts +6 -1
- package/types/components/ChildTable/index.d.ts.map +1 -1
- package/types/components/ColumnHeaderFilter/index.d.ts.map +1 -1
- package/types/components/DataTable/DataTableCardControls.d.ts.map +1 -1
- package/types/components/DataTable/DataTableDocumentList.d.ts.map +1 -1
- package/types/components/DataTable/DataTableMobileCards.d.ts.map +1 -1
- package/types/components/DataTable/DataTableRoot.d.ts +6 -1
- package/types/components/DataTable/DataTableRoot.d.ts.map +1 -1
- package/types/components/DataTable/DataTableVirtualized.d.ts +3 -1
- package/types/components/DataTable/DataTableVirtualized.d.ts.map +1 -1
- package/types/components/DataTable/dataTableChrome.d.ts +27 -0
- package/types/components/DataTable/dataTableChrome.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/DataTableBulkActions/index.d.ts.map +1 -1
- package/types/components/DataTableCell/CellModalEditor.d.ts.map +1 -1
- package/types/components/DataTableCell/CellModalEditor.native.d.ts.map +1 -1
- package/types/components/DataTableCell/CellOptionsEditor.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.map +1 -1
- package/types/components/DataTableFacetMenu/index.d.ts.map +1 -1
- package/types/components/DataTableGrouping/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/DataTableViewOptions/index.d.ts.map +1 -1
- package/types/components/KnobDialog.d.ts.map +1 -1
- package/types/components/SimpleTable/index.d.ts.map +1 -1
- package/types/components/TableInput/index.d.ts +8 -4
- package/types/components/TableInput/index.d.ts.map +1 -1
- package/types/components/TableInput/index.native.d.ts +2 -0
- package/types/components/TableInput/index.native.d.ts.map +1 -1
- package/types/utils/chromeIcons.d.ts +3 -0
- package/types/utils/chromeIcons.d.ts.map +1 -0
|
@@ -612,4 +612,33 @@ describe("DataTableExport", () => {
|
|
|
612
612
|
expect(mockOnExport).toHaveBeenCalledTimes(1);
|
|
613
613
|
});
|
|
614
614
|
});
|
|
615
|
+
|
|
616
|
+
it("surfaces an inline error when Blob URLs are unavailable", async () => {
|
|
617
|
+
const previous = Object.getOwnPropertyDescriptor(window.URL, "createObjectURL");
|
|
618
|
+
Object.defineProperty(window.URL, "createObjectURL", {
|
|
619
|
+
configurable: true,
|
|
620
|
+
writable: true,
|
|
621
|
+
value: undefined,
|
|
622
|
+
});
|
|
623
|
+
try {
|
|
624
|
+
renderWithProviders(<DataTableExport data={mockData} columns={mockColumns} />);
|
|
625
|
+
fireEvent.click(screen.getByRole("button", { name: /Export as CSV/i }));
|
|
626
|
+
await waitFor(() => {
|
|
627
|
+
expect(screen.getByRole("alert").textContent).toMatch(
|
|
628
|
+
/not available on this platform/i,
|
|
629
|
+
);
|
|
630
|
+
});
|
|
631
|
+
expect(mockCreateObjectURL).not.toHaveBeenCalled();
|
|
632
|
+
} finally {
|
|
633
|
+
if (previous) {
|
|
634
|
+
Object.defineProperty(window.URL, "createObjectURL", previous);
|
|
635
|
+
} else {
|
|
636
|
+
Object.defineProperty(window.URL, "createObjectURL", {
|
|
637
|
+
configurable: true,
|
|
638
|
+
writable: true,
|
|
639
|
+
value: mockCreateObjectURL,
|
|
640
|
+
});
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
});
|
|
615
644
|
});
|
|
@@ -9,8 +9,9 @@ import { downloadBlob } from "@multiplatform.one/platform";
|
|
|
9
9
|
import { formatCalendarDate, useResolvedKnobs } from "@multiplatform.one/theme";
|
|
10
10
|
import { useState } from "react";
|
|
11
11
|
import { Button, Checkbox, Input } from "@multiplatform.one/forms";
|
|
12
|
-
import { Popover, ScrollView, Separator, Text, XStack, YStack } from "tamagui";
|
|
12
|
+
import { Popover, ScrollView, Separator, Text, XStack, YStack, isWeb } from "tamagui";
|
|
13
13
|
import type { DataTableField } from "../../types";
|
|
14
|
+
import { iconSizeForToken } from "../../utils/chromeIcons";
|
|
14
15
|
import { getViewLeafRows } from "../../utils/viewData";
|
|
15
16
|
import { useDataTableState } from "../DataTable/DataTableStateContext";
|
|
16
17
|
|
|
@@ -74,13 +75,16 @@ export function DataTableExport<T = any>(props: DataTableExportProps<T>) {
|
|
|
74
75
|
const data = props.data ?? (ctx ? getViewLeafRows<T>(ctx.table) : []);
|
|
75
76
|
const columns = props.columns ?? (ctx ? extractColumnsFromTable(ctx.table) : []);
|
|
76
77
|
|
|
78
|
+
const { knobProps } = useResolvedKnobs();
|
|
79
|
+
const iconPx = iconSizeForToken(String(knobProps.sizeToken));
|
|
80
|
+
|
|
77
81
|
const {
|
|
78
82
|
filename = "export",
|
|
79
83
|
exportFormats = [
|
|
80
84
|
{
|
|
81
85
|
id: "csv",
|
|
82
86
|
label: "CSV",
|
|
83
|
-
icon: <FileTextIcon size={
|
|
87
|
+
icon: <FileTextIcon size={iconPx} />,
|
|
84
88
|
extension: "csv",
|
|
85
89
|
mimeType: "text/csv",
|
|
86
90
|
description: "Comma-separated values",
|
|
@@ -89,7 +93,7 @@ export function DataTableExport<T = any>(props: DataTableExportProps<T>) {
|
|
|
89
93
|
{
|
|
90
94
|
id: "excel",
|
|
91
95
|
label: "Excel",
|
|
92
|
-
icon: <FileXlsIcon size={
|
|
96
|
+
icon: <FileXlsIcon size={iconPx} />,
|
|
93
97
|
extension: "xlsx",
|
|
94
98
|
mimeType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
95
99
|
description: "Microsoft Excel format",
|
|
@@ -98,7 +102,7 @@ export function DataTableExport<T = any>(props: DataTableExportProps<T>) {
|
|
|
98
102
|
{
|
|
99
103
|
id: "pdf",
|
|
100
104
|
label: "PDF",
|
|
101
|
-
icon: <FileTextIcon size={
|
|
105
|
+
icon: <FileTextIcon size={iconPx} />,
|
|
102
106
|
extension: "pdf",
|
|
103
107
|
mimeType: "application/pdf",
|
|
104
108
|
description: "Portable document format",
|
|
@@ -107,7 +111,7 @@ export function DataTableExport<T = any>(props: DataTableExportProps<T>) {
|
|
|
107
111
|
{
|
|
108
112
|
id: "json",
|
|
109
113
|
label: "JSON",
|
|
110
|
-
icon: <FileJsIcon size={
|
|
114
|
+
icon: <FileJsIcon size={iconPx} />,
|
|
111
115
|
extension: "json",
|
|
112
116
|
mimeType: "application/json",
|
|
113
117
|
description: "JavaScript object notation",
|
|
@@ -118,7 +122,6 @@ export function DataTableExport<T = any>(props: DataTableExportProps<T>) {
|
|
|
118
122
|
disabled = false,
|
|
119
123
|
} = props;
|
|
120
124
|
|
|
121
|
-
const { knobProps } = useResolvedKnobs();
|
|
122
125
|
const [isExporting, setIsExporting] = useState<string | null>(null);
|
|
123
126
|
const [exportError, setExportError] = useState<string | null>(null);
|
|
124
127
|
const [exportOptions, setExportOptions] = useState<Partial<ExportOptions>>({
|
|
@@ -201,7 +204,7 @@ export function DataTableExport<T = any>(props: DataTableExportProps<T>) {
|
|
|
201
204
|
<Button
|
|
202
205
|
size={knobProps.sizeToken}
|
|
203
206
|
chromeless
|
|
204
|
-
icon={<PrinterIcon size={
|
|
207
|
+
icon={<PrinterIcon size={iconPx} />}
|
|
205
208
|
disabled={disabled || isExporting === "print"}
|
|
206
209
|
onPress={handlePrint}
|
|
207
210
|
aria-label="Print table"
|
|
@@ -273,6 +276,7 @@ function ExportOptionsPopover({
|
|
|
273
276
|
columns,
|
|
274
277
|
}: ExportOptionsPopoverProps) {
|
|
275
278
|
const { knobProps } = useResolvedKnobs();
|
|
279
|
+
const iconPx = iconSizeForToken(String(knobProps.sizeToken));
|
|
276
280
|
const sz = knobProps.sizeToken;
|
|
277
281
|
const popoverMinWidth = sz === "$3" ? 240 : sz === "$5" ? 360 : 300;
|
|
278
282
|
const [selectedColumns, setSelectedColumns] = useState<Set<string>>(
|
|
@@ -293,7 +297,7 @@ function ExportOptionsPopover({
|
|
|
293
297
|
<Button
|
|
294
298
|
size={knobProps.sizeToken}
|
|
295
299
|
chromeless
|
|
296
|
-
icon={<GearIcon size={
|
|
300
|
+
icon={<GearIcon size={iconPx} />}
|
|
297
301
|
disabled={disabled}
|
|
298
302
|
aria-label="Export options"
|
|
299
303
|
>
|
|
@@ -302,9 +306,7 @@ function ExportOptionsPopover({
|
|
|
302
306
|
</Popover.Trigger>
|
|
303
307
|
|
|
304
308
|
<Popover.Content
|
|
305
|
-
{...knobProps.
|
|
306
|
-
borderWidth={1}
|
|
307
|
-
borderColor="$borderColor"
|
|
309
|
+
{...knobProps.elevatedSurface}
|
|
308
310
|
transition={knobProps.transition}
|
|
309
311
|
enterStyle={{ x: 0, y: -10, opacity: 0 }}
|
|
310
312
|
exitStyle={{ x: 0, y: -10, opacity: 0 }}
|
|
@@ -317,13 +319,13 @@ function ExportOptionsPopover({
|
|
|
317
319
|
DataTableDateFilter). */}
|
|
318
320
|
<Popover.ScrollView minHeight={0}>
|
|
319
321
|
<YStack {...knobProps.panelPadding} gap="$4">
|
|
320
|
-
<Text
|
|
322
|
+
<Text {...knobProps.label} fontWeight="400">
|
|
321
323
|
Export Options
|
|
322
324
|
</Text>
|
|
323
325
|
|
|
324
326
|
{/* Filename */}
|
|
325
327
|
<YStack gap="$2">
|
|
326
|
-
<Text
|
|
328
|
+
<Text {...knobProps.label} fontWeight="400">
|
|
327
329
|
Filename
|
|
328
330
|
</Text>
|
|
329
331
|
<Input
|
|
@@ -352,7 +354,7 @@ function ExportOptionsPopover({
|
|
|
352
354
|
|
|
353
355
|
{/* Column Selection */}
|
|
354
356
|
<YStack gap="$2">
|
|
355
|
-
<Text
|
|
357
|
+
<Text {...knobProps.label} fontWeight="400">
|
|
356
358
|
Select Columns ({selectedColumns.size} of {availableColumns.length})
|
|
357
359
|
</Text>
|
|
358
360
|
<ScrollView maxHeight={200}>
|
|
@@ -385,7 +387,7 @@ function ExportOptionsPopover({
|
|
|
385
387
|
|
|
386
388
|
{/* Export Formats */}
|
|
387
389
|
<YStack gap="$2">
|
|
388
|
-
<Text
|
|
390
|
+
<Text {...knobProps.label} fontWeight="400">
|
|
389
391
|
Export Formats
|
|
390
392
|
</Text>
|
|
391
393
|
{exportFormats.map((format) => (
|
|
@@ -399,7 +401,7 @@ function ExportOptionsPopover({
|
|
|
399
401
|
icon={format.icon}
|
|
400
402
|
>
|
|
401
403
|
<YStack gap="$1">
|
|
402
|
-
<Text
|
|
404
|
+
<Text {...knobProps.label} fontWeight="400">
|
|
403
405
|
{format.label}
|
|
404
406
|
</Text>
|
|
405
407
|
<Text fontSize="$2" color="$color10">
|
|
@@ -424,7 +426,7 @@ function ExportOptionsPopover({
|
|
|
424
426
|
justifyContent="flex-start"
|
|
425
427
|
disabled={disabled || isExporting === "print"}
|
|
426
428
|
onPress={onPrint}
|
|
427
|
-
icon={<PrinterIcon size={
|
|
429
|
+
icon={<PrinterIcon size={iconPx} />}
|
|
428
430
|
>
|
|
429
431
|
Print Table
|
|
430
432
|
{isExporting === "print" && (
|
|
@@ -671,6 +673,9 @@ async function exportAsPDF<T>(
|
|
|
671
673
|
// interpolation) so cell values containing markup cannot inject into the
|
|
672
674
|
// print document (XSS via `<img onerror>`-style data).
|
|
673
675
|
async function printTable<T>(data: T[], columns: ExportColumn[]): Promise<void> {
|
|
676
|
+
if (!isWeb || typeof window.open !== "function") {
|
|
677
|
+
throw new Error("Print is not available on this platform.");
|
|
678
|
+
}
|
|
674
679
|
const printWindow = window.open("", "_blank");
|
|
675
680
|
if (!printWindow) {
|
|
676
681
|
throw new Error("Print window was blocked. Allow popups for this site and try again.");
|
|
@@ -681,12 +686,16 @@ async function printTable<T>(data: T[], columns: ExportColumn[]): Promise<void>
|
|
|
681
686
|
|
|
682
687
|
const style = doc.createElement("style");
|
|
683
688
|
style.textContent = `
|
|
684
|
-
|
|
689
|
+
/* Explicit print theme (Part 3 DataTableExport): scheme-safe paper palette,
|
|
690
|
+
not page chrome. Headers use the 400/700 weight ladder — never 500/600. */
|
|
691
|
+
body { color: CanvasText; background: Canvas; font-family: system-ui, sans-serif; margin: 20px; }
|
|
685
692
|
table { width: 100%; border-collapse: collapse; }
|
|
686
|
-
th, td { border: 1px solid
|
|
687
|
-
th {
|
|
688
|
-
|
|
689
|
-
|
|
693
|
+
th, td { border: 1px solid CanvasText; padding: 8px; text-align: left; }
|
|
694
|
+
th { font-weight: 700; }
|
|
695
|
+
@media print {
|
|
696
|
+
body { color: #111; background: #fff; margin: 0; }
|
|
697
|
+
th, td { border-color: #111; }
|
|
698
|
+
}
|
|
690
699
|
`;
|
|
691
700
|
doc.head.appendChild(style);
|
|
692
701
|
|
|
@@ -724,8 +733,23 @@ async function printTable<T>(data: T[], columns: ExportColumn[]): Promise<void>
|
|
|
724
733
|
printWindow.print();
|
|
725
734
|
}
|
|
726
735
|
|
|
727
|
-
//
|
|
736
|
+
// Web-only download. Native/GTK have no Blob-URL download path (MPO-22);
|
|
737
|
+
// throw so the inline alert fires instead of a silent console.warn no-op.
|
|
738
|
+
function assertWebFileDownload(): void {
|
|
739
|
+
if (
|
|
740
|
+
!isWeb ||
|
|
741
|
+
typeof document === "undefined" ||
|
|
742
|
+
typeof URL === "undefined" ||
|
|
743
|
+
typeof URL.createObjectURL !== "function"
|
|
744
|
+
) {
|
|
745
|
+
throw new Error(
|
|
746
|
+
"File download is not available on this platform. Provide an onExport handler.",
|
|
747
|
+
);
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
|
|
728
751
|
function downloadFile(content: string, filename: string, mimeType: string): void {
|
|
752
|
+
assertWebFileDownload();
|
|
729
753
|
const blob = new Blob([content], { type: mimeType });
|
|
730
754
|
downloadBlob(blob, filename);
|
|
731
755
|
}
|
|
@@ -24,10 +24,12 @@
|
|
|
24
24
|
import { CaretDownIcon } from "@phosphor-icons/react";
|
|
25
25
|
import { DropdownMenu, type DropdownMenuPlacement } from "@multiplatform.one/components";
|
|
26
26
|
import { Button, Spinner } from "@multiplatform.one/forms";
|
|
27
|
+
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
27
28
|
import type { ReactNode } from "react";
|
|
28
29
|
import { useCallback } from "react";
|
|
29
30
|
import { Text, XStack, withStaticProperties } from "tamagui";
|
|
30
31
|
import { t } from "../../shared/t";
|
|
32
|
+
import { iconSizeForToken } from "../../utils/chromeIcons";
|
|
31
33
|
|
|
32
34
|
export interface DataTableFacetOption {
|
|
33
35
|
/** Raw facet value (user id, tag, status value, …). */
|
|
@@ -120,6 +122,8 @@ function DataTableFacetMenuComponent({
|
|
|
120
122
|
placement = "bottom-start",
|
|
121
123
|
children,
|
|
122
124
|
}: DataTableFacetMenuProps) {
|
|
125
|
+
const { knobProps } = useResolvedKnobs();
|
|
126
|
+
const iconPx = iconSizeForToken(String(knobProps.sizeToken));
|
|
123
127
|
const active = activeValues ?? [];
|
|
124
128
|
const activeCount = active.length;
|
|
125
129
|
|
|
@@ -154,7 +158,13 @@ function DataTableFacetMenuComponent({
|
|
|
154
158
|
/>
|
|
155
159
|
))}
|
|
156
160
|
{(options?.length ?? 0) === 0 && !loading && (
|
|
157
|
-
<Text
|
|
161
|
+
<Text
|
|
162
|
+
{...knobProps.label}
|
|
163
|
+
fontWeight="400"
|
|
164
|
+
color="$color10"
|
|
165
|
+
paddingHorizontal="$3"
|
|
166
|
+
paddingVertical="$2"
|
|
167
|
+
>
|
|
158
168
|
{t("No options")}
|
|
159
169
|
</Text>
|
|
160
170
|
)}
|
|
@@ -165,12 +175,11 @@ function DataTableFacetMenuComponent({
|
|
|
165
175
|
<DropdownMenu placement={placement}>
|
|
166
176
|
<DropdownMenu.Trigger asChild>
|
|
167
177
|
<Button
|
|
168
|
-
size=
|
|
169
|
-
compact
|
|
178
|
+
size={knobProps.sizeToken}
|
|
170
179
|
// Active facet = accent trigger with count — the same active
|
|
171
180
|
// anatomy as DataTableFilterButton ("Filter (n)").
|
|
172
181
|
{...(activeCount > 0 ? { accent: true } : { variant: "outlined" as const })}
|
|
173
|
-
iconAfter={<CaretDownIcon size={
|
|
182
|
+
iconAfter={<CaretDownIcon size={iconPx} />}
|
|
174
183
|
aria-haspopup="menu"
|
|
175
184
|
aria-label={label}
|
|
176
185
|
{...(disabled ? { disabled } : {})}
|
|
@@ -60,11 +60,11 @@ export function DataTableFilters(props: DataTableFiltersProps) {
|
|
|
60
60
|
const onClearFilters = props.onClearFilters ?? ctx?.actions.clearFilters ?? (() => {});
|
|
61
61
|
const availableColumns = props.availableColumns ?? [];
|
|
62
62
|
|
|
63
|
-
const { maxFilters = 10, showFilterCount = true, compact
|
|
63
|
+
const { maxFilters = 10, showFilterCount = true, compact } = props;
|
|
64
64
|
|
|
65
65
|
const [builderOpen, setBuilderOpen] = useState(false);
|
|
66
66
|
const [editingId, setEditingId] = useState<string | null>(null);
|
|
67
|
-
const { knobProps } = useResolvedKnobs({ compact });
|
|
67
|
+
const { knobProps } = useResolvedKnobs(compact === undefined ? undefined : { compact });
|
|
68
68
|
|
|
69
69
|
const canAddMoreFilters = filters.length < maxFilters;
|
|
70
70
|
const editingFilter = editingId ? (filters.find((f) => f.id === editingId) ?? null) : null;
|
|
@@ -223,7 +223,7 @@ function FilterBuilder({
|
|
|
223
223
|
|
|
224
224
|
return (
|
|
225
225
|
<YStack {...knobProps.panelPadding} gap="$3" minWidth={280} maxWidth={360}>
|
|
226
|
-
<Text fontSize="$3" fontWeight="
|
|
226
|
+
<Text fontSize="$3" fontWeight="400" color="$color12">
|
|
227
227
|
{editingFilter ? t("Edit filter") : t("Add filter")}
|
|
228
228
|
</Text>
|
|
229
229
|
|
|
@@ -18,7 +18,6 @@ import {
|
|
|
18
18
|
formatNumber,
|
|
19
19
|
getGroupPosition,
|
|
20
20
|
hairline,
|
|
21
|
-
sizeRecipeForToken,
|
|
22
21
|
stackEdgeRadius,
|
|
23
22
|
stackRadiusProps,
|
|
24
23
|
useResolvedKnobs,
|
|
@@ -28,6 +27,7 @@ import { useCallback, useMemo, useState } from "react";
|
|
|
28
27
|
import { Button, Select } from "@multiplatform.one/forms";
|
|
29
28
|
import { Popover, Separator, Text, View, XStack, YStack, isWeb } from "tamagui";
|
|
30
29
|
import { getViewLeafRows } from "../../utils/viewData";
|
|
30
|
+
import { iconSizeForToken } from "../../utils/chromeIcons";
|
|
31
31
|
import { useDataTableState } from "../DataTable/DataTableStateContext";
|
|
32
32
|
|
|
33
33
|
export type AggregationFunction = "count" | "sum" | "avg" | "min" | "max" | "custom";
|
|
@@ -111,15 +111,18 @@ const groupMetaSizeMap: Record<string, string> = {
|
|
|
111
111
|
|
|
112
112
|
// Chevron/tree glyphs are control-internal icons (LC-75/LC-79): the
|
|
113
113
|
// generated recipe's icon channel (lossless vs the old $3/$4/$5 map).
|
|
114
|
-
const groupIconSize = (token: string): number =>
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
?
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
114
|
+
const groupIconSize = (token: string): number => iconSizeForToken(token);
|
|
115
|
+
|
|
116
|
+
function groupStartRail(borderWidth: number) {
|
|
117
|
+
const width = borderWidth === 0 ? 0 : borderWidth * 4;
|
|
118
|
+
return isWeb
|
|
119
|
+
? {
|
|
120
|
+
borderInlineStartWidth: width,
|
|
121
|
+
borderInlineStartStyle: "solid" as const,
|
|
122
|
+
borderInlineStartColor: "$color6",
|
|
123
|
+
}
|
|
124
|
+
: { borderStartWidth: width, borderStartColor: "$color6" };
|
|
125
|
+
}
|
|
123
126
|
|
|
124
127
|
function groupIndent(space: string | undefined, level: number): number {
|
|
125
128
|
return (groupIndentStepMap[space ?? "medium"] ?? 16) * Math.max(0, level);
|
|
@@ -390,7 +393,7 @@ function GroupHeader<T = any>({
|
|
|
390
393
|
return (
|
|
391
394
|
<XStack
|
|
392
395
|
{...corners}
|
|
393
|
-
{...
|
|
396
|
+
{...groupStartRail(Number(knobProps.borderRadius.borderWidth) || 0)}
|
|
394
397
|
alignItems="center"
|
|
395
398
|
gap="$2"
|
|
396
399
|
minHeight={44}
|
|
@@ -428,7 +431,7 @@ function GroupHeader<T = any>({
|
|
|
428
431
|
|
|
429
432
|
<XStack flex={1} alignItems="center" justifyContent="space-between" gap="$3" flexWrap="wrap">
|
|
430
433
|
<XStack alignItems="center" gap="$2" flexShrink={1} minWidth={0}>
|
|
431
|
-
<Text
|
|
434
|
+
<Text {...knobProps.label} fontWeight="400" numberOfLines={1}>
|
|
432
435
|
{label}
|
|
433
436
|
</Text>
|
|
434
437
|
<Text fontSize={metaSize} color="$color10">
|
|
@@ -443,7 +446,7 @@ function GroupHeader<T = any>({
|
|
|
443
446
|
<Text fontSize={metaSize} color="$color10">
|
|
444
447
|
{`${agg.label || `${agg.function}(${agg.column})`}:`}
|
|
445
448
|
</Text>
|
|
446
|
-
<Text
|
|
449
|
+
<Text {...knobProps.label} fontWeight="400">
|
|
447
450
|
{formatAggregateValue(group.aggregations[agg.column]?.[agg.function], agg)}
|
|
448
451
|
</Text>
|
|
449
452
|
</XStack>
|
|
@@ -470,6 +473,7 @@ function GroupItems<T = any>({ items, columns = [], level, stackEnd }: GroupItem
|
|
|
470
473
|
const { knobProps } = useResolvedKnobs();
|
|
471
474
|
const metaSize = groupMetaSizeMap[knobProps.sizeToken] ?? "$3";
|
|
472
475
|
const indent = groupIndent(knobProps.space, level);
|
|
476
|
+
const iconSize = groupIconSize(String(knobProps.sizeToken));
|
|
473
477
|
return (
|
|
474
478
|
<YStack>
|
|
475
479
|
{items.map((item, index) => {
|
|
@@ -485,7 +489,7 @@ function GroupItems<T = any>({ items, columns = [], level, stackEnd }: GroupItem
|
|
|
485
489
|
<XStack
|
|
486
490
|
{...corners}
|
|
487
491
|
padding={groupItemPaddingMap[knobProps.space] ?? "$2"}
|
|
488
|
-
paddingInlineStart={indent +
|
|
492
|
+
paddingInlineStart={indent + iconSize}
|
|
489
493
|
overflow="hidden"
|
|
490
494
|
backgroundColor={index % 2 === 0 ? "$background" : "$color2"}
|
|
491
495
|
hoverStyle={{ backgroundColor: "$backgroundHover", ...corners }}
|
|
@@ -650,7 +654,7 @@ export function DataTableGroupingConfig<T = any>(props: DataTableGroupingConfigP
|
|
|
650
654
|
minWidth={20}
|
|
651
655
|
alignItems="center"
|
|
652
656
|
>
|
|
653
|
-
<Text
|
|
657
|
+
<Text {...knobProps.label} fontWeight="400" color="$color12">
|
|
654
658
|
{currentConfig.columns.length + currentConfig.aggregations.length}
|
|
655
659
|
</Text>
|
|
656
660
|
</View>
|
|
@@ -660,9 +664,7 @@ export function DataTableGroupingConfig<T = any>(props: DataTableGroupingConfigP
|
|
|
660
664
|
</Popover.Trigger>
|
|
661
665
|
|
|
662
666
|
<Popover.Content
|
|
663
|
-
{...knobProps.
|
|
664
|
-
borderWidth={1}
|
|
665
|
-
borderColor="$borderColor"
|
|
667
|
+
{...knobProps.elevatedSurface}
|
|
666
668
|
// LC-24: enter/exit styles are dead code without a resolved token
|
|
667
669
|
transition={knobProps.transition}
|
|
668
670
|
enterStyle={{ x: 0, y: -10, opacity: 0 }}
|
|
@@ -674,14 +676,14 @@ export function DataTableGroupingConfig<T = any>(props: DataTableGroupingConfigP
|
|
|
674
676
|
>
|
|
675
677
|
<Popover.ScrollView minHeight={0}>
|
|
676
678
|
<YStack {...knobProps.panelPadding} gap="$4">
|
|
677
|
-
<Text
|
|
679
|
+
<Text {...knobProps.label} fontWeight="400">
|
|
678
680
|
Grouping & Aggregation
|
|
679
681
|
</Text>
|
|
680
682
|
|
|
681
683
|
{/* Group By Section */}
|
|
682
684
|
<YStack gap="$3">
|
|
683
685
|
<XStack justifyContent="space-between" alignItems="center">
|
|
684
|
-
<Text
|
|
686
|
+
<Text {...knobProps.label} fontWeight="400">
|
|
685
687
|
Group By
|
|
686
688
|
</Text>
|
|
687
689
|
<Text fontSize="$2" color="$color10">
|
|
@@ -713,7 +715,7 @@ export function DataTableGroupingConfig<T = any>(props: DataTableGroupingConfigP
|
|
|
713
715
|
{`${label} · ${index + 1}`}
|
|
714
716
|
</Text>
|
|
715
717
|
<Button
|
|
716
|
-
size=
|
|
718
|
+
size={knobProps.sizeToken}
|
|
717
719
|
variant="outlined"
|
|
718
720
|
icon={<ArrowUpIcon size={iconSize} />}
|
|
719
721
|
disabled={disabled || index === 0}
|
|
@@ -721,7 +723,7 @@ export function DataTableGroupingConfig<T = any>(props: DataTableGroupingConfigP
|
|
|
721
723
|
aria-label={`Move ${label} up`}
|
|
722
724
|
/>
|
|
723
725
|
<Button
|
|
724
|
-
size=
|
|
726
|
+
size={knobProps.sizeToken}
|
|
725
727
|
variant="outlined"
|
|
726
728
|
icon={<ArrowDownIcon size={iconSize} />}
|
|
727
729
|
disabled={disabled || index === currentConfig.columns.length - 1}
|
|
@@ -729,7 +731,7 @@ export function DataTableGroupingConfig<T = any>(props: DataTableGroupingConfigP
|
|
|
729
731
|
aria-label={`Move ${label} down`}
|
|
730
732
|
/>
|
|
731
733
|
<Button
|
|
732
|
-
size=
|
|
734
|
+
size={knobProps.sizeToken}
|
|
733
735
|
variant="outlined"
|
|
734
736
|
icon={<MinusIcon size={iconSize} />}
|
|
735
737
|
disabled={disabled}
|
|
@@ -753,7 +755,7 @@ export function DataTableGroupingConfig<T = any>(props: DataTableGroupingConfigP
|
|
|
753
755
|
return (
|
|
754
756
|
<Button
|
|
755
757
|
key={key}
|
|
756
|
-
size=
|
|
758
|
+
size={knobProps.sizeToken}
|
|
757
759
|
variant="outlined"
|
|
758
760
|
onPress={() => handleAddGroupBy(key)}
|
|
759
761
|
>
|
|
@@ -770,7 +772,7 @@ export function DataTableGroupingConfig<T = any>(props: DataTableGroupingConfigP
|
|
|
770
772
|
{/* Aggregation Section */}
|
|
771
773
|
<YStack gap="$3">
|
|
772
774
|
<XStack justifyContent="space-between" alignItems="center">
|
|
773
|
-
<Text
|
|
775
|
+
<Text {...knobProps.label} fontWeight="400">
|
|
774
776
|
Aggregations
|
|
775
777
|
</Text>
|
|
776
778
|
<Text fontSize="$2" color="$color10">
|
|
@@ -800,7 +802,7 @@ export function DataTableGroupingConfig<T = any>(props: DataTableGroupingConfigP
|
|
|
800
802
|
{agg.function}({agg.column}){agg.label && ` as "${agg.label}"`}
|
|
801
803
|
</Text>
|
|
802
804
|
<Button
|
|
803
|
-
size=
|
|
805
|
+
size={knobProps.sizeToken}
|
|
804
806
|
variant="outlined"
|
|
805
807
|
icon={<MinusIcon size={iconSize} />}
|
|
806
808
|
disabled={disabled}
|
|
@@ -855,6 +857,8 @@ interface AggregationSelectorProps<_T = any> {
|
|
|
855
857
|
}
|
|
856
858
|
|
|
857
859
|
function AggregationSelector<T = any>({ columns, onAddAggregation }: AggregationSelectorProps<T>) {
|
|
860
|
+
const { knobProps } = useResolvedKnobs();
|
|
861
|
+
const iconPx = groupIconSize(String(knobProps.sizeToken));
|
|
858
862
|
const [selectedColumn, setSelectedColumn] = useState<string>("");
|
|
859
863
|
const [selectedFunction, setSelectedFunction] = useState<AggregationFunction>("count");
|
|
860
864
|
|
|
@@ -863,11 +867,11 @@ function AggregationSelector<T = any>({ columns, onAddAggregation }: Aggregation
|
|
|
863
867
|
label: string;
|
|
864
868
|
icon: React.ReactNode;
|
|
865
869
|
}> = [
|
|
866
|
-
{ value: "count", label: "Count", icon: <HashIcon size={
|
|
867
|
-
{ value: "sum", label: "Sum", icon: <PlusIcon size={
|
|
868
|
-
{ value: "avg", label: "Average", icon: <CalculatorIcon size={
|
|
869
|
-
{ value: "min", label: "Minimum", icon: <MinusIcon size={
|
|
870
|
-
{ value: "max", label: "Maximum", icon: <CaretUpIcon size={
|
|
870
|
+
{ value: "count", label: "Count", icon: <HashIcon size={iconPx} /> },
|
|
871
|
+
{ value: "sum", label: "Sum", icon: <PlusIcon size={iconPx} /> },
|
|
872
|
+
{ value: "avg", label: "Average", icon: <CalculatorIcon size={iconPx} /> },
|
|
873
|
+
{ value: "min", label: "Minimum", icon: <MinusIcon size={iconPx} /> },
|
|
874
|
+
{ value: "max", label: "Maximum", icon: <CaretUpIcon size={iconPx} /> },
|
|
871
875
|
];
|
|
872
876
|
|
|
873
877
|
// Convert columns to forms Select options
|
|
@@ -910,7 +914,7 @@ function AggregationSelector<T = any>({ columns, onAddAggregation }: Aggregation
|
|
|
910
914
|
|
|
911
915
|
return (
|
|
912
916
|
<YStack gap="$2">
|
|
913
|
-
<Text
|
|
917
|
+
<Text {...knobProps.label} fontWeight="400">
|
|
914
918
|
Add Aggregation
|
|
915
919
|
</Text>
|
|
916
920
|
|
|
@@ -925,7 +929,6 @@ function AggregationSelector<T = any>({ columns, onAddAggregation }: Aggregation
|
|
|
925
929
|
}}
|
|
926
930
|
options={columnOptions}
|
|
927
931
|
placeholder="Select column..."
|
|
928
|
-
compact
|
|
929
932
|
aria-label="Aggregation column"
|
|
930
933
|
/>
|
|
931
934
|
</View>
|
|
@@ -939,12 +942,16 @@ function AggregationSelector<T = any>({ columns, onAddAggregation }: Aggregation
|
|
|
939
942
|
}
|
|
940
943
|
}}
|
|
941
944
|
options={functionOptions}
|
|
942
|
-
compact
|
|
943
945
|
aria-label="Aggregation function"
|
|
944
946
|
/>
|
|
945
947
|
</View>
|
|
946
948
|
|
|
947
|
-
<Button
|
|
949
|
+
<Button
|
|
950
|
+
size={knobProps.sizeToken}
|
|
951
|
+
variant="outlined"
|
|
952
|
+
disabled={!selectedColumn}
|
|
953
|
+
onPress={handleAdd}
|
|
954
|
+
>
|
|
948
955
|
Add
|
|
949
956
|
</Button>
|
|
950
957
|
</XStack>
|
|
@@ -78,11 +78,11 @@ export function DataTablePagination(props: DataTablePaginationProps) {
|
|
|
78
78
|
showPageSizeSelector = true,
|
|
79
79
|
showPageJump = true,
|
|
80
80
|
showPagerWhenSinglePage = false,
|
|
81
|
-
compact
|
|
81
|
+
compact,
|
|
82
82
|
} = props;
|
|
83
83
|
|
|
84
84
|
const { sm } = useMedia();
|
|
85
|
-
const { knobProps } = useResolvedKnobs();
|
|
85
|
+
const { knobProps } = useResolvedKnobs(compact === undefined ? undefined : { compact });
|
|
86
86
|
const isMobile = !sm;
|
|
87
87
|
// LC-71: mount the composite-boundary ring sheet before Select/Input paint.
|
|
88
88
|
ensureCompositeFocusRing();
|
|
@@ -266,12 +266,12 @@ function SearchOptionsPopover({
|
|
|
266
266
|
<PopoverContent padding={0} overflow="hidden" alignItems="stretch" minWidth={280}>
|
|
267
267
|
<ScrollView flexShrink={1} maxHeight={panelMaxHeight}>
|
|
268
268
|
<YStack {...knobProps.panelPadding} {...knobProps.gapLg}>
|
|
269
|
-
<Text {...knobProps.heading} {...knobProps.label} fontWeight="
|
|
269
|
+
<Text {...knobProps.heading} {...knobProps.label} fontWeight="400">
|
|
270
270
|
{t("Search Options")}
|
|
271
271
|
</Text>
|
|
272
272
|
|
|
273
273
|
<YStack {...knobProps.gap}>
|
|
274
|
-
<Text {...knobProps.label} fontWeight="
|
|
274
|
+
<Text {...knobProps.label} fontWeight="400">
|
|
275
275
|
{t("Search Settings")}
|
|
276
276
|
</Text>
|
|
277
277
|
|
|
@@ -312,7 +312,7 @@ function SearchOptionsPopover({
|
|
|
312
312
|
|
|
313
313
|
<YStack {...knobProps.gap}>
|
|
314
314
|
<XStack justifyContent="space-between" alignItems="center">
|
|
315
|
-
<Text {...knobProps.label} fontWeight="
|
|
315
|
+
<Text {...knobProps.label} fontWeight="400">
|
|
316
316
|
{t("Search Columns")}
|
|
317
317
|
</Text>
|
|
318
318
|
<Text {...knobProps.label} color={formCommonColors.muted}>
|
|
@@ -45,6 +45,26 @@ describe("DataTableToolbar", () => {
|
|
|
45
45
|
expect(container).toBeDefined();
|
|
46
46
|
});
|
|
47
47
|
|
|
48
|
+
it("exposes role=toolbar with an accessible name", () => {
|
|
49
|
+
const { getByRole } = renderWithProviders(<DataTableToolbar {...defaultProps} />);
|
|
50
|
+
|
|
51
|
+
expect(getByRole("toolbar", { name: "Table toolbar" })).toBeDefined();
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it("does not mount export chrome unless enableExport is set", () => {
|
|
55
|
+
const { queryByRole } = renderWithProviders(<DataTableToolbar {...defaultProps} />);
|
|
56
|
+
|
|
57
|
+
expect(queryByRole("button", { name: /Export as CSV/i })).toBeNull();
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it("mounts DataTableExport when enableExport is true", () => {
|
|
61
|
+
const { getByRole } = renderWithProviders(
|
|
62
|
+
<DataTableToolbar {...defaultProps} enableExport />,
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
expect(getByRole("button", { name: /Export as CSV/i })).toBeDefined();
|
|
66
|
+
});
|
|
67
|
+
|
|
48
68
|
it("should render search input when enableGlobalSearch is true", () => {
|
|
49
69
|
const { getByRole } = renderWithProviders(
|
|
50
70
|
<DataTableToolbar {...defaultProps} enableGlobalSearch={true} />,
|
|
@@ -72,15 +72,7 @@ const MainStory = () => {
|
|
|
72
72
|
enableViews
|
|
73
73
|
initialState={{ pagination: { pageIndex: 1, pageSize: 3 } }}
|
|
74
74
|
renderToolbar={(props) => (
|
|
75
|
-
<DataTableToolbar
|
|
76
|
-
{...props}
|
|
77
|
-
enableViews
|
|
78
|
-
customActions={
|
|
79
|
-
<Button size="$2" variant="outlined" onPress={() => action("export-csv")()}>
|
|
80
|
-
Export CSV
|
|
81
|
-
</Button>
|
|
82
|
-
}
|
|
83
|
-
/>
|
|
75
|
+
<DataTableToolbar {...props} enableViews enableExport />
|
|
84
76
|
)}
|
|
85
77
|
aria-label="Employee table with toolbar"
|
|
86
78
|
/>
|