@dxos/plugin-sheet 0.8.1 → 0.8.2-main.10c050d

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 (188) hide show
  1. package/dist/lib/browser/SheetContainer-GXPG3ZDN.mjs +351 -0
  2. package/dist/lib/browser/SheetContainer-GXPG3ZDN.mjs.map +7 -0
  3. package/dist/lib/browser/anchor-sort-CUTFYIT4.mjs +24 -0
  4. package/dist/lib/browser/anchor-sort-CUTFYIT4.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-ZOKEQL2K.mjs → chunk-5FLX3UGU.mjs} +55 -63
  6. package/dist/lib/browser/chunk-5FLX3UGU.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-AYMJXZFS.mjs +847 -0
  8. package/dist/lib/browser/chunk-AYMJXZFS.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-AT5ZK6JD.mjs → chunk-FJRLDX7Z.mjs} +1 -1
  10. package/dist/lib/browser/chunk-FJRLDX7Z.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-EMSCNWEK.mjs → chunk-IR42IS3F.mjs} +2 -2
  12. package/dist/lib/{node-esm/chunk-76T5X4VP.mjs.map → browser/chunk-IR42IS3F.mjs.map} +1 -1
  13. package/dist/lib/browser/{compute-graph-registry-WEJLJJ6T.mjs → compute-graph-registry-IXGGJJBU.mjs} +3 -3
  14. package/dist/lib/browser/compute-graph-registry-IXGGJJBU.mjs.map +7 -0
  15. package/dist/lib/browser/index.mjs +17 -16
  16. package/dist/lib/browser/index.mjs.map +3 -3
  17. package/dist/lib/browser/{intent-resolver-6OUEM3IG.mjs → intent-resolver-UI4DHURQ.mjs} +2 -2
  18. package/dist/lib/browser/{markdown-DR4RDEEY.mjs → markdown-T4TUP4BF.mjs} +4 -4
  19. package/dist/lib/browser/markdown-T4TUP4BF.mjs.map +7 -0
  20. package/dist/lib/browser/meta.json +1 -1
  21. package/dist/lib/browser/{react-surface-ECKBP3UZ.mjs → react-surface-KI6T5M2X.mjs} +5 -5
  22. package/dist/lib/browser/types/index.mjs +1 -1
  23. package/dist/lib/node/SheetContainer-UUDOHLZR.cjs +351 -0
  24. package/dist/lib/node/SheetContainer-UUDOHLZR.cjs.map +7 -0
  25. package/dist/lib/node/{thread-WP43BC4N.cjs → anchor-sort-LTLYUTUP.cjs} +17 -10
  26. package/dist/lib/node/anchor-sort-LTLYUTUP.cjs.map +7 -0
  27. package/dist/lib/node/{chunk-D4MOMCEU.cjs → chunk-76NESQLB.cjs} +70 -78
  28. package/dist/lib/node/chunk-76NESQLB.cjs.map +7 -0
  29. package/dist/lib/node/chunk-BXBNSNDK.cjs +855 -0
  30. package/dist/lib/node/chunk-BXBNSNDK.cjs.map +7 -0
  31. package/dist/lib/node/{chunk-LEV7OSTK.cjs → chunk-FIM6EZ6M.cjs} +4 -4
  32. package/dist/lib/node/chunk-FIM6EZ6M.cjs.map +7 -0
  33. package/dist/lib/node/{chunk-O2FOEUYB.cjs → chunk-LJWWS53Z.cjs} +5 -5
  34. package/dist/lib/node/{chunk-O2FOEUYB.cjs.map → chunk-LJWWS53Z.cjs.map} +1 -1
  35. package/dist/lib/node/{compute-graph-registry-VVSRJUGS.cjs → compute-graph-registry-ARLDHPFW.cjs} +7 -7
  36. package/dist/lib/node/compute-graph-registry-ARLDHPFW.cjs.map +7 -0
  37. package/dist/lib/node/index.cjs +21 -20
  38. package/dist/lib/node/index.cjs.map +3 -3
  39. package/dist/lib/node/{intent-resolver-ICHNDL6F.cjs → intent-resolver-EVLGL7VZ.cjs} +9 -9
  40. package/dist/lib/node/{markdown-E7OUIMZO.cjs → markdown-DBPOAYI7.cjs} +8 -8
  41. package/dist/lib/node/markdown-DBPOAYI7.cjs.map +7 -0
  42. package/dist/lib/node/meta.json +1 -1
  43. package/dist/lib/node/{react-surface-6PBWE75L.cjs → react-surface-QHAPOAR2.cjs} +14 -14
  44. package/dist/lib/node/types/index.cjs +29 -29
  45. package/dist/lib/node/types/index.cjs.map +1 -1
  46. package/dist/lib/node-esm/SheetContainer-44KHKMPI.mjs +352 -0
  47. package/dist/lib/node-esm/SheetContainer-44KHKMPI.mjs.map +7 -0
  48. package/dist/lib/node-esm/anchor-sort-3E2VGLO6.mjs +25 -0
  49. package/dist/lib/node-esm/anchor-sort-3E2VGLO6.mjs.map +7 -0
  50. package/dist/lib/node-esm/{chunk-6NB67Y6X.mjs → chunk-DIF3IOAB.mjs} +55 -63
  51. package/dist/lib/node-esm/chunk-DIF3IOAB.mjs.map +7 -0
  52. package/dist/lib/node-esm/chunk-GCCM7R45.mjs +848 -0
  53. package/dist/lib/node-esm/chunk-GCCM7R45.mjs.map +7 -0
  54. package/dist/lib/node-esm/{chunk-76T5X4VP.mjs → chunk-IQ76YE6M.mjs} +2 -2
  55. package/dist/lib/{browser/chunk-EMSCNWEK.mjs.map → node-esm/chunk-IQ76YE6M.mjs.map} +1 -1
  56. package/dist/lib/node-esm/{chunk-HXBUY5ET.mjs → chunk-NMCVJWDT.mjs} +1 -1
  57. package/dist/lib/node-esm/chunk-NMCVJWDT.mjs.map +7 -0
  58. package/dist/lib/node-esm/{compute-graph-registry-PBQ52KH6.mjs → compute-graph-registry-7PDWXMHF.mjs} +3 -3
  59. package/dist/lib/node-esm/compute-graph-registry-7PDWXMHF.mjs.map +7 -0
  60. package/dist/lib/node-esm/index.mjs +17 -16
  61. package/dist/lib/node-esm/index.mjs.map +3 -3
  62. package/dist/lib/node-esm/{intent-resolver-2JNQCFCI.mjs → intent-resolver-TPOH5JM5.mjs} +2 -2
  63. package/dist/lib/node-esm/{markdown-BPKS2TNG.mjs → markdown-WWUJ3E5F.mjs} +4 -4
  64. package/dist/lib/node-esm/markdown-WWUJ3E5F.mjs.map +7 -0
  65. package/dist/lib/node-esm/meta.json +1 -1
  66. package/dist/lib/node-esm/{react-surface-UM2Y3ZWZ.mjs → react-surface-XT2J3S67.mjs} +5 -5
  67. package/dist/lib/node-esm/types/index.mjs +1 -1
  68. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  69. package/dist/types/src/capabilities/anchor-sort.d.ts +6 -0
  70. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -0
  71. package/dist/types/src/capabilities/compute-graph-registry.d.ts +2 -2
  72. package/dist/types/src/capabilities/compute-graph-registry.d.ts.map +1 -1
  73. package/dist/types/src/capabilities/index.d.ts +6 -6
  74. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  75. package/dist/types/src/capabilities/markdown.d.ts +2 -2
  76. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  77. package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts.map +1 -1
  78. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
  79. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +1 -1
  80. package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
  81. package/dist/types/src/components/RangeList/RangeList.d.ts.map +1 -1
  82. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts +3 -2
  83. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +1 -1
  84. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
  85. package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +1 -1
  86. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts +2 -2
  87. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -1
  88. package/dist/types/src/components/SheetToolbar/align.d.ts +4 -1
  89. package/dist/types/src/components/SheetToolbar/align.d.ts.map +1 -1
  90. package/dist/types/src/components/SheetToolbar/style.d.ts +3 -1
  91. package/dist/types/src/components/SheetToolbar/style.d.ts.map +1 -1
  92. package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts +2 -3
  93. package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts.map +1 -1
  94. package/dist/types/src/components/index.d.ts +1 -6
  95. package/dist/types/src/components/index.d.ts.map +1 -1
  96. package/dist/types/src/extensions/compute.d.ts.map +1 -1
  97. package/dist/types/src/extensions/editor/extension.d.ts.map +1 -1
  98. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  99. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  100. package/dist/types/src/model/testing.d.ts.map +1 -1
  101. package/dist/types/src/model/useSheetModel.d.ts.map +1 -1
  102. package/dist/types/src/serializer.d.ts.map +1 -1
  103. package/dist/types/src/testing/data.d.ts.map +1 -1
  104. package/dist/types/src/testing/playwright/sheet-manager.d.ts.map +1 -1
  105. package/dist/types/src/testing/testing.d.ts.map +1 -1
  106. package/dist/types/src/translations.d.ts +2 -54
  107. package/dist/types/src/translations.d.ts.map +1 -1
  108. package/dist/types/src/types/schema.d.ts +38 -150
  109. package/dist/types/src/types/schema.d.ts.map +1 -1
  110. package/dist/types/src/types/sheet-range-types.d.ts.map +1 -1
  111. package/dist/types/src/types/types.d.ts +36 -36
  112. package/dist/types/src/types/types.d.ts.map +1 -1
  113. package/dist/types/src/types/util.d.ts.map +1 -1
  114. package/dist/types/tsconfig.tsbuildinfo +1 -1
  115. package/package.json +55 -48
  116. package/src/SheetPlugin.tsx +7 -5
  117. package/src/capabilities/anchor-sort.ts +22 -0
  118. package/src/capabilities/compute-graph-registry.ts +3 -3
  119. package/src/capabilities/index.ts +1 -1
  120. package/src/capabilities/markdown.ts +3 -3
  121. package/src/components/ComputeGraph/compute-graph.stories.tsx +4 -4
  122. package/src/components/FunctionEditor/FunctionEditor.tsx +1 -1
  123. package/src/components/GridSheet/GridSheet.stories.tsx +5 -2
  124. package/src/components/GridSheet/GridSheet.tsx +18 -12
  125. package/src/components/GridSheet/SheetCellEditor.stories.tsx +2 -2
  126. package/src/components/GridSheet/util.ts +17 -11
  127. package/src/components/RangeList/RangeList.tsx +2 -2
  128. package/src/components/SheetContainer/SheetContainer.stories.tsx +3 -6
  129. package/src/components/SheetContainer/SheetContainer.tsx +5 -8
  130. package/src/components/SheetToolbar/SheetToolbar.stories.tsx +2 -2
  131. package/src/components/SheetToolbar/SheetToolbar.tsx +56 -20
  132. package/src/components/SheetToolbar/align.ts +44 -14
  133. package/src/components/SheetToolbar/style.ts +48 -12
  134. package/src/components/SheetToolbar/useToolbarState.ts +3 -4
  135. package/src/extensions/compute.ts +1 -1
  136. package/src/integrations/thread-ranges.ts +14 -17
  137. package/src/model/sheet-model.test.ts +1 -1
  138. package/src/model/sheet-model.ts +17 -17
  139. package/src/sanity.test.ts +3 -3
  140. package/src/serializer.ts +3 -4
  141. package/src/testing/playwright/sheet-manager.ts +9 -9
  142. package/src/types/schema.ts +20 -22
  143. package/src/types/types.ts +25 -25
  144. package/src/types/util.ts +2 -3
  145. package/dist/lib/browser/SheetContainer-B3A5443Z.mjs +0 -370
  146. package/dist/lib/browser/SheetContainer-B3A5443Z.mjs.map +0 -7
  147. package/dist/lib/browser/chunk-AT5ZK6JD.mjs.map +0 -7
  148. package/dist/lib/browser/chunk-CHMPICA6.mjs +0 -815
  149. package/dist/lib/browser/chunk-CHMPICA6.mjs.map +0 -7
  150. package/dist/lib/browser/chunk-ZOKEQL2K.mjs.map +0 -7
  151. package/dist/lib/browser/compute-graph-registry-WEJLJJ6T.mjs.map +0 -7
  152. package/dist/lib/browser/markdown-DR4RDEEY.mjs.map +0 -7
  153. package/dist/lib/browser/thread-76MK2FMV.mjs +0 -17
  154. package/dist/lib/browser/thread-76MK2FMV.mjs.map +0 -7
  155. package/dist/lib/node/SheetContainer-LGRD3TTQ.cjs +0 -364
  156. package/dist/lib/node/SheetContainer-LGRD3TTQ.cjs.map +0 -7
  157. package/dist/lib/node/chunk-AEH3L5QZ.cjs +0 -822
  158. package/dist/lib/node/chunk-AEH3L5QZ.cjs.map +0 -7
  159. package/dist/lib/node/chunk-D4MOMCEU.cjs.map +0 -7
  160. package/dist/lib/node/chunk-LEV7OSTK.cjs.map +0 -7
  161. package/dist/lib/node/compute-graph-registry-VVSRJUGS.cjs.map +0 -7
  162. package/dist/lib/node/markdown-E7OUIMZO.cjs.map +0 -7
  163. package/dist/lib/node/thread-WP43BC4N.cjs.map +0 -7
  164. package/dist/lib/node-esm/SheetContainer-4FNTLG5R.mjs +0 -371
  165. package/dist/lib/node-esm/SheetContainer-4FNTLG5R.mjs.map +0 -7
  166. package/dist/lib/node-esm/chunk-6NB67Y6X.mjs.map +0 -7
  167. package/dist/lib/node-esm/chunk-HXBUY5ET.mjs.map +0 -7
  168. package/dist/lib/node-esm/chunk-WQHYR4WD.mjs +0 -816
  169. package/dist/lib/node-esm/chunk-WQHYR4WD.mjs.map +0 -7
  170. package/dist/lib/node-esm/compute-graph-registry-PBQ52KH6.mjs.map +0 -7
  171. package/dist/lib/node-esm/markdown-BPKS2TNG.mjs.map +0 -7
  172. package/dist/lib/node-esm/thread-4NCPE5FK.mjs +0 -18
  173. package/dist/lib/node-esm/thread-4NCPE5FK.mjs.map +0 -7
  174. package/dist/types/src/capabilities/thread.d.ts +0 -6
  175. package/dist/types/src/capabilities/thread.d.ts.map +0 -1
  176. package/dist/types/src/components/SheetToolbar/comment.d.ts +0 -23
  177. package/dist/types/src/components/SheetToolbar/comment.d.ts.map +0 -1
  178. package/dist/types/src/components/SheetToolbar/useToolbarAction.d.ts +0 -8
  179. package/dist/types/src/components/SheetToolbar/useToolbarAction.d.ts.map +0 -1
  180. package/src/capabilities/thread.ts +0 -14
  181. package/src/components/SheetToolbar/comment.ts +0 -56
  182. package/src/components/SheetToolbar/useToolbarAction.ts +0 -87
  183. /package/dist/lib/browser/{intent-resolver-6OUEM3IG.mjs.map → intent-resolver-UI4DHURQ.mjs.map} +0 -0
  184. /package/dist/lib/browser/{react-surface-ECKBP3UZ.mjs.map → react-surface-KI6T5M2X.mjs.map} +0 -0
  185. /package/dist/lib/node/{intent-resolver-ICHNDL6F.cjs.map → intent-resolver-EVLGL7VZ.cjs.map} +0 -0
  186. /package/dist/lib/node/{react-surface-6PBWE75L.cjs.map → react-surface-QHAPOAR2.cjs.map} +0 -0
  187. /package/dist/lib/node-esm/{intent-resolver-2JNQCFCI.mjs.map → intent-resolver-TPOH5JM5.mjs.map} +0 -0
  188. /package/dist/lib/node-esm/{react-surface-UM2Y3ZWZ.mjs.map → react-surface-XT2J3S67.mjs.map} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-sheet",
