@ankhorage/zora 25.3.0 → 25.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.
Files changed (113) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +2 -1
  3. package/dist/features/registry/ZORA_COMPONENT_REGISTRY.d.ts.map +1 -1
  4. package/dist/features/registry/ZORA_COMPONENT_REGISTRY.js +4 -0
  5. package/dist/features/registry/ZORA_COMPONENT_REGISTRY.js.map +1 -1
  6. package/dist/features/registry/componentMeta.d.ts.map +1 -1
  7. package/dist/features/registry/componentMeta.js +4 -0
  8. package/dist/features/registry/componentMeta.js.map +1 -1
  9. package/dist/features/spatial-grid/adapters/inbound/SpatialGrid.d.ts +5 -0
  10. package/dist/features/spatial-grid/adapters/inbound/SpatialGrid.d.ts.map +1 -0
  11. package/dist/features/spatial-grid/adapters/inbound/SpatialGrid.js +38 -0
  12. package/dist/features/spatial-grid/adapters/inbound/SpatialGrid.js.map +1 -0
  13. package/dist/features/spatial-grid/application/sortSpatialGridItems.d.ts +4 -0
  14. package/dist/features/spatial-grid/application/sortSpatialGridItems.d.ts.map +1 -0
  15. package/dist/features/spatial-grid/application/sortSpatialGridItems.js +8 -0
  16. package/dist/features/spatial-grid/application/sortSpatialGridItems.js.map +1 -0
  17. package/dist/features/spatial-grid/meta.d.ts +11 -0
  18. package/dist/features/spatial-grid/meta.d.ts.map +1 -0
  19. package/dist/features/spatial-grid/meta.js +11 -0
  20. package/dist/features/spatial-grid/meta.js.map +1 -0
  21. package/dist/features/spatial-grid/public.d.ts +3 -0
  22. package/dist/features/spatial-grid/public.d.ts.map +1 -0
  23. package/dist/features/spatial-grid/public.js +2 -0
  24. package/dist/features/spatial-grid/public.js.map +1 -0
  25. package/dist/features/time-grid/adapters/inbound/TimeGrid.d.ts +5 -0
  26. package/dist/features/time-grid/adapters/inbound/TimeGrid.d.ts.map +1 -0
  27. package/dist/features/time-grid/adapters/inbound/TimeGrid.js +107 -0
  28. package/dist/features/time-grid/adapters/inbound/TimeGrid.js.map +1 -0
  29. package/dist/features/time-grid/adapters/inbound/TimeGridKeyboardProxy.d.ts +9 -0
  30. package/dist/features/time-grid/adapters/inbound/TimeGridKeyboardProxy.d.ts.map +1 -0
  31. package/dist/features/time-grid/adapters/inbound/TimeGridKeyboardProxy.js +5 -0
  32. package/dist/features/time-grid/adapters/inbound/TimeGridKeyboardProxy.js.map +1 -0
  33. package/dist/features/time-grid/adapters/inbound/TimeGridKeyboardProxy.native.d.ts +9 -0
  34. package/dist/features/time-grid/adapters/inbound/TimeGridKeyboardProxy.native.d.ts.map +1 -0
  35. package/dist/features/time-grid/adapters/inbound/TimeGridKeyboardProxy.native.js +5 -0
  36. package/dist/features/time-grid/adapters/inbound/TimeGridKeyboardProxy.native.js.map +1 -0
  37. package/dist/features/time-grid/adapters/inbound/TimeGridKeyboardProxy.web.d.ts +9 -0
  38. package/dist/features/time-grid/adapters/inbound/TimeGridKeyboardProxy.web.d.ts.map +1 -0
  39. package/dist/features/time-grid/adapters/inbound/TimeGridKeyboardProxy.web.js +10 -0
  40. package/dist/features/time-grid/adapters/inbound/TimeGridKeyboardProxy.web.js.map +1 -0
  41. package/dist/features/time-grid/application/resolveTimeGridNextFocusId.d.ts +4 -0
  42. package/dist/features/time-grid/application/resolveTimeGridNextFocusId.d.ts.map +1 -0
  43. package/dist/features/time-grid/application/resolveTimeGridNextFocusId.js +31 -0
  44. package/dist/features/time-grid/application/resolveTimeGridNextFocusId.js.map +1 -0
  45. package/dist/features/time-grid/application/resolveTimeGridVisibleIntervals.d.ts +5 -0
  46. package/dist/features/time-grid/application/resolveTimeGridVisibleIntervals.d.ts.map +1 -0
  47. package/dist/features/time-grid/application/resolveTimeGridVisibleIntervals.js +6 -0
  48. package/dist/features/time-grid/application/resolveTimeGridVisibleIntervals.js.map +1 -0
  49. package/dist/features/time-grid/meta.d.ts +11 -0
  50. package/dist/features/time-grid/meta.d.ts.map +1 -0
  51. package/dist/features/time-grid/meta.js +11 -0
  52. package/dist/features/time-grid/meta.js.map +1 -0
  53. package/dist/features/time-grid/public.d.ts +5 -0
  54. package/dist/features/time-grid/public.d.ts.map +1 -0
  55. package/dist/features/time-grid/public.js +4 -0
  56. package/dist/features/time-grid/public.js.map +1 -0
  57. package/dist/index.d.ts +4 -0
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +2 -0
  60. package/dist/index.js.map +1 -1
  61. package/dist/types/spatial-grid.d.ts +41 -0
  62. package/dist/types/spatial-grid.d.ts.map +1 -0
  63. package/dist/types/spatial-grid.js +2 -0
  64. package/dist/types/spatial-grid.js.map +1 -0
  65. package/dist/types/time-grid.d.ts +30 -0
  66. package/dist/types/time-grid.d.ts.map +1 -0
  67. package/dist/types/time-grid.js +2 -0
  68. package/dist/types/time-grid.js.map +1 -0
  69. package/package.json +3 -3
  70. package/src/features/registry/ZORA_COMPONENT_REGISTRY.ts +4 -0
  71. package/src/features/registry/componentMeta.ts +4 -0
  72. package/src/features/spatial-grid/adapters/inbound/SpatialGrid.test.tsx +248 -0
  73. package/src/features/spatial-grid/adapters/inbound/SpatialGrid.tsx +112 -0
  74. package/src/features/spatial-grid/application/sortSpatialGridItems.test.ts +42 -0
  75. package/src/features/spatial-grid/application/sortSpatialGridItems.ts +14 -0
  76. package/src/features/spatial-grid/meta.ts +12 -0
  77. package/src/features/spatial-grid/public.ts +6 -0
  78. package/src/features/time-grid/adapters/inbound/TimeGrid.test.tsx +131 -0
  79. package/src/features/time-grid/adapters/inbound/TimeGrid.tsx +197 -0
  80. package/src/features/time-grid/adapters/inbound/TimeGridKeyboardProxy.native.tsx +11 -0
  81. package/src/features/time-grid/adapters/inbound/TimeGridKeyboardProxy.tsx +11 -0
  82. package/src/features/time-grid/adapters/inbound/TimeGridKeyboardProxy.web.tsx +20 -0
  83. package/src/features/time-grid/application/resolveTimeGridNextFocusId.test.ts +46 -0
  84. package/src/features/time-grid/application/resolveTimeGridNextFocusId.ts +41 -0
  85. package/src/features/time-grid/application/resolveTimeGridVisibleIntervals.test.ts +33 -0
  86. package/src/features/time-grid/application/resolveTimeGridVisibleIntervals.ts +13 -0
  87. package/src/features/time-grid/meta.ts +12 -0
  88. package/src/features/time-grid/public.ts +4 -0
  89. package/src/index.ts +8 -0
  90. package/src/types/spatial-grid.ts +44 -0
  91. package/src/types/time-grid.ts +33 -0
  92. package/web-dist/chunks/{Accordion-e6ddpz5v.js → Accordion-0my2z6qe.js} +85 -1
  93. package/web-dist/chunks/{Accordion-e9ewv367.js → Accordion-7qfd4cb4.js} +1 -1
  94. package/web-dist/chunks/{Accordion-689w7frk.js → Accordion-d6azgz09.js} +1 -1
  95. package/web-dist/chunks/{Accordion-q2z00p5r.js → Accordion-gxj5qbpr.js} +1 -1
  96. package/web-dist/components/explorer/Explorer.js +2 -2
  97. package/web-dist/components/file-explorer/FileExplorer.js +2 -2
  98. package/web-dist/components/grid-line-overlay/GridLineOverlay.js +1 -1
  99. package/web-dist/components/grid-ruler/GridRuler.js +1 -1
  100. package/web-dist/components/grid-view/GridView.js +1 -1
  101. package/web-dist/components/media-explorer/MediaExplorer.js +2 -2
  102. package/web-dist/components/reader/Reader.js +1 -1
  103. package/web-dist/components/spatial-grid/SpatialGrid.d.ts +3 -0
  104. package/web-dist/components/spatial-grid/SpatialGrid.js +102 -0
  105. package/web-dist/components/spatial-grid/index.d.ts +1 -0
  106. package/web-dist/components/spatial-grid/index.js +2 -0
  107. package/web-dist/components/tile-grid/TileGrid.js +1 -1
  108. package/web-dist/components/time-grid/TimeGrid.d.ts +3 -0
  109. package/web-dist/components/time-grid/TimeGrid.js +208 -0
  110. package/web-dist/components/time-grid/index.d.ts +1 -0
  111. package/web-dist/components/time-grid/index.js +2 -0
  112. package/web-dist/components/uploader/Uploader.js +2 -2
  113. package/web-dist/manifest.json +52 -20
