@dxos/plugin-sheet 0.8.2-main.fbd8ed0 → 0.8.2-staging.7ac8446

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 (146) hide show
  1. package/dist/lib/browser/{SheetContainer-UV7RMPXS.mjs → SheetContainer-B3A5443Z.mjs} +88 -90
  2. package/dist/lib/browser/SheetContainer-B3A5443Z.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-TN7LTDHU.mjs → chunk-CHMPICA6.mjs} +75 -86
  4. package/dist/lib/browser/chunk-CHMPICA6.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-N2FOQHUH.mjs → chunk-ZOKEQL2K.mjs} +50 -51
  6. package/dist/lib/browser/chunk-ZOKEQL2K.mjs.map +7 -0
  7. package/dist/lib/browser/{compute-graph-registry-MBJKPAHX.mjs → compute-graph-registry-WEJLJJ6T.mjs} +2 -2
  8. package/dist/lib/browser/compute-graph-registry-WEJLJJ6T.mjs.map +7 -0
  9. package/dist/lib/browser/index.mjs +8 -8
  10. package/dist/lib/browser/index.mjs.map +3 -3
  11. package/dist/lib/browser/{intent-resolver-DN7JXDAV.mjs → intent-resolver-6OUEM3IG.mjs} +2 -2
  12. package/dist/lib/browser/{markdown-57MKY5WB.mjs → markdown-DR4RDEEY.mjs} +2 -2
  13. package/dist/lib/browser/markdown-DR4RDEEY.mjs.map +7 -0
  14. package/dist/lib/browser/meta.json +1 -1
  15. package/dist/lib/browser/{react-surface-NQU63B63.mjs → react-surface-ECKBP3UZ.mjs} +3 -3
  16. package/dist/lib/browser/{thread-WU64QL2A.mjs → thread-76MK2FMV.mjs} +2 -2
  17. package/dist/lib/browser/types/index.mjs +1 -1
  18. package/dist/lib/node/{SheetContainer-GR2KDOAE.cjs → SheetContainer-LGRD3TTQ.cjs} +102 -106
  19. package/dist/lib/node/SheetContainer-LGRD3TTQ.cjs.map +7 -0
  20. package/dist/lib/node/{chunk-CN7OBGYV.cjs → chunk-AEH3L5QZ.cjs} +84 -95
  21. package/dist/lib/node/chunk-AEH3L5QZ.cjs.map +7 -0
  22. package/dist/lib/node/{chunk-HLSQVT3C.cjs → chunk-D4MOMCEU.cjs} +65 -66
  23. package/dist/lib/node/chunk-D4MOMCEU.cjs.map +7 -0
  24. package/dist/lib/node/{compute-graph-registry-EBBDN6ZX.cjs → compute-graph-registry-VVSRJUGS.cjs} +5 -5
  25. package/dist/lib/node/compute-graph-registry-VVSRJUGS.cjs.map +7 -0
  26. package/dist/lib/node/index.cjs +12 -12
  27. package/dist/lib/node/index.cjs.map +3 -3
  28. package/dist/lib/node/{intent-resolver-OPF56TAL.cjs → intent-resolver-ICHNDL6F.cjs} +9 -9
  29. package/dist/lib/node/{markdown-Q3RXYPHQ.cjs → markdown-E7OUIMZO.cjs} +5 -5
  30. package/dist/lib/node/markdown-E7OUIMZO.cjs.map +7 -0
  31. package/dist/lib/node/meta.json +1 -1
  32. package/dist/lib/node/{react-surface-7SAA5DX3.cjs → react-surface-6PBWE75L.cjs} +11 -11
  33. package/dist/lib/node/{thread-E7YPGR5T.cjs → thread-WP43BC4N.cjs} +7 -7
  34. package/dist/lib/node/types/index.cjs +29 -29
  35. package/dist/lib/node/types/index.cjs.map +1 -1
  36. package/dist/lib/node-esm/{SheetContainer-XW7B2AJI.mjs → SheetContainer-4FNTLG5R.mjs} +88 -90
  37. package/dist/lib/node-esm/SheetContainer-4FNTLG5R.mjs.map +7 -0
  38. package/dist/lib/node-esm/{chunk-LYZV4Q4C.mjs → chunk-6NB67Y6X.mjs} +50 -51
  39. package/dist/lib/node-esm/chunk-6NB67Y6X.mjs.map +7 -0
  40. package/dist/lib/node-esm/{chunk-3JJ7ETTJ.mjs → chunk-WQHYR4WD.mjs} +75 -86
  41. package/dist/lib/node-esm/chunk-WQHYR4WD.mjs.map +7 -0
  42. package/dist/lib/node-esm/{compute-graph-registry-TVG6RN2J.mjs → compute-graph-registry-PBQ52KH6.mjs} +2 -2
  43. package/dist/lib/node-esm/compute-graph-registry-PBQ52KH6.mjs.map +7 -0
  44. package/dist/lib/node-esm/index.mjs +8 -8
  45. package/dist/lib/node-esm/index.mjs.map +3 -3
  46. package/dist/lib/node-esm/{intent-resolver-7AN5CN4R.mjs → intent-resolver-2JNQCFCI.mjs} +2 -2
  47. package/dist/lib/node-esm/{markdown-ACHAWUOE.mjs → markdown-BPKS2TNG.mjs} +2 -2
  48. package/dist/lib/node-esm/markdown-BPKS2TNG.mjs.map +7 -0
  49. package/dist/lib/node-esm/meta.json +1 -1
  50. package/dist/lib/node-esm/{react-surface-BPNN7RSE.mjs → react-surface-UM2Y3ZWZ.mjs} +3 -3
  51. package/dist/lib/node-esm/{thread-ULESW6IX.mjs → thread-4NCPE5FK.mjs} +2 -2
  52. package/dist/lib/node-esm/types/index.mjs +1 -1
  53. package/dist/types/src/capabilities/compute-graph-registry.d.ts +2 -2
  54. package/dist/types/src/capabilities/compute-graph-registry.d.ts.map +1 -1
  55. package/dist/types/src/capabilities/index.d.ts +2 -2
  56. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  57. package/dist/types/src/capabilities/markdown.d.ts +2 -2
  58. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  59. package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts.map +1 -1
  60. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
  61. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +1 -1
  62. package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
  63. package/dist/types/src/components/RangeList/RangeList.d.ts.map +1 -1
  64. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts +2 -3
  65. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +1 -1
  66. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
  67. package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +1 -1
  68. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -1
  69. package/dist/types/src/components/SheetToolbar/align.d.ts +1 -4
  70. package/dist/types/src/components/SheetToolbar/align.d.ts.map +1 -1
  71. package/dist/types/src/components/SheetToolbar/comment.d.ts +1 -3
  72. package/dist/types/src/components/SheetToolbar/comment.d.ts.map +1 -1
  73. package/dist/types/src/components/SheetToolbar/style.d.ts +1 -3
  74. package/dist/types/src/components/SheetToolbar/style.d.ts.map +1 -1
  75. package/dist/types/src/components/SheetToolbar/useToolbarAction.d.ts +8 -0
  76. package/dist/types/src/components/SheetToolbar/useToolbarAction.d.ts.map +1 -0
  77. package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts +1 -1
  78. package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts.map +1 -1
  79. package/dist/types/src/components/index.d.ts +6 -1
  80. package/dist/types/src/components/index.d.ts.map +1 -1
  81. package/dist/types/src/extensions/compute.d.ts.map +1 -1
  82. package/dist/types/src/extensions/editor/extension.d.ts.map +1 -1
  83. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  84. package/dist/types/src/model/testing.d.ts.map +1 -1
  85. package/dist/types/src/model/useSheetModel.d.ts.map +1 -1
  86. package/dist/types/src/testing/data.d.ts.map +1 -1
  87. package/dist/types/src/testing/testing.d.ts.map +1 -1
  88. package/dist/types/src/translations.d.ts +54 -2
  89. package/dist/types/src/translations.d.ts.map +1 -1
  90. package/dist/types/src/types/schema.d.ts +144 -239
  91. package/dist/types/src/types/schema.d.ts.map +1 -1
  92. package/dist/types/src/types/sheet-range-types.d.ts.map +1 -1
  93. package/dist/types/src/types/types.d.ts +36 -36
  94. package/dist/types/src/types/types.d.ts.map +1 -1
  95. package/dist/types/src/types/util.d.ts.map +1 -1
  96. package/dist/types/tsconfig.tsbuildinfo +1 -1
  97. package/package.json +47 -53
  98. package/src/capabilities/compute-graph-registry.ts +3 -3
  99. package/src/capabilities/markdown.ts +3 -3
  100. package/src/components/ComputeGraph/compute-graph.stories.tsx +4 -4
  101. package/src/components/FunctionEditor/FunctionEditor.tsx +1 -1
  102. package/src/components/GridSheet/GridSheet.stories.tsx +2 -5
  103. package/src/components/GridSheet/GridSheet.tsx +12 -18
  104. package/src/components/GridSheet/SheetCellEditor.stories.tsx +2 -2
  105. package/src/components/GridSheet/util.ts +2 -7
  106. package/src/components/RangeList/RangeList.tsx +2 -2
  107. package/src/components/SheetContainer/SheetContainer.stories.tsx +5 -1
  108. package/src/components/SheetContainer/SheetContainer.tsx +7 -4
  109. package/src/components/SheetToolbar/SheetToolbar.stories.tsx +1 -1
  110. package/src/components/SheetToolbar/SheetToolbar.tsx +8 -33
  111. package/src/components/SheetToolbar/align.ts +14 -44
  112. package/src/components/SheetToolbar/comment.ts +11 -39
  113. package/src/components/SheetToolbar/style.ts +12 -48
  114. package/src/components/SheetToolbar/useToolbarAction.ts +87 -0
  115. package/src/components/SheetToolbar/useToolbarState.ts +2 -2
  116. package/src/integrations/thread-ranges.ts +3 -2
  117. package/src/model/sheet-model.test.ts +1 -1
  118. package/src/sanity.test.ts +3 -3
  119. package/src/serializer.ts +2 -2
  120. package/src/types/schema.ts +19 -21
  121. package/src/types/types.ts +25 -25
  122. package/src/types/util.ts +2 -2
  123. package/dist/lib/browser/SheetContainer-UV7RMPXS.mjs.map +0 -7
  124. package/dist/lib/browser/chunk-N2FOQHUH.mjs.map +0 -7
  125. package/dist/lib/browser/chunk-TN7LTDHU.mjs.map +0 -7
  126. package/dist/lib/browser/compute-graph-registry-MBJKPAHX.mjs.map +0 -7
  127. package/dist/lib/browser/markdown-57MKY5WB.mjs.map +0 -7
  128. package/dist/lib/node/SheetContainer-GR2KDOAE.cjs.map +0 -7
  129. package/dist/lib/node/chunk-CN7OBGYV.cjs.map +0 -7
  130. package/dist/lib/node/chunk-HLSQVT3C.cjs.map +0 -7
  131. package/dist/lib/node/compute-graph-registry-EBBDN6ZX.cjs.map +0 -7
  132. package/dist/lib/node/markdown-Q3RXYPHQ.cjs.map +0 -7
  133. package/dist/lib/node-esm/SheetContainer-XW7B2AJI.mjs.map +0 -7
  134. package/dist/lib/node-esm/chunk-3JJ7ETTJ.mjs.map +0 -7
  135. package/dist/lib/node-esm/chunk-LYZV4Q4C.mjs.map +0 -7
  136. package/dist/lib/node-esm/compute-graph-registry-TVG6RN2J.mjs.map +0 -7
  137. package/dist/lib/node-esm/markdown-ACHAWUOE.mjs.map +0 -7
  138. /package/dist/lib/browser/{intent-resolver-DN7JXDAV.mjs.map → intent-resolver-6OUEM3IG.mjs.map} +0 -0
  139. /package/dist/lib/browser/{react-surface-NQU63B63.mjs.map → react-surface-ECKBP3UZ.mjs.map} +0 -0
  140. /package/dist/lib/browser/{thread-WU64QL2A.mjs.map → thread-76MK2FMV.mjs.map} +0 -0
  141. /package/dist/lib/node/{intent-resolver-OPF56TAL.cjs.map → intent-resolver-ICHNDL6F.cjs.map} +0 -0
  142. /package/dist/lib/node/{react-surface-7SAA5DX3.cjs.map → react-surface-6PBWE75L.cjs.map} +0 -0
  143. /package/dist/lib/node/{thread-E7YPGR5T.cjs.map → thread-WP43BC4N.cjs.map} +0 -0
  144. /package/dist/lib/node-esm/{intent-resolver-7AN5CN4R.mjs.map → intent-resolver-2JNQCFCI.mjs.map} +0 -0
  145. /package/dist/lib/node-esm/{react-surface-BPNN7RSE.mjs.map → react-surface-UM2Y3ZWZ.mjs.map} +0 -0
  146. /package/dist/lib/node-esm/{thread-ULESW6IX.mjs.map → thread-4NCPE5FK.mjs.map} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-sheet",
