@dxos/react-ui-table 0.4.7 → 0.4.8-main.00e6f19

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.
Files changed (29) hide show
  1. package/dist/lib/browser/index.mjs +70 -54
  2. package/dist/lib/browser/index.mjs.map +3 -3
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/types/src/components/Cell/Cell.d.ts.map +1 -1
  5. package/dist/types/src/components/Cell/CellCombobox.d.ts +0 -1
  6. package/dist/types/src/components/Cell/CellCombobox.d.ts.map +1 -1
  7. package/dist/types/src/components/ColumnMenu.d.ts +0 -1
  8. package/dist/types/src/components/ColumnMenu.d.ts.map +1 -1
  9. package/dist/types/src/components/ColumnMenu.stories.d.ts +0 -1
  10. package/dist/types/src/components/ColumnMenu.stories.d.ts.map +1 -1
  11. package/dist/types/src/components/Table/Table.d.ts +2 -1
  12. package/dist/types/src/components/Table/Table.d.ts.map +1 -1
  13. package/dist/types/src/components/Table/Table.stories.d.ts +0 -1
  14. package/dist/types/src/components/Table/Table.stories.d.ts.map +1 -1
  15. package/dist/types/src/components/Table/TableBody.d.ts +0 -1
  16. package/dist/types/src/components/Table/TableBody.d.ts.map +1 -1
  17. package/dist/types/src/components/Table/TableFooter.d.ts +0 -1
  18. package/dist/types/src/components/Table/TableFooter.d.ts.map +1 -1
  19. package/dist/types/src/components/Table/TableHead.d.ts +0 -1
  20. package/dist/types/src/components/Table/TableHead.d.ts.map +1 -1
  21. package/dist/types/src/helpers.d.ts.map +1 -1
  22. package/dist/types/src/theme.d.ts +1 -1
  23. package/dist/types/src/theme.d.ts.map +1 -1
  24. package/package.json +14 -14
  25. package/src/components/Cell/Cell.tsx +4 -1
  26. package/src/components/Table/Table.stories.tsx +53 -64
  27. package/src/components/Table/Table.tsx +35 -36
  28. package/src/helpers.tsx +50 -42
  29. package/src/theme.ts +3 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CellCombobox.d.ts","sourceRoot":"","sources":["../../../../../src/components/Cell/CellCombobox.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAOrD,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAG1D,MAAM,MAAM,iBAAiB,CAAC,KAAK,SAAS,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC,CAAC;AAStG,eAAO,MAAM,YAAY;;;qCAOU,IAAI;iBAuEtC,CAAC"}