3
- "version": "0.8.1",
3
+ "version": "0.8.2-main.10c050d",
4
4
  "description": "Braneframe sketch plugin",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -45,7 +45,8 @@
45
45
  "@lezer/highlight": "^1.2.1",
46
46
  "@lezer/lezer": "^1.1.2",
47
47
  "@lezer/lr": "^1.4.2",
48
- "@preact/signals-core": "^1.6.0",
48
+ "@preact-signals/safe-react": "^0.9.0",
49
+ "@preact/signals-core": "^1.9.0",
49
50
  "@radix-ui/react-context": "1.1.1",
50
51
  "codemirror-lang-spreadsheet": "^1.3.0",
51
52
  "date-fns": "^3.3.1",
@@ -53,67 +54,73 @@
53
54
  "re-resizable": "^6.9.17",
54
55
  "react-markdown": "^8.0.5",
55
56
  "react-resize-detector": "^11.0.1",
56
- "@dxos/app-framework": "0.8.1",
57
- "@dxos/async": "0.8.1",
58
- "@dxos/client": "0.8.1",
59
- "@dxos/compute": "0.8.1",
60
- "@dxos/crypto": "0.8.1",
61
- "@dxos/echo-schema": "0.8.1",
62
- "@dxos/debug": "0.8.1",
63
- "@dxos/context": "0.8.1",
64
- "@dxos/functions": "0.8.1",
65
- "@dxos/invariant": "0.8.1",
66
- "@dxos/keys": "0.8.1",
67
- "@dxos/plugin-attention": "0.8.1",
68
- "@dxos/plugin-deck": "0.8.1",
69
- "@dxos/live-object": "0.8.1",
70
- "@dxos/log": "0.8.1",
71
- "@dxos/plugin-client": "0.8.1",
72
- "@dxos/plugin-graph": "0.8.1",
73
- "@dxos/plugin-script": "0.8.1",
74
- "@dxos/plugin-markdown": "0.8.1",
75
- "@dxos/plugin-space": "0.8.1",
76
- "@dxos/plugin-stack": "0.8.1",
77
- "@dxos/plugin-thread": "0.8.1",
78
- "@dxos/react-client": "0.8.1",
79
- "@dxos/react-ui-attention": "0.8.1",
80
- "@dxos/react-ui-editor": "0.8.1",
81
- "@dxos/react-hooks": "0.8.1",
82
- "@dxos/react-ui-form": "0.8.1",
83
- "@dxos/react-ui-grid": "0.8.1",
84
- "@dxos/react-ui-list": "0.8.1",
85
- "@dxos/react-ui-stack": "0.8.1",
86
- "@dxos/schema": "0.8.1",
87
- "@dxos/util": "0.8.1",
88
- "@dxos/react-ui-menu": "0.8.1"
57
+ "@dxos/app-framework": "0.8.2-main.10c050d",
58
+ "@dxos/async": "0.8.2-main.10c050d",
59
+ "@dxos/client": "0.8.2-main.10c050d",
60
+ "@dxos/compute": "0.8.2-main.10c050d",
61
+ "@dxos/context": "0.8.2-main.10c050d",
62
+ "@dxos/crypto": "0.8.2-main.10c050d",
63
+ "@dxos/debug": "0.8.2-main.10c050d",
64
+ "@dxos/echo": "0.8.2-main.10c050d",
65
+ "@dxos/invariant": "0.8.2-main.10c050d",
66
+ "@dxos/functions": "0.8.2-main.10c050d",
67
+ "@dxos/echo-schema": "0.8.2-main.10c050d",
68
+ "@dxos/keys": "0.8.2-main.10c050d",
69
+ "@dxos/lit-grid": "0.8.2-main.10c050d",
70
+ "@dxos/log": "0.8.2-main.10c050d",
71
+ "@dxos/live-object": "0.8.2-main.10c050d",
72
+ "@dxos/plugin-attention": "0.8.2-main.10c050d",
73
+ "@dxos/plugin-client": "0.8.2-main.10c050d",
74
+ "@dxos/plugin-deck": "0.8.2-main.10c050d",
75
+ "@dxos/plugin-markdown": "0.8.2-main.10c050d",
76
+ "@dxos/plugin-script": "0.8.2-main.10c050d",
77
+ "@dxos/plugin-graph": "0.8.2-main.10c050d",
78
+ "@dxos/plugin-stack": "0.8.2-main.10c050d",
79
+ "@dxos/plugin-space": "0.8.2-main.10c050d",
80
+ "@dxos/plugin-thread": "0.8.2-main.10c050d",
81
+ "@dxos/react-client": "0.8.2-main.10c050d",
82
+ "@dxos/react-hooks": "0.8.2-main.10c050d",
83
+ "@dxos/react-ui-attention": "0.8.2-main.10c050d",
84
+ "@dxos/react-ui-editor": "0.8.2-main.10c050d",
85
+ "@dxos/react-ui-form": "0.8.2-main.10c050d",
86
+ "@dxos/react-ui-stack": "0.8.2-main.10c050d",
87
+ "@dxos/react-ui-list": "0.8.2-main.10c050d",
88
+ "@dxos/react-ui-grid": "0.8.2-main.10c050d",
89
+ "@dxos/util": "0.8.2-main.10c050d",
90
+ "@dxos/schema": "0.8.2-main.10c050d",
91
+ "@dxos/react-ui-menu": "0.8.2-main.10c050d"
89
92
  },