3
- "version": "0.8.2-main.fbd8ed0",
3
+ "version": "0.8.2-staging.7ac8446",
4
4
  "description": "Braneframe sketch plugin",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -53,73 +53,67 @@
53
53
  "re-resizable": "^6.9.17",
54
54
  "react-markdown": "^8.0.5",
55
55
  "react-resize-detector": "^11.0.1",
56
- "@dxos/app-framework": "0.8.2-main.fbd8ed0",
57
- "@dxos/client": "0.8.2-main.fbd8ed0",
58
- "@dxos/async": "0.8.2-main.fbd8ed0",
59
- "@dxos/compute": "0.8.2-main.fbd8ed0",
60
- "@dxos/debug": "0.8.2-main.fbd8ed0",
61
- "@dxos/context": "0.8.2-main.fbd8ed0",
62
- "@dxos/echo": "0.8.2-main.fbd8ed0",
63
- "@dxos/crypto": "0.8.2-main.fbd8ed0",
64
- "@dxos/functions": "0.8.2-main.fbd8ed0",
65
- "@dxos/echo-schema": "0.8.2-main.fbd8ed0",
66
- "@dxos/invariant": "0.8.2-main.fbd8ed0",
67
- "@dxos/keys": "0.8.2-main.fbd8ed0",
68
- "@dxos/lit-grid": "0.8.2-main.fbd8ed0",
69
- "@dxos/live-object": "0.8.2-main.fbd8ed0",
70
- "@dxos/plugin-client": "0.8.2-main.fbd8ed0",
71
- "@dxos/plugin-attention": "0.8.2-main.fbd8ed0",
72
- "@dxos/log": "0.8.2-main.fbd8ed0",
73
- "@dxos/plugin-deck": "0.8.2-main.fbd8ed0",
74
- "@dxos/plugin-markdown": "0.8.2-main.fbd8ed0",
75
- "@dxos/plugin-graph": "0.8.2-main.fbd8ed0",
76
- "@dxos/plugin-script": "0.8.2-main.fbd8ed0",
77
- "@dxos/plugin-space": "0.8.2-main.fbd8ed0",
78
- "@dxos/plugin-thread": "0.8.2-main.fbd8ed0",
79
- "@dxos/plugin-stack": "0.8.2-main.fbd8ed0",
80
- "@dxos/react-client": "0.8.2-main.fbd8ed0",
81
- "@dxos/react-hooks": "0.8.2-main.fbd8ed0",
82
- "@dxos/react-ui-form": "0.8.2-main.fbd8ed0",
83
- "@dxos/react-ui-attention": "0.8.2-main.fbd8ed0",
84
- "@dxos/react-ui-editor": "0.8.2-main.fbd8ed0",
85
- "@dxos/react-ui-grid": "0.8.2-main.fbd8ed0",
86
- "@dxos/react-ui-menu": "0.8.2-main.fbd8ed0",
87
- "@dxos/react-ui-list": "0.8.2-main.fbd8ed0",
88
- "@dxos/react-ui-stack": "0.8.2-main.fbd8ed0",
89
- "@dxos/schema": "0.8.2-main.fbd8ed0",
90
- "@dxos/util": "0.8.2-main.fbd8ed0"
56
+ "@dxos/app-framework": "0.8.2-staging.7ac8446",
57
+ "@dxos/async": "0.8.2-staging.7ac8446",
58
+ "@dxos/client": "0.8.2-staging.7ac8446",
59
+ "@dxos/context": "0.8.2-staging.7ac8446",
60
+ "@dxos/compute": "0.8.2-staging.7ac8446",
61
+ "@dxos/debug": "0.8.2-staging.7ac8446",
62
+ "@dxos/echo-schema": "0.8.2-staging.7ac8446",
63
+ "@dxos/crypto": "0.8.2-staging.7ac8446",
64
+ "@dxos/functions": "0.8.2-staging.7ac8446",
65
+ "@dxos/invariant": "0.8.2-staging.7ac8446",
66
+ "@dxos/keys": "0.8.2-staging.7ac8446",
67
+ "@dxos/log": "0.8.2-staging.7ac8446",
68
+ "@dxos/live-object": "0.8.2-staging.7ac8446",
69
+ "@dxos/plugin-graph": "0.8.2-staging.7ac8446",
70
+ "@dxos/plugin-attention": "0.8.2-staging.7ac8446",
71
+ "@dxos/plugin-deck": "0.8.2-staging.7ac8446",
72
+ "@dxos/plugin-markdown": "0.8.2-staging.7ac8446",
73
+ "@dxos/plugin-client": "0.8.2-staging.7ac8446",
74
+ "@dxos/plugin-script": "0.8.2-staging.7ac8446",
75
+ "@dxos/plugin-space": "0.8.2-staging.7ac8446",
76
+ "@dxos/plugin-stack": "0.8.2-staging.7ac8446",
77
+ "@dxos/plugin-thread": "0.8.2-staging.7ac8446",
78
+ "@dxos/react-client": "0.8.2-staging.7ac8446",
79
+ "@dxos/react-hooks": "0.8.2-staging.7ac8446",
80
+ "@dxos/react-ui-editor": "0.8.2-staging.7ac8446",
81
+ "@dxos/react-ui-grid": "0.8.2-staging.7ac8446",
82
+ "@dxos/react-ui-attention": "0.8.2-staging.7ac8446",
83
+ "@dxos/react-ui-list": "0.8.2-staging.7ac8446",
84
+ "@dxos/react-ui-form": "0.8.2-staging.7ac8446",
85
+ "@dxos/react-ui-menu": "0.8.2-staging.7ac8446",
86
+ "@dxos/react-ui-stack": "0.8.2-staging.7ac8446",
87
+ "@dxos/util": "0.8.2-staging.7ac8446",
88
+ "@dxos/schema": "0.8.2-staging.7ac8446"
91
89
  },