@@ -4,7 +4,7 @@ import"../../chunks/Accordion-42jfy1a1.js";
4
4
  import {
5
5
  GridLineOverlay2,
6
6
  GridRuler2
7
- } from "../../chunks/Accordion-e9ewv367.js";
7
+ } from "../../chunks/Accordion-7qfd4cb4.js";
8
8
  import"../../chunks/Accordion-srjya6dz.js";
9
9
  import"../../chunks/Accordion-xgpzh4wq.js";
10
10
  export {
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  GridView2,
4
4
  TileGrid2
5
- } from "../../chunks/Accordion-q2z00p5r.js";
5
+ } from "../../chunks/Accordion-gxj5qbpr.js";
6
6
  import"../../chunks/Accordion-xgpzh4wq.js";
7
7
  export {
8
8
  GridView2 as GridView,
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import"../../chunks/Accordion-q2z00p5r.js";
2
+ import"../../chunks/Accordion-gxj5qbpr.js";
3
3
  import"../../chunks/Accordion-bfzeab9x.js";
4
4
  import"../../chunks/Accordion-6wrr910w.js";
5
5
  import"../../chunks/Accordion-8f0nekwe.js";
@@ -14,7 +14,7 @@ import {
14
14
  Explorer2,
15
15
  FileExplorer2,
16
16
  MediaExplorer2
17
- } from "../../chunks/Accordion-689w7frk.js";
17
+ } from "../../chunks/Accordion-d6azgz09.js";
18
18
  import"../../chunks/Accordion-bff0p3x4.js";
19
19
  import"../../chunks/Accordion-srjya6dz.js";
20
20
  import"../../chunks/Accordion-184r2r82.js";
@@ -79,7 +79,7 @@ import {
79
79
  __preload,
80
80
  __chunks
81
81
  } from "../../chunks/Accordion-nh0cs9hq.js";