90
93
  "devDependencies": {
94
+ "@effect-rx/rx-react": "^0.34.1",
95
+ "@effect/platform": "0.80.12",
91
96
  "@lezer/generator": "^1.7.1",
92
97
  "@tldraw/indices": "^2.0.0-alpha.14",
93
98
  "@types/lodash.defaultsdeep": "^4.6.6",
94
99
  "@types/react": "~18.2.0",
95
100
  "@types/react-dom": "~18.2.0",
96
101
  "@types/react-window": "^1.8.8",
97
- "effect": "3.13.3",
102
+ "effect": "3.14.21",
98
103
  "react": "~18.2.0",
99
104
  "react-dom": "~18.2.0",
100
105
  "vite": "5.4.7",
101
- "@dxos/echo-generator": "0.8.1",
102
- "@dxos/random": "0.8.1",
103
- "@dxos/lit-grid": "0.8.1",
104
- "@dxos/react-ui-syntax-highlighter": "0.8.1",
105
- "@dxos/react-ui": "0.8.1",
106
- "@dxos/react-ui-types": "0.8.1",
107
- "@dxos/react-ui-theme": "0.8.1",
108
- "@dxos/storybook-utils": "0.8.1",
109
- "@dxos/test-utils": "0.8.1"
106
+ "@dxos/random": "0.8.2-main.10c050d",
107
+ "@dxos/echo-generator": "0.8.2-main.10c050d",
108
+ "@dxos/react-ui": "0.8.2-main.10c050d",
109
+ "@dxos/react-ui-syntax-highlighter": "0.8.2-main.10c050d",
110
+ "@dxos/lit-grid": "0.8.2-main.10c050d",
111
+ "@dxos/react-ui-theme": "0.8.2-main.10c050d",
112
+ "@dxos/react-ui-types": "0.8.2-main.10c050d",
113
+ "@dxos/test-utils": "0.8.2-main.10c050d",
114
+ "@dxos/storybook-utils": "0.8.2-main.10c050d"
110
115
  },
