@12-apps/ui 6.39.1 → 6.39.2

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 (66) hide show
  1. package/dist/_internal/components/data-display/LazyImage/LazyImage.js +1 -1
  2. package/dist/_internal/components/data-display/Table/Table.helpers.js +10 -3
  3. package/dist/_internal/components/data-display/Table/Table.hooks.js +1 -1
  4. package/dist/_internal/components/data-display/Table/Table.js +4 -4
  5. package/dist/_internal/components/data-display/Table/TableParts.hooks.js +2 -3
  6. package/dist/_internal/components/data-display/Table/TableParts.js +2 -3
  7. package/dist/_internal/components/data-display/index.js +5 -5
  8. package/dist/_internal/components/index.js +9 -9
  9. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.helpers.js +15 -1
  10. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +17 -4
  11. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +15 -2
  12. package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +16 -3
  13. package/dist/_internal/components/utility/index.js +17 -4
  14. package/dist/{chunk-YZVR5ROE.js → chunk-5HQNHZ6Z.js} +12 -10
  15. package/dist/chunk-5HQNHZ6Z.js.map +1 -0
  16. package/dist/{chunk-3YOXVNO4.js → chunk-BOGTTXPA.js} +32 -30
  17. package/dist/chunk-BOGTTXPA.js.map +1 -0
  18. package/dist/{chunk-MC4KYGSX.js → chunk-GFQ4U6WZ.js} +3 -5
  19. package/dist/chunk-GFQ4U6WZ.js.map +1 -0
  20. package/dist/{chunk-5LWB4BYX.js → chunk-RGT6DM5W.js} +21 -47
  21. package/dist/chunk-RGT6DM5W.js.map +1 -0
  22. package/dist/{chunk-FF2D7V7T.js → chunk-SDK5LPPC.js} +13 -10
  23. package/dist/chunk-SDK5LPPC.js.map +1 -0
  24. package/dist/{chunk-SNURSSTN.js → chunk-VLOUXTEM.js} +3 -3
  25. package/dist/{chunk-V5KKBMAT.js → chunk-VXQOSADY.js} +6 -3
  26. package/dist/{chunk-V5KKBMAT.js.map → chunk-VXQOSADY.js.map} +1 -1
  27. package/dist/{chunk-BVLMKSHX.js → chunk-WDVNRW3Q.js} +2 -2
  28. package/dist/chunk-XS3REOPN.js +86 -0
  29. package/dist/chunk-XS3REOPN.js.map +1 -0
  30. package/dist/data-display/LazyImage.js +1 -1
  31. package/dist/data-display/Table.js +4 -4
  32. package/dist/types/components/data-display/LazyImage/LazyImage.d.ts.map +1 -1
  33. package/dist/types/components/data-display/LazyImage/LazyImage.types.d.ts +15 -3
  34. package/dist/types/components/data-display/LazyImage/LazyImage.types.d.ts.map +1 -1
  35. package/dist/types/components/data-display/Table/Table.d.ts.map +1 -1
  36. package/dist/types/components/data-display/Table/Table.helpers.d.ts +20 -0
  37. package/dist/types/components/data-display/Table/Table.helpers.d.ts.map +1 -1
  38. package/dist/types/components/data-display/Table/Table.hooks.d.ts +8 -11
  39. package/dist/types/components/data-display/Table/Table.hooks.d.ts.map +1 -1
  40. package/dist/types/components/data-display/Table/Table.types.d.ts +17 -2
  41. package/dist/types/components/data-display/Table/Table.types.d.ts.map +1 -1
  42. package/dist/types/components/data-display/Table/TableParts.d.ts.map +1 -1
  43. package/dist/types/components/utility/WorkflowStep/WorkflowStep.helpers.d.ts +6 -1
  44. package/dist/types/components/utility/WorkflowStep/WorkflowStep.helpers.d.ts.map +1 -1
  45. package/dist/types/components/utility/WorkflowStep/WorkflowStep.parts.d.ts.map +1 -1
  46. package/dist/utility/WorkflowStep.js +17 -4
  47. package/package.json +1 -1
  48. package/src/components/data-display/LazyImage/LazyImage.md +22 -15
  49. package/src/components/data-display/LazyImage/LazyImage.tsx +26 -9
  50. package/src/components/data-display/LazyImage/LazyImage.types.ts +15 -3
  51. package/src/components/data-display/Table/Table.helpers.ts +93 -0
  52. package/src/components/data-display/Table/Table.hooks.ts +20 -11
  53. package/src/components/data-display/Table/Table.tsx +34 -31
  54. package/src/components/data-display/Table/Table.types.ts +18 -2
  55. package/src/components/data-display/Table/TableParts.tsx +23 -52
  56. package/src/components/utility/WorkflowStep/WorkflowStep.helpers.ts +9 -3
  57. package/src/components/utility/WorkflowStep/WorkflowStep.parts.tsx +1 -5
  58. package/dist/chunk-3YOXVNO4.js.map +0 -1
  59. package/dist/chunk-5LWB4BYX.js.map +0 -1
  60. package/dist/chunk-FF2D7V7T.js.map +0 -1
  61. package/dist/chunk-JWZJSXI5.js +0 -29
  62. package/dist/chunk-JWZJSXI5.js.map +0 -1
  63. package/dist/chunk-MC4KYGSX.js.map +0 -1
  64. package/dist/chunk-YZVR5ROE.js.map +0 -1
  65. /package/dist/{chunk-SNURSSTN.js.map → chunk-VLOUXTEM.js.map} +0 -0
  66. /package/dist/{chunk-BVLMKSHX.js.map → chunk-WDVNRW3Q.js.map} +0 -0