82
- __chunks(import.meta.url,["49e25xwf","z23c32jh","50yy1az9","1t98py7y","m8ts96nj","8se5z2w3","mjvegqjq","8gxjy9na","2389epxb","pnpxcrwx","rg94gstv","hszzyv5p","y8p5hk56","x15y26r7","vgkvvdvg","ewf1zen9","09qs8gt1","z5a0tx18","6wrr910w","bfzeab9x","8f0nekwe","nnv76yff","wyxmd0n0","6rrqpb2h","42jfy1a1","7tjz25jh","6zb9d92y","be2yhfqz","mnac2z83","0gfsj9qh","fzcpm4xf","2nesr9cv","h7zsx9eg","b96evb46","9w8wg9mf","pvj5npzc","w6qedeba","eqvdv7tt","61e19g3e","ys214jt5","bff0p3x4","srjya6dz","184r2r82","fre84yaq","xgpzh4wq","nh0cs9hq","6a2hscrx","n7y08rz5","59pa0677","961ncx4e"],[["./Reader.js",14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],["../../chunks/ReadiumCSS-after.css-z23c32jh.js"],["../../chunks/ReadiumCSS-ebpaj_fonts_patch.css-50yy1az9.js"],["../../chunks/ReadiumCSS-before.css-1t98py7y.js"],["../../chunks/ReadiumCSS-default.css-m8ts96nj.js"],["../../chunks/ReadiumCSS-after.css-8se5z2w3.js"],["../../chunks/ReadiumCSS-before.css-mjvegqjq.js"],["../../chunks/ReadiumCSS-default.css-8gxjy9na.js"],["../../chunks/ReadiumCSS-after.css-2389epxb.js"],["../../chunks/ReadiumCSS-before.css-pnpxcrwx.js"],["../../chunks/ReadiumCSS-default.css-rg94gstv.js"],["../../chunks/ReadiumCSS-before.css-hszzyv5p.js"],["../../chunks/ReadiumCSS-default.css-y8p5hk56.js"],["../../chunks/ReadiumCSS-after.css-x15y26r7.js"],["../../chunks/Accordion-vgkvvdvg.js"],["../../chunks/Accordion-ewf1zen9.js",17,18,23,24,25,32,34,41,44,45],["../../chunks/Accordion-09qs8gt1.js",44,45],["../../chunks/Accordion-z5a0tx18.js",16,18,42,44,45],["../../chunks/Accordion-6wrr910w.js"],["../../chunks/Accordion-bfzeab9x.js"],["../../chunks/Accordion-8f0nekwe.js",19,18,46,43,44,45],["../../chunks/Accordion-nnv76yff.js",16,18,47,42,44,45],["../../chunks/Accordion-wyxmd0n0.js",18,47,46,44,45],["../../chunks/Accordion-6rrqpb2h.js",18,20,17,21,22,24,25,47,40,44,45],["../../chunks/Accordion-42jfy1a1.js",18,48],["../../chunks/Accordion-7tjz25jh.js",16,17,18,24,42,44,45],["../../chunks/Accordion-6zb9d92y.js"],["../../chunks/Accordion-be2yhfqz.js",26,44,45],["../../chunks/Accordion-mnac2z83.js"],["../../chunks/Accordion-0gfsj9qh.js",47],["../../chunks/Accordion-fzcpm4xf.js",28,29,44,45],["../../chunks/Accordion-2nesr9cv.js",17,18],["../../chunks/Accordion-h7zsx9eg.js",26,27,17,18,30,31,22,24,33,25,49,41,44,45],["../../chunks/Accordion-b96evb46.js",20,24],["../../chunks/Accordion-9w8wg9mf.js",16,24,40,41,44,45],["../../chunks/Accordion-pvj5npzc.js",24,25,34,41,44,45],["../../chunks/Accordion-w6qedeba.js",31,24],["../../chunks/Accordion-eqvdv7tt.js"],["../../chunks/Accordion-61e19g3e.js"],["../../chunks/Accordion-ys214jt5.js"],["../../chunks/Accordion-bff0p3x4.js",19,41],["../../chunks/Accordion-srjya6dz.js",18],["../../chunks/Accordion-184r2r82.js",16,43],["../../chunks/Accordion-fre84yaq.js"],["../../chunks/Accordion-xgpzh4wq.js",45],["../../chunks/Accordion-nh0cs9hq.js"],["../../chunks/Accordion-6a2hscrx.js"],["../../chunks/Accordion-n7y08rz5.js",46],["../../chunks/Accordion-59pa0677.js"],["../../chunks/Accordion-961ncx4e.js"]],0);
82
+ __chunks(import.meta.url,["rfa5chwq","pnpxcrwx","rg94gstv","z23c32jh","50yy1az9","y8p5hk56","x15y26r7","1t98py7y","m8ts96nj","8se5z2w3","mjvegqjq","8gxjy9na","2389epxb","hszzyv5p","vgkvvdvg","ewf1zen9","09qs8gt1","z5a0tx18","6wrr910w","bfzeab9x","8f0nekwe","nnv76yff","wyxmd0n0","6rrqpb2h","42jfy1a1","7tjz25jh","6zb9d92y","be2yhfqz","mnac2z83","0gfsj9qh","fzcpm4xf","2nesr9cv","h7zsx9eg","b96evb46","9w8wg9mf","pvj5npzc","w6qedeba","eqvdv7tt","61e19g3e","ys214jt5","bff0p3x4","srjya6dz","184r2r82","fre84yaq","xgpzh4wq","nh0cs9hq","6a2hscrx","n7y08rz5","59pa0677","961ncx4e"],[["./Reader.js",14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],["../../chunks/ReadiumCSS-before.css-pnpxcrwx.js"],["../../chunks/ReadiumCSS-default.css-rg94gstv.js"],["../../chunks/ReadiumCSS-after.css-z23c32jh.js"],["../../chunks/ReadiumCSS-ebpaj_fonts_patch.css-50yy1az9.js"],["../../chunks/ReadiumCSS-default.css-y8p5hk56.js"],["../../chunks/ReadiumCSS-after.css-x15y26r7.js"],["../../chunks/ReadiumCSS-before.css-1t98py7y.js"],["../../chunks/ReadiumCSS-default.css-m8ts96nj.js"],["../../chunks/ReadiumCSS-after.css-8se5z2w3.js"],["../../chunks/ReadiumCSS-before.css-mjvegqjq.js"],["../../chunks/ReadiumCSS-default.css-8gxjy9na.js"],["../../chunks/ReadiumCSS-after.css-2389epxb.js"],["../../chunks/ReadiumCSS-before.css-hszzyv5p.js"],["../../chunks/Accordion-vgkvvdvg.js"],["../../chunks/Accordion-ewf1zen9.js",17,18,23,24,25,32,34,41,44,45],["../../chunks/Accordion-09qs8gt1.js",44,45],["../../chunks/Accordion-z5a0tx18.js",16,18,42,44,45],["../../chunks/Accordion-6wrr910w.js"],["../../chunks/Accordion-bfzeab9x.js"],["../../chunks/Accordion-8f0nekwe.js",19,18,46,43,44,45],["../../chunks/Accordion-nnv76yff.js",16,18,47,42,44,45],["../../chunks/Accordion-wyxmd0n0.js",18,47,46,44,45],["../../chunks/Accordion-6rrqpb2h.js",18,20,17,21,22,24,25,47,40,44,45],["../../chunks/Accordion-42jfy1a1.js",18,48],["../../chunks/Accordion-7tjz25jh.js",16,17,18,24,42,44,45],["../../chunks/Accordion-6zb9d92y.js"],["../../chunks/Accordion-be2yhfqz.js",26,44,45],["../../chunks/Accordion-mnac2z83.js"],["../../chunks/Accordion-0gfsj9qh.js",47],["../../chunks/Accordion-fzcpm4xf.js",28,29,44,45],["../../chunks/Accordion-2nesr9cv.js",17,18],["../../chunks/Accordion-h7zsx9eg.js",26,27,17,18,30,31,22,24,33,25,49,41,44,45],["../../chunks/Accordion-b96evb46.js",20,24],["../../chunks/Accordion-9w8wg9mf.js",16,24,40,41,44,45],["../../chunks/Accordion-pvj5npzc.js",24,25,34,41,44,45],["../../chunks/Accordion-w6qedeba.js",31,24],["../../chunks/Accordion-eqvdv7tt.js"],["../../chunks/Accordion-61e19g3e.js"],["../../chunks/Accordion-ys214jt5.js"],["../../chunks/Accordion-bff0p3x4.js",19,41],["../../chunks/Accordion-srjya6dz.js",18],["../../chunks/Accordion-184r2r82.js",16,43],["../../chunks/Accordion-fre84yaq.js"],["../../chunks/Accordion-xgpzh4wq.js",45],["../../chunks/Accordion-nh0cs9hq.js"],["../../chunks/Accordion-6a2hscrx.js"],["../../chunks/Accordion-n7y08rz5.js",46],["../../chunks/Accordion-59pa0677.js"],["../../chunks/Accordion-961ncx4e.js"]],0);
83
83
 