111
116
  "peerDependencies": {
112
- "effect": "3.13.3",
117
+ "@effect-rx/rx-react": "^0.34.1",
118
+ "@effect/platform": "0.80.12",
119
+ "effect": "^3.13.3",
113
120
  "react": "~18.2.0",
114
121
  "react-dom": "~18.2.0",
115
- "@dxos/react-ui": "0.8.1",
116
- "@dxos/react-ui-theme": "0.8.1"
122
+ "@dxos/react-ui": "0.8.2-main.10c050d",
123
+ "@dxos/react-ui-theme": "0.8.2-main.10c050d"
117
124
  },
118
125
  "publishConfig": {
119
126
  "access": "public"
@@ -5,10 +5,10 @@
5
5
  import { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from '@dxos/app-framework';
6
6
  import { ClientEvents } from '@dxos/plugin-client';
7
7
  import { MarkdownEvents } from '@dxos/plugin-markdown';
8
- import { SpaceCapabilities, ThreadEvents } from '@dxos/plugin-space';
8
+ import { SpaceCapabilities } from '@dxos/plugin-space';
9
9
  import { defineObjectForm } from '@dxos/plugin-space/types';
10
10
 
11
- import { Markdown, Thread, ReactSurface, IntentResolver, ComputeGraphRegistry } from './capabilities';
11
+ import { AnchorSort, Markdown, ReactSurface, IntentResolver, ComputeGraphRegistry } from './capabilities';
12
12
  import { meta } from './meta';
13
13
  import { serializer } from './serializer';
14
14
  import translations from './translations';
@@ -36,6 +36,7 @@ export const SheetPlugin = () =>
36
36
  label: (object: any) => (object instanceof SheetType ? object.name : undefined),
37
37
  icon: 'ph--grid-nine--regular',
38
38
  serializer,
39
+ comments: 'anchored',
39
40
  },
40
41
  }),