1
+ {"version":3,"file":"CellCombobox.d.ts","sourceRoot":"","sources":["../../../../../src/components/Cell/CellCombobox.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAOrD,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAG1D,MAAM,MAAM,iBAAiB,CAAC,KAAK,SAAS,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC,CAAC;AAStG,eAAO,MAAM,YAAY;;;qCAOU,IAAI;iBAuEtC,CAAC"}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { type HeaderContext, type RowData } from '@tanstack/react-table';
3
2
  import { type TableDef, type ColumnProps } from '../schema';
4
3
  export type ColumnMenuProps<TData extends RowData, TValue> = {
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnMenu.d.ts","sourceRoot":"","sources":["../../../../src/components/ColumnMenu.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAOzE,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAmB,MAAM,WAAW,CAAC;AAG7E,MAAM,MAAM,eAAe,CAAC,KAAK,SAAS,OAAO,EAAE,MAAM,IAAI;IAC3D,OAAO,EAAE,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACtC,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACrD,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,UAAU,sGAYtB,CAAC;AAQF,eAAO,MAAM,WAAW,+IAkMvB,CAAC"}
1
+ {"version":3,"file":"ColumnMenu.d.ts","sourceRoot":"","sources":["../../../../src/components/ColumnMenu.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAOzE,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAmB,MAAM,WAAW,CAAC;AAG7E,MAAM,MAAM,eAAe,CAAC,KAAK,SAAS,OAAO,EAAE,MAAM,IAAI;IAC3D,OAAO,EAAE,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACtC,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACrD,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,UAAU,sGAYtB,CAAC;AAQF,eAAO,MAAM,WAAW,+IAkMvB,CAAC"}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import '@dxosTheme';
3
2
  import { type ColumnProps } from '../schema';
4
3
  declare const _default: {
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnMenu.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/ColumnMenu.stories.tsx"],"names":[],"mappings":";AAIA,OAAO,YAAY,CAAC;AAOpB,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;;;;;;AAE7C,wBAIE;AAEF,eAAO,MAAM,OAAO;;;;yBAQR,GAAG;;;;CAWd,CAAC"}
1
+ {"version":3,"file":"ColumnMenu.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/ColumnMenu.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,YAAY,CAAC;AAOpB,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;;;;;;AAE7C,wBAIE;AAEF,eAAO,MAAM,OAAO;;;;yBAQR,GAAG;;;;CAWd,CAAC"}
@@ -1,4 +1,5 @@
1
- /// <reference types="react" />
1
+ import { type VirtualizerOptions } from '@tanstack/react-virtual';
2
2
  import { type TableProps } from './props';
3
3
  export declare const Table: <TData extends unknown>(props: TableProps<TData>) => JSX.Element;
4
+ export declare const MemoizedVirtualisedTableContent: ({ getScrollElement, }: Pick<VirtualizerOptions<Element, Element>, 'getScrollElement'>) => JSX.Element;
4
5
  //# sourceMappingURL=Table.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/Table.tsx"],"names":[],"mappings":";AAyBA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,eAAO,MAAM,KAAK,kEAgJjB,CAAC"}
1
+ {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/Table.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAWlF,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,eAAO,MAAM,KAAK,kEAoIjB,CAAC;AA0FF,eAAO,MAAM,+BAA+B,0BAzCzC,KAAK,mBAAmB,OAAO,EAAE,OAAO,CAAC,EAAE,kBAAkB,CAAC,gBAyCmD,CAAC"}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import '@dxosTheme';
3
2
  import { PublicKey } from '@dxos/keys';
4
3
  import { type TableColumnDef } from '../../types';
@@ -1 +1 @@
1
- {"version":3,"file":"Table.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/Table.stories.tsx"],"names":[],"mappings":";AAIA,OAAO,YAAY,CAAC;AAMpB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQvC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAKlD,KAAK,IAAI,GAAG;IACV,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;;;;;;4BAwGsB,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAL5B,wBAkDE;AAEF,eAAO,MAAM,OAAO;;;;;CAKnB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;CAKrB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;;;CAMtB,CAAC;AAEF,eAAO,MAAM,KAAK;;;;CAIjB,CAAC;AAEF,eAAO,MAAM,OAAO;;CAgCnB,CAAC;AAEF,eAAO,MAAM,QAAQ;;CAwBpB,CAAC;AAEF,eAAO,MAAM,SAAS;;CAuBrB,CAAC;AAEF,eAAO,MAAM,eAAe;;CAyB3B,CAAC"}
1
+ {"version":3,"file":"Table.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/Table.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,YAAY,CAAC;AAMpB,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQvC,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAKlD,KAAK,IAAI,GAAG;IACV,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;;;;;;4BA4FsB,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAL5B,wBAuCE;AAEF,eAAO,MAAM,OAAO;;;;;CAKnB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;CAKrB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;;;CAMtB,CAAC;AAEF,eAAO,MAAM,KAAK;;;;CAIjB,CAAC;AAEF,eAAO,MAAM,OAAO;;CAmCnB,CAAC;AAEF,eAAO,MAAM,QAAQ;;CA4BpB,CAAC;AAEF,eAAO,MAAM,SAAS;;CAyBrB,CAAC;AAEF,eAAO,MAAM,eAAe;;CA4B3B,CAAC"}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { type Row, type RowData } from '@tanstack/react-table';
3
2
  type TableBodyProps<TData extends RowData> = {
4
3
  rows: Row<TData>[];
@@ -1 +1 @@
1
- {"version":3,"file":"TableBody.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/TableBody.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAc,KAAK,GAAG,EAAE,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAS3E,KAAK,cAAc,CAAC,KAAK,SAAS,OAAO,IAAI;IAC3C,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;CACpB,CAAC;AAEF,QAAA,MAAM,SAAS;;;CA8Cd,CAAC;AAIF,OAAO,EAAE,SAAS,EAAE,CAAC;AAErB,YAAY,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"TableBody.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/TableBody.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAc,KAAK,GAAG,EAAE,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAS3E,KAAK,cAAc,CAAC,KAAK,SAAS,OAAO,IAAI;IAC3C,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;CACpB,CAAC;AAEF,QAAA,MAAM,SAAS;;;CA8Cd,CAAC;AAIF,OAAO,EAAE,SAAS,EAAE,CAAC;AAErB,YAAY,EAAE,cAAc,EAAE,CAAC"}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  type TableFooterProps = {};
3
2
  declare const TableFooter: {
4
3
  <TData extends unknown>(props: TableFooterProps): JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"TableFooter.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/TableFooter.tsx"],"names":[],"mappings":";AAUA,KAAK,gBAAgB,GAAG,EAAE,CAAC;AAI3B,QAAA,MAAM,WAAW;mCAAkC,gBAAgB;;CAwBlE,CAAC;AAIF,OAAO,EAAE,WAAW,EAAE,CAAC;AAEvB,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"TableFooter.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/TableFooter.tsx"],"names":[],"mappings":"AAUA,KAAK,gBAAgB,GAAG,EAAE,CAAC;AAI3B,QAAA,MAAM,WAAW;mCAAkC,gBAAgB;;CAwBlE,CAAC;AAIF,OAAO,EAAE,WAAW,EAAE,CAAC;AAEvB,YAAY,EAAE,gBAAgB,EAAE,CAAC"}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  type TableHeadProps = {};
3
2
  declare const TableHead: {
4
3
  <TData extends unknown>(_props: TableHeadProps): JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"TableHead.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/TableHead.tsx"],"names":[],"mappings":";AAcA,KAAK,cAAc,GAAG,EAAE,CAAC;AAEzB,QAAA,MAAM,SAAS;oCAAmC,cAAc;;CA0D/D,CAAC;AAIF,OAAO,EAAE,SAAS,EAAE,CAAC;AAErB,YAAY,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"TableHead.d.ts","sourceRoot":"","sources":["../../../../../src/components/Table/TableHead.tsx"],"names":[],"mappings":"AAcA,KAAK,cAAc,GAAG,EAAE,CAAC;AAEzB,QAAA,MAAM,SAAS;oCAAmC,cAAc;;CA0D/D,CAAC;AAIF,OAAO,EAAE,SAAS,EAAE,CAAC;AAErB,YAAY,EAAE,cAAc,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/helpers.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/helpers.tsx"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ export declare const selectedRow = "!bg-primary-100 dark:!bg-primary-700";
6
6
  export declare const flushPadding = "pli-0 plb-0";
7
7
  export declare const textPadding = "pli-2 plb-0.5";
8
8
  export declare const headPadding = "pli-2 plb-1.5";
9
- export declare const gridCellFocusRing = "focus:z-[11] focus:outline outline-2 outline-primary-500 dark:outline-primary-400";
9
+ export declare const gridCellFocusRing = "focus-within:z-[11] focus-within:outline outline-2 outline-primary-500 dark:outline-primary-400";
10
10
  export type TableStyleProps = Partial<TableContextValue<any>>;
11
11
  export declare const tableRoot: ComponentFunction<TableStyleProps>;
12
12
  export declare const groupTh: ComponentFunction<TableStyleProps>;
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/theme.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAWzD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAEvE,eAAO,MAAM,UAAU,wCAAwC,CAAC;AAChE,eAAO,MAAM,WAAW,yCAAyC,CAAC;AAClE,eAAO,MAAM,YAAY,gBAAgB,CAAC;AAC1C,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAC3C,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAE3C,eAAO,MAAM,iBAAiB,sFAAsF,CAAC;AAMrH,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AAE9D,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,eAAe,CACN,CAAC;AAEpD,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CACH,CAAC;AAMrD,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAElD,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,eAAe,CAC4D,CAAC;AAEtH,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAA2C,CAAC;AAEnG,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAOpD,CAAC;AAEJ,eAAO,MAAM,eAAe,EAAE,iBAAiB,CAAC,eAAe,CAI5D,CAAC;AAEJ,eAAO,MAAM,gBAAgB,EAAE,iBAAiB,CAAC,eAAe,CACQ,CAAC;AAMzE,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9D,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,eAAe,CAAkC,CAAC;AAE5F,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AACpE,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,iBAAiB,CAOtD,CAAC;AAMJ,eAAO,MAAM,MAAM,EAAE,iBAAiB,CAAC,eAAe,CACwD,CAAC;AAC/G,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAkC,CAAC;AAMlG,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AAE9D,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,eAAe,CACJ,CAAC;AAEtD,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAAkC,CAAC;AAE1F,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CACO,CAAC"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/theme.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAWzD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAEvE,eAAO,MAAM,UAAU,wCAAwC,CAAC;AAChE,eAAO,MAAM,WAAW,yCAAyC,CAAC;AAClE,eAAO,MAAM,YAAY,gBAAgB,CAAC;AAC1C,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAC3C,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAE3C,eAAO,MAAM,iBAAiB,oGACqE,CAAC;AAMpG,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AAE9D,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,eAAe,CACN,CAAC;AAEpD,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CACH,CAAC;AAMrD,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAElD,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,eAAe,CAC4D,CAAC;AAEtH,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAA2C,CAAC;AAEnG,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAOpD,CAAC;AAEJ,eAAO,MAAM,eAAe,EAAE,iBAAiB,CAAC,eAAe,CAI5D,CAAC;AAEJ,eAAO,MAAM,gBAAgB,EAAE,iBAAiB,CAAC,eAAe,CACQ,CAAC;AAMzE,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9D,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,eAAe,CAAkC,CAAC;AAE5F,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AACpE,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,iBAAiB,CAOtD,CAAC;AAMJ,eAAO,MAAM,MAAM,EAAE,iBAAiB,CAAC,eAAe,CACwD,CAAC;AAE/G,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAkC,CAAC;AAMlG,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;AAE9D,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,eAAe,CACJ,CAAC;AAEtD,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAAkC,CAAC;AAE1F,eAAO,MAAM,OAAO,EAAE,iBAAiB,CAAC,eAAe,CACO,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/react-ui-table",
3
- "version": "0.4.7",
3
+ "version": "0.4.8-main.00e6f19",
4
4
  "description": "A table component.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -22,28 +22,28 @@
22
22
  "@tanstack/react-table": "^8.9.3",
23
23
  "@tanstack/react-virtual": "^3.0.1",
24
24
  "date-fns": "^3.3.1",
25
- "@dxos/keys": "0.4.7",
26
- "@dxos/async": "0.4.7",
27
- "@dxos/log": "0.4.7",
28
- "@dxos/invariant": "0.4.7",
29
- "@dxos/react-ui-searchlist": "0.4.7",
30
- "@dxos/react-ui-theme": "0.4.7",
31
- "@dxos/react-ui": "0.4.7",
32
- "@dxos/util": "0.4.7",
33
- "@dxos/react-ui-types": "0.4.7"
25
+ "@dxos/async": "0.4.8-main.00e6f19",
26
+ "@dxos/invariant": "0.4.8-main.00e6f19",
27
+ "@dxos/log": "0.4.8-main.00e6f19",
28
+ "@dxos/react-ui": "0.4.8-main.00e6f19",
29
+ "@dxos/keys": "0.4.8-main.00e6f19",
30
+ "@dxos/react-ui-theme": "0.4.8-main.00e6f19",
31
+ "@dxos/react-ui-searchlist": "0.4.8-main.00e6f19",
32
+ "@dxos/react-ui-types": "0.4.8-main.00e6f19",
33
+ "@dxos/util": "0.4.8-main.00e6f19"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@phosphor-icons/react": "^2.0.5",
37
37
  "@types/react": "^18.0.21",
38
38
  "@types/react-dom": "^18.0.6",
39
- "deepsignal": "^1.5.0",
40
39
  "react": "^18.2.0",
41
40
  "react-dom": "^18.2.0",
42
41
  "vite": "^5.1.5",
43
42
  "vite-plugin-turbosnap": "^1.0.2",
44
- "@dxos/random": "0.4.7",
45
- "@dxos/react-ui-theme": "0.4.7",
46
- "@dxos/storybook-utils": "0.4.7"
43
+ "@dxos/echo-schema": "0.4.8-main.00e6f19",
44
+ "@dxos/storybook-utils": "0.4.8-main.00e6f19",
45
+ "@dxos/random": "0.4.8-main.00e6f19",
46
+ "@dxos/react-ui-theme": "0.4.8-main.00e6f19"
47
47
  },
48
48
  "peerDependencies": {
49
49
  "@phosphor-icons/react": "^2.0.5",
@@ -18,8 +18,11 @@ const CELL_NAME = 'Cell';
18
18
  const FocusableCell = <TData extends RowData, TValue>({ cell, children }: CellProps<TData, TValue>) => {
19
19
  const tableContext = useTableContext(CELL_NAME);
20
20
  const domAttributes = useFocusableGroup({ tabBehavior: 'limited' });
21
+
22
+ const className = tdRoot(tableContext, cell.column.columnDef.meta?.cell?.classNames);
23
+
21
24
  return (
22
- <td tabIndex={0} {...domAttributes} className={tdRoot(tableContext, cell.column.columnDef.meta?.cell?.classNames)}>
25
+ <td tabIndex={0} {...domAttributes} className={className}>
23
26
  {children}
24
27
  </td>
25
28
  );
@@ -5,12 +5,12 @@
5
5
  import '@dxosTheme';
6
6
 
7
7
  import { Plugs, PlugsConnected } from '@phosphor-icons/react';
8
- import { deepSignal } from 'deepsignal/react';
9
- import React, { useEffect, useRef, useState } from 'react';
8
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
10
9
 
10
+ import * as E from '@dxos/echo-schema/schema';
11
11
  import { PublicKey } from '@dxos/keys';
12
12
  import { faker } from '@dxos/random';
13
- import { DensityProvider, AnchoredOverflow } from '@dxos/react-ui';
13
+ import { AnchoredOverflow, DensityProvider } from '@dxos/react-ui';
14
14
  import { withTheme } from '@dxos/storybook-utils';
15
15
  import { range } from '@dxos/util';
16
16
 
@@ -35,7 +35,7 @@ faker.seed(911);
35
35
  const createItems = (count: number) =>
36
36
  range(count).map(
37
37
  () =>
38
- deepSignal<Item>({
38
+ E.object<Item>({
39
39
  publicKey: PublicKey.random(),
40
40
  name: faker.commerce.productName(),
41
41
  count: faker.datatype.boolean({ probability: 0.9 }) ? faker.number.int({ min: 0, max: 10_000 }) : undefined,
@@ -72,7 +72,7 @@ const tableStorySelectModel: SearchListQueryModel<Item> = {
72
72
 
73
73
  const { helper, builder } = createColumnBuilder<Item>();
74
74
 
75
- const columns = (onUpdate?: ValueUpdater<Item, any>): TableColumnDef<Item, any>[] => [
75
+ const makeColumns = (onUpdate?: ValueUpdater<Item, any>): TableColumnDef<Item, any>[] => [
76
76
  helper.display(builder.selectRow()),
77
77
  helper.accessor((item) => item.publicKey, { id: 'key', ...builder.key({ tooltip: true }) }),
78
78
  helper.accessor(
@@ -90,26 +90,14 @@ const columns = (onUpdate?: ValueUpdater<Item, any>): TableColumnDef<Item, any>[
90
90
  builder.number({
91
91
  label: 'Count',
92
92
  meta: { resizable: true },
93
- // TODO(burdon): Sorting.
94
- getGroupingValue: (row) => (row.count ? (row.count < 2_000 ? 'A' : row.count < 5_000 ? 'B' : 'C') : 'D'),
95
- }),
96
- ),
97
- helper.accessor(
98
- 'company',
99
- builder.combobox({
100
- label: 'Company',
101
- model: tableStorySelectModel,
102
93
  onUpdate,
94
+ getGroupingValue: (row) => (row.count ? (row.count < 2000 ? 'A' : row.count < 5000 ? 'B' : 'C') : 'D'),
103
95
  }),
104
96
  ),
97
+ helper.accessor('company', builder.combobox({ label: 'Company', model: tableStorySelectModel, onUpdate })),
105
98
  helper.accessor(
106
99
  'complete',
107
- builder.switch({
108
- // enableGrouping: true,
109
- getGroupingValue: (row) => row.complete === true,
110
- label: '',
111
- onUpdate,
112
- }),
100
+ builder.switch({ getGroupingValue: (row) => row.complete === true, label: '', onUpdate }),
113
101
  ),
114
102
  helper.accessor('complete', builder.icon({ id: 'done', label: '' })),
115
103
  helper.accessor(
@@ -135,18 +123,10 @@ export default {
135
123
  keyAccessor: (item: Item) => item.publicKey.toHex(),
136
124
  },
137
125
  argTypes: {
138
- header: {
139
- control: 'boolean',
140
- },
141
- footer: {
142
- control: 'boolean',
143
- },
144
- border: {
145
- control: 'boolean',
146
- },
147
- fullWidth: {
148
- control: 'boolean',
149
- },
126
+ header: { control: 'boolean' },
127
+ footer: { control: 'boolean' },
128
+ border: { control: 'boolean' },
129
+ fullWidth: { control: 'boolean' },
150
130
  grouping: {
151
131
  control: 'select',
152
132
  options: ['none', 'complete', 'count'],
@@ -164,10 +144,7 @@ export default {
164
144
  limited: { key: false, started: false },
165
145
  },
166
146
  },
167
- rowsSelectable: {
168
- control: 'select',
169
- options: [false, true, 'multi'],
170
- },
147
+ rowsSelectable: { control: 'select', options: [false, true, 'multi'] },
171
148
  },
172
149
  decorators: [
173
150
  withTheme,
@@ -181,21 +158,21 @@ export default {
181
158
 
182
159
  export const Default = {
183
160
  args: {
184
- columns: columns(),
161
+ columns: makeColumns(),
185
162
  data: createItems(20),
186
163
  },
187
164
  };
188
165
 
189
166
  export const Scrolling = {
190
167
  args: {
191
- columns: columns(),
168
+ columns: makeColumns(),
192
169
  data: createItems(200),
193
170
  },
194
171
  };
195
172
 
196
173
  export const Visibility = {
197
174
  args: {
198
- columns: columns(),
175
+ columns: makeColumns(),
199
176
  data: createItems(10),
200
177
  columnVisibility: { key: false, started: false },
201
178
  },
@@ -203,7 +180,7 @@ export const Visibility = {
203
180
 
204
181
  export const Empty = {
205
182
  args: {
206
- columns: columns(),
183
+ columns: makeColumns(),
207
184
  },
208
185
  };
209
186
 
@@ -211,6 +188,7 @@ export const Dynamic = {
211
188
  render: () => {
212
189
  const containerRef = useRef<HTMLDivElement | null>(null);
213
190
  const [items, setItems] = useState<Item[]>(createItems(50));
191
+
214
192
  useEffect(() => {
215
193
  const interval = setInterval(() => {
216
194
  setItems((items) => {
@@ -223,12 +201,14 @@ export const Dynamic = {
223
201
  return () => clearInterval(interval);
224
202
  }, []);
225
203
 
204
+ const columns = useMemo(() => makeColumns(), []);
205
+
226
206
  return (
227
207
  <AnchoredOverflow.Root classNames='max-bs-[80dvh]' ref={containerRef}>
228
208
  <Table<Item>
229
209
  rowsSelectable='multi'
230
210
  keyAccessor={(row) => row.publicKey.toHex()}
231
- columns={columns()}
211
+ columns={columns}
232
212
  data={items}
233
213
  fullWidth
234
214
  footer
@@ -245,9 +225,13 @@ export const Editable = {
245
225
  render: () => {
246
226
  const containerRef = useRef<HTMLDivElement | null>(null);
247
227
  const [items, setItems] = useState<Item[]>(createItems(200));
248
- const onUpdate: ValueUpdater<Item, any> = (item, prop, value) => {
249
- setItems((items) => updateItems(items, item.publicKey, prop, value));
250
- };
228
+
229
+ const onUpdate: ValueUpdater<Item, any> = useCallback(
230
+ (item, prop, value) => setItems((items) => updateItems(items, item.publicKey, prop, value)),
231
+ [setItems],
232
+ );
233
+
234
+ const columns = useMemo(() => makeColumns(onUpdate), [onUpdate]);
251
235
 
252
236
  return (
253
237
  <div ref={containerRef} className='fixed inset-0 overflow-auto'>
@@ -255,7 +239,7 @@ export const Editable = {
255
239
  role='grid'
256
240
  rowsSelectable='multi'
257
241
  keyAccessor={(row) => row.publicKey.toHex()}
258
- columns={columns(onUpdate)}
242
+ columns={columns}
259
243
  data={items}
260
244
  fullWidth
261
245
  stickyHeader
@@ -269,25 +253,27 @@ export const Editable = {
269
253
 
270
254
  export const Resizable = {
271
255
  render: () => {
256
+ const containerRef = useRef<HTMLDivElement | null>(null);
272
257
  const [items, setItems] = useState<Item[]>(createItems(10));
273
- const onUpdate: ValueUpdater<Item, any> = (item, prop, value) => {
274
- setItems((items) => updateItems(items, item.publicKey, prop, value));
275
- };
276
258
 
277
- // const handleColumnResize = (state) => {
278
- // console.log('resize', state);
279
- // };
259
+ const onUpdate: ValueUpdater<Item, any> = useCallback(
260
+ (item, prop, value) => setItems((items) => updateItems(items, item.publicKey, prop, value)),
261
+ [setItems],
262
+ );
280
263
 
281
264
  return (
282
- <Table<Item>
283
- rowsSelectable='multi'
284
- keyAccessor={(row) => row.publicKey.toHex()}
285
- columns={columns(onUpdate)}
286
- data={items}
287
- fullWidth
288
- stickyHeader
289
- // onColumnResize={handleColumnResize}
290
- />
265
+ <div ref={containerRef} className='fixed inset-0 overflow-auto'>
266
+ <Table<Item>
267
+ rowsSelectable='multi'
268
+ keyAccessor={(row) => row.publicKey.toHex()}
269
+ columns={makeColumns(onUpdate)}
270
+ data={items}
271
+ fullWidth
272
+ stickyHeader
273
+ getScrollElement={() => containerRef.current}
274
+ // onColumnResize={handleColumnResize}
275
+ />
276
+ </div>
291
277
  );
292
278
  },
293
279
  };
@@ -297,9 +283,12 @@ export const TenThousandRows = {
297
283
  const containerRef = useRef<HTMLDivElement | null>(null);
298
284
  const [items, setItems] = useState<Item[]>(createItems(10000));
299
285
 
300
- const onUpdate: ValueUpdater<Item, any> = (item, prop, value) => {
301
- setItems((items) => updateItems(items, item.publicKey, prop, value));
302
- };
286
+ const onUpdate: ValueUpdater<Item, any> = useCallback(
287
+ (item, prop, value) => setItems((items) => updateItems(items, item.publicKey, prop, value)),
288
+ [setItems],
289
+ );
290
+
291
+ const columns = useMemo(() => makeColumns(onUpdate), [onUpdate]);
303
292
 
304
293
  return (
305
294
  <div ref={containerRef} className='fixed inset-0 overflow-auto'>
@@ -307,7 +296,7 @@ export const TenThousandRows = {
307
296
  role='grid'
308
297
  rowsSelectable='multi'
309
298
  keyAccessor={(row) => row.publicKey.toHex()}
310
- columns={columns(onUpdate)}
299
+ columns={columns}
311
300
  data={items}
312
301
  fullWidth
313
302
  stickyHeader
@@ -18,6 +18,7 @@ import React, { Fragment, useCallback, useEffect, useState } from 'react';
18
18
 
19
19
  import { debounce } from '@dxos/async';
20
20
  import { log } from '@dxos/log';
21
+ import { useDefaultValue } from '@dxos/react-ui';
21
22
 
22
23
  import { TableBody } from './TableBody';
23
24
  import { TableProvider as UntypedTableProvider, type TypedTableProvider, useTableContext } from './TableContext';
@@ -29,8 +30,6 @@ import { groupTh, tableRoot } from '../../theme';
29
30
  export const Table = <TData extends RowData>(props: TableProps<TData>) => {
30
31
  const {
31
32
  role,
32
- data = [],
33
- columns = [],
34
33
  onColumnResize,
35
34
  columnVisibility,
36
35
  header = true,
@@ -40,16 +39,14 @@ export const Table = <TData extends RowData>(props: TableProps<TData>) => {
40
39
  getScrollElement,
41
40
  } = props;
42
41
 
43
- const TableProvider = UntypedTableProvider as TypedTableProvider<TData>;
42
+ const columns = useDefaultValue(props.columns, []);
43
+ const data = useDefaultValue(props.data, []);
44
44
 
45
- //
46
- // Column resizing
47
- //
45
+ const TableProvider = UntypedTableProvider as TypedTableProvider<TData>;
48
46
 
49
47
  const [columnSizing, setColumnSizing] = useState<ColumnSizingState>({});
50
48
 
51
49
  useEffect(() => {
52
- // Set initial state.
53
50
  setColumnSizing(
54
51
  columns
55
52
  .filter((column) => !!column.size && (column as any).prop !== undefined)
@@ -58,31 +55,16 @@ export const Table = <TData extends RowData>(props: TableProps<TData>) => {
58
55
  return state;
59
56
  }, {}),
60
57
  );
61
- }, [columns]);
58
+ }, [columns, setColumnSizing]);
62
59
 
63
60
  const [columnSizingInfo, setColumnSizingInfo] = useState<ColumnSizingInfoState>({} as ColumnSizingInfoState);
64
61
 
65
- const onColumnResizeDebounced = onColumnResize && debounce<ColumnSizingState>(onColumnResize, 1_000);
66
- useEffect(() => {
67
- if (columnSizingInfo.columnSizingStart?.length === 0) {
68
- onColumnResizeDebounced?.(table.getState().columnSizing);
69
- }
70
- }, [columnSizingInfo]);
71
-
72
- //
73
- // Row selection
74
- //
75
-
76
62
  const [rowSelection = {}, setRowSelection] = useControllableState({
77
63
  prop: props.rowSelection,
78
64
  onChange: props.onRowSelectionChange,
79
65
  defaultProp: props.defaultRowSelection,
80
66
  });
81
67
 
82
- useEffect(() => {
83
- onDataSelectionChange?.(Object.keys(rowSelection).map((id) => table.getRowModel().rowsById[id].original));
84
- }, [onDataSelectionChange, rowSelection]);
85
-
86
68
  // TODO(thure): Does @tanstack/react-table really need this intervention? It did seem necessary to enforce single-selection...
87
69
  const handleRowSelectionChange = useCallback<OnChangeFn<RowSelectionState>>(
88
70
  (updaterOrValue) => {
@@ -96,15 +78,11 @@ export const Table = <TData extends RowData>(props: TableProps<TData>) => {
96
78
  setRowSelection({});
97
79
  }
98
80
  },
99
- [rowSelection, setRowSelection],
81
+ [rowsSelectable, setRowSelection, rowSelection],
100
82
  );
101
83
 
102
- //
103
- // Row grouping
104
- //
105
-
106
84
  const [grouping, handleGroupingChange] = useState<GroupingState>(props.grouping ?? []);
107
- useEffect(() => handleGroupingChange(props.grouping ?? []), [props.grouping]);
85
+ useEffect(() => handleGroupingChange(props.grouping ?? []), [handleGroupingChange, props.grouping]);
108
86
 
109
87
  const table = useReactTable({
110
88
  // Data
@@ -140,18 +118,29 @@ export const Table = <TData extends RowData>(props: TableProps<TData>) => {
140
118
  getGroupedRowModel: grouping.length > 1 ? getGroupedRowModel() : undefined,
141
119
  onGroupingChange: handleGroupingChange,
142
120
 
143
- // Selection
144
- ...(rowsSelectable === 'multi'
145
- ? { enableMultiRowSelection: true }
146
- : rowsSelectable
147
- ? { enableRowSelection: true }
148
- : {}),
121
+ enableMultiRowSelection: rowsSelectable === 'multi' ? true : undefined,
122
+ enableRowSelection: rowsSelectable === true ? true : undefined,
123
+
149
124
  onRowSelectionChange: handleRowSelectionChange,
150
125
 
151
126
  // Debug
152
127
  debugTable: debug,
153
128
  });
154
129
 
130
+ const onColumnResizeDebounced = onColumnResize && debounce(onColumnResize, 1_000);
131
+
132
+ useEffect(() => {
133
+ onDataSelectionChange?.(Object.keys(rowSelection).map((id) => table.getRowModel().rowsById[id].original));
134
+ }, [onDataSelectionChange, rowSelection, table]);
135
+
136
+ useEffect(() => {
137
+ const shouldTriggerResize = columnSizingInfo.columnSizingStart?.length === 0;
138
+
139
+ if (shouldTriggerResize) {
140
+ onColumnResizeDebounced?.(table.getState().columnSizing);
141
+ }
142
+ }, [columnSizingInfo, onColumnResizeDebounced, table]);
143
+
155
144
  // Create additional expansion column if all columns have fixed width.
156
145
  const expand = false; // columns.map((column) => column.size).filter(Boolean).length === columns?.length;
157
146
 
@@ -188,6 +177,8 @@ const TableImpl = <TData extends RowData>(props: TableProps<TData>) => {
188
177
  );
189
178
  }
190
179
 
180
+ const isResizingColumn = table.getState().columnSizingInfo.isResizingColumn;
181
+
191
182
  return (
192
183
  <table
193
184
  role={role}
@@ -198,7 +189,11 @@ const TableImpl = <TData extends RowData>(props: TableProps<TData>) => {
198
189
 
199
190
  {grouping?.length !== 0 ? (
200
191
  getScrollElement ? (
201
- <VirtualizedTableContent getScrollElement={getScrollElement} />
192
+ isResizingColumn ? (
193
+ <MemoizedVirtualisedTableContent getScrollElement={getScrollElement} />
194
+ ) : (
195
+ <VirtualizedTableContent getScrollElement={getScrollElement} />
196
+ )
202
197
  ) : (
203
198
  <TableBody rows={rows} />
204
199
  )
@@ -217,6 +212,7 @@ const VirtualizedTableContent = ({
217
212
  const {
218
213
  table: { getRowModel },
219
214
  } = useTableContext('VirtualizedTableContent');
215
+
220
216
  const rows = getRowModel().rows;
221
217
 
222
218
  const { getTotalSize, getVirtualItems } = useVirtualizer({
@@ -225,6 +221,7 @@ const VirtualizedTableContent = ({
225
221
  overscan: 4,
226
222
  estimateSize: () => 33,
227
223
  });
224
+
228
225
  const virtualRows = getVirtualItems();
229
226
  const totalSize = getTotalSize();
230
227
 
@@ -252,6 +249,8 @@ const VirtualizedTableContent = ({
252
249
  );
253
250
  };
254
251
 
252
+ export const MemoizedVirtualisedTableContent = React.memo(VirtualizedTableContent) as typeof VirtualizedTableContent;
253
+
255
254
  const GroupedTableContent = () => {
256
255
  const {
257
256
  table: { getGroupedRowModel, getHeaderGroups, getState },