92
90
  "devDependencies": {
93
- "@effect-rx/rx-react": "^0.34.1",
94
- "@effect/platform": "0.80.12",
95
91
  "@lezer/generator": "^1.7.1",
96
92
  "@tldraw/indices": "^2.0.0-alpha.14",
97
93
  "@types/lodash.defaultsdeep": "^4.6.6",
98
94
  "@types/react": "~18.2.0",
99
95
  "@types/react-dom": "~18.2.0",
100
96
  "@types/react-window": "^1.8.8",
101
- "effect": "3.14.21",
97
+ "effect": "3.13.3",
102
98
  "react": "~18.2.0",
103
99
  "react-dom": "~18.2.0",
104
100
  "vite": "5.4.7",
105
- "@dxos/lit-grid": "0.8.2-main.fbd8ed0",
106
- "@dxos/echo-generator": "0.8.2-main.fbd8ed0",
107
- "@dxos/react-ui": "0.8.2-main.fbd8ed0",
108
- "@dxos/random": "0.8.2-main.fbd8ed0",
109
- "@dxos/react-ui-theme": "0.8.2-main.fbd8ed0",
110
- "@dxos/react-ui-syntax-highlighter": "0.8.2-main.fbd8ed0",
111
- "@dxos/storybook-utils": "0.8.2-main.fbd8ed0",
112
- "@dxos/react-ui-types": "0.8.2-main.fbd8ed0",
113
- "@dxos/test-utils": "0.8.2-main.fbd8ed0"
101
+ "@dxos/echo-generator": "0.8.2-staging.7ac8446",
102
+ "@dxos/random": "0.8.2-staging.7ac8446",
103
+ "@dxos/lit-grid": "0.8.2-staging.7ac8446",
104
+ "@dxos/react-ui": "0.8.2-staging.7ac8446",
105
+ "@dxos/react-ui-types": "0.8.2-staging.7ac8446",
106
+ "@dxos/react-ui-theme": "0.8.2-staging.7ac8446",
107
+ "@dxos/storybook-utils": "0.8.2-staging.7ac8446",
108
+ "@dxos/test-utils": "0.8.2-staging.7ac8446",
109
+ "@dxos/react-ui-syntax-highlighter": "0.8.2-staging.7ac8446"
114
110
  },