84
84
  // node_modules/@ankhorage/reader/dist/features/reader/adapters/ReaderView.web.js
85
85
  import { jsx as _jsx2 } from "react/jsx-runtime";
@@ -0,0 +1,3 @@
1
+ import type React from 'react';
2
+
3
+ export declare const SpatialGrid: React.ComponentType<Record<string, unknown>>;
@@ -0,0 +1,102 @@
1
+ 'use client';
2
+ import {
3
+ GridView2
4
+ } from "../../chunks/Accordion-gxj5qbpr.js";
5
+ import {
6
+ require_cjs
7
+ } from "../../chunks/Accordion-xgpzh4wq.js";
8
+ import {
9
+ __toESM
10
+ } from "../../chunks/Accordion-nh0cs9hq.js";
11
+
12
+ // src/features/spatial-grid/adapters/inbound/SpatialGrid.tsx
13
+ var import_react_native = __toESM(require_cjs(), 1);
14
+ import React from "react";
15
+
16
+ // src/features/spatial-grid/application/sortSpatialGridItems.ts
17
+ function sortSpatialGridItems(items) {
18
+ return [...items].map((item, index) => ({ index, item })).sort((left, right) => (left.item.zIndex ?? 0) - (right.item.zIndex ?? 0) || left.index - right.index).map(({ item }) => item);
19
+ }
20
+
21
+ // src/features/spatial-grid/adapters/inbound/SpatialGrid.tsx
22
+ import { jsx } from "react/jsx-runtime";
23
+ function SpatialGrid({
24
+ items,
25
+ contentWidth,
26
+ contentHeight,
27
+ width,
28
+ height,
29
+ zoom,
30
+ overscanPixels,
31
+ selectedItemId,
32
+ focusedItemId,
33
+ revealPaddingPixels,
34
+ disabled = false,
35
+ readOnly = false,
36
+ interactionPolicy,
37
+ onSelectionChange,
38
+ onActivation,
39
+ onFocusChange,
40
+ onViewportChange,
41
+ onVisibleItemIdsChange,
42
+ renderItem,
43
+ testID
44
+ }) {
45
+ const orderedItems = React.useMemo(() => sortSpatialGridItems(items), [items]);
46
+ const itemLookup = React.useMemo(() => new Map(orderedItems.map((item) => [item.id, item])), [orderedItems]);
47
+ const interactionBlocked = disabled || interactionPolicy === "passive";
48
+ return /* @__PURE__ */ jsx(import_react_native.View, {
49
+ style: { height, overflow: "hidden", width },
50
+ testID,
51
+ children: /* @__PURE__ */ jsx(GridView2, {
52
+ contentHeight,
53
+ contentWidth,
54
+ focusedItemId: focusedItemId ?? selectedItemId,
55
+ height,
56
+ interactionPolicy,
57
+ items: orderedItems,
58
+ onViewportChange,
59
+ onVisibleItemIdsChange,
60
+ overscanPixels,
61
+ renderItem: (gridItem) => {
62
+ const item = itemLookup.get(gridItem.id);
63
+ if (!item)
64
+ return null;
65
+ return renderSpatialGridItem(item, item.id === selectedItemId, item.id === focusedItemId, interactionBlocked, readOnly, onSelectionChange, onActivation, onFocusChange, renderItem, testID);
66
+ },
67
+ revealPaddingPixels,
68
+ width,
69
+ zoom
70
+ })
71
+ });
72
+ }
73
+ function renderSpatialGridItem(item, selected, focused, interactionBlocked, readOnly, onSelectionChange, onActivation, onFocusChange, renderItem, testID) {
74
+ const interactionDisabled = interactionBlocked || item.disabled === true;
75
+ const editingDisabled = interactionDisabled || readOnly;
76
+ return /* @__PURE__ */ jsx(import_react_native.Pressable, {
77
+ accessibilityLabel: item.accessibilityLabel ?? `Spatial grid item ${item.id}`,
78
+ accessibilityRole: "button",
79
+ accessibilityState: { disabled: editingDisabled, selected },
80
+ disabled: interactionDisabled,
81
+ style: { height: "100%", width: "100%" },
82
+ testID: testID === undefined ? undefined : `${testID}-item-${item.id}`,
83
+ onFocus: () => {
84
+ if (!interactionDisabled)
85
+ onFocusChange?.(item.id);
86
+ },
87
+ onLongPress: () => {
88
+ if (!editingDisabled)
89
+ onActivation?.(item.id);
90
+ },
91
+ onPress: () => {
92
+ if (editingDisabled)
93
+ return;
94
+ onSelectionChange?.(item.id);
95
+ onActivation?.(item.id);
96
+ },
97
+ children: renderItem(item, { disabled: editingDisabled, focused, selected })
98
+ });
99
+ }
100
+ export {
101
+ SpatialGrid
102
+ };
@@ -0,0 +1 @@
1
+ export * from './SpatialGrid';
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ export * from './SpatialGrid.js';
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  GridView2,
4
4
  TileGrid2
