@dxos/react-ui-mosaic 0.9.1-staging.ee54ba693a → 0.11.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.
Files changed (115) hide show
  1. package/dist/lib/chunk-Mosaic.mjs +1024 -0
  2. package/dist/lib/chunk-Mosaic.mjs.map +1 -0
  3. package/dist/lib/index.mjs +653 -0
  4. package/dist/lib/index.mjs.map +1 -0
  5. package/dist/lib/playwright.mjs +200 -0
  6. package/dist/lib/playwright.mjs.map +1 -0
  7. package/dist/lib/testing.mjs +127 -0
  8. package/dist/lib/testing.mjs.map +1 -0
  9. package/dist/lib/translations.mjs +11 -0
  10. package/dist/lib/translations.mjs.map +1 -0
  11. package/dist/types/src/components/Board/Board.d.ts +7 -27
  12. package/dist/types/src/components/Board/Board.d.ts.map +1 -1
  13. package/dist/types/src/components/Board/Board.stories.d.ts.map +1 -1
  14. package/dist/types/src/components/Board/BoardColumnContext.d.ts +10 -0
  15. package/dist/types/src/components/Board/BoardColumnContext.d.ts.map +1 -0
  16. package/dist/types/src/components/Board/BoardContext.d.ts +26 -0
  17. package/dist/types/src/components/Board/BoardContext.d.ts.map +1 -0
  18. package/dist/types/src/components/Board/Column.d.ts +2 -7
  19. package/dist/types/src/components/Board/Column.d.ts.map +1 -1
  20. package/dist/types/src/components/Board/index.d.ts +2 -0
  21. package/dist/types/src/components/Board/index.d.ts.map +1 -1
  22. package/dist/types/src/components/Focus/Focus.d.ts.map +1 -1
  23. package/dist/types/src/components/Mosaic/Container.d.ts +6 -34
  24. package/dist/types/src/components/Mosaic/Container.d.ts.map +1 -1
  25. package/dist/types/src/components/Mosaic/Mosaic.d.ts +10 -15
  26. package/dist/types/src/components/Mosaic/Mosaic.d.ts.map +1 -1
  27. package/dist/types/src/components/Mosaic/MosaicContainerContext.d.ts +34 -0
  28. package/dist/types/src/components/Mosaic/MosaicContainerContext.d.ts.map +1 -0
  29. package/dist/types/src/components/Mosaic/MosaicTileContext.d.ts +31 -0
  30. package/dist/types/src/components/Mosaic/MosaicTileContext.d.ts.map +1 -0
  31. package/dist/types/src/components/Mosaic/Placeholder.d.ts +3 -3
  32. package/dist/types/src/components/Mosaic/Placeholder.d.ts.map +1 -1
  33. package/dist/types/src/components/Mosaic/Stack.d.ts +8 -2
  34. package/dist/types/src/components/Mosaic/Stack.d.ts.map +1 -1
  35. package/dist/types/src/components/Mosaic/Stack.stories.d.ts.map +1 -1
  36. package/dist/types/src/components/Mosaic/Tile.d.ts +6 -32
  37. package/dist/types/src/components/Mosaic/Tile.d.ts.map +1 -1
  38. package/dist/types/src/components/Mosaic/VirtualStackPagination.stories.d.ts +13 -0
  39. package/dist/types/src/components/Mosaic/VirtualStackPagination.stories.d.ts.map +1 -0
  40. package/dist/types/src/components/Mosaic/index.d.ts +0 -1
  41. package/dist/types/src/components/Mosaic/index.d.ts.map +1 -1
  42. package/dist/types/src/components/SearchStack/SearchStack.d.ts +1 -1
  43. package/dist/types/src/components/SearchStack/SearchStack.d.ts.map +1 -1
  44. package/dist/types/src/hooks/index.d.ts +1 -0
  45. package/dist/types/src/hooks/index.d.ts.map +1 -1
  46. package/dist/types/src/hooks/useDefaultColumnEventHandler.d.ts +2 -2
  47. package/dist/types/src/hooks/useDefaultColumnEventHandler.d.ts.map +1 -1
  48. package/dist/types/src/hooks/useEventHandlerAdapter.d.ts +3 -3
  49. package/dist/types/src/hooks/useEventHandlerAdapter.d.ts.map +1 -1
  50. package/dist/types/src/hooks/useVirtualizerPagination.d.ts +60 -0
  51. package/dist/types/src/hooks/useVirtualizerPagination.d.ts.map +1 -0
  52. package/dist/types/src/hooks/useVirtualizerPagination.test.d.ts +2 -0
  53. package/dist/types/src/hooks/useVirtualizerPagination.test.d.ts.map +1 -0
  54. package/dist/types/src/hooks/useVisibleItems.d.ts +2 -2
  55. package/dist/types/src/hooks/useVisibleItems.d.ts.map +1 -1
  56. package/dist/types/tsconfig.tsbuildinfo +1 -1
  57. package/package.json +35 -37
  58. package/src/components/Board/Board.stories.tsx +7 -6
  59. package/src/components/Board/Board.tsx +9 -54
  60. package/src/components/Board/BoardColumnContext.ts +25 -0
  61. package/src/components/Board/BoardContext.ts +43 -0
  62. package/src/components/Board/Column.tsx +13 -27
  63. package/src/components/Board/Item.tsx +2 -2
  64. package/src/components/Board/index.ts +3 -0
  65. package/src/components/Mosaic/Container.tsx +31 -53
  66. package/src/components/Mosaic/DragHandle.tsx +1 -1
  67. package/src/components/Mosaic/{Mosaic.tsx → Mosaic.ts} +5 -16
  68. package/src/components/Mosaic/MosaicContainerContext.ts +44 -0
  69. package/src/components/Mosaic/MosaicTileContext.ts +34 -0
  70. package/src/components/Mosaic/Placeholder.tsx +7 -8
  71. package/src/components/Mosaic/ResizeHandle.stories.tsx +4 -4
  72. package/src/components/Mosaic/ResizeHandle.tsx +2 -2
  73. package/src/components/Mosaic/Stack.stories.tsx +49 -13
  74. package/src/components/Mosaic/Stack.tsx +30 -9
  75. package/src/components/Mosaic/Tile.tsx +33 -33
  76. package/src/components/Mosaic/VirtualStackPagination.stories.tsx +423 -0
  77. package/src/components/Mosaic/index.ts +0 -1
  78. package/src/hooks/index.ts +1 -0
  79. package/src/hooks/useDefaultColumnEventHandler.ts +2 -2
  80. package/src/hooks/useEventHandlerAdapter.ts +4 -5
  81. package/src/hooks/useVirtualizerPagination.test.tsx +105 -0
  82. package/src/hooks/useVirtualizerPagination.ts +473 -0
  83. package/src/hooks/useVisibleItems.ts +2 -2
  84. package/src/playwright/smoke.spec.ts +4 -1
  85. package/src/testing/DefaultStackTile.tsx +1 -1
  86. package/src/testing/decorator.tsx +3 -3
  87. package/dist/lib/browser/chunk-OBVIYZLR.mjs +0 -1119
  88. package/dist/lib/browser/chunk-OBVIYZLR.mjs.map +0 -7
  89. package/dist/lib/browser/index.mjs +0 -701
  90. package/dist/lib/browser/index.mjs.map +0 -7
  91. package/dist/lib/browser/meta.json +0 -1
  92. package/dist/lib/browser/playwright/index.mjs +0 -256
  93. package/dist/lib/browser/playwright/index.mjs.map +0 -7
  94. package/dist/lib/browser/testing/index.mjs +0 -136
  95. package/dist/lib/browser/testing/index.mjs.map +0 -7
  96. package/dist/lib/browser/translations.mjs +0 -18
  97. package/dist/lib/browser/translations.mjs.map +0 -7
  98. package/dist/lib/node-esm/chunk-4IEMCMIV.mjs +0 -1121
  99. package/dist/lib/node-esm/chunk-4IEMCMIV.mjs.map +0 -7
  100. package/dist/lib/node-esm/index.mjs +0 -702
  101. package/dist/lib/node-esm/index.mjs.map +0 -7
  102. package/dist/lib/node-esm/meta.json +0 -1
  103. package/dist/lib/node-esm/playwright/index.mjs +0 -258
  104. package/dist/lib/node-esm/playwright/index.mjs.map +0 -7
  105. package/dist/lib/node-esm/testing/index.mjs +0 -137
  106. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  107. package/dist/lib/node-esm/translations.mjs +0 -20
  108. package/dist/lib/node-esm/translations.mjs.map +0 -7
  109. package/dist/types/src/components/Mosaic/Root.d.ts +0 -35
  110. package/dist/types/src/components/Mosaic/Root.d.ts.map +0 -1
  111. package/dist/types/src/components/Mosaic/types.d.ts +0 -86
  112. package/dist/types/src/components/Mosaic/types.d.ts.map +0 -1
  113. package/src/components/Mosaic/Root.tsx +0 -288
  114. package/src/components/Mosaic/types.ts +0 -94
  115. /package/src/components/Focus/{Focus.tsx → Focus.ts} +0 -0