41
42
  }),
@@ -57,9 +58,10 @@ export const SheetPlugin = () =>
57
58
  activate: Markdown,
58
59
  }),
59
60
  defineModule({
60
- id: `${meta.id}/module/thread`,
61
- activatesOn: ThreadEvents.SetupThread,
62
- activate: Thread,
61
+ id: `${meta.id}/module/anchor-sort`,
62
+ // TODO(wittjosiah): More relevant event?
63
+ activatesOn: Events.AppGraphReady,
64
+ activate: AnchorSort,
63
65
  }),
64
66
  defineModule({
65
67
  id: `${meta.id}/module/react-surface`,
@@ -0,0 +1,22 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capabilities, contributes } from '@dxos/app-framework';
6
+ import { getSchemaTypename } from '@dxos/echo-schema';
7
+ import { getTarget } from '@dxos/react-client/echo';
8
+
9
+ import { compareIndexPositions, SheetType } from '../types';
10
+
11
+ export default () =>
12
+ contributes(Capabilities.AnchorSort, {
13
+ key: getSchemaTypename(SheetType)!,
14
+ sort: (anchorA, anchorB) => {
15
+ const sheet = getTarget(anchorA) as SheetType;
16
+ if (sheet !== getTarget(anchorB)) {
17
+ return 0;
18
+ }
19
+
20
+ return !anchorA.anchor || !anchorB.anchor ? 0 : compareIndexPositions(sheet, anchorA.anchor, anchorB.anchor);
21
+ },
22
+ });
@@ -2,7 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { contributes, type PluginsContext } from '@dxos/app-framework';
5
+ import { contributes, type PluginContext } from '@dxos/app-framework';
6
6
  import { ClientCapabilities } from '@dxos/plugin-client';
7
7
 
8
8
  import { SheetCapabilities } from './capabilities';
@@ -11,8 +11,8 @@ const isSecure = (protocol: string) => {
11
11
  return protocol === 'https:' || protocol === 'wss:';
12
12
  };
13
13
 
14
- export default async (context: PluginsContext) => {
15
- const client = context.requestCapability(ClientCapabilities.Client);
14
+ export default async (context: PluginContext) => {
15
+ const client = context.getCapability(ClientCapabilities.Client);
16
16
  let remoteFunctionUrl: string | undefined;
17
17
  if (client.config.values.runtime?.services?.edge?.url) {
18
18
  const url = new URL('/functions', client.config.values.runtime?.services?.edge?.url);
@@ -4,10 +4,10 @@
4
4
 
5
5
  import { lazy } from '@dxos/app-framework';
6
6
 
7
+ export const AnchorSort = lazy(() => import('./anchor-sort'));
7
8
  export const ComputeGraphRegistry = lazy(() => import('./compute-graph-registry'));
8
9
  export const IntentResolver = lazy(() => import('./intent-resolver'));
9
10
  export const Markdown = lazy(() => import('./markdown'));
10
11
  export const ReactSurface = lazy(() => import('./react-surface'));
11
- export const Thread = lazy(() => import('./thread'));
12
12
 
13
13
  export * from './capabilities';
@@ -2,17 +2,17 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { contributes, type PluginsContext } from '@dxos/app-framework';
5
+ import { contributes, type PluginContext } from '@dxos/app-framework';
6
6
  import { getSpace } from '@dxos/client/echo';
7
7
  import { MarkdownCapabilities } from '@dxos/plugin-markdown';
8
8
 
9
9
  import { SheetCapabilities } from './capabilities';
10
10
  import { computeGraphFacet } from '../extensions';
11
11
 
12
- export default (context: PluginsContext) =>
12
+ export default (context: PluginContext) =>
13
13
  contributes(MarkdownCapabilities.Extensions, [
14
14
  ({ document: doc }) => {
15
- const computeGraphRegistry = context.requestCapability(SheetCapabilities.ComputeGraphRegistry);
15
+ const computeGraphRegistry = context.getCapability(SheetCapabilities.ComputeGraphRegistry);
16
16
  const space = getSpace(doc);
17
17
  if (space) {
18
18
  const computeGraph = computeGraphRegistry.getOrCreateGraph(space);
@@ -8,8 +8,8 @@ import { type Meta } from '@storybook/react';
8
8
  import React, { useEffect, useRef, useState } from 'react';
9
9
 
10
10
  import { testFunctionPlugins } from '@dxos/compute/testing';
11
- import { FunctionType } from '@dxos/functions/types';
12
- import { create, useSpace, Filter } from '@dxos/react-client/echo';
11
+ import { FunctionType } from '@dxos/functions';
12
+ import { live, useSpace, Filter } from '@dxos/react-client/echo';
13
13
  import { withClientProvider } from '@dxos/react-client/testing';
14
14
  import { Toolbar, Button, Input } from '@dxos/react-ui';
15
15
  import { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';
@@ -44,14 +44,14 @@ const Story = () => {
44
44
  setResult({ functions: { standard: f1.length, echo: f2.length } });
45
45
  });
46
46
 
47
- space.db.add(create(FunctionType, { name: 'test', version: '0.0.1', binding: FUNCTION_NAME }));
47
+ space.db.add(live(FunctionType, { name: 'test', version: '0.0.1', binding: FUNCTION_NAME }));
48
48
  }
49
49
  }, [space, graph]);
50
50
 
51
51
  const inputRef = useRef<HTMLInputElement | null>(null);
52
52
  const handleTest = async () => {
53
53
  if (space && graph) {
54
- const { objects } = await space.db.query(Filter.schema(FunctionType)).run();
54
+ const { objects } = await space.db.query(Filter.type(FunctionType)).run();
55
55
  const mapped = graph.mapFunctionBindingToId(text);
56
56
  const unmapped = graph.mapFunctionBindingFromId(mapped);
57
57
  const internal = graph.mapFormulaToNative(text);
@@ -26,7 +26,7 @@ export const FunctionEditor = () => {
26
26
  }
27
27
 
28
28
  return (
29
- <div className='flex shrink-0 justify-between items-center px-4 py-1 text-sm attention-surface border-bs !border-separator'>
29
+ <div className='flex shrink-0 justify-between items-center px-4 py-1 text-sm bg-toolbarSurface border-bs !border-subduedSeparator'>
30
30
  <div className='flex gap-4 items-center'>
31
31
  <div className='flex w-16 items-center font-mono'>
32
32
  {(range && rangeToA1Notation(range)) || (cursor && addressToA1Notation(cursor))}
@@ -7,6 +7,7 @@ import '@dxos-theme';
7
7
  import { type Meta } from '@storybook/react';
8
8
  import React from 'react';
9
9
 
10
+ import { IntentPlugin } from '@dxos/app-framework';
10
11
  import { withPluginManager } from '@dxos/app-framework/testing';
11
12
  import { useSpace } from '@dxos/react-client/echo';
12
13
  import { withClientProvider } from '@dxos/react-client/testing';
@@ -41,8 +42,10 @@ const meta: Meta = {
41
42
  withClientProvider({ types: [SheetType], createSpace: true }),
42
43
  withComputeGraphDecorator(),
43
44
  withTheme,
44
- withLayout({ fullscreen: true, tooltips: true, classNames: 'grid' }),
45
- withPluginManager(),
45
+ withLayout({ fullscreen: true, classNames: 'grid' }),
46
+ withPluginManager({
47
+ plugins: [IntentPlugin()],
48
+ }),
46
49
  ],
47
50
  parameters: { translations },
48
51
  };
@@ -6,21 +6,22 @@ import React, {
6
6
  useCallback,
7
7
  useMemo,
8
8
  useRef,
9
+ useState,
9
10
  type FocusEvent,
10
11
  type KeyboardEvent,
11
12
  type WheelEvent,
12
13
  type MouseEvent,
13
- useState,
14
14
  } from 'react';
15
15
 
16
16
  import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
17
17
  import { rangeToA1Notation, type CellRange } from '@dxos/compute';
18
+ import { defaultColSize, defaultRowSize } from '@dxos/lit-grid';
18
19
  import { DropdownMenu, Icon, useTranslation } from '@dxos/react-ui';
19
20
  import { useAttention } from '@dxos/react-ui-attention';
20
21
  import {
21
22
  closestCell,
22
- defaultSizeRow,
23
23
  editorKeys,
24
+ parseCellIndex,
24
25
  Grid,
25
26
  GridCellEditor,
26
27
  type DxGridElement,
@@ -29,7 +30,6 @@ import {
29
30
  type EditorKeyHandler,
30
31
  type EditorBlurHandler,
31
32
  type GridContentProps,
32
- parseCellIndex,
33
33
  } from '@dxos/react-ui-grid';
34
34
 
35
35
  import { colLabelCell, rowLabelCell, useSheetModelDxGridProps } from './util';
@@ -58,18 +58,21 @@ const frozen = {
58
58
  frozenRowsStart: 1,
59
59
  };
60
60
 
61
+ const sheetColDefault = {
62
+ frozenColsStart: { size: 48, readonly: true },
63
+ grid: { size: defaultColSize, resizeable: true },
64
+ };
61
65
  const sheetRowDefault = {
62
- frozenRowsStart: { size: defaultSizeRow, readonly: true },
63
- grid: { size: defaultSizeRow, resizeable: true },
66
+ frozenRowsStart: { size: defaultRowSize, readonly: true },
67
+ grid: { size: defaultRowSize, resizeable: true },
64
68
  };
65
- const sheetColDefault = { frozenColsStart: { size: 48, readonly: true }, grid: { size: 180, resizeable: true } };
66
69
 
67
70
  export const GridSheet = () => {
68
71
  const { t } = useTranslation(SHEET_PLUGIN);
69
72
  const { id, model, editing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs, ignoreAttention } =
70
73
  useSheetContext();
71
74
  // NOTE(thure): using `useState` instead of `useRef` works with refs provided by `@lit/react` and gives us
72
- // a reliable dependency for `useEffect` whereas `useLayoutEffect` does not guarantee the element will be defined.
75
+ // a reliable dependency for `useEffect` whereas `useLayoutEffect` does not guarantee the element will be defined.
73
76
  const [dxGrid, setDxGrid] = useState<DxGridElement | null>(null);
74
77
  const [extraplanarFocus, setExtraplanarFocus] = useState<DxGridPosition | null>(null);
75
78
  const { dispatchPromise: dispatch } = useIntentDispatcher();
@@ -152,6 +155,7 @@ export const GridSheet = () => {
152
155
  },
153
156
  [editing],
154
157
  );
158
+
155
159
  const handleWheel = useCallback(
156
160
  (event: WheelEvent) => {
157
161
  if (!ignoreAttention && !hasAttention) {
@@ -302,7 +306,8 @@ export const GridSheet = () => {
302
306
  useSelectThreadOnCellFocus();
303
307
 
304
308
  return (
305
- <div role='none' className='relative min-bs-0'>
309
+ // TODO(thure): Why are Table’s and Sheet’s editor boxes off by 1px?
310
+ <div role='none' className='relative min-bs-0 [&_.cm-editor]:!border-lb [&_.cm-editor]:!border-transparent '>
306
311
  <GridCellEditor getCellContent={getCellContent} extension={extension} onBlur={handleBlur} />
307
312
  <Grid.Content
308
313
  initialCells={initialCells}
@@ -310,18 +315,19 @@ export const GridSheet = () => {
310
315
  limitRows={DEFAULT_ROWS}
311
316
  columns={columns}
312
317
  rows={rows}
313
- onAxisResize={handleAxisResize}
314
- onSelect={handleSelect}
315
- rowDefault={sheetRowDefault}
318
+ // TODO(burdon): `col` vs. `column`?
316
319
  columnDefault={sheetColDefault}
320
+ rowDefault={sheetRowDefault}
317
321
  frozen={frozen}
322
+ onAxisResize={handleAxisResize}
323
+ onSelect={handleSelect}
318
324
  onFocus={handleFocus}
319
325
  onWheelCapture={handleWheel}
320
326
  onKeyDown={handleKeyDown}
321
327
  onContextMenu={handleContextMenu}
322
328
  onClick={handleClick}
323
329
  overscroll='trap'
324
- className='[--dx-grid-base:var(--surface-bg)] [&_.dx-grid]:border-bs [&_.dx-grid]:absolute [&_.dx-grid]:inset-0 [&_.dx-grid]:border-separator'
330
+ className='[--dx-grid-base:var(--baseSurface)] [&_.dx-grid]:border-bs [&_.dx-grid]:border-be [&_.dx-grid]:absolute [&_.dx-grid]:inset-0 [&_.dx-grid]:border-separator'
325
331
  activeRefs={activeRefs}
326
332
  ref={setDxGrid}
327
333
  />
@@ -8,7 +8,7 @@ import { type Meta } from '@storybook/react';
8
8
  import React, { useEffect, useMemo, useState } from 'react';
9
9
 
10
10
  import { Client } from '@dxos/client';
11
- import { createDocAccessor, type ReactiveEchoObject } from '@dxos/client/echo';
11
+ import { createDocAccessor, type AnyLiveObject } from '@dxos/client/echo';
12
12
  import { defaultFunctions } from '@dxos/compute';
13
13
  import { getRegisteredFunctionNames } from '@dxos/compute/testing';
14
14
  import { automerge } from '@dxos/react-ui-editor';
@@ -32,7 +32,7 @@ const Story = ({ value, ...props }: StoryProps) => {
32
32
 
33
33
  const AutomergeStory = ({ value, ...props }: StoryProps) => {
34
34
  const cell = 'A1';
35
- const [object, setObject] = useState<ReactiveEchoObject<SheetType>>();
35
+ const [object, setObject] = useState<AnyLiveObject<SheetType>>();
36
36
  useEffect(() => {
37
37
  setTimeout(async () => {
38
38
  const client = new Client({ types: [SheetType] });
@@ -5,7 +5,7 @@
5
5
  import { useEffect, useState } from 'react';
6
6
 
7
7
  import { inRange } from '@dxos/compute';
8
- import { createDocAccessor, fullyQualifiedId } from '@dxos/react-client/echo';
8
+ import { createDocAccessor } from '@dxos/react-client/echo';
9
9
  import { parseValue, cellClassesForFieldType } from '@dxos/react-ui-form';
10
10
  import {
11
11
  type GridContentProps,
@@ -21,7 +21,6 @@ import {
21
21
  } from '@dxos/react-ui-grid';
22
22
  import { mx } from '@dxos/react-ui-theme';
23
23
 
24
- import { parseThreadAnchorAsCellRange } from '../../integrations';
25
24
  import { type SheetModel } from '../../model';
26
25
  import { cellClassNameForRange, rangeFromIndex } from '../../types';
27
26
 
@@ -53,13 +52,15 @@ const projectCellProps = (model: SheetModel, col: number, row: number): DxGridCe
53
52
  const address = { col, row };
54
53
  const rawValue = model.getValue(address);
55
54
  const ranges = model.sheet.ranges?.filter(({ range }) => inRange(rangeFromIndex(model.sheet, range), address));
56
- const threadRefs = model.sheet.threads
57
- ?.filter((thread) => {
58
- const range = thread.target?.anchor && parseThreadAnchorAsCellRange(thread.target!.anchor);
59
- return thread && range ? inRange(range, address) : false;
60
- })
61
- .map((thread) => fullyQualifiedId(thread!))
62
- .join(' ');
55
+ const threadRefs = undefined;
56
+ // TODO(wittjosiah): Update this to get threads via relations.
57
+ // model.sheet.threads
58
+ // ?.filter((thread) => {
59
+ // const range = thread.target?.anchor && parseThreadAnchorAsCellRange(thread.target!.anchor);
60
+ // return thread && range ? inRange(range, address) : false;
61
+ // })
62
+ // .map((thread) => fullyQualifiedId(thread!))
63
+ // .join(' ');
63
64
 
64
65
  const description = model.getValueDescription(address);
65
66
  const type = description?.type;
@@ -89,13 +90,13 @@ const gridCellGetter = (model: SheetModel) => {
89
90
 
90
91
  export const rowLabelCell = (row: number) => ({
91
92
  value: rowToA1Notation(row),
92
- className: 'text-end pie-1 text-subdued',
93
+ className: '!bg-toolbarSurface text-subdued text-end pie-1',
93
94
  resizeHandle: 'row',
94
95
  });
95
96
 
96
97
  export const colLabelCell = (col: number) => ({
97
98
  value: colToA1Notation(col),
98
- className: 'text-subdued',
99
+ className: '!bg-toolbarSurface text-subdued',
99
100
  resizeHandle: 'col',
100
101
  });
101
102
 
@@ -105,6 +106,11 @@ const cellGetter = (model: SheetModel) => {
105
106
  switch (plane) {
106
107
  case 'grid':
107
108
  return getGridCells(nextBounds);
109
+ case 'fixedStartStart': {
110
+ return {
111
+ '0,0': { className: '!bg-toolbarSurface' },
112
+ };
113
+ }
108
114
  case 'frozenColsStart':
109
115
  return [...Array(nextBounds.end.row - nextBounds.start.row)].reduce((acc, _, r0) => {
110
116
  const r = nextBounds.start.row + r0;
@@ -2,10 +2,10 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ import { Schema } from 'effect';
5
6
  import React, { useCallback } from 'react';
6
7
 
7
8
  import { rangeToA1Notation } from '@dxos/compute';
8
- import { S } from '@dxos/echo-schema';
9
9
  import { useTranslation } from '@dxos/react-ui';
10
10
  import { List } from '@dxos/react-ui-list';
11
11
  import { ghostHover } from '@dxos/react-ui-theme';
@@ -32,7 +32,7 @@ export const RangeList = ({ sheet }: RangeListProps) => {
32
32
  return (
33
33
  <>
34
34
  <h2 className='p-2 text-sm font-semibold'>{t('range list heading')}</h2>
35
- <List.Root<Range> items={sheet.ranges} isItem={S.is(Range)}>
35
+ <List.Root<Range> items={sheet.ranges} isItem={Schema.is(Range)}>
36
36
  {({ items: ranges }) =>
37
37
  ranges.map((range, i) => (
38
38
  <List.Item key={i} item={range} classNames={['p-2', ghostHover]}>
@@ -9,6 +9,7 @@ import React from 'react';
9
9
 
10
10
  import { Capabilities, contributes, createResolver, IntentPlugin } from '@dxos/app-framework';
11
11
  import { withPluginManager } from '@dxos/app-framework/testing';
12
+ import { GraphPlugin } from '@dxos/plugin-graph';
12
13
  import { fullyQualifiedId, useSpace } from '@dxos/react-client/echo';
13
14
  import { withClientProvider } from '@dxos/react-client/testing';
14
15
  import { AttendableContainer } from '@dxos/react-ui-attention';
@@ -64,15 +65,11 @@ const meta: Meta = {
64
65
  withClientProvider({ types: [SheetType], createSpace: true }),
65
66
  withComputeGraphDecorator(),
66
67
  withTheme,
67
- withLayout({
68
- fullscreen: true,
69
- tooltips: true,
70
- classNames: 'grid',
71
- }),
68
+ withLayout({ fullscreen: true, classNames: 'grid' }),
72
69
  withAttention,
73
70
  // TODO(wittjosiah): Consider whether we should refactor component so story doesn't need to depend on intents.
74
71
  withPluginManager({
75
- plugins: [IntentPlugin()],
72
+ plugins: [IntentPlugin(), GraphPlugin()],
76
73
  capabilities: [
77
74
  contributes(
78
75
  Capabilities.IntentResolver,
@@ -14,23 +14,20 @@ import { GridSheet } from '../GridSheet';
14
14
  import { SheetProvider } from '../SheetContext';
15
15
  import { SheetToolbar } from '../SheetToolbar';
16
16
 
17
- export const SheetContainer = ({
18
- space,
19
- sheet,
20
- role,
21
- ignoreAttention,
22
- }: {
17
+ export type SheetContainerProps = {
23
18
  space: Space;
24
19
  sheet: SheetType;
25
20
  role?: string;
26
21
  ignoreAttention?: boolean;
27
- }) => {
22
+ };
23
+
24
+ export const SheetContainer = ({ space, sheet, role, ignoreAttention }: SheetContainerProps) => {
28
25
  const graph = useComputeGraph(space);
29
26
 
30
27
  return graph ? (
31
28
  <SheetProvider sheet={sheet} graph={graph} ignoreAttention={ignoreAttention}>
32
29
  <StackItem.Content toolbar statusbar {...(role === 'section' && { classNames: 'aspect-video' })}>
33
- <SheetToolbar attendableId={fullyQualifiedId(sheet)} />
30
+ <SheetToolbar id={fullyQualifiedId(sheet)} />
34
31
  <GridSheet />
35
32
  <FunctionEditor />
36
33
  </StackItem.Content>
@@ -14,7 +14,7 @@ import { SheetToolbar } from './SheetToolbar';
14
14
  import translations from '../../translations';
15
15
 
16
16
  const DefaultStory = () => {
17
- return <SheetToolbar classNames={textBlockWidth} />;
17
+ return <SheetToolbar id='test' classNames={textBlockWidth} />;
18
18
  };
19
19
 
20
20
  export const Default = {};
@@ -23,7 +23,7 @@ const meta: Meta = {
23
23
  title: 'plugins/plugin-sheet/Toolbar',
24
24
  component: SheetToolbar,
25
25
  render: DefaultStory,
26
- decorators: [withTheme, withLayout({ tooltips: true })],
26
+ decorators: [withTheme, withLayout()],
27
27
  parameters: { translations, layout: 'fullscreen' },
28
28
  };
29
29