5
- } from "../../chunks/Accordion-q2z00p5r.js";
5
+ } from "../../chunks/Accordion-gxj5qbpr.js";
6
6
  import"../../chunks/Accordion-xgpzh4wq.js";
7
7
  export {
8
8
  GridView2 as GridView,
@@ -0,0 +1,3 @@
1
+ import type React from 'react';
2
+
3
+ export declare const TimeGrid: React.ComponentType<Record<string, unknown>>;
@@ -0,0 +1,208 @@
1
+ 'use client';
2
+ import {
3
+ GridView2
4
+ } from "../../chunks/Accordion-gxj5qbpr.js";
5
+ import {
6
+ getLaneIntervalPlacement,
7
+ getVisibleLaneIntervals
8
+ } from "../../chunks/Accordion-0my2z6qe.js";
9
+ import {
10
+ require_cjs
11
+ } from "../../chunks/Accordion-xgpzh4wq.js";
12
+ import {
13
+ __toESM
14
+ } from "../../chunks/Accordion-nh0cs9hq.js";
15
+
16
+ // src/features/time-grid/adapters/inbound/TimeGrid.tsx
17
+ var import_react_native = __toESM(require_cjs(), 1);
18
+ import React from "react";
19
+
20
+ // src/features/time-grid/application/resolveTimeGridNextFocusId.ts
21
+ function resolveTimeGridNextFocusId(placements, focusedId, direction) {
22
+ const focused = placements.find((placement) => placement.id === focusedId);
23
+ if (!focused)
24
+ return;
25
+ const candidates = placements.filter((placement) => {
26
+ if (direction === "left")
27
+ return placement.laneId === focused.laneId && placement.x < focused.x;
28
+ if (direction === "right")
29
+ return placement.laneId === focused.laneId && placement.x > focused.x;
30
+ if (direction === "up")
31
+ return placement.laneIndex < focused.laneIndex;
32
+ return placement.laneIndex > focused.laneIndex;
33
+ });
34
+ return candidates.sort((first, second) => resolveFocusDistance(first, focused, direction) - resolveFocusDistance(second, focused, direction)).at(0)?.id;
35
+ }
36
+ function resolveFocusDistance(candidate, focused, direction) {
37
+ const horizontal = direction === "left" || direction === "right";
38
+ const primary = horizontal ? Math.abs(candidate.x - focused.x) : Math.abs(candidate.laneIndex - focused.laneIndex);
39
+ const secondary = horizontal ? Math.abs(candidate.laneIndex - focused.laneIndex) : Math.abs(candidate.x - focused.x);
40
+ return primary * 1e6 + secondary;
41
+ }
42
+
43
+ // src/features/time-grid/application/resolveTimeGridVisibleIntervals.ts
44
+ function resolveTimeGridVisibleIntervals(lanes, intervals, viewport, overscanPixels) {
45
+ return getVisibleLaneIntervals(lanes, intervals, viewport, overscanPixels);
46
+ }
47
+
48
+ // src/features/time-grid/adapters/inbound/TimeGridKeyboardProxy.web.tsx
49
+ import { jsx } from "react/jsx-runtime";
50
+ function TimeGridKeyboardProxy({ children, onKeyDown }) {
51
+ return /* @__PURE__ */ jsx("div", {
52
+ onKeyDown: (event) => {
53
+ if (onKeyDown(event.key))
54
+ event.preventDefault();
55
+ },
56
+ style: { display: "flex", flex: 1 },
57
+ children
58
+ });
59
+ }
60
+
61
+ // src/features/time-grid/adapters/inbound/TimeGrid.tsx
62
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
63
+ function TimeGrid({
64
+ contentWidth,
65
+ focusedIntervalId,
66
+ height,
67
+ interactionPolicy,
68
+ intervals,
69
+ lanes,
70
+ onFocusedIntervalIdChange,
71
+ onIntervalPress,
72
+ onViewportChange,
73
+ onVisibleIntervalIdsChange,
74
+ overscanPixels,
75
+ renderInterval,
76
+ renderLaneLabel,
77
+ revealPaddingPixels,
78
+ selectedIntervalIds = [],
79
+ testID,
80
+ width,
81
+ zoom
82
+ }) {
83
+ const scale = Math.max(0.01, zoom ?? 1);
84
+ const [scrollOffsets, setScrollOffsets] = React.useState(() => ({
85
+ offsetX: 0,
86
+ offsetY: 0
87
+ }));
88
+ const viewport = React.useMemo(() => ({
89
+ ...scrollOffsets,
90
+ height,
91
+ pixelsPerUnitX: scale,
92
+ pixelsPerUnitY: scale,
93
+ width
94
+ }), [height, scale, scrollOffsets, width]);
95
+ const intervalById = React.useMemo(() => new Map(intervals.map((interval) => [interval.id, interval])), [intervals]);
96
+ const selectedIds = React.useMemo(() => new Set(selectedIntervalIds), [selectedIntervalIds]);
97
+ const contentHeight = React.useMemo(() => lanes.reduce((total, lane) => total + lane.height, 0), [lanes]);
98
+ const visibleIntervals = React.useMemo(() => resolveTimeGridVisibleIntervals(lanes, intervals, viewport, overscanPixels), [intervals, lanes, overscanPixels, viewport]);
99
+ const focusedPlacement = React.useMemo(() => {
100
+ const focusedInterval = intervals.find((interval) => interval.id === focusedIntervalId);
101
+ return focusedInterval ? getLaneIntervalPlacement(lanes, focusedInterval) : undefined;
102
+ }, [focusedIntervalId, intervals, lanes]);
103
+ const gridItems = React.useMemo(() => focusedPlacement && !visibleIntervals.some((interval) => interval.id === focusedPlacement.id) ? [...visibleIntervals, focusedPlacement] : visibleIntervals, [focusedPlacement, visibleIntervals]);
104
+ const labelIntervals = React.useMemo(() => lanes.map((lane) => ({
105
+ extent: contentWidth,
106
+ id: `lane-label-${lane.id}`,
107
+ laneId: lane.id,
108
+ start: 0
109
+ })), [contentWidth, lanes]);
110
+ const visibleLabels = React.useMemo(() => resolveTimeGridVisibleIntervals(lanes, labelIntervals, viewport, overscanPixels), [labelIntervals, lanes, overscanPixels, viewport]);
111
+ const handleViewportChange = React.useCallback((nextViewport) => {
112
+ setScrollOffsets((current) => current.offsetX === nextViewport.offsetX && current.offsetY === nextViewport.offsetY ? current : { offsetX: nextViewport.offsetX, offsetY: nextViewport.offsetY });
113
+ onViewportChange?.(nextViewport);
114
+ }, [onViewportChange]);
115
+ const resolveNextFocusId = React.useCallback((intervalId, direction) => {
116
+ const allIntervals = resolveTimeGridVisibleIntervals(lanes, intervals, {
117
+ height: contentHeight,
118
+ offsetX: 0,
119
+ offsetY: 0,
120
+ pixelsPerUnitX: 1,
121
+ pixelsPerUnitY: 1,
122
+ width: contentWidth
123
+ });
124
+ return resolveTimeGridNextFocusId(allIntervals, intervalId, direction);
125
+ }, [contentHeight, contentWidth, intervals, lanes]);
126
+ return /* @__PURE__ */ jsxs(import_react_native.View, {
127
+ style: { flexDirection: "row", height, width },
128
+ testID,
129
+ children: [
130
+ renderLaneLabel ? /* @__PURE__ */ jsx2(import_react_native.View, {
131
+ accessibilityElementsHidden: true,
132
+ pointerEvents: "none",
133
+ style: { height, overflow: "hidden" },
134
+ children: visibleLabels.map((placement) => {
135
+ const lane = lanes[placement.laneIndex];
136
+ if (!lane)
137
+ return null;
138
+ return /* @__PURE__ */ jsx2(import_react_native.View, {
139
+ style: {
140
+ height: placement.height * scale,
141
+ position: "absolute",
142
+ top: (placement.y - viewport.offsetY) * scale
143
+ },
144
+ testID: testID === undefined ? undefined : `${testID}-lane-label-${lane.id}`,
145
+ children: renderLaneLabel(lane)
146
+ }, lane.id);
147
+ })
148
+ }) : null,
149
+ /* @__PURE__ */ jsx2(GridView2, {
150
+ contentHeight,
151
+ contentWidth,
152
+ focusedItemId: focusedIntervalId,
153
+ height,
154
+ interactionPolicy,
155
+ items: gridItems,
156
+ onViewportChange: handleViewportChange,
157
+ onVisibleItemIdsChange: onVisibleIntervalIdsChange,
158
+ overscanPixels,
159
+ renderItem: (placement) => {
160
+ const interval = intervalById.get(placement.id);
161
+ if (!interval)
162
+ return null;
163
+ const selected = selectedIds.has(interval.id);
164
+ return /* @__PURE__ */ jsx2(TimeGridKeyboardProxy, {
165
+ onKeyDown: (key) => {
166
+ const direction = resolveKeyboardDirection(key);
167
+ const nextId = direction === undefined ? undefined : resolveNextFocusId(interval.id, direction);
168
+ if (!nextId)
169
+ return false;
170
+ onFocusedIntervalIdChange?.(nextId);
171
+ return true;
172
+ },
173
+ children: /* @__PURE__ */ jsx2(import_react_native.Pressable, {
174
+ accessibilityLabel: `Interval ${interval.id}`,
175
+ accessibilityRole: "button",
176
+ disabled: interactionPolicy === "passive",
177
+ onPress: () => {
178
+ onFocusedIntervalIdChange?.(interval.id);
179
+ onIntervalPress?.(interval);
180
+ },
181
+ style: { flex: 1 },
182
+ testID: testID === undefined ? undefined : `${testID}-interval-${interval.id}`,
183
+ children: renderInterval(interval, selected)
184
+ })
185
+ });
186
+ },
187
+ revealPaddingPixels,
188
+ testID: testID === undefined ? undefined : `${testID}-viewport`,
189
+ width,
190
+ zoom
191
+ })
192
+ ]
193
+ });
194
+ }
195
+ function resolveKeyboardDirection(key) {
196
+ if (key === "ArrowDown")
197
+ return "down";
198
+ if (key === "ArrowLeft")
199
+ return "left";
200
+ if (key === "ArrowRight")
201
+ return "right";
202
+ if (key === "ArrowUp")
203
+ return "up";
204
+ return;
205
+ }
206
+ export {
207
+ TimeGrid
208
+ };
@@ -0,0 +1 @@
1
+ export * from './TimeGrid';
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ export * from './TimeGrid.js';
@@ -25,7 +25,7 @@ import {
25
25
  import {
26
26
  Text3
27
27
  } from "../../chunks/Accordion-9w8wg9mf.js";
28
- import"../../chunks/Accordion-q2z00p5r.js";
28
+ import"../../chunks/Accordion-gxj5qbpr.js";
29
29
  import {
30
30
  Icon2
31
31
  } from "../../chunks/Accordion-b96evb46.js";
@@ -34,7 +34,7 @@ import {
34
34
  } from "../../chunks/Accordion-a4cma5b6.js";
35
35
  import {
36
36
  Explorer2
37
- } from "../../chunks/Accordion-689w7frk.js";
37
+ } from "../../chunks/Accordion-d6azgz09.js";
38
38
  import"../../chunks/Accordion-40tenzcg.js";
39
39
  import"../../chunks/Accordion-45nc4bte.js";
40
40
  import {
@@ -1223,10 +1223,10 @@
1223
1223
  "components/explorer/index.js",
1224
1224
  "components/explorer/index.d.ts",
1225
1225
  "chunks/Accordion-09qs8gt1.js",
1226
+ "chunks/Accordion-0my2z6qe.js",
1226
1227
  "chunks/Accordion-184r2r82.js",
1227
1228
  "chunks/Accordion-42jfy1a1.js",
1228
1229
  "chunks/Accordion-59pa0677.js",
1229
- "chunks/Accordion-689w7frk.js",
1230
1230
  "chunks/Accordion-6a2hscrx.js",
1231
1231
  "chunks/Accordion-6wrr910w.js",
1232
1232
  "chunks/Accordion-7tjz25jh.js",
@@ -1236,11 +1236,11 @@
1236
1236
  "chunks/Accordion-b96evb46.js",
1237
1237
  "chunks/Accordion-bff0p3x4.js",
1238
1238
  "chunks/Accordion-bfzeab9x.js",
1239
- "chunks/Accordion-e6ddpz5v.js",
1239
+ "chunks/Accordion-d6azgz09.js",
1240
1240
  "chunks/Accordion-fre84yaq.js",
1241
+ "chunks/Accordion-gxj5qbpr.js",
1241
1242
  "chunks/Accordion-n4et7etk.js",
1242
1243
  "chunks/Accordion-nh0cs9hq.js",
1243
- "chunks/Accordion-q2z00p5r.js",
1244
1244
  "chunks/Accordion-srjya6dz.js",
1245
1245
  "chunks/Accordion-xgpzh4wq.js",
1246
1246
  "chunks/Accordion-z5a0tx18.js"
@@ -1289,10 +1289,10 @@
1289
1289
  "components/file-explorer/index.js",
1290
1290
  "components/file-explorer/index.d.ts",
1291
1291
  "chunks/Accordion-09qs8gt1.js",
1292
+ "chunks/Accordion-0my2z6qe.js",
1292
1293
  "chunks/Accordion-184r2r82.js",
1293
1294
  "chunks/Accordion-42jfy1a1.js",
1294
1295
  "chunks/Accordion-59pa0677.js",
1295
- "chunks/Accordion-689w7frk.js",
1296
1296
  "chunks/Accordion-6a2hscrx.js",
1297
1297
  "chunks/Accordion-6wrr910w.js",
1298
1298
  "chunks/Accordion-7tjz25jh.js",
@@ -1302,11 +1302,11 @@
1302
1302
  "chunks/Accordion-b96evb46.js",
1303
1303
  "chunks/Accordion-bff0p3x4.js",
1304
1304
  "chunks/Accordion-bfzeab9x.js",
1305
- "chunks/Accordion-e6ddpz5v.js",
1305
+ "chunks/Accordion-d6azgz09.js",
1306
1306
  "chunks/Accordion-fre84yaq.js",
1307
+ "chunks/Accordion-gxj5qbpr.js",
1307
1308
  "chunks/Accordion-n4et7etk.js",
1308
1309
  "chunks/Accordion-nh0cs9hq.js",
1309
- "chunks/Accordion-q2z00p5r.js",
1310
1310
  "chunks/Accordion-srjya6dz.js",
1311
1311
  "chunks/Accordion-xgpzh4wq.js",
1312
1312
  "chunks/Accordion-z5a0tx18.js"
@@ -1732,11 +1732,11 @@
1732
1732
  "components/grid-line-overlay/GridLineOverlay.d.ts",
1733
1733
  "components/grid-line-overlay/index.js",
1734
1734
  "components/grid-line-overlay/index.d.ts",
1735
+ "chunks/Accordion-0my2z6qe.js",
1735
1736
  "chunks/Accordion-42jfy1a1.js",
1736
1737
  "chunks/Accordion-59pa0677.js",
1737
1738
  "chunks/Accordion-6wrr910w.js",
1738
- "chunks/Accordion-e6ddpz5v.js",
1739
- "chunks/Accordion-e9ewv367.js",
1739
+ "chunks/Accordion-7qfd4cb4.js",
1740
1740
  "chunks/Accordion-nh0cs9hq.js",
1741
1741
  "chunks/Accordion-srjya6dz.js",
1742
1742
  "chunks/Accordion-xgpzh4wq.js"
@@ -1752,11 +1752,11 @@
1752
1752
  "components/grid-ruler/GridRuler.d.ts",
1753
1753
  "components/grid-ruler/index.js",
1754
1754
  "components/grid-ruler/index.d.ts",
1755
+ "chunks/Accordion-0my2z6qe.js",
1755
1756
  "chunks/Accordion-42jfy1a1.js",
1756
1757
  "chunks/Accordion-59pa0677.js",
1757
1758
  "chunks/Accordion-6wrr910w.js",
1758
- "chunks/Accordion-e6ddpz5v.js",
1759
- "chunks/Accordion-e9ewv367.js",
1759
+ "chunks/Accordion-7qfd4cb4.js",
1760
1760
  "chunks/Accordion-nh0cs9hq.js",
1761
1761
  "chunks/Accordion-srjya6dz.js",
1762
1762
  "chunks/Accordion-xgpzh4wq.js"
@@ -1772,9 +1772,9 @@
1772
1772
  "components/grid-view/GridView.d.ts",
1773
1773
  "components/grid-view/index.js",
1774
1774
  "components/grid-view/index.d.ts",
1775
- "chunks/Accordion-e6ddpz5v.js",
1775
+ "chunks/Accordion-0my2z6qe.js",
1776
+ "chunks/Accordion-gxj5qbpr.js",
1776
1777
  "chunks/Accordion-nh0cs9hq.js",
1777
- "chunks/Accordion-q2z00p5r.js",
1778
1778
  "chunks/Accordion-xgpzh4wq.js"
1779
1779
  ],
1780
1780
  "sourceKind": "public"
@@ -2098,10 +2098,10 @@
2098
2098
  "components/media-explorer/index.js",
2099
2099
  "components/media-explorer/index.d.ts",
2100
2100
  "chunks/Accordion-09qs8gt1.js",
2101
+ "chunks/Accordion-0my2z6qe.js",
2101
2102
  "chunks/Accordion-184r2r82.js",
2102
2103
  "chunks/Accordion-42jfy1a1.js",
2103
2104
  "chunks/Accordion-59pa0677.js",
2104
- "chunks/Accordion-689w7frk.js",
2105
2105
  "chunks/Accordion-6a2hscrx.js",
2106
2106
  "chunks/Accordion-6wrr910w.js",
2107
2107
  "chunks/Accordion-7tjz25jh.js",
@@ -2111,11 +2111,11 @@
2111
2111
  "chunks/Accordion-b96evb46.js",
2112
2112
  "chunks/Accordion-bff0p3x4.js",
2113
2113
  "chunks/Accordion-bfzeab9x.js",
2114
- "chunks/Accordion-e6ddpz5v.js",
2114
+ "chunks/Accordion-d6azgz09.js",
2115
2115
  "chunks/Accordion-fre84yaq.js",
2116
+ "chunks/Accordion-gxj5qbpr.js",
2116
2117
  "chunks/Accordion-n4et7etk.js",
2117
2118
  "chunks/Accordion-nh0cs9hq.js",
2118
- "chunks/Accordion-q2z00p5r.js",
2119
2119
  "chunks/Accordion-srjya6dz.js",
2120
2120
  "chunks/Accordion-xgpzh4wq.js",
2121
2121
  "chunks/Accordion-z5a0tx18.js"
@@ -3398,6 +3398,22 @@
3398
3398
  ],