@@ -0,0 +1,60 @@
1
+ import { type Virtualizer } from '@tanstack/react-virtual';
2
+ import { type GetId } from '@dxos/react-ui-dnd';
3
+ export type VirtualizerPaginationController = {
4
+ /** Requests the next (e.g. older) page. Omit to disable the bottom-edge trigger. */
5
+ getNext?: () => void;
6
+ /** Requests the previous (e.g. newer) page. Omit to disable the top-edge trigger. */
7
+ getPrevious?: () => void;
8
+ /** When true, suppresses the top-edge trigger (window is anchored at the live head). */
9
+ atHead?: boolean;
10
+ /** When true, suppresses both edge triggers while a page is in flight. */
11
+ isLoading?: boolean;
12
+ };
13
+ export type UseVirtualizerPaginationProps<TItem = any> = {
14
+ /** Currently loaded window, in the order rendered by the virtualizer. */
15
+ items: readonly TItem[] | TItem[] | undefined;
16
+ /** ID getter, aligned with the virtualizer's own `getId`/`getItemKey`. */
17
+ getId: GetId<TItem>;
18
+ /** Load-next/load-previous callbacks. Both edges are inert while omitted. */
19
+ pagination?: VirtualizerPaginationController;
20
+ /** Rows from either loaded edge at which the adjacent page is requested. @default 12. */
21
+ threshold?: number;
22
+ };
23
+ export type UseVirtualizerPaginationResult = {
24
+ onChange: (virtualizer: Virtualizer<any, any>) => void;
25
+ /** Extra scrollable space (px) to feed into the virtualizer's `paddingStart`. */
26
+ leadingSpace: number;
27
+ };
28
+ /**
29
+ * Wires a paginated data source into a `Mosaic.VirtualStack`: requests the next/previous page near
30
+ * either loaded edge (`evaluateTriggers`), and keeps the scrollbar stable across the resulting
31
+ * `items` change by maintaining a leading spacer instead of rewriting the scroll offset.
32
+ *
33
+ * Called internally by `Mosaic.VirtualStack` when its `pagination` prop is set -- not normally
34
+ * called directly.
35
+ *
36
+ * `@tanstack/react-virtual` recomputes every item's pixel offset from the current array on each
37
+ * render, with no compensation for insertion/removal at the front -- rewriting the scroll offset
38
+ * to chase that shift visibly jumps the scrollbar thumb. Instead, `leadingSpace` (fed back into
39
+ * `paddingStart`) grows by exactly the evicted height and shrinks by exactly the prepended height,
40
+ * so retained items keep their absolute position and the thumb only scales as the total grows.
41
+ *
42
+ * Eviction (`classifyFrontEdgeChange`'s `'evicted'`) is corrected synchronously during the same
43
+ * render that observes the new `items`, since the evicted height is already known -- deferring it
44
+ * would let the browser observe (and clamp `scrollTop` against) a momentary, too-short frame.
45
+ * Prepending (`'prepended'`) is corrected one render later, from a layout effect
46
+ * (`computePrependCorrection`), since the prepended items' heights aren't known until the incoming
47
+ * render measures them; that lag is safe because prepending only ever grows content before the
48
+ * spacer shrinks to match.
49
+ *
50
+ * The layout effect also re-runs `evaluateTriggers` on every `items` change, evicted/appended or
51
+ * prepended alike -- `@tanstack/react-virtual` only calls `onChange` when the visible range (or
52
+ * `isScrolling`) changes, not merely when `items` does. Once the loaded window's tail is already
53
+ * fully rendered and the scrollbar sits at its physical max, further scrolling can't move that
54
+ * range at all, so `onChange` stops firing -- relying on it alone would permanently stall a
55
+ * `getNext` chain right after its own page lands, before the user scrolls again.
56
+ *
57
+ * Assumes the stack renders with `draggable={false}` (virtual indices map 1:1 onto `items`).
58
+ */
59
+ export declare const useVirtualizerPagination: <TItem = any>({ items, getId, pagination, threshold, }: UseVirtualizerPaginationProps<TItem>) => UseVirtualizerPaginationResult;
60
+ //# sourceMappingURL=useVirtualizerPagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useVirtualizerPagination.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useVirtualizerPagination.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAehD,MAAM,MAAM,+BAA+B,GAAG;IAC5C,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,qFAAqF;IACrF,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,wFAAwF;IACxF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,6BAA6B,CAAC,KAAK,GAAG,GAAG,IAAI;IACvD,yEAAyE;IACzE,KAAK,EAAE,SAAS,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,SAAS,CAAC;IAE9C,0EAA0E;IAC1E,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAEpB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,+BAA+B,CAAC;IAE7C,yFAAyF;IACzF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,QAAQ,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IACvD,iFAAiF;IACjF,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AA8QF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,wBAAwB,GAAI,KAAK,GAAG,GAAG,4CAKjD,6BAA6B,CAAC,KAAK,CAAC,KAAG,8BAmHzC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=useVirtualizerPagination.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useVirtualizerPagination.test.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useVirtualizerPagination.test.tsx"],"names":[],"mappings":""}
@@ -1,11 +1,11 @@
1
- import { type GetId, type MosaicTileData } from '../components';
1
+ import { type DndTileData, type GetId } from '@dxos/react-ui-dnd';
2
2
  export type UseVisibleItemsProps<TItem = any> = {
3
3
  /** Container id. */
4
4
  id: string;
5
5
  /** Current items. */
6
6
  items?: readonly TItem[] | TItem[];
7
7
  /** Currently dragging item. */
8
- dragging: MosaicTileData<TItem> | undefined;
8
+ dragging: DndTileData<TItem> | undefined;
9
9
  /** ID getter */
10
10
  getId: GetId<TItem>;
11
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useVisibleItems.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useVisibleItems.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAEhE,MAAM,MAAM,oBAAoB,CAAC,KAAK,GAAG,GAAG,IAAI;IAC9C,oBAAoB;IACpB,EAAE,EAAE,MAAM,CAAC;IAEX,qBAAqB;IACrB,KAAK,CAAC,EAAE,SAAS,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC;IAEnC,+BAA+B;IAC/B,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IAE5C,gBAAgB;IAChB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,GAAG,GAAG,mCAKxC,oBAAoB,CAAC,KAAK,CAAC,KAAG,SAAS,KAAK,EAAE,GAAG,KAAK,EAiBxD,CAAC"}
1
+ {"version":3,"file":"useVisibleItems.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useVisibleItems.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAElE,MAAM,MAAM,oBAAoB,CAAC,KAAK,GAAG,GAAG,IAAI;IAC9C,oBAAoB;IACpB,EAAE,EAAE,MAAM,CAAC;IAEX,qBAAqB;IACrB,KAAK,CAAC,EAAE,SAAS,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC;IAEnC,+BAA+B;IAC/B,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IAEzC,gBAAgB;IAChB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;CACrB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,KAAK,GAAG,GAAG,mCAKxC,oBAAoB,CAAC,KAAK,CAAC,KAAG,SAAS,KAAK,EAAE,GAAG,KAAK,EAiBxD,CAAC"}