115
111
  "peerDependencies": {
116
- "@effect-rx/rx-react": "^0.34.1",
117
- "@effect/platform": "0.80.12",
118
- "effect": "^3.13.3",
112
+ "effect": "3.13.3",
119
113
  "react": "~18.2.0",
120
114
  "react-dom": "~18.2.0",
121
- "@dxos/react-ui": "0.8.2-main.fbd8ed0",
122
- "@dxos/react-ui-theme": "0.8.2-main.fbd8ed0"
115
+ "@dxos/react-ui-theme": "0.8.2-staging.7ac8446",
116
+ "@dxos/react-ui": "0.8.2-staging.7ac8446"
123
117
  },
124
118
  "publishConfig": {
125
119
  "access": "public"
@@ -2,7 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { contributes, type PluginContext } from '@dxos/app-framework';
5
+ import { contributes, type PluginsContext } 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: PluginContext) => {
15
- const client = context.getCapability(ClientCapabilities.Client);
14
+ export default async (context: PluginsContext) => {
15
+ const client = context.requestCapability(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);
@@ -2,17 +2,17 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { contributes, type PluginContext } from '@dxos/app-framework';
5
+ import { contributes, type PluginsContext } 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: PluginContext) =>
12
+ export default (context: PluginsContext) =>
13
13
  contributes(MarkdownCapabilities.Extensions, [
14
14
  ({ document: doc }) => {
15
- const computeGraphRegistry = context.getCapability(SheetCapabilities.ComputeGraphRegistry);
15
+ const computeGraphRegistry = context.requestCapability(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';
12
- import { live, useSpace, Filter } from '@dxos/react-client/echo';
11
+ import { FunctionType } from '@dxos/functions/types';
12
+ import { create, 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(live(FunctionType, { name: 'test', version: '0.0.1', binding: FUNCTION_NAME }));
47
+ space.db.add(create(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.type(FunctionType)).run();
54
+ const { objects } = await space.db.query(Filter.schema(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 bg-toolbarSurface border-bs !border-separator'>
29
+ <div className='flex shrink-0 justify-between items-center px-4 py-1 text-sm attention-surface border-bs !border-separator'>
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,7 +7,6 @@ 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';
11
10
  import { withPluginManager } from '@dxos/app-framework/testing';
12
11
  import { useSpace } from '@dxos/react-client/echo';
13
12
  import { withClientProvider } from '@dxos/react-client/testing';
@@ -42,10 +41,8 @@ const meta: Meta = {
42
41
  withClientProvider({ types: [SheetType], createSpace: true }),
43
42
  withComputeGraphDecorator(),
44
43
  withTheme,
45
- withLayout({ fullscreen: true, classNames: 'grid' }),
46
- withPluginManager({
47
- plugins: [IntentPlugin()],
48
- }),
44
+ withLayout({ fullscreen: true, tooltips: true, classNames: 'grid' }),
45
+ withPluginManager(),
49
46
  ],
50
47
  parameters: { translations },
51
48
  };
@@ -6,22 +6,21 @@ import React, {
6
6
  useCallback,
7
7
  useMemo,
8
8
  useRef,
9
- useState,
10
9
  type FocusEvent,
11
10
  type KeyboardEvent,
12
11
  type WheelEvent,
13
12
  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';
19
18
  import { DropdownMenu, Icon, useTranslation } from '@dxos/react-ui';
20
19
  import { useAttention } from '@dxos/react-ui-attention';
21
20
  import {
22
21
  closestCell,
22
+ defaultSizeRow,
23
23
  editorKeys,
24
- parseCellIndex,
25
24
  Grid,
26
25
  GridCellEditor,
27
26
  type DxGridElement,
@@ -30,6 +29,7 @@ import {
30
29
  type EditorKeyHandler,
31
30
  type EditorBlurHandler,
32
31
  type GridContentProps,
32
+ parseCellIndex,
33
33
  } from '@dxos/react-ui-grid';
34
34
 
35
35
  import { colLabelCell, rowLabelCell, useSheetModelDxGridProps } from './util';
@@ -58,21 +58,18 @@ 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
- };
65
61
  const sheetRowDefault = {
66
- frozenRowsStart: { size: defaultRowSize, readonly: true },
67
- grid: { size: defaultRowSize, resizeable: true },
62
+ frozenRowsStart: { size: defaultSizeRow, readonly: true },
63
+ grid: { size: defaultSizeRow, resizeable: true },
68
64
  };
65
+ const sheetColDefault = { frozenColsStart: { size: 48, readonly: true }, grid: { size: 180, resizeable: true } };
69
66
 
70
67
  export const GridSheet = () => {
71
68
  const { t } = useTranslation(SHEET_PLUGIN);
72
69
  const { id, model, editing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs, ignoreAttention } =
73
70
  useSheetContext();
74
71
  // NOTE(thure): using `useState` instead of `useRef` works with refs provided by `@lit/react` and gives us
75
- // a reliable dependency for `useEffect` whereas `useLayoutEffect` does not guarantee the element will be defined.
72
+ // a reliable dependency for `useEffect` whereas `useLayoutEffect` does not guarantee the element will be defined.
76
73
  const [dxGrid, setDxGrid] = useState<DxGridElement | null>(null);
77
74
  const [extraplanarFocus, setExtraplanarFocus] = useState<DxGridPosition | null>(null);
78
75
  const { dispatchPromise: dispatch } = useIntentDispatcher();
@@ -155,7 +152,6 @@ export const GridSheet = () => {
155
152
  },
156
153
  [editing],
157
154
  );
158
-
159
155
  const handleWheel = useCallback(
160
156
  (event: WheelEvent) => {
161
157
  if (!ignoreAttention && !hasAttention) {
@@ -306,8 +302,7 @@ export const GridSheet = () => {
306
302
  useSelectThreadOnCellFocus();
307
303
 
308
304
  return (
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 '>
305
+ <div role='none' className='relative min-bs-0'>
311
306
  <GridCellEditor getCellContent={getCellContent} extension={extension} onBlur={handleBlur} />
312
307
  <Grid.Content
313
308
  initialCells={initialCells}
@@ -315,19 +310,18 @@ export const GridSheet = () => {
315
310
  limitRows={DEFAULT_ROWS}
316
311
  columns={columns}
317
312
  rows={rows}
318
- // TODO(burdon): `col` vs. `column`?
319
- columnDefault={sheetColDefault}
320
- rowDefault={sheetRowDefault}
321
- frozen={frozen}
322
313
  onAxisResize={handleAxisResize}
323
314
  onSelect={handleSelect}
315
+ rowDefault={sheetRowDefault}
316
+ columnDefault={sheetColDefault}
317
+ frozen={frozen}
324
318
  onFocus={handleFocus}
325
319
  onWheelCapture={handleWheel}
326
320
  onKeyDown={handleKeyDown}
327
321
  onContextMenu={handleContextMenu}
328
322
  onClick={handleClick}
329
323
  overscroll='trap'
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'
324
+ className='[--dx-grid-base:var(--surface-bg)] [&_.dx-grid]:border-bs [&_.dx-grid]:absolute [&_.dx-grid]:inset-0 [&_.dx-grid]:border-separator'
331
325
  activeRefs={activeRefs}
332
326
  ref={setDxGrid}
333
327
  />
@@ -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 AnyLiveObject } from '@dxos/client/echo';
11
+ import { createDocAccessor, type ReactiveEchoObject } 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<AnyLiveObject<SheetType>>();
35
+ const [object, setObject] = useState<ReactiveEchoObject<SheetType>>();
36
36
  useEffect(() => {
37
37
  setTimeout(async () => {
38
38
  const client = new Client({ types: [SheetType] });
@@ -89,13 +89,13 @@ const gridCellGetter = (model: SheetModel) => {
89
89
 
90
90
  export const rowLabelCell = (row: number) => ({
91
91
  value: rowToA1Notation(row),
92
- className: '!bg-toolbarSurface text-subdued text-end pie-1',
92
+ className: 'text-end pie-1 text-subdued',
93
93
  resizeHandle: 'row',
94
94
  });
95
95
 
96
96
  export const colLabelCell = (col: number) => ({
97
97
  value: colToA1Notation(col),
98
- className: '!bg-toolbarSurface text-subdued',
98
+ className: 'text-subdued',
99
99
  resizeHandle: 'col',
100
100
  });
101
101
 
@@ -105,11 +105,6 @@ const cellGetter = (model: SheetModel) => {
105
105
  switch (plane) {
106
106
  case 'grid':
107
107
  return getGridCells(nextBounds);
108
- case 'fixedStartStart': {
109
- return {
110
- '0,0': { className: '!bg-toolbarSurface' },
111
- };
112
- }
113
108
  case 'frozenColsStart':
114
109
  return [...Array(nextBounds.end.row - nextBounds.start.row)].reduce((acc, _, r0) => {
115
110
  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';
6
5
  import React, { useCallback } from 'react';
7
6
 
8
7
  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={Schema.is(Range)}>
35
+ <List.Root<Range> items={sheet.ranges} isItem={S.is(Range)}>
36
36
  {({ items: ranges }) =>
37
37
  ranges.map((range, i) => (
38
38
  <List.Item key={i} item={range} classNames={['p-2', ghostHover]}>
@@ -64,7 +64,11 @@ const meta: Meta = {
64
64
  withClientProvider({ types: [SheetType], createSpace: true }),
65
65
  withComputeGraphDecorator(),
66
66
  withTheme,
67
- withLayout({ fullscreen: true, classNames: 'grid' }),
67
+ withLayout({
68
+ fullscreen: true,
69
+ tooltips: true,
70
+ classNames: 'grid',
71
+ }),
68
72
  withAttention,
69
73
  // TODO(wittjosiah): Consider whether we should refactor component so story doesn't need to depend on intents.
70
74
  withPluginManager({
@@ -14,14 +14,17 @@ import { GridSheet } from '../GridSheet';
14
14
  import { SheetProvider } from '../SheetContext';
15
15
  import { SheetToolbar } from '../SheetToolbar';
16
16
 
17
- export type SheetContainerProps = {
17
+ export const SheetContainer = ({
18
+ space,
19
+ sheet,
20
+ role,
21
+ ignoreAttention,
22
+ }: {
18
23
  space: Space;
19
24
  sheet: SheetType;
20
25
  role?: string;
21
26
  ignoreAttention?: boolean;
22
- };
23
-
24
- export const SheetContainer = ({ space, sheet, role, ignoreAttention }: SheetContainerProps) => {
27
+ }) => {
25
28
  const graph = useComputeGraph(space);
26
29
 
27
30
  return graph ? (
@@ -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()],
26
+ decorators: [withTheme, withLayout({ tooltips: true })],
27
27
  parameters: { translations, layout: 'fullscreen' },
28
28
  };
29
29
 
@@ -4,18 +4,14 @@
4
4
 
5
5
  import React, { type PropsWithChildren, useCallback } from 'react';
6
6
 
7
- import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
8
- import { type CompleteCellRange } from '@dxos/compute';
9
- import { ThreadAction } from '@dxos/plugin-thread/types';
10
7
  import { type ThemedClassName } from '@dxos/react-ui';
11
8
  import { createGapSeparator, MenuProvider, ToolbarMenu, useMenuActions } from '@dxos/react-ui-menu';
12
9
 
13
10
  import { createAlign, useAlignState } from './align';
14
11
  import { createComment, useCommentState } from './comment';
15
12
  import { createStyle, useStyleState } from './style';
13
+ import { useToolbarAction } from './useToolbarAction';
16
14
  import { type ToolbarState, useToolbarState } from './useToolbarState';
17
- import { type SheetModel } from '../../model';
18
- import { useSheetContext } from '../SheetContext';
19
15
 
20
16
  //
21
17
  // Root
@@ -23,16 +19,11 @@ import { useSheetContext } from '../SheetContext';
23
19
 
24
20
  export type SheetToolbarProps = ThemedClassName<PropsWithChildren<{ attendableId?: string }>>;
25
21
 
26
- const createToolbarActions = (
27
- model: SheetModel,
28
- state: ToolbarState,
29
- onComment: (cellContent: string, cursor: string) => void,
30
- cursorFallbackRange?: CompleteCellRange,
31
- ) => {
32
- const align = createAlign(model, state, cursorFallbackRange);
33
- const style = createStyle(model, state, cursorFallbackRange);
22
+ const createToolbarActions = (state: ToolbarState) => {
23
+ const align = createAlign(state);
24
+ const style = createStyle(state);
34
25
  const gap = createGapSeparator();
35
- const comment = createComment(model, state, onComment, cursorFallbackRange);
26
+ const comment = createComment(state);
36
27
  return {
37
28
  nodes: [...align.nodes, ...style.nodes, ...gap.nodes, ...comment.nodes],
38
29
  edges: [...align.edges, ...style.edges, ...gap.edges, ...comment.edges],
@@ -40,33 +31,17 @@ const createToolbarActions = (
40
31
  };
41
32
 
42
33
  export const SheetToolbar = ({ attendableId, classNames }: SheetToolbarProps) => {
43
- const { dispatchPromise: dispatch } = useIntentDispatcher();
44
- const { model, cursorFallbackRange } = useSheetContext();
45
34
  const state = useToolbarState({});
46
35
  useAlignState(state);
47
36
  useStyleState(state);
48
37
  useCommentState(state);
49
38
 
50
- const handleComment = useCallback(
51
- (name: string, cursor: string) =>
52
- dispatch(
53
- createIntent(ThreadAction.Create, {
54
- cursor,
55
- name,
56
- subject: model.sheet,
57
- }),
58
- ),
59
- [model.sheet, dispatch],
60
- );
61
-
62
- const actionsCreator = useCallback(
63
- () => createToolbarActions(model, state, handleComment, cursorFallbackRange),
64
- [model, state, handleComment, cursorFallbackRange],
65
- );
39
+ const actionsCreator = useCallback(() => createToolbarActions(state), [state]);
66
40
  const menu = useMenuActions(actionsCreator);
41
+ const handleAction = useToolbarAction(state);
67
42
 
68
43
  return (
69
- <MenuProvider {...menu} attendableId={attendableId}>
44
+ <MenuProvider {...menu} attendableId={attendableId} onAction={handleAction}>
70
45
  <ToolbarMenu classNames={classNames} />
71
46
  </MenuProvider>
72
47
  );
@@ -4,13 +4,11 @@
4
4
 
5
5
  import { useEffect } from 'react';
6
6
 
7
- import { type CompleteCellRange, inRange } from '@dxos/compute';
7
+ import { inRange } from '@dxos/compute';
8
8
  import { createMenuAction, createMenuItemGroup, type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';
9
9
 
10
- import { type ToolbarState } from './useToolbarState';
11
10
  import { SHEET_PLUGIN } from '../../meta';
12
- import { type SheetModel } from '../../model';
13
- import { type AlignKey, alignKey, type AlignValue, rangeFromIndex, rangeToIndex } from '../../types';
11
+ import { type AlignKey, alignKey, type AlignValue, rangeFromIndex } from '../../types';
14
12
  import { useSheetContext } from '../SheetContext';
15
13
 
16
14
  export type AlignAction = { key: AlignKey; value: AlignValue };
@@ -45,49 +43,21 @@ const createAlignGroupAction = (value?: AlignValue) =>
45
43
  value: `${alignKey}--${value}`,
46
44
  } as ToolbarMenuActionGroupProperties);
47
45
 
48
- const createAlignActions = (model: SheetModel, state: ToolbarState, cursorFallbackRange?: CompleteCellRange) =>
46
+ const createAlignActions = (value?: AlignValue) =>
49
47
  Object.entries(aligns).map(([alignValue, icon]) => {
50
- return createMenuAction<AlignAction>(
51
- `${alignKey}--${alignValue}`,
52
- () => {
53
- if (!cursorFallbackRange) {
54
- return;
55
- }
56
- const index =
57
- model.sheet.ranges?.findIndex(
58
- (range) =>
59
- range.key === alignKey && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),
60
- ) ?? -1;
61
- const nextRangeEntity = {
62
- range: rangeToIndex(model.sheet, cursorFallbackRange),
63
- key: alignKey,
64
- value: alignValue as AlignValue,
65
- };
66
- if (index < 0) {
67
- model.sheet.ranges?.push(nextRangeEntity);
68
- state[alignKey] = nextRangeEntity.value;
69
- } else if (model.sheet.ranges![index].value === nextRangeEntity.value) {
70
- model.sheet.ranges?.splice(index, 1);
71
- state[alignKey] = undefined;
72
- } else {
73
- model.sheet.ranges?.splice(index, 1, nextRangeEntity);
74
- state[alignKey] = nextRangeEntity.value;
75
- }
76
- },
77
- {
78
- key: alignKey,
79
- value: alignValue as AlignValue,
80
- checked: state[alignKey] === alignValue,
81
- label: [`range value ${alignValue} label`, { ns: SHEET_PLUGIN }],
82
- icon,
83
- testId: `grid.toolbar.${alignKey}.${alignValue}`,
84
- },
85
- );
48
+ return createMenuAction<AlignAction>(`${alignKey}--${alignValue}`, {
49
+ key: alignKey,
50
+ value: alignValue as AlignValue,
51
+ checked: value === alignValue,
52
+ label: [`range value ${alignValue} label`, { ns: SHEET_PLUGIN }],
53
+ icon,
54
+ testId: `grid.toolbar.${alignKey}.${alignValue}`,
55
+ });
86
56
  });
87
57
 
88
- export const createAlign = (model: SheetModel, state: ToolbarState, cursorFallbackRange?: CompleteCellRange) => {
89
- const alignGroup = createAlignGroupAction(state[alignKey]);
90
- const alignActions = createAlignActions(model, state, cursorFallbackRange);
58
+ export const createAlign = ({ [alignKey]: alignValue }: Partial<AlignState>) => {
59
+ const alignGroup = createAlignGroupAction(alignValue);
60
+ const alignActions = createAlignActions(alignValue);
91
61
  return {
92
62
  nodes: [alignGroup, ...alignActions],
93
63
  edges: [