3399
3399
  "sourceKind": "public"
3400
3400
  },
3401
+ {
3402
+ "component": "spatial-grid",
3403
+ "exportName": "SpatialGrid",
3404
+ "featurePath": "spatial-grid",
3405
+ "files": [
3406
+ "components/spatial-grid/SpatialGrid.js",
3407
+ "components/spatial-grid/SpatialGrid.d.ts",
3408
+ "components/spatial-grid/index.js",
3409
+ "components/spatial-grid/index.d.ts",
3410
+ "chunks/Accordion-0my2z6qe.js",
3411
+ "chunks/Accordion-gxj5qbpr.js",
3412
+ "chunks/Accordion-nh0cs9hq.js",
3413
+ "chunks/Accordion-xgpzh4wq.js"
3414
+ ],
3415
+ "sourceKind": "public"
3416
+ },
3401
3417
  {
3402
3418
  "component": "surface",
3403
3419
  "exportName": "Surface",
@@ -3647,9 +3663,25 @@
3647
3663
  "components/tile-grid/TileGrid.d.ts",
3648
3664
  "components/tile-grid/index.js",
3649
3665
  "components/tile-grid/index.d.ts",
3650
- "chunks/Accordion-e6ddpz5v.js",
3666
+ "chunks/Accordion-0my2z6qe.js",
3667
+ "chunks/Accordion-gxj5qbpr.js",
3668
+ "chunks/Accordion-nh0cs9hq.js",
3669
+ "chunks/Accordion-xgpzh4wq.js"
3670
+ ],
3671
+ "sourceKind": "public"
3672
+ },
3673
+ {
3674
+ "component": "time-grid",
3675
+ "exportName": "TimeGrid",
3676
+ "featurePath": "time-grid",
3677
+ "files": [
3678
+ "components/time-grid/TimeGrid.js",
3679
+ "components/time-grid/TimeGrid.d.ts",
3680
+ "components/time-grid/index.js",
3681
+ "components/time-grid/index.d.ts",
3682
+ "chunks/Accordion-0my2z6qe.js",
3683
+ "chunks/Accordion-gxj5qbpr.js",
3651
3684
  "chunks/Accordion-nh0cs9hq.js",
3652
- "chunks/Accordion-q2z00p5r.js",
3653
3685
  "chunks/Accordion-xgpzh4wq.js"
3654
3686
  ],
3655
3687
  "sourceKind": "public"
@@ -3894,6 +3926,7 @@
3894
3926
  "chunks/Accordion-090y18cv.js",
3895
3927
  "chunks/Accordion-09qs8gt1.js",
3896
3928
  "chunks/Accordion-0gfsj9qh.js",
3929
+ "chunks/Accordion-0my2z6qe.js",
3897
3930
  "chunks/Accordion-184r2r82.js",
3898
3931
  "chunks/Accordion-2nesr9cv.js",
3899
3932
  "chunks/Accordion-40tenzcg.js",
@@ -3901,7 +3934,6 @@
3901
3934
  "chunks/Accordion-45nc4bte.js",
3902
3935
  "chunks/Accordion-59pa0677.js",
3903
3936
  "chunks/Accordion-61e19g3e.js",
3904
- "chunks/Accordion-689w7frk.js",
3905
3937
  "chunks/Accordion-6a2hscrx.js",
3906
3938
  "chunks/Accordion-6rrqpb2h.js",
3907
3939
  "chunks/Accordion-6wrr910w.js",
@@ -3914,16 +3946,16 @@
3914
3946
  "chunks/Accordion-be2yhfqz.js",
3915
3947
  "chunks/Accordion-bff0p3x4.js",
3916
3948
  "chunks/Accordion-bfzeab9x.js",
3917
- "chunks/Accordion-e6ddpz5v.js",
3949
+ "chunks/Accordion-d6azgz09.js",
3918
3950
  "chunks/Accordion-eqvdv7tt.js",
3919
3951
  "chunks/Accordion-fre84yaq.js",
3952
+ "chunks/Accordion-gxj5qbpr.js",
3920
3953
  "chunks/Accordion-kjtcbe09.js",
3921
3954
  "chunks/Accordion-n4et7etk.js",
3922
3955
  "chunks/Accordion-n7y08rz5.js",
3923
3956
  "chunks/Accordion-nh0cs9hq.js",
3924
3957
  "chunks/Accordion-nnv76yff.js",
3925
3958
  "chunks/Accordion-pvj5npzc.js",
3926
- "chunks/Accordion-q2z00p5r.js",
3927
3959
  "chunks/Accordion-srjya6dz.js",
3928
3960
  "chunks/Accordion-wyxmd0n0.js",
3929
3961
  "chunks/Accordion-xgpzh4wq.js",