@@ -251,6 +251,21 @@ export interface TableHeaderProps {
251
251
  onSelectAll?: (selected: boolean) => void;
252
252
  density?: TableDensity;
253
253
  stickyHeader?: boolean;
254
+ /** The `<thead>`, so the virtual window can subtract its height from the scroller's offset. */
255
+ headRef?: React.Ref<globalThis.HTMLTableSectionElement>;
256
+ }
257
+ /**
258
+ * The rows a virtualised body mounts. Computed by `useVirtualScrolling` in the
259
+ * table, which owns the one scroll container, and handed down to the body.
260
+ */
261
+ export interface VirtualWindow {
262
+ startIndex: number;
263
+ endIndex: number;
264
+ items: Record<string, unknown>[];
265
+ /** Every row at the scaled pitch, as CSS. */
266
+ totalHeight: string;
267
+ /** Where the first mounted row sits, in design px. */
268
+ offsetY: number;
254
269
  }
255
270
  export interface TableBodyProps {
256
271
  data: Record<string, unknown>[];
@@ -267,9 +282,9 @@ export interface TableBodyProps {
267
282
  renderRow?: (rowData: Record<string, unknown>, index: number, isSelected: boolean) => React.ReactNode;
268
283
  renderCell?: (value: unknown, column: ColumnConfig, rowData: Record<string, unknown>, rowIndex: number) => React.ReactNode;
269
284
  virtualScrolling?: boolean;
270
- containerHeight?: number;
285
+ /** Set only when the body is virtualised: the rows in view and where they sit. */
286
+ virtualWindow?: VirtualWindow;
271
287
  rowHeight?: number;
272
- overscan?: number;
273
288
  }
274
289
  export interface VirtualTableBodyProps extends TableBodyProps {
275
290
  virtualScrolling: true;
@@ -1 +1 @@
1
- {"version":3,"file":"Table.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/Table/Table.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Table.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/Table/Table.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TableParts.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/Table/TableParts.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAO3C,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAwDpF,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAqDzD,CAAC;AAMH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,yFAAyF;IACzF,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC;IAC1C,SAAS,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACzF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC;CAC3C,CAyDA,CAAC;AAuDF,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA6BrD,CAAC"}
1
+ {"version":3,"file":"TableParts.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/Table/TableParts.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAM3C,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAiB,MAAM,eAAe,CAAC;AAwDnG,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAsDzD,CAAC;AAMH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,yFAAyF;IACzF,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC;IAC1C,SAAS,CAAC,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACzF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC;CAC3C,CAyDA,CAAC;AAqCF,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAmBrD,CAAC"}
@@ -7,7 +7,12 @@ interface StepPalette {
7
7
  main: string;
8
8
  contrastText: string;
9
9
  }
10
- /** `neutral` has no MUI palette entry, so its pair is derived from grey. */
10
+ /**
11
+ * The step's colour pair, keyed through `paletteKey` so `danger` reads MUI's
12
+ * `error` (the palette has no `danger`). `neutral` lands on `grey`, a ramp with
13
+ * no `main`, so its pair is derived from the ramp — with the contrast computed,
14
+ * not assumed.
15
+ */
11
16
  export declare const stepPalette: (theme: Theme, color?: StepColor) => StepPalette;
12
17
  export interface StepColors {
13
18
  backgroundColor: string;
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowStep.helpers.d.ts","sourceRoot":"","sources":["../../../../../src/components/utility/WorkflowStep/WorkflowStep.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGhF,KAAK,SAAS,GAAG,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;AACzD,KAAK,QAAQ,GAAG,WAAW,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;AAUvD,eAAO,MAAM,gBAAgB,GAAI,OAAO,QAAQ,KAAG,MACI,CAAC;AAExD,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,4EAA4E;AAC5E,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,EAAE,QAAQ,SAAS,KAAG,WAW7D,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,SAAS;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;CACxC;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,SAAS,WAAW,EACpB,6CAA6C,SAAS,KACrD,UA+BF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,OAAO,gBAAgB,EAAE,EACzB,aAAa,MAAM,KAClB,gBAAgB,EAUf,CAAC;AAEL,KAAK,qBAAqB,GACtB,aAAa,GACb,SAAS,GACT,aAAa,GACb,OAAO,GACP,MAAM,GACN,cAAc,GACd,UAAU,GACV,aAAa,GACb,aAAa,GACb,WAAW,GACX,UAAU,CAAC;AAEf,KAAK,yBAAyB,GAAG,iBAAiB,GAChD,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAuB3D,eAAO,MAAM,wBAAwB,GACnC,OAAO,iBAAiB,KACvB,yBAC8E,CAAC"}
1
+ {"version":3,"file":"WorkflowStep.helpers.d.ts","sourceRoot":"","sources":["../../../../../src/components/utility/WorkflowStep/WorkflowStep.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAIhF,KAAK,SAAS,GAAG,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;AACzD,KAAK,QAAQ,GAAG,WAAW,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;AAUvD,eAAO,MAAM,gBAAgB,GAAI,OAAO,QAAQ,KAAG,MACI,CAAC;AAExD,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,EAAE,QAAQ,SAAS,KAAG,WAW7D,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,SAAS;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;CACxC;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,GACrB,OAAO,KAAK,EACZ,SAAS,WAAW,EACpB,6CAA6C,SAAS,KACrD,UA+BF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,OAAO,gBAAgB,EAAE,EACzB,aAAa,MAAM,KAClB,gBAAgB,EAUf,CAAC;AAEL,KAAK,qBAAqB,GACtB,aAAa,GACb,SAAS,GACT,aAAa,GACb,OAAO,GACP,MAAM,GACN,cAAc,GACd,UAAU,GACV,aAAa,GACb,aAAa,GACb,WAAW,GACX,UAAU,CAAC;AAEf,KAAK,yBAAyB,GAAG,iBAAiB,GAChD,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAuB3D,eAAO,MAAM,wBAAwB,GACnC,OAAO,iBAAiB,KACvB,yBAC8E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowStep.parts.d.ts","sourceRoot":"","sources":["../../../../../src/components/utility/WorkflowStep/WorkflowStep.parts.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAkC,MAAM,OAAO,CAAC;AAIvD,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAmM9B;;GAEG;AACH,QAAA,MAAM,sBAAsB,2FAyE1B,CAAC;AAIH;;GAEG;AACH,QAAA,MAAM,sBAAsB,2FAe1B,CAAC;AAIH;;GAEG;AACH,QAAA,MAAM,oBAAoB,yFA0CxB,CAAC;AAIH;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC;IACjC,WAAW,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAC9C,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAIA,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"WorkflowStep.parts.d.ts","sourceRoot":"","sources":["../../../../../src/components/utility/WorkflowStep/WorkflowStep.parts.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAkC,MAAM,OAAO,CAAC;AAIvD,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AA+L9B;;GAEG;AACH,QAAA,MAAM,sBAAsB,2FAyE1B,CAAC;AAIH;;GAEG;AACH,QAAA,MAAM,sBAAsB,2FAe1B,CAAC;AAIH;;GAEG;AACH,QAAA,MAAM,oBAAoB,yFA0CxB,CAAC;AAIH;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC;IACjC,WAAW,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAC9C,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAIA,CAAC;AAEF,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,CAAC"}
@@ -1,10 +1,23 @@
1
1
  import "../chunk-IO36MEBD.js";
2
2
  import {
3
3
  WorkflowStep
4
- } from "../chunk-SNURSSTN.js";
5
- import "../chunk-BVLMKSHX.js";
6
- import "../chunk-MC4KYGSX.js";
7
- import "../chunk-V5KKBMAT.js";
4
+ } from "../chunk-VLOUXTEM.js";
5
+ import "../chunk-WDVNRW3Q.js";
6
+ import "../chunk-GFQ4U6WZ.js";
7
+ import "../chunk-VXQOSADY.js";
8
+ import "../chunk-TCAQOUIB.js";
9
+ import "../chunk-7ZPUN7TV.js";
10
+ import "../chunk-PT6TCWIW.js";
11
+ import "../chunk-CGO452DC.js";
12
+ import "../chunk-GDN2LUTZ.js";
13
+ import "../chunk-7FDU3FIN.js";
14
+ import "../chunk-EPEJMTCQ.js";
15
+ import "../chunk-PE4ZW3IA.js";
16
+ import "../chunk-2BYKTBDL.js";
17
+ import "../chunk-AG66JBNH.js";
18
+ import "../chunk-FZXKH2ZT.js";
19
+ import "../chunk-PZBK3F52.js";
20
+ import "../chunk-26X4CZVR.js";
8
21
  import "../chunk-FQ6UW7IY.js";
9
22
  import "../chunk-6JAIFIPW.js";
10
23
  import "../chunk-N3GAFIXG.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@12-apps/ui",
3
- "version": "6.39.1",
3
+ "version": "6.39.2",
4
4
  "license": "MIT",
5
5
  "packageManager": "pnpm@10.34.5",
6
6
  "type": "module",
@@ -117,22 +117,29 @@ import BrokenImageIcon from '@mui/icons-material/BrokenImageIcon';
117
117
 
118
118
  ### With Custom Styles
119
119
 
120
+ `sx` here is inline CSS for the `<img>`, not MUI's `sx`, and the image's box
121
+ clips anything painted outside the image. So a shadow or a hover goes on a
122
+ wrapping element, rounded to match the image:
123
+
120
124
  ```tsx
121
- <LazyImage
122
- src="https://example.com/image.jpg"
123
- alt="Styled image"
124
- width={200}
125
- height={200}
126
- objectFit="cover"
127
- borderRadius={8}
125
+ <Box
128
126
  sx={{
127
+ display: 'inline-flex',
128
+ borderRadius: (theme) => theme.typography.pxToRem(8),
129
129
  boxShadow: 3,
130
- '&:hover': {
131
- transform: 'scale(1.05)',
132
- transition: 'transform 0.3s'
133
- }
130
+ transition: 'transform 0.3s',
131
+ '&:hover': { transform: 'scale(1.05)' },
134
132
  }}
135
- />
133
+ >
134
+ <LazyImage
135
+ src="https://example.com/image.jpg"
136
+ alt="Styled image"
137
+ width={200}
138
+ height={200}
139
+ objectFit="cover"
140
+ borderRadius={8}
141
+ />
142
+ </Box>
136
143
  ```
137
144
 
138
145
  ### With Callbacks
@@ -155,8 +162,8 @@ import BrokenImageIcon from '@mui/icons-material/BrokenImageIcon';
155
162
  |------|------|---------|-------------|
156
163
  | `src` | `string` | - | **Required.** Image source URL |
157
164
  | `alt` | `string` | - | **Required.** Alternative text for accessibility |
158
- | `width` | `number \| string` | - | Image width |
159
- | `height` | `number \| string` | `'auto'` | Image height |
165
+ | `width` | `number \| string` | - | Image width. A number above 1 is design px; a number above 0 and up to 1 is a fraction of the parent, as in `sx` (`0.5` is `50%`); a string is any CSS length |
166
+ | `height` | `number \| string` | `'auto'` | Image height, read like `width`. A fractional height takes effect only when the parent has a definite height |
160
167
 
161
168
  ### Loading Props
162
169
 
@@ -209,7 +216,7 @@ import BrokenImageIcon from '@mui/icons-material/BrokenImageIcon';
209
216
  |------|------|-------------|
210
217
  | `skeletonProps` | `object` | Props for skeleton loader |
211
218
  | `spinnerProps` | `object` | Props for spinner loader |
212
- | `sx` | `CSSProperties` | Additional CSS styles |
219
+ | `sx` | `CSSProperties` | Inline CSS for the `<img>`, not MUI's `sx`. The image's box clips anything painted outside the image, such as a shadow |
213
220
  | `className` | `string` | CSS class name |
214
221
  | `data-testid` | `string` | Test ID for testing |
215
222
 
@@ -59,14 +59,27 @@ type Length = number | string | undefined;
59
59
  const styleLength = (theme: Theme, value: Length): string | undefined =>
60
60
  typeof value === 'number' ? rem(theme, value) : value;
61
61
 
62
+ /**
63
+ * A width or height above 0 and up to 1 is a fraction of the container's parent, as in `sx`.
64
+ * A negative number is no fraction: it stays a (negative, so invalid) length.
65
+ */
66
+ const isFraction = (value: Length): value is number =>
67
+ typeof value === 'number' && value > 0 && value <= 1;
68
+
62
69
  /**
63
70
  * A length prop as `sx` reads it on a width or height: a number of 1 or less is
64
71
  * a fraction of the parent, and that stays so; any other number is design px.
65
72
  */
66
- const sxLength = (theme: Theme, value: Length): string | undefined => {
67
- if (typeof value !== 'number') return value;
68
- return value <= 1 && value !== 0 ? `${value * 100}%` : rem(theme, value);
69
- };
73
+ const sxLength = (theme: Theme, value: Length): string | undefined =>
74
+ isFraction(value) ? `${value * 100}%` : styleLength(theme, value);
75
+
76
+ /**
77
+ * A width or height for what is drawn inside the container. The container alone
78
+ * takes a fraction, so everything in it fills it: a percentage here is measured
79
+ * against the container and would stack (FUT-2666). Otherwise the same as `styleLength`.
80
+ */
81
+ const innerLength = (theme: Theme, value: Length): string | undefined =>
82
+ isFraction(value) ? '100%' : styleLength(theme, value);
70
83
 
71
84
  /** The box the image occupies, as CSS, shared by the real image and every stand-in for it. */
72
85
  interface BoxMetrics {
@@ -87,8 +100,8 @@ const SkeletonIndicator: React.FC<IndicatorProps> = ({ props }) => {
87
100
  return (
88
101
  <Skeleton
89
102
  variant="rectangular"
90
- width={styleLength(theme, props.width || '100%')}
91
- height={styleLength(theme, props.height || 200)}
103
+ width={innerLength(theme, props.width || '100%')}
104
+ height={innerLength(theme, props.height || 200)}
92
105
  animation={props.skeletonProps.animation || 'pulse'}
93
106
  intensity={props.skeletonProps.intensity}
94
107
  borderRadius={styleLength(theme, props.borderRadius)}
@@ -169,7 +182,11 @@ const ErrorFallback: React.FC<IndicatorProps> = ({ props, metrics }) => {
169
182
 
170
183
  return (
171
184
  <FallbackContainer
172
- sx={{ width: sxLength(theme, width), height: sxLength(theme, height), borderRadius: styleLength(theme, borderRadius) }}
185
+ sx={{
186
+ width: innerLength(theme, width),
187
+ height: innerLength(theme, height),
188
+ borderRadius: styleLength(theme, borderRadius),
189
+ }}
173
190
  data-testid={`${testId}-fallback`}
174
191
  >
175
192
  {fallback}
@@ -197,8 +214,8 @@ export const LazyImage = React.memo<LazyImageProps>(function LazyImage(rawProps)
197
214
  const { width, height, borderRadius, alt } = props;
198
215
  const testId = props['data-testid'];
199
216
  const metrics: BoxMetrics = {
200
- width: styleLength(theme, width),
201
- height: styleLength(theme, height),
217
+ width: innerLength(theme, width),
218
+ height: innerLength(theme, height),
202
219
  objectFit: props.objectFit,
203
220
  objectPosition: props.objectPosition,
204
221
  borderRadius: styleLength(theme, borderRadius),
@@ -15,12 +15,21 @@ export interface LazyImageProps extends React.ImgHTMLAttributes<HTMLImageElement
15
15
  alt: string;
16
16
 
17
17
  /**
18
- * Width of the image (number in pixels or CSS string)
18
+ * Width of the image. A number above 1 is design px, scaled with the theme's
19
+ * type scale. A number above 0 and up to 1 is a fraction of the
20
+ * container's parent, as in `sx`: `0.5` is `50%`. The container takes it and
21
+ * the image, its skeleton and its fallback fill the container.
22
+ * A string is any CSS length and passes through untouched.
19
23
  */
20
24
  width?: number | string;
21
25
 
22
26
  /**
23
- * Height of the image (number in pixels or CSS string)
27
+ * Height of the image. A number above 1 is design px, scaled with the theme's
28
+ * type scale. A number above 0 and up to 1 is a fraction of the
29
+ * container's parent, as in `sx`: `0.5` is `50%`. The container takes it and
30
+ * the image, its skeleton and its fallback fill the container. A fractional
31
+ * height takes effect only when the parent has a definite height.
32
+ * A string is any CSS length and passes through untouched.
24
33
  */
25
34
  height?: number | string;
26
35
 
@@ -168,7 +177,10 @@ export interface LazyImageProps extends React.ImgHTMLAttributes<HTMLImageElement
168
177
  };
169
178
 
170
179
  /**
171
- * Additional CSS styles
180
+ * Inline CSS for the `<img>` (its `style`), not MUI's `sx`: theme values and
181
+ * nested selectors such as `'&:hover'` do not apply. The image's box clips
182
+ * anything painted outside the image, such as a shadow, so put those on a
183
+ * wrapping element.
172
184
  */
173
185
  sx?: React.CSSProperties;
174
186
 
@@ -1,3 +1,9 @@
1
+ import type { TableProps as MuiTableProps } from '@mui/material/Table/index.js';
2
+ import type { Theme } from '@mui/material/styles/index.js';
3
+ import type React from 'react';
4
+
5
+ import { rem } from '../../../tokens/relative';
6
+
1
7
  import type { TableProps } from './Table.types';
2
8
 
3
9
  /**
@@ -7,6 +13,30 @@ import type { TableProps } from './Table.types';
7
13
  */
8
14
  export const tableRowHeight = (rowHeight: number | undefined): number => rowHeight ?? 52;
9
15
 
16
+ /** The scroll box's height: a number is design px, 400 unless the caller says otherwise. */
17
+ const scrollHeight = (theme: Theme, containerHeight: number | string | undefined): string => {
18
+ const box = containerHeight || 400;
19
+ return typeof box === 'number' ? rem(theme, box) : box;
20
+ };
21
+
22
+ /**
23
+ * The table's one scroll container (FUT-2658): `containerHeight` tall when
24
+ * `virtualScrolling` is on, holding the header and the body. Inline, so the
25
+ * height it was given reads back off the element.
26
+ */
27
+ export const scrollerStyle = (theme: Theme, p: TableProps): React.CSSProperties | undefined =>
28
+ p.virtualScrolling ? { height: scrollHeight(theme, p.containerHeight), overflow: 'auto' } : undefined;
29
+
30
+ /**
31
+ * The window's height in design px when the body is virtualised — only a
32
+ * numeric `containerHeight` virtualises; a string sizes the scroller alone.
33
+ */
34
+ export const virtualHeight = (p: TableProps): number | undefined =>
35
+ p.virtualScrolling && typeof p.containerHeight === 'number' && p.containerHeight > 0 &&
36
+ tableRowHeight(p.rowHeight) > 0
37
+ ? p.containerHeight
38
+ : undefined;
39
+
10
40
  export const TABLE_DEFAULTS: Partial<TableProps> = {
11
41
  variant: 'default',
12
42
  stripeColor: 'neutral',
@@ -35,3 +65,66 @@ export const definedProps = (props: TableProps): Partial<TableProps> =>
35
65
 
36
66
  // The container + styled table + optional header, shared by the loading, empty
37
67
  // and populated renders.
68
+
69
+ /** A key `Table` declares on top of MUI's own `TableProps`. */
70
+ type TableOwnKey = Exclude<keyof TableProps, keyof MuiTableProps>;
71
+
72
+ /**
73
+ * Every key {@link TableOwnKey} names. None is an HTML attribute: each is read
74
+ * by the table and drawn by its parts, so none may reach the `<table>`
75
+ * (FUT-2658). A `Record` over the key union makes the list exhaustive — a prop
76
+ * added to `Table.types.ts` does not compile until it is named here.
77
+ */
78
+ const TABLE_OWN_KEYS: Record<TableOwnKey, true> = {
79
+ emptyText: true,
80
+ variant: true,
81
+ stripeColor: true,
82
+ glow: true,
83
+ pulse: true,
84
+ hoverable: true,
85
+ loading: true,
86
+ onRowClick: true,
87
+ onRowFocus: true,
88
+ onRowBlur: true,
89
+ density: true,
90
+ selectable: true,
91
+ selectedRows: true,
92
+ onSelectionChange: true,
93
+ rowKeyExtractor: true,
94
+ sortable: true,
95
+ sortConfig: true,
96
+ onSortChange: true,
97
+ filterable: true,
98
+ filterConfig: true,
99
+ onFilterChange: true,
100
+ columns: true,
101
+ data: true,
102
+ virtualScrolling: true,
103
+ rowHeight: true,
104
+ overscan: true,
105
+ responsive: true,
106
+ columnPriorities: true,
107
+ responsiveBreakpoints: true,
108
+ showColumnToggle: true,
109
+ containerHeight: true,
110
+ loadingComponent: true,
111
+ emptyStateComponent: true,
112
+ keyboardNavigation: true,
113
+ renderRow: true,
114
+ renderCell: true,
115
+ draggableRows: true,
116
+ onRowsReorder: true,
117
+ fixedColumns: true,
118
+ rowStyleConfig: true,
119
+ };
120
+
121
+ const NOT_FORWARDED = new Set<string>([...Object.keys(TABLE_OWN_KEYS), 'children']);
122
+
123
+ /**
124
+ * What the caller passed that is MUI's or the DOM's — `className`, `id`,
125
+ * `style`, `aria-*`, `data-*`, DOM handlers, `sx`, `size`, `padding`,
126
+ * `component` — for `MuiTable` to spread onto the `<table>`. `children` is
127
+ * placed by the table itself.
128
+ */
129
+ export const tableDomProps = (props: TableProps): Record<string, unknown> =>
130
+ Object.fromEntries(Object.entries(props).filter(([key]) => !NOT_FORWARDED.has(key)));
@@ -4,29 +4,37 @@ import { useCallback, useEffect, useMemo, useState } from 'react';
4
4
 
5
5
  import { rem, remPx } from '../../../tokens/relative';
6
6
 
7
- import type { ColumnConfig, TableProps } from './Table.types';
7
+ import type { ColumnConfig, TableProps, VirtualWindow } from './Table.types';
8
8
 
9
9
  /**
10
10
  * The virtual window. `rowHeight` and `containerHeight` are design px: the
11
11
  * window is computed in the px `scrollTop` is measured in (`remPx`), and what it
12
12
  * hands back to draw with stays in design px (`offsetY`) or is CSS already
13
13
  * (`totalHeight`), so the rows and the window share one pitch at any type scale.
14
+ *
15
+ * The scroller holds the header as well as the body, so the `<tbody>` starts
16
+ * the header's height into it. `handleScroll` measures that height from
17
+ * `headerRef` in the same live px as `scrollTop`, and the window subtracts it
18
+ * before dividing by the pitch (FUT-2658).
14
19
  */
15
20
  export const useVirtualScrolling = (
16
21
  data: Record<string, unknown>[],
17
22
  rowHeight: number,
18
23
  containerHeight: number,
19
- overscan: number = 5
24
+ overscan: number = 5,
25
+ headerRef?: React.RefObject<HTMLElement | null>,
20
26
  ) => {
21
27
  const theme = useTheme();
22
- const [scrollTop, setScrollTop] = useState(0);
28
+ // Both live px, as the browser measures them.
29
+ const [scroll, setScroll] = useState({ scrollTop: 0, headerPx: 0 });
23
30
 
24
- const visibleItems = useMemo(() => {
31
+ const visibleItems = useMemo((): VirtualWindow => {
25
32
  const pitch = remPx(theme, rowHeight);
26
- const startIndex = Math.floor(scrollTop / pitch);
33
+ const bodyScrollTop = Math.max(0, scroll.scrollTop - scroll.headerPx);
34
+ const startIndex = Math.floor(bodyScrollTop / pitch);
27
35
  const endIndex = Math.min(
28
36
  data.length,
29
- Math.ceil((scrollTop + remPx(theme, containerHeight)) / pitch)
37
+ Math.ceil((bodyScrollTop + remPx(theme, containerHeight)) / pitch)
30
38
  );
31
39
 
32
40
  const start = Math.max(0, startIndex - overscan);
@@ -36,16 +44,17 @@ export const useVirtualScrolling = (
36
44
  startIndex: start,
37
45
  endIndex: end,
38
46
  items: data.slice(start, end),
39
- /** Every row at the scaled pitch, as CSS. */
40
47
  totalHeight: rem(theme, data.length * rowHeight),
41
- /** Where the first mounted row sits, in design px. */
42
48
  offsetY: start * rowHeight,
43
49
  };
44
- }, [data, rowHeight, containerHeight, scrollTop, overscan, theme]);
50
+ }, [data, rowHeight, containerHeight, scroll, overscan, theme]);
45
51
 
46
52
  const handleScroll = useCallback((e: React.UIEvent<HTMLDivElement>) => {
47
- setScrollTop(e.currentTarget.scrollTop);
48
- }, []);
53
+ setScroll({
54
+ scrollTop: e.currentTarget.scrollTop,
55
+ headerPx: headerRef?.current?.offsetHeight ?? 0,
56
+ });
57
+ }, [headerRef]);
49
58
 
50
59
  return { visibleItems, handleScroll };
51
60
  };
@@ -11,7 +11,7 @@ import TableBody from '@mui/material/TableBody/index.js';
11
11
  import TableCell from '@mui/material/TableCell/index.js';
12
12
  import TableContainer from '@mui/material/TableContainer/index.js';
13
13
  import TableRow from '@mui/material/TableRow/index.js';
14
- import { styled, useTheme, type Theme } from '@mui/material/styles/index.js';
14
+ import { styled, useTheme } from '@mui/material/styles/index.js';
15
15
  import React from 'react';
16
16
 
17
17
  import type {
@@ -19,30 +19,21 @@ import type {
19
19
  TableDensity,
20
20
  TableProps,
21
21
  TableStripeColor} from './Table.types';
22
- import { TABLE_DEFAULTS, definedProps } from './Table.helpers';
23
- import { useTableSelection } from './Table.hooks';
22
+ import {
23
+ TABLE_DEFAULTS,
24
+ definedProps,
25
+ scrollerStyle,
26
+ tableDomProps,
27
+ tableRowHeight,
28
+ virtualHeight,
29
+ } from './Table.helpers';
30
+ import { useTableSelection, useVirtualScrolling } from './Table.hooks';
24
31
  import { EnhancedTableBody, EnhancedTableHeader } from './TableParts';
25
32
  import { EmptyRow, NoDataPlaceholder } from './TableStates';
26
33
  import {
27
34
  tableStyles } from './Table.styles';
28
35
  import { rem } from '../../../tokens/relative';
29
36
 
30
- /** The scroll box's height: a number is design px, 400 unless the caller says otherwise. */
31
- const scrollHeight = (theme: Theme, containerHeight: number | string | undefined): string => {
32
- const box = containerHeight || 400;
33
- return typeof box === 'number' ? rem(theme, box) : box;
34
- };
35
-
36
- // Define pulse animation
37
- const StyledTableContainer = styled(TableContainer, {
38
- shouldForwardProp: (prop) => !['virtualScrolling', 'containerHeight'].includes(prop as string) })<{
39
- virtualScrolling?: boolean;
40
- containerHeight?: number | string;
41
- }>(({ theme, virtualScrolling, containerHeight }) => ({
42
- ...(virtualScrolling && {
43
- height: scrollHeight(theme, containerHeight),
44
- overflow: 'auto' }) }));
45
-
46
37
  // Helper function to get stripe color from theme
47
38
  const StyledTable = styled(MuiTable, {
48
39
  shouldForwardProp: (prop) =>
@@ -91,7 +82,7 @@ const TableShell: React.FC<{
91
82
  header,
92
83
  rest,
93
84
  children }) => (
94
- <StyledTableContainer>
85
+ <TableContainer>
95
86
  <StyledTable
96
87
  ref={innerRef}
97
88
  customVariant={variant}
@@ -106,7 +97,7 @@ const TableShell: React.FC<{
106
97
  {header}
107
98
  {children}
108
99
  </StyledTable>
109
- </StyledTableContainer>
100
+ </TableContainer>
110
101
  );
111
102
 
112
103
  const SKELETON_ROW_COUNT = 5;
@@ -177,8 +168,8 @@ const ColumnToggleMenu: React.FC<{
177
168
  </Box>
178
169
  );
179
170
 
180
- // The populated table. Local because StyledTableContainer and StyledTable
181
- // cannot cross a module boundary (TS2742).
171
+ // The populated table. Local because StyledTable cannot cross a module
172
+ // boundary (TS2742).
182
173
  const columnsFor = (resolved: TableProps, selection: Selection): ColumnConfig[] =>
183
174
  (resolved.responsive ? selection.visibleColumns : resolved.columns) ?? [];
184
175
 
@@ -192,15 +183,27 @@ const showsColumnToggle = (resolved: TableProps, selection: Selection): boolean
192
183
  selection.hiddenColumns.length > 0,
193
184
  );
194
185
 
186
+ // The virtual window lives here, with the one scroller whose offset drives it;
187
+ // the header's ref lets it subtract the height the `<thead>` pushes the body down.
195
188
  const AdvancedTable: React.FC<RendererProps> = ({ resolved: p, selection, innerRef, rest }) => {
189
+ const theme = useTheme();
196
190
  const finalColumns = columnsFor(p, selection);
197
191
  const showToggle = showsColumnToggle(p, selection);
192
+ const headRef = React.useRef<globalThis.HTMLTableSectionElement>(null);
193
+ const windowHeight = virtualHeight(p);
194
+ const { visibleItems, handleScroll } = useVirtualScrolling(
195
+ p.data ?? [],
196
+ tableRowHeight(p.rowHeight) || 40,
197
+ windowHeight ?? 400,
198
+ p.overscan,
199
+ headRef,
200
+ );
198
201
 
199
202
  return (
200
203
  <Box position="relative">
201
- <StyledTableContainer
202
- virtualScrolling={p.virtualScrolling}
203
- containerHeight={p.containerHeight}
204
+ <TableContainer
205
+ style={scrollerStyle(theme, p)}
206
+ onScroll={windowHeight ? handleScroll : undefined}
204
207
  >
205
208
  <StyledTable
206
209
  ref={innerRef}
@@ -224,6 +227,7 @@ const AdvancedTable: React.FC<RendererProps> = ({ resolved: p, selection, innerR
224
227
  onSelectAll={selection.handleSelectAll}
225
228
  density={p.density}
226
229
  stickyHeader={p.stickyHeader}
230
+ headRef={headRef}
227
231
  />
228
232
  <EnhancedTableBody
229
233
  data={p.data ?? []}
@@ -240,12 +244,11 @@ const AdvancedTable: React.FC<RendererProps> = ({ resolved: p, selection, innerR
240
244
  renderRow={p.renderRow}
241
245
  renderCell={p.renderCell}
242
246
  virtualScrolling={p.virtualScrolling}
243
- containerHeight={typeof p.containerHeight === 'number' ? p.containerHeight : undefined}
247
+ virtualWindow={windowHeight ? visibleItems : undefined}
244
248
  rowHeight={p.rowHeight}
245
- overscan={p.overscan}
246
249
  />
247
250
  </StyledTable>
248
- </StyledTableContainer>
251
+ </TableContainer>
249
252
 
250
253
  {showToggle && (
251
254
  <ColumnToggleMenu
@@ -329,7 +332,6 @@ export const Table = React.forwardRef<globalThis.HTMLTableElement, TableProps>(
329
332
  emptyStateComponent,
330
333
  emptyText,
331
334
  children,
332
- ...props
333
335
  } = resolved;
334
336
 
335
337
  const selection = useTableSelection({
@@ -341,7 +343,8 @@ export const Table = React.forwardRef<globalThis.HTMLTableElement, TableProps>(
341
343
  rowKeyExtractor: resolved.rowKeyExtractor,
342
344
  onSelectionChange: resolved.onSelectionChange });
343
345
 
344
- const rest = props as unknown as Record<string, unknown>;
346
+ // Only MUI's and the DOM's own props reach the `<table>` (FUT-2658).
347
+ const rest = tableDomProps(tableProps);
345
348
  const renderer: RendererProps = { resolved, selection, innerRef: ref, rest };
346
349
  const finalColumns = responsive ? selection.visibleColumns : columns;
347
350
  const shell = buildShell({ ...renderer, finalColumns });