@dxos/plugin-sheet 0.7.5-main.9d2a38b → 0.7.5-main.e9bb01b

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 (117) hide show
  1. package/dist/lib/browser/{SheetContainer-CM4CO3DC.mjs → SheetContainer-QE32GHSA.mjs} +5 -5
  2. package/dist/lib/browser/chunk-5IP6N25X.mjs +18 -0
  3. package/dist/lib/browser/chunk-5IP6N25X.mjs.map +7 -0
  4. package/dist/lib/browser/{chunk-H23JW3DX.mjs → chunk-EEN6LQ77.mjs} +28 -20
  5. package/dist/lib/browser/chunk-EEN6LQ77.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-T3IVPMRX.mjs → chunk-MW7L2R23.mjs} +2 -2
  7. package/dist/lib/browser/{chunk-PW25VUP6.mjs → chunk-NA2WJTDQ.mjs} +2 -2
  8. package/dist/lib/browser/{compute-graph-registry-XH6B2SWG.mjs → compute-graph-registry-5PSCPAJC.mjs} +3 -3
  9. package/dist/lib/browser/index.mjs +13 -19
  10. package/dist/lib/browser/index.mjs.map +3 -3
  11. package/dist/lib/browser/intent-resolver-BIOB22P2.mjs +56 -0
  12. package/dist/lib/browser/intent-resolver-BIOB22P2.mjs.map +7 -0
  13. package/dist/lib/browser/{markdown-IKG5FNCA.mjs → markdown-ZXHPFU4B.mjs} +3 -3
  14. package/dist/lib/browser/meta.json +1 -1
  15. package/dist/lib/browser/{react-surface-URRC3AFC.mjs → react-surface-DUNHY5TJ.mjs} +20 -11
  16. package/dist/lib/browser/react-surface-DUNHY5TJ.mjs.map +7 -0
  17. package/dist/lib/browser/{thread-YX6KBQNQ.mjs → thread-RSI66HGQ.mjs} +3 -3
  18. package/dist/lib/browser/types/index.mjs +2 -2
  19. package/dist/lib/node/{SheetContainer-TJ3JQLWM.cjs → SheetContainer-63QTAGQQ.cjs} +36 -36
  20. package/dist/lib/node/{chunk-E3RXOEL6.cjs → chunk-6BZ2TACG.cjs} +6 -6
  21. package/dist/lib/node/{chunk-FU5K66DS.cjs → chunk-6G6HHJOM.cjs} +6 -6
  22. package/dist/lib/node/{chunk-NLDXUFDG.cjs → chunk-AUC5XQEN.cjs} +9 -6
  23. package/dist/lib/node/chunk-AUC5XQEN.cjs.map +7 -0
  24. package/dist/lib/node/{chunk-ZPWW4LPY.cjs → chunk-K4VMHOR2.cjs} +38 -30
  25. package/dist/lib/node/chunk-K4VMHOR2.cjs.map +7 -0
  26. package/dist/lib/node/{compute-graph-registry-ORGTIE5M.cjs → compute-graph-registry-IKYGA5ZC.cjs} +7 -7
  27. package/dist/lib/node/index.cjs +32 -38
  28. package/dist/lib/node/index.cjs.map +3 -3
  29. package/dist/lib/node/intent-resolver-EN5ZMUUF.cjs +69 -0
  30. package/dist/lib/node/intent-resolver-EN5ZMUUF.cjs.map +7 -0
  31. package/dist/lib/node/{markdown-EUUL3Q36.cjs → markdown-7NVPUDWI.cjs} +7 -7
  32. package/dist/lib/node/meta.json +1 -1
  33. package/dist/lib/node/{react-surface-IQN5JKSS.cjs → react-surface-YGALRCRL.cjs} +23 -17
  34. package/dist/lib/node/react-surface-YGALRCRL.cjs.map +7 -0
  35. package/dist/lib/node/{thread-VBPS23P2.cjs → thread-7KJVRDUE.cjs} +8 -8
  36. package/dist/lib/node/types/index.cjs +30 -30
  37. package/dist/lib/node/types/index.cjs.map +1 -1
  38. package/dist/lib/node-esm/{SheetContainer-QEEFORIC.mjs → SheetContainer-EUR47CP5.mjs} +5 -5
  39. package/dist/lib/node-esm/{chunk-KCXK5UM6.mjs → chunk-6C53G45G.mjs} +2 -2
  40. package/dist/lib/node-esm/chunk-JFUKD7N4.mjs +20 -0
  41. package/dist/lib/node-esm/chunk-JFUKD7N4.mjs.map +7 -0
  42. package/dist/lib/node-esm/{chunk-NSVUOAI6.mjs → chunk-LGQMXD6K.mjs} +2 -2
  43. package/dist/lib/node-esm/{chunk-OXD6RBFF.mjs → chunk-RFGJUSHF.mjs} +28 -20
  44. package/dist/lib/node-esm/chunk-RFGJUSHF.mjs.map +7 -0
  45. package/dist/lib/node-esm/{compute-graph-registry-JH2FRHLD.mjs → compute-graph-registry-ZSLEFSS5.mjs} +3 -3
  46. package/dist/lib/node-esm/index.mjs +13 -19
  47. package/dist/lib/node-esm/index.mjs.map +3 -3
  48. package/dist/lib/node-esm/intent-resolver-6BCKQA5A.mjs +57 -0
  49. package/dist/lib/node-esm/intent-resolver-6BCKQA5A.mjs.map +7 -0
  50. package/dist/lib/node-esm/{markdown-D2ZMN7LR.mjs → markdown-LRZEUBKN.mjs} +3 -3
  51. package/dist/lib/node-esm/meta.json +1 -1
  52. package/dist/lib/node-esm/{react-surface-XJIX5G3I.mjs → react-surface-AAT56ZBA.mjs} +20 -11
  53. package/dist/lib/node-esm/react-surface-AAT56ZBA.mjs.map +7 -0
  54. package/dist/lib/node-esm/{thread-HSJD3SR6.mjs → thread-U3RIKVMB.mjs} +3 -3
  55. package/dist/lib/node-esm/types/index.mjs +2 -2
  56. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  57. package/dist/types/src/capabilities/index.d.ts +7 -12
  58. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  59. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  60. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  61. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
  62. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  63. package/dist/types/src/meta.d.ts +1 -0
  64. package/dist/types/src/meta.d.ts.map +1 -1
  65. package/package.json +45 -45
  66. package/src/SheetPlugin.tsx +6 -19
  67. package/src/capabilities/index.ts +0 -1
  68. package/src/capabilities/intent-resolver.ts +24 -15
  69. package/src/capabilities/react-surface.tsx +12 -5
  70. package/src/components/GridSheet/util.ts +1 -1
  71. package/src/components/SheetContainer/SheetContainer.stories.tsx +5 -2
  72. package/src/integrations/thread-ranges.ts +21 -10
  73. package/src/meta.ts +2 -1
  74. package/dist/lib/browser/chunk-H23JW3DX.mjs.map +0 -7
  75. package/dist/lib/browser/chunk-K6EUYKWT.mjs +0 -15
  76. package/dist/lib/browser/chunk-K6EUYKWT.mjs.map +0 -7
  77. package/dist/lib/browser/intent-resolver-Q7DTHAM5.mjs +0 -47
  78. package/dist/lib/browser/intent-resolver-Q7DTHAM5.mjs.map +0 -7
  79. package/dist/lib/browser/react-context-JG43577H.mjs +0 -28
  80. package/dist/lib/browser/react-context-JG43577H.mjs.map +0 -7
  81. package/dist/lib/browser/react-surface-URRC3AFC.mjs.map +0 -7
  82. package/dist/lib/node/chunk-NLDXUFDG.cjs.map +0 -7
  83. package/dist/lib/node/chunk-ZPWW4LPY.cjs.map +0 -7
  84. package/dist/lib/node/intent-resolver-ZUDJJUFG.cjs +0 -60
  85. package/dist/lib/node/intent-resolver-ZUDJJUFG.cjs.map +0 -7
  86. package/dist/lib/node/react-context-OOH5QFE2.cjs +0 -50
  87. package/dist/lib/node/react-context-OOH5QFE2.cjs.map +0 -7
  88. package/dist/lib/node/react-surface-IQN5JKSS.cjs.map +0 -7
  89. package/dist/lib/node-esm/chunk-FMOVRTS4.mjs +0 -17
  90. package/dist/lib/node-esm/chunk-FMOVRTS4.mjs.map +0 -7
  91. package/dist/lib/node-esm/chunk-OXD6RBFF.mjs.map +0 -7
  92. package/dist/lib/node-esm/intent-resolver-IF64RN7B.mjs +0 -48
  93. package/dist/lib/node-esm/intent-resolver-IF64RN7B.mjs.map +0 -7
  94. package/dist/lib/node-esm/react-context-CJVSLO74.mjs +0 -29
  95. package/dist/lib/node-esm/react-context-CJVSLO74.mjs.map +0 -7
  96. package/dist/lib/node-esm/react-surface-XJIX5G3I.mjs.map +0 -7
  97. package/dist/types/src/capabilities/react-context.d.ts +0 -8
  98. package/dist/types/src/capabilities/react-context.d.ts.map +0 -1
  99. package/src/capabilities/react-context.tsx +0 -20
  100. /package/dist/lib/browser/{SheetContainer-CM4CO3DC.mjs.map → SheetContainer-QE32GHSA.mjs.map} +0 -0
  101. /package/dist/lib/browser/{chunk-T3IVPMRX.mjs.map → chunk-MW7L2R23.mjs.map} +0 -0
  102. /package/dist/lib/browser/{chunk-PW25VUP6.mjs.map → chunk-NA2WJTDQ.mjs.map} +0 -0
  103. /package/dist/lib/browser/{compute-graph-registry-XH6B2SWG.mjs.map → compute-graph-registry-5PSCPAJC.mjs.map} +0 -0
  104. /package/dist/lib/browser/{markdown-IKG5FNCA.mjs.map → markdown-ZXHPFU4B.mjs.map} +0 -0
  105. /package/dist/lib/browser/{thread-YX6KBQNQ.mjs.map → thread-RSI66HGQ.mjs.map} +0 -0
  106. /package/dist/lib/node/{SheetContainer-TJ3JQLWM.cjs.map → SheetContainer-63QTAGQQ.cjs.map} +0 -0
  107. /package/dist/lib/node/{chunk-E3RXOEL6.cjs.map → chunk-6BZ2TACG.cjs.map} +0 -0
  108. /package/dist/lib/node/{chunk-FU5K66DS.cjs.map → chunk-6G6HHJOM.cjs.map} +0 -0
  109. /package/dist/lib/node/{compute-graph-registry-ORGTIE5M.cjs.map → compute-graph-registry-IKYGA5ZC.cjs.map} +0 -0
  110. /package/dist/lib/node/{markdown-EUUL3Q36.cjs.map → markdown-7NVPUDWI.cjs.map} +0 -0
  111. /package/dist/lib/node/{thread-VBPS23P2.cjs.map → thread-7KJVRDUE.cjs.map} +0 -0
  112. /package/dist/lib/node-esm/{SheetContainer-QEEFORIC.mjs.map → SheetContainer-EUR47CP5.mjs.map} +0 -0
  113. /package/dist/lib/node-esm/{chunk-KCXK5UM6.mjs.map → chunk-6C53G45G.mjs.map} +0 -0
  114. /package/dist/lib/node-esm/{chunk-NSVUOAI6.mjs.map → chunk-LGQMXD6K.mjs.map} +0 -0
  115. /package/dist/lib/node-esm/{compute-graph-registry-JH2FRHLD.mjs.map → compute-graph-registry-ZSLEFSS5.mjs.map} +0 -0
  116. /package/dist/lib/node-esm/{markdown-D2ZMN7LR.mjs.map → markdown-LRZEUBKN.mjs.map} +0 -0
  117. /package/dist/lib/node-esm/{thread-HSJD3SR6.mjs.map → thread-U3RIKVMB.mjs.map} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-sheet",
3
- "version": "0.7.5-main.9d2a38b",
3
+ "version": "0.7.5-main.e9bb01b",
4
4
  "description": "Braneframe sketch plugin",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -46,7 +46,7 @@
46
46
  "@lezer/lezer": "^1.1.2",
47
47
  "@lezer/lr": "^1.4.2",
48
48
  "@preact/signals-core": "^1.6.0",
49
- "@radix-ui/react-context": "^1.0.0",
49
+ "@radix-ui/react-context": "1.1.1",
50
50
  "@tanstack/react-virtual": "^3.9.0",
51
51
  "codemirror-lang-spreadsheet": "^1.3.0",
52
52
  "date-fns": "^3.3.1",
@@ -54,38 +54,38 @@
54
54
  "re-resizable": "^6.9.17",
55
55
  "react-markdown": "^8.0.5",
56
56
  "react-resize-detector": "^11.0.1",
57
- "@dxos/app-framework": "0.7.5-main.9d2a38b",
58
- "@dxos/client": "0.7.5-main.9d2a38b",
59
- "@dxos/async": "0.7.5-main.9d2a38b",
60
- "@dxos/compute": "0.7.5-main.9d2a38b",
61
- "@dxos/crypto": "0.7.5-main.9d2a38b",
62
- "@dxos/context": "0.7.5-main.9d2a38b",
63
- "@dxos/debug": "0.7.5-main.9d2a38b",
64
- "@dxos/echo-schema": "0.7.5-main.9d2a38b",
65
- "@dxos/functions": "0.7.5-main.9d2a38b",
66
- "@dxos/invariant": "0.7.5-main.9d2a38b",
67
- "@dxos/keys": "0.7.5-main.9d2a38b",
68
- "@dxos/live-object": "0.7.5-main.9d2a38b",
69
- "@dxos/log": "0.7.5-main.9d2a38b",
70
- "@dxos/plugin-graph": "0.7.5-main.9d2a38b",
71
- "@dxos/plugin-client": "0.7.5-main.9d2a38b",
72
- "@dxos/plugin-attention": "0.7.5-main.9d2a38b",
73
- "@dxos/plugin-markdown": "0.7.5-main.9d2a38b",
74
- "@dxos/plugin-space": "0.7.5-main.9d2a38b",
75
- "@dxos/plugin-stack": "0.7.5-main.9d2a38b",
76
- "@dxos/plugin-script": "0.7.5-main.9d2a38b",
77
- "@dxos/react-hooks": "0.7.5-main.9d2a38b",
78
- "@dxos/plugin-thread": "0.7.5-main.9d2a38b",
79
- "@dxos/react-client": "0.7.5-main.9d2a38b",
80
- "@dxos/react-ui-form": "0.7.5-main.9d2a38b",
81
- "@dxos/react-ui-attention": "0.7.5-main.9d2a38b",
82
- "@dxos/react-ui-editor": "0.7.5-main.9d2a38b",
83
- "@dxos/react-ui-grid": "0.7.5-main.9d2a38b",
84
- "@dxos/react-ui-list": "0.7.5-main.9d2a38b",
85
- "@dxos/react-ui-menu": "0.7.5-main.9d2a38b",
86
- "@dxos/react-ui-stack": "0.7.5-main.9d2a38b",
87
- "@dxos/schema": "0.7.5-main.9d2a38b",
88
- "@dxos/util": "0.7.5-main.9d2a38b"
57
+ "@dxos/app-framework": "0.7.5-main.e9bb01b",
58
+ "@dxos/async": "0.7.5-main.e9bb01b",
59
+ "@dxos/client": "0.7.5-main.e9bb01b",
60
+ "@dxos/compute": "0.7.5-main.e9bb01b",
61
+ "@dxos/context": "0.7.5-main.e9bb01b",
62
+ "@dxos/crypto": "0.7.5-main.e9bb01b",
63
+ "@dxos/echo-schema": "0.7.5-main.e9bb01b",
64
+ "@dxos/debug": "0.7.5-main.e9bb01b",
65
+ "@dxos/invariant": "0.7.5-main.e9bb01b",
66
+ "@dxos/functions": "0.7.5-main.e9bb01b",
67
+ "@dxos/keys": "0.7.5-main.e9bb01b",
68
+ "@dxos/live-object": "0.7.5-main.e9bb01b",
69
+ "@dxos/log": "0.7.5-main.e9bb01b",
70
+ "@dxos/plugin-graph": "0.7.5-main.e9bb01b",
71
+ "@dxos/plugin-attention": "0.7.5-main.e9bb01b",
72
+ "@dxos/plugin-markdown": "0.7.5-main.e9bb01b",
73
+ "@dxos/plugin-script": "0.7.5-main.e9bb01b",
74
+ "@dxos/plugin-client": "0.7.5-main.e9bb01b",
75
+ "@dxos/plugin-space": "0.7.5-main.e9bb01b",
76
+ "@dxos/plugin-stack": "0.7.5-main.e9bb01b",
77
+ "@dxos/react-client": "0.7.5-main.e9bb01b",
78
+ "@dxos/plugin-thread": "0.7.5-main.e9bb01b",
79
+ "@dxos/react-hooks": "0.7.5-main.e9bb01b",
80
+ "@dxos/react-ui-attention": "0.7.5-main.e9bb01b",
81
+ "@dxos/react-ui-grid": "0.7.5-main.e9bb01b",
82
+ "@dxos/react-ui-editor": "0.7.5-main.e9bb01b",
83
+ "@dxos/react-ui-list": "0.7.5-main.e9bb01b",
84
+ "@dxos/react-ui-menu": "0.7.5-main.e9bb01b",
85
+ "@dxos/react-ui-stack": "0.7.5-main.e9bb01b",
86
+ "@dxos/react-ui-form": "0.7.5-main.e9bb01b",
87
+ "@dxos/util": "0.7.5-main.e9bb01b",
88
+ "@dxos/schema": "0.7.5-main.e9bb01b"
89
89
  },
90
90
  "devDependencies": {
91
91
  "@lezer/generator": "^1.7.1",
@@ -97,21 +97,21 @@
97
97
  "react": "~18.2.0",
98
98
  "react-dom": "~18.2.0",
99
99
  "vite": "5.4.7",
100
- "@dxos/echo-generator": "0.7.5-main.9d2a38b",
101
- "@dxos/lit-grid": "0.7.5-main.9d2a38b",
102
- "@dxos/react-ui": "0.7.5-main.9d2a38b",
103
- "@dxos/random": "0.7.5-main.9d2a38b",
104
- "@dxos/react-ui-syntax-highlighter": "0.7.5-main.9d2a38b",
105
- "@dxos/storybook-utils": "0.7.5-main.9d2a38b",
106
- "@dxos/react-ui-types": "0.7.5-main.9d2a38b",
107
- "@dxos/react-ui-theme": "0.7.5-main.9d2a38b",
108
- "@dxos/test-utils": "0.7.5-main.9d2a38b"
100
+ "@dxos/echo-generator": "0.7.5-main.e9bb01b",
101
+ "@dxos/lit-grid": "0.7.5-main.e9bb01b",
102
+ "@dxos/react-ui": "0.7.5-main.e9bb01b",
103
+ "@dxos/random": "0.7.5-main.e9bb01b",
104
+ "@dxos/react-ui-syntax-highlighter": "0.7.5-main.e9bb01b",
105
+ "@dxos/react-ui-theme": "0.7.5-main.e9bb01b",
106
+ "@dxos/storybook-utils": "0.7.5-main.e9bb01b",
107
+ "@dxos/test-utils": "0.7.5-main.e9bb01b",
108
+ "@dxos/react-ui-types": "0.7.5-main.e9bb01b"
109
109
  },
110
110
  "peerDependencies": {
111
111
  "react": "~18.2.0",
112
112
  "react-dom": "~18.2.0",
113
- "@dxos/react-ui": "0.7.5-main.9d2a38b",
114
- "@dxos/react-ui-theme": "0.7.5-main.9d2a38b"
113
+ "@dxos/react-ui": "0.7.5-main.e9bb01b",
114
+ "@dxos/react-ui-theme": "0.7.5-main.e9bb01b"
115
115
  },
116
116
  "publishConfig": {
117
117
  "access": "public"
@@ -2,19 +2,11 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import {
6
- Capabilities,
7
- contributes,
8
- createIntent,
9
- defineModule,
10
- definePlugin,
11
- Events,
12
- oneOf,
13
- } from '@dxos/app-framework';
5
+ import { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from '@dxos/app-framework';
14
6
  import { FunctionType } from '@dxos/functions';
15
7
  import { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';
16
8
 
17
- import { Markdown, Thread, ReactContext, ReactSurface, IntentResolver, ComputeGraphRegistry } from './capabilities';
9
+ import { Markdown, Thread, ReactSurface, IntentResolver, ComputeGraphRegistry } from './capabilities';
18
10
  import { meta, SHEET_PLUGIN } from './meta';
19
11
  import { serializer } from './serializer';
20
12
  import translations from './translations';
@@ -24,7 +16,7 @@ export const SheetPlugin = () =>
24
16
  definePlugin(meta, [
25
17
  defineModule({
26
18
  id: `${meta.id}/module/compute-graph-registry`,
27
- activatesOn: Events.Startup,
19
+ activatesOn: ClientEvents.ClientReady,
28
20
  activate: ComputeGraphRegistry,
29
21
  }),
30
22
  defineModule({
@@ -34,7 +26,7 @@ export const SheetPlugin = () =>
34
26
  }),
35
27
  defineModule({
36
28
  id: `${meta.id}/module/metadata`,
37
- activatesOn: oneOf(Events.Startup, Events.SetupAppGraph),
29
+ activatesOn: Events.SetupMetadata,
38
30
  activate: () =>
39
31
  contributes(Capabilities.Metadata, {
40
32
  id: SheetType.typename,
@@ -49,7 +41,7 @@ export const SheetPlugin = () =>
49
41
  }),
50
42
  defineModule({
51
43
  id: `${meta.id}/module/schema`,
52
- activatesOn: ClientEvents.SetupClient,
44
+ activatesOn: ClientEvents.SetupSchema,
53
45
  activate: () => [
54
46
  contributes(ClientCapabilities.Schema, [SheetType]),
55
47
  // TODO(wittjosiah): Factor out to common package/plugin.
@@ -67,14 +59,9 @@ export const SheetPlugin = () =>
67
59
  activatesOn: Events.Startup,
68
60
  activate: Thread,
69
61
  }),
70
- defineModule({
71
- id: `${meta.id}/module/react-context`,
72
- activatesOn: Events.Startup,
73
- activate: ReactContext,
74
- }),
75
62
  defineModule({
76
63
  id: `${meta.id}/module/react-surface`,
77
- activatesOn: Events.Startup,
64
+ activatesOn: Events.SetupSurfaces,
78
65
  activate: ReactSurface,
79
66
  }),
80
67
  defineModule({
@@ -7,7 +7,6 @@ import { lazy } from '@dxos/app-framework';
7
7
  export const ComputeGraphRegistry = lazy(() => import('./compute-graph-registry'));
8
8
  export const IntentResolver = lazy(() => import('./intent-resolver'));
9
9
  export const Markdown = lazy(() => import('./markdown'));
10
- export const ReactContext = lazy(() => import('./react-context'));
11
10
  export const ReactSurface = lazy(() => import('./react-surface'));
12
11
  export const Thread = lazy(() => import('./thread'));
13
12
 
@@ -9,21 +9,30 @@ import { createSheet, SheetAction } from '../types';
9
9
 
10
10
  export default () =>
11
11
  contributes(Capabilities.IntentResolver, [
12
- createResolver(SheetAction.Create, ({ name }) => ({ data: { object: createSheet({ name }) } })),
13
- createResolver(SheetAction.InsertAxis, ({ model, axis, index, count }) => {
14
- const _indices = model[axis === 'col' ? 'insertColumns' : 'insertRows'](index, count);
12
+ createResolver({
13
+ intent: SheetAction.Create,
14
+ resolve: ({ name }) => ({ data: { object: createSheet({ name }) } }),
15
15
  }),
16
- createResolver(SheetAction.DropAxis, ({ model, axis, axisIndex, deletionData }, undo) => {
17
- if (!undo) {
18
- const undoData = model[axis === 'col' ? 'dropColumn' : 'dropRow'](axisIndex);
19
- return {
20
- undoable: {
21
- message: [`${axis} dropped label`, { ns: SHEET_PLUGIN }],
22
- data: { ...undoData, model },
23
- },
24
- };
25
- } else if (undo && deletionData) {
26
- model[deletionData.axis === 'col' ? 'restoreColumn' : 'restoreRow'](deletionData);
27
- }
16
+ createResolver({
17
+ intent: SheetAction.InsertAxis,
18
+ resolve: ({ model, axis, index, count }) => {
19
+ const _indices = model[axis === 'col' ? 'insertColumns' : 'insertRows'](index, count);
20
+ },
21
+ }),
22
+ createResolver({
23
+ intent: SheetAction.DropAxis,
24
+ resolve: ({ model, axis, axisIndex, deletionData }, undo) => {
25
+ if (!undo) {
26
+ const undoData = model[axis === 'col' ? 'dropColumn' : 'dropRow'](axisIndex);
27
+ return {
28
+ undoable: {
29
+ message: [`${axis} dropped label`, { ns: SHEET_PLUGIN }],
30
+ data: { ...undoData, model },
31
+ },
32
+ };
33
+ } else if (undo && deletionData) {
34
+ model[deletionData.axis === 'col' ? 'restoreColumn' : 'restoreRow'](deletionData);
35
+ }
36
+ },
28
37
  }),
29
38
  ]);
@@ -4,10 +4,11 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { Capabilities, contributes, createSurface } from '@dxos/app-framework';
7
+ import { Capabilities, contributes, createSurface, useCapability } from '@dxos/app-framework';
8
8
  import { getSpace } from '@dxos/react-client/echo';
9
9
 
10
- import { RangeList, SheetContainer } from '../components';
10
+ import { SheetCapabilities } from './capabilities';
11
+ import { ComputeGraphContextProvider, RangeList, SheetContainer } from '../components';
11
12
  import { SHEET_PLUGIN } from '../meta';
12
13
  import { SheetType } from '../types';
13
14
 
@@ -17,9 +18,15 @@ export default () =>
17
18
  id: `${SHEET_PLUGIN}/sheet`,
18
19
  role: ['article', 'section'],
19
20
  filter: (data): data is { subject: SheetType } => data.subject instanceof SheetType && !!getSpace(data.subject),
20
- component: ({ data, role }) => (
21
- <SheetContainer space={getSpace(data.subject)!} sheet={data.subject} role={role} />
22
- ),
21
+ component: ({ data, role }) => {
22
+ const computeGraphRegistry = useCapability(SheetCapabilities.ComputeGraphRegistry);
23
+
24
+ return (
25
+ <ComputeGraphContextProvider registry={computeGraphRegistry}>
26
+ <SheetContainer space={getSpace(data.subject)!} sheet={data.subject} role={role} />
27
+ </ComputeGraphContextProvider>
28
+ );
29
+ },
23
30
  }),
24
31
  createSurface({
25
32
  id: `${SHEET_PLUGIN}/settings`,
@@ -89,7 +89,7 @@ const gridCellGetter = (model: SheetModel) => {
89
89
 
90
90
  export const rowLabelCell = (row: number) => ({
91
91
  value: rowToA1Notation(row),
92
- className: 'text-end !pie-1 text-subdued',
92
+ className: 'text-end pie-1 text-subdued',
93
93
  resizeHandle: 'row',
94
94
  });
95
95
 
@@ -76,8 +76,11 @@ const meta: Meta = {
76
76
  capabilities: [
77
77
  contributes(
78
78
  Capabilities.IntentResolver,
79
- createResolver(SheetAction.DropAxis, ({ model, axis, axisIndex }) => {
80
- model[axis === 'col' ? 'dropColumn' : 'dropRow'](axisIndex);
79
+ createResolver({
80
+ intent: SheetAction.DropAxis,
81
+ resolve: ({ model, axis, axisIndex }) => {
82
+ model[axis === 'col' ? 'dropColumn' : 'dropRow'](axisIndex);
83
+ },
81
84
  }),
82
85
  ),
83
86
  ],
@@ -8,14 +8,15 @@ import {
8
8
  createIntent,
9
9
  createResolver,
10
10
  LayoutAction,
11
- useIntentDispatcher,
12
11
  useIntentResolver,
12
+ useIntentDispatcher,
13
13
  } from '@dxos/app-framework';
14
14
  import { debounce } from '@dxos/async';
15
15
  import { type CellAddress, type CompleteCellRange, inRange } from '@dxos/compute';
16
+ import { S } from '@dxos/echo-schema';
16
17
  import { ThreadAction } from '@dxos/plugin-thread/types';
17
18
  import { fullyQualifiedId } from '@dxos/react-client/echo';
18
- import { type DxGridElement, type DxGridPosition } from '@dxos/react-ui-grid';
19
+ import { type DxGridElement, type DxGridPosition, type GridContentProps } from '@dxos/react-ui-grid';
19
20
 
20
21
  import { useSheetContext } from '../components';
21
22
  import { SHEET_PLUGIN } from '../meta';
@@ -41,19 +42,29 @@ export const useUpdateFocusedCellOnThreadSelection = (grid: DxGridElement | null
41
42
  const { model, setActiveRefs } = useSheetContext();
42
43
  const scrollIntoViewResolver = useMemo(
43
44
  () =>
44
- createResolver(
45
- LayoutAction.ScrollIntoView,
46
- ({ cursor, ref }) => {
45
+ createResolver({
46
+ intent: LayoutAction.ScrollIntoView,
47
+ position: 'hoist',
48
+ filter: (
49
+ data,
50
+ ): data is {
51
+ part: 'current';
52
+ subject: string;
53
+ options: { cursor: string; ref: GridContentProps['activeRefs'] };
54
+ } => {
55
+ if (!S.is(LayoutAction.ScrollIntoView.fields.input)(data)) {
56
+ return false;
57
+ }
58
+
59
+ return data.subject === fullyQualifiedId(model.sheet) && !!data.options?.cursor;
60
+ },
61
+ resolve: ({ options: { cursor, ref } }) => {
47
62
  setActiveRefs(ref);
48
63
  // TODO(Zan): Everywhere we refer to the cursor in a thread context should change to `anchor`.
49
64
  const range = parseThreadAnchorAsCellRange(cursor!);
50
65
  range && grid?.setFocus({ ...range.to, plane: 'grid' }, true);
51
66
  },
52
- {
53
- disposition: 'hoist',
54
- filter: (data) => data.id === fullyQualifiedId(model.sheet) && !!data.cursor,
55
- },
56
- ),
67
+ }),
57
68
  [model.sheet, setActiveRefs],
58
69
  );
59
70
 
package/src/meta.ts CHANGED
@@ -9,7 +9,8 @@ export const SHEET_PLUGIN = 'dxos.org/plugin/sheet';
9
9
  export const meta = {
10
10
  id: SHEET_PLUGIN,
11
11
  name: 'Sheet',
12
- description: 'A simple spreadsheet plugin.',
12
+ description: `Sheets in Composer are simple spreadsheets which allow you to leverage custom functions inside of cell grids. Leverage more than 400 pre-built formulas like Sum, Average, Count, Max, Min along with many others. You can also deploy your own custom functions using the Scripts plugin. `,
13
13
  icon: 'ph--grid-nine--regular',
14
14
  source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-sheet',
15
+ screenshots: ['https://dxos.network/plugin-details-sheet-dark.png'],
15
16
  } satisfies PluginMeta;
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/ComputeGraph/ComputeGraphContextProvider.tsx", "../../../src/components/RangeList/RangeList.tsx", "../../../src/components/index.ts", "../../../src/components/GridSheet/GridSheet.tsx", "../../../src/components/GridSheet/util.ts", "../../../src/integrations/thread-ranges.ts", "../../../src/components/SheetContext/SheetContext.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { createContext, type PropsWithChildren, useContext } from 'react';\n\nimport { type ComputeGraph, type ComputeGraphRegistry } from '@dxos/compute';\nimport { raise } from '@dxos/debug';\nimport { type Space } from '@dxos/react-client/echo';\nimport { useAsyncState } from '@dxos/react-hooks';\n\nexport type ComputeGraphContextType = {\n registry: ComputeGraphRegistry;\n};\n\n/**\n * The compute graph context manages a ComputeGraph for each space.\n */\nexport const ComputeGraphContext = createContext<ComputeGraphContextType | undefined>(undefined);\n\nexport const ComputeGraphContextProvider = ({ registry, children }: PropsWithChildren<ComputeGraphContextType>) => {\n return <ComputeGraphContext.Provider value={{ registry }}>{children}</ComputeGraphContext.Provider>;\n};\n\nexport const useComputeGraph = (space?: Space): ComputeGraph | undefined => {\n const { registry } = useContext(ComputeGraphContext) ?? raise(new Error('Missing ComputeGraphContext'));\n const [graph] = useAsyncState(async () => {\n if (space) {\n const graph = registry.getOrCreateGraph(space);\n await graph.open();\n return graph;\n }\n }, [space, registry]);\n\n return graph;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { rangeToA1Notation } from '@dxos/compute';\nimport { S } from '@dxos/echo-schema';\nimport { useTranslation } from '@dxos/react-ui';\nimport { List } from '@dxos/react-ui-list';\nimport { ghostHover } from '@dxos/react-ui-theme';\n\nimport { SHEET_PLUGIN } from '../../meta';\nimport { rangeFromIndex } from '../../types';\nimport { Range, type SheetType } from '../../types';\n\nexport type RangeListProps = {\n sheet: SheetType;\n};\n\nexport const RangeList = ({ sheet }: RangeListProps) => {\n const { t } = useTranslation(SHEET_PLUGIN);\n // TODO(thure): Implement similar to comments, #8121\n const handleSelectRange = (range: Range) => {};\n const handleDeleteRange = useCallback(\n (range: Range) => {\n const index = sheet.ranges.findIndex((sheetRange) => sheetRange === range);\n sheet.ranges.splice(index, 1);\n },\n [sheet],\n );\n return (\n <>\n <h2 className='p-2 text-sm font-semibold'>{t('range list heading')}</h2>\n <List.Root<Range> items={sheet.ranges} isItem={S.is(Range)}>\n {({ items: ranges }) =>\n ranges.map((range, i) => (\n <List.Item key={i} item={range} classNames={['p-2', ghostHover]}>\n <List.ItemDragHandle />\n <List.ItemTitle onClick={() => handleSelectRange(range)}>\n {t('range title', {\n position: rangeToA1Notation(rangeFromIndex(sheet, range.range)),\n key: t(`range key ${range.key} label`),\n value: t(`range value ${range.value} label`),\n })}\n </List.ItemTitle>\n <List.ItemDeleteButton onClick={() => handleDeleteRange(range)} />\n </List.Item>\n ))\n }\n </List.Root>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport * from './ComputeGraph';\nexport * from './GridSheet';\nexport * from './RangeList';\nexport * from './SheetContext';\n\nexport const SheetContainer = lazy(() => import('./SheetContainer'));\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, {\n useCallback,\n useMemo,\n useRef,\n type FocusEvent,\n type KeyboardEvent,\n type WheelEvent,\n type MouseEvent,\n useState,\n} from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { rangeToA1Notation, type CellRange } from '@dxos/compute';\nimport { DropdownMenu, Icon, useTranslation } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport {\n closestCell,\n defaultSizeRow,\n editorKeys,\n Grid,\n GridCellEditor,\n type DxGridElement,\n type DxGridPosition,\n type DxGridCellIndex,\n type EditorKeyHandler,\n type EditorBlurHandler,\n type GridContentProps,\n parseCellIndex,\n} from '@dxos/react-ui-grid';\n\nimport { colLabelCell, rowLabelCell, useSheetModelDxGridProps } from './util';\nimport { rangeExtension, sheetExtension, type RangeController } from '../../extensions';\nimport { useSelectThreadOnCellFocus, useUpdateFocusedCellOnThreadSelection } from '../../integrations';\nimport { SHEET_PLUGIN } from '../../meta';\nimport { DEFAULT_COLS, DEFAULT_ROWS, SheetAction } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nconst inertPosition: DxGridPosition = { plane: 'grid', col: 0, row: 0 };\n\nconst initialCells = {\n grid: {},\n frozenColsStart: [...Array(64)].reduce((acc, _, i) => {\n acc[`0,${i}`] = rowLabelCell(i);\n return acc;\n }, {}),\n frozenRowsStart: [...Array(12)].reduce((acc, _, i) => {\n acc[`${i},0`] = colLabelCell(i);\n return acc;\n }, {}),\n};\n\nconst frozen = {\n frozenColsStart: 1,\n frozenRowsStart: 1,\n};\n\nconst sheetRowDefault = {\n frozenRowsStart: { size: defaultSizeRow, readonly: true },\n grid: { size: defaultSizeRow, resizeable: true },\n};\nconst sheetColDefault = { frozenColsStart: { size: 48, readonly: true }, grid: { size: 180, resizeable: true } };\n\nexport const GridSheet = () => {\n const { t } = useTranslation(SHEET_PLUGIN);\n const { id, model, editing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs, ignoreAttention } =\n useSheetContext();\n // NOTE(thure): using `useState` instead of `useRef` works with refs provided by `@lit/react` and gives us\n // a reliable dependency for `useEffect` whereas `useLayoutEffect` does not guarantee the element will be defined.\n const [dxGrid, setDxGrid] = useState<DxGridElement | null>(null);\n const [extraplanarFocus, setExtraplanarFocus] = useState<DxGridPosition | null>(null);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const rangeController = useRef<RangeController>();\n const { hasAttention } = useAttention(id);\n\n const handleFocus = useCallback(\n (event: FocusEvent) => {\n if (!editing) {\n const cell = closestCell(event.target);\n if (cell) {\n if (cell.plane === 'grid') {\n setCursor({ col: cell.col, row: cell.row });\n setExtraplanarFocus(null);\n } else {\n setExtraplanarFocus(cell);\n }\n } else {\n setExtraplanarFocus(null);\n }\n }\n },\n [editing],\n );\n\n // TODO(burdon): Validate formula before closing: hf.validateFormula();\n const handleClose = useCallback<EditorKeyHandler>(\n (_value, event) => {\n if (event) {\n const { key, shift } = event;\n const axis = ['Enter', 'ArrowUp', 'ArrowDown'].includes(key)\n ? 'row'\n : ['Tab', 'ArrowLeft', 'ArrowRight'].includes(key)\n ? 'col'\n : undefined;\n const delta = key.startsWith('Arrow') ? (['ArrowUp', 'ArrowLeft'].includes(key) ? -1 : 1) : shift ? -1 : 1;\n dxGrid?.refocus(axis, delta);\n }\n },\n [model, editing, dxGrid],\n );\n\n const handleBlur = useCallback<EditorBlurHandler>(\n (value) => {\n if (value !== undefined) {\n model.setValue(parseCellIndex(editing!.index), value);\n }\n },\n [model, editing],\n );\n\n const handleAxisResize = useCallback<NonNullable<GridContentProps['onAxisResize']>>(\n ({ axis, size, index: numericIndex }) => {\n if (axis === 'row') {\n const rowId = model.sheet.rows[parseInt(numericIndex)];\n model.sheet.rowMeta[rowId] ??= {};\n model.sheet.rowMeta[rowId].size = size;\n } else {\n const columnId = model.sheet.columns[parseInt(numericIndex)];\n model.sheet.columnMeta[columnId] ??= {};\n model.sheet.columnMeta[columnId].size = size;\n }\n },\n [model],\n );\n\n const handleSelect = useCallback<NonNullable<GridContentProps['onSelect']>>(\n ({ minCol, maxCol, minRow, maxRow }) => {\n const range: CellRange = { from: { col: minCol, row: minRow } };\n if (minCol !== maxCol || minRow !== maxRow) {\n range.to = { col: maxCol, row: maxRow };\n }\n if (editing) {\n // Update range selection in formula.\n rangeController.current?.setRange(rangeToA1Notation(range));\n } else {\n // Setting range while editing causes focus to move to null, avoid doing so.\n setRange(range.to ? range : undefined);\n }\n },\n [editing],\n );\n const handleWheel = useCallback(\n (event: WheelEvent) => {\n if (!ignoreAttention && !hasAttention) {\n event.stopPropagation();\n }\n },\n [hasAttention, ignoreAttention],\n );\n\n const selectEntireAxis = useCallback(\n (pos: DxGridPosition) => {\n switch (pos.plane) {\n case 'frozenRowsStart':\n return dxGrid?.setSelection({\n start: { col: pos.col, row: 0, plane: 'grid' },\n end: { col: pos.col, row: model.sheet.rows.length - 1, plane: 'grid' },\n });\n case 'frozenColsStart':\n return dxGrid?.setSelection({\n start: { row: pos.row, col: 0, plane: 'grid' },\n end: { row: pos.row, col: model.sheet.columns.length - 1, plane: 'grid' },\n });\n }\n },\n [dxGrid, model.sheet],\n );\n\n const handleClick = useCallback(\n (event: MouseEvent) => {\n const cell = closestCell(event.target);\n if (cell) {\n selectEntireAxis(cell);\n }\n },\n [selectEntireAxis],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n switch (event.key) {\n case 'Backspace':\n case 'Delete':\n event.preventDefault();\n return cursorFallbackRange && model.clear(cursorFallbackRange);\n case 'Enter':\n case 'Space':\n if (dxGrid && extraplanarFocus) {\n switch (extraplanarFocus.plane) {\n case 'frozenRowsStart':\n case 'frozenColsStart':\n event.preventDefault();\n return selectEntireAxis(extraplanarFocus);\n }\n }\n }\n if (event.metaKey || event.ctrlKey) {\n switch (event.key) {\n case 'x':\n case 'X':\n event.preventDefault();\n return cursorFallbackRange && model.cut(cursorFallbackRange);\n case 'c':\n case 'C':\n event.preventDefault();\n return cursorFallbackRange && model.copy(cursorFallbackRange);\n case 'v':\n case 'V':\n event.preventDefault();\n return cursor && model.paste(cursor);\n case 'z':\n event.preventDefault();\n return event.shiftKey ? model.redo() : model.undo();\n case 'Z':\n case 'y':\n event.preventDefault();\n return model.redo();\n }\n }\n },\n [cursorFallbackRange, model, cursor, extraplanarFocus, selectEntireAxis],\n );\n\n const contextMenuAnchorRef = useRef<HTMLButtonElement | null>(null);\n const [contextMenuOpen, setContextMenuOpen] = useState<DxGridPosition | null>(null);\n const contextMenuAxis = contextMenuOpen?.plane.startsWith('frozenRows') ? 'col' : 'row';\n\n const handleContextMenu = useCallback((event: MouseEvent) => {\n const cell = closestCell(event.target);\n if (cell && cell.plane.startsWith('frozen')) {\n event.preventDefault();\n contextMenuAnchorRef.current = event.target as HTMLButtonElement;\n setContextMenuOpen(cell);\n }\n }, []);\n\n const handleAxisMenuAction = useCallback(\n (operation: 'insert-before' | 'insert-after' | 'drop') => {\n switch (operation) {\n case 'insert-before':\n case 'insert-after':\n return dispatch(\n createIntent(SheetAction.InsertAxis, {\n model,\n axis: contextMenuAxis,\n index: contextMenuOpen![contextMenuAxis] + (operation === 'insert-before' ? 0 : 1),\n }),\n );\n case 'drop':\n return dispatch(\n createIntent(SheetAction.DropAxis, {\n model,\n axis: contextMenuAxis,\n axisIndex: model.sheet[contextMenuAxis === 'row' ? 'rows' : 'columns'][contextMenuOpen![contextMenuAxis]],\n }),\n );\n }\n },\n [contextMenuAxis, contextMenuOpen, model, dispatch],\n );\n\n const { columns, rows } = useSheetModelDxGridProps(dxGrid, model);\n\n const extension = useMemo(\n () => [\n editorKeys({ onClose: handleClose, ...(editing?.initialContent && { onNav: handleClose }) }),\n sheetExtension({ functions: model.graph.getFunctions() }),\n rangeExtension({\n onInit: (fn) => (rangeController.current = fn),\n onStateChange: (state) => {\n if (dxGrid) {\n // This can’t dispatch a setState in this component, otherwise the cell editor remounts and loses focus.\n dxGrid.mode = typeof state.activeRange === 'undefined' ? 'edit' : 'edit-select';\n }\n },\n }),\n ],\n [model, handleClose, editing],\n );\n\n const getCellContent = useCallback(\n (index: DxGridCellIndex) => {\n return model.getCellText(parseCellIndex(index));\n },\n [model],\n );\n\n useUpdateFocusedCellOnThreadSelection(dxGrid);\n useSelectThreadOnCellFocus();\n\n return (\n <div role='none' className='relative min-bs-0'>\n <GridCellEditor getCellContent={getCellContent} extension={extension} onBlur={handleBlur} />\n <Grid.Content\n initialCells={initialCells}\n limitColumns={DEFAULT_COLS}\n limitRows={DEFAULT_ROWS}\n columns={columns}\n rows={rows}\n onAxisResize={handleAxisResize}\n onSelect={handleSelect}\n rowDefault={sheetRowDefault}\n columnDefault={sheetColDefault}\n frozen={frozen}\n onFocus={handleFocus}\n onWheelCapture={handleWheel}\n onKeyDown={handleKeyDown}\n onContextMenu={handleContextMenu}\n onClick={handleClick}\n overscroll='trap'\n className='[--dx-grid-base:var(--surface-bg)] [&_.dx-grid]:border-bs [&_.dx-grid]:absolute [&_.dx-grid]:inset-0 [&_.dx-grid]:border-separator'\n activeRefs={activeRefs}\n ref={setDxGrid}\n />\n <DropdownMenu.Root\n modal={false}\n open={!!contextMenuOpen}\n onOpenChange={(nextOpen) => setContextMenuOpen(nextOpen ? inertPosition : null)}\n >\n <DropdownMenu.VirtualTrigger virtualRef={contextMenuAnchorRef} />\n <DropdownMenu.Content side={contextMenuAxis === 'col' ? 'bottom' : 'right'} sideOffset={4} collisionPadding={8}>\n <DropdownMenu.Viewport>\n <DropdownMenu.Item\n onClick={() => handleAxisMenuAction('insert-before')}\n data-testid={`grid.${contextMenuAxis}.insert-before`}\n >\n <Icon\n size={5}\n icon={contextMenuAxis === 'col' ? 'ph--columns-plus-left--regular' : 'ph--rows-plus-top--regular'}\n />\n <span>{t(`add ${contextMenuAxis} before label`)}</span>\n </DropdownMenu.Item>\n <DropdownMenu.Item\n onClick={() => handleAxisMenuAction('insert-after')}\n data-testid={`grid.${contextMenuAxis}.insert-after`}\n >\n <Icon\n size={5}\n icon={contextMenuAxis === 'col' ? 'ph--columns-plus-right--regular' : 'ph--rows-plus-bottom--regular'}\n />\n <span>{t(`add ${contextMenuAxis} after label`)}</span>\n </DropdownMenu.Item>\n <DropdownMenu.Item\n onClick={() => handleAxisMenuAction('drop')}\n data-testid={`grid.${contextMenuAxis}.drop`}\n >\n <Icon size={5} icon='ph--backspace--regular' />\n <span>{t(`delete ${contextMenuAxis} label`)}</span>\n </DropdownMenu.Item>\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { inRange } from '@dxos/compute';\nimport { createDocAccessor, fullyQualifiedId } from '@dxos/react-client/echo';\nimport { parseValue, cellClassesForFieldType } from '@dxos/react-ui-form';\nimport {\n type GridContentProps,\n type DxGridElement,\n type DxGridAxisMeta,\n type DxGridPlane,\n type DxGridPlaneRange,\n type DxGridPlaneCells,\n type DxGridCellValue,\n colToA1Notation,\n rowToA1Notation,\n commentedClassName,\n} from '@dxos/react-ui-grid';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { parseThreadAnchorAsCellRange } from '../../integrations';\nimport { type SheetModel } from '../../model';\nimport { cellClassNameForRange, rangeFromIndex } from '../../types';\n\nconst createDxGridColumns = (model: SheetModel): DxGridAxisMeta => {\n return model.sheet.columns.reduce(\n (acc: DxGridAxisMeta, columnId, numericIndex) => {\n if (model.sheet.columnMeta[columnId] && model.sheet.columnMeta[columnId].size) {\n acc.grid[numericIndex] = { size: model.sheet.columnMeta[columnId].size, resizeable: true };\n }\n return acc;\n },\n { grid: {} },\n );\n};\n\nconst createDxGridRows = (model: SheetModel): DxGridAxisMeta => {\n return model.sheet.rows.reduce(\n (acc: DxGridAxisMeta, rowId, numericIndex) => {\n if (model.sheet.rowMeta[rowId] && model.sheet.rowMeta[rowId].size) {\n acc.grid[numericIndex] = { size: model.sheet.rowMeta[rowId].size, resizeable: true };\n }\n return acc;\n },\n { grid: {} },\n );\n};\n\nconst projectCellProps = (model: SheetModel, col: number, row: number): DxGridCellValue => {\n const address = { col, row };\n const rawValue = model.getValue(address);\n const ranges = model.sheet.ranges?.filter(({ range }) => inRange(rangeFromIndex(model.sheet, range), address));\n const threadRefs = model.sheet.threads\n ?.filter((thread) => {\n const range = thread.target?.anchor && parseThreadAnchorAsCellRange(thread.target!.anchor);\n return thread && range ? inRange(range, address) : false;\n })\n .map((thread) => fullyQualifiedId(thread!))\n .join(' ');\n\n const description = model.getValueDescription(address);\n const type = description?.type;\n const format = description?.format;\n const classNames = ranges?.map(cellClassNameForRange).reverse();\n\n return {\n value: parseValue({ type, format, value: rawValue }),\n className: mx(cellClassesForFieldType({ type, format }), threadRefs && commentedClassName, classNames),\n dataRefs: threadRefs,\n };\n};\nconst gridCellGetter = (model: SheetModel) => {\n // TODO(thure): Actually use the cache.\n const cachedGridCells: DxGridPlaneCells = {};\n return (nextBounds: DxGridPlaneRange): DxGridPlaneCells => {\n [...Array(nextBounds.end.col - nextBounds.start.col)].forEach((_, c0) => {\n return [...Array(nextBounds.end.row - nextBounds.start.row)].forEach((_, r0) => {\n const col = nextBounds.start.col + c0;\n const row = nextBounds.start.row + r0;\n cachedGridCells[`${col},${row}`] = projectCellProps(model, col, row);\n });\n });\n return cachedGridCells;\n };\n};\n\nexport const rowLabelCell = (row: number) => ({\n value: rowToA1Notation(row),\n className: 'text-end !pie-1 text-subdued',\n resizeHandle: 'row',\n});\n\nexport const colLabelCell = (col: number) => ({\n value: colToA1Notation(col),\n className: 'text-subdued',\n resizeHandle: 'col',\n});\n\nconst cellGetter = (model: SheetModel) => {\n const getGridCells = gridCellGetter(model);\n return (nextBounds: DxGridPlaneRange, plane: DxGridPlane): DxGridPlaneCells => {\n switch (plane) {\n case 'grid':\n return getGridCells(nextBounds);\n case 'frozenColsStart':\n return [...Array(nextBounds.end.row - nextBounds.start.row)].reduce((acc, _, r0) => {\n const r = nextBounds.start.row + r0;\n acc[`0,${r}`] = rowLabelCell(r);\n return acc;\n }, {});\n case 'frozenRowsStart':\n return [...Array(nextBounds.end.col - nextBounds.start.col)].reduce((acc, _, c0) => {\n const c = nextBounds.start.col + c0;\n acc[`${c},0`] = colLabelCell(c);\n return acc;\n }, {});\n default:\n return {};\n }\n };\n};\n\nexport const useSheetModelDxGridProps = (\n dxGrid: DxGridElement | null,\n model: SheetModel,\n): Pick<GridContentProps, 'columns' | 'rows'> => {\n const [columns, setColumns] = useState<DxGridAxisMeta>(createDxGridColumns(model));\n const [rows, setRows] = useState<DxGridAxisMeta>(createDxGridRows(model));\n\n useEffect(() => {\n const cellsAccessor = createDocAccessor(model.sheet, ['cells']);\n if (dxGrid) {\n dxGrid.getCells = cellGetter(model);\n }\n const handleCellsUpdate = () => {\n dxGrid?.requestUpdate('initialCells');\n };\n cellsAccessor.handle.addListener('change', handleCellsUpdate);\n const unsubscribe = model.graph.update.on(handleCellsUpdate);\n return () => {\n cellsAccessor.handle.removeListener('change', handleCellsUpdate);\n unsubscribe();\n };\n }, [model, dxGrid]);\n\n useEffect(() => {\n const columnMetaAccessor = createDocAccessor(model.sheet, ['columnMeta']);\n const rowMetaAccessor = createDocAccessor(model.sheet, ['rowMeta']);\n const handleColumnMetaUpdate = () => {\n setColumns(createDxGridColumns(model));\n };\n const handleRowMetaUpdate = () => {\n setRows(createDxGridRows(model));\n };\n columnMetaAccessor.handle.addListener('change', handleColumnMetaUpdate);\n rowMetaAccessor.handle.addListener('change', handleRowMetaUpdate);\n return () => {\n columnMetaAccessor.handle.removeListener('change', handleColumnMetaUpdate);\n rowMetaAccessor.handle.removeListener('change', handleRowMetaUpdate);\n };\n }, [model, dxGrid]);\n\n return { columns, rows };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback, useEffect, useMemo } from 'react';\n\nimport {\n createIntent,\n createResolver,\n LayoutAction,\n useIntentDispatcher,\n useIntentResolver,\n} from '@dxos/app-framework';\nimport { debounce } from '@dxos/async';\nimport { type CellAddress, type CompleteCellRange, inRange } from '@dxos/compute';\nimport { ThreadAction } from '@dxos/plugin-thread/types';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { type DxGridElement, type DxGridPosition } from '@dxos/react-ui-grid';\n\nimport { useSheetContext } from '../components';\nimport { SHEET_PLUGIN } from '../meta';\n\nexport const completeCellRangeToThreadCursor = (range: CompleteCellRange): string => {\n return `${range.from.col},${range.from.row},${range.to.col},${range.to.row}`;\n};\n\nexport const parseThreadAnchorAsCellRange = (cursor: string): CompleteCellRange | null => {\n const coords = cursor.split(',');\n if (coords.length !== 4) {\n return null;\n } else {\n const [fromCol, fromRow, toCol, toRow] = coords;\n return {\n from: { col: parseInt(fromCol), row: parseInt(fromRow) },\n to: { col: parseInt(toCol), row: parseInt(toRow) },\n };\n }\n};\n\nexport const useUpdateFocusedCellOnThreadSelection = (grid: DxGridElement | null) => {\n const { model, setActiveRefs } = useSheetContext();\n const scrollIntoViewResolver = useMemo(\n () =>\n createResolver(\n LayoutAction.ScrollIntoView,\n ({ cursor, ref }) => {\n setActiveRefs(ref);\n // TODO(Zan): Everywhere we refer to the cursor in a thread context should change to `anchor`.\n const range = parseThreadAnchorAsCellRange(cursor!);\n range && grid?.setFocus({ ...range.to, plane: 'grid' }, true);\n },\n {\n disposition: 'hoist',\n filter: (data) => data.id === fullyQualifiedId(model.sheet) && !!data.cursor,\n },\n ),\n [model.sheet, setActiveRefs],\n );\n\n useIntentResolver(SHEET_PLUGIN, scrollIntoViewResolver);\n};\n\nexport const useSelectThreadOnCellFocus = () => {\n const { model, cursor } = useSheetContext();\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const threads = useMemo(\n () => model.sheet.threads?.filter((thread): thread is NonNullable<typeof thread> => !!thread) ?? [],\n [\n // TODO(thure): Surely we can find a better dependency for this…\n JSON.stringify(model.sheet.threads),\n ],\n );\n\n const selectClosestThread = useCallback(\n (cellAddress: CellAddress) => {\n if (!cellAddress || !threads) {\n return;\n }\n\n const closestThread = threads?.find((ref) => {\n if (ref.target?.anchor) {\n const range = parseThreadAnchorAsCellRange(ref.target!.anchor);\n return range ? inRange(range, cellAddress) : false;\n } else {\n return false;\n }\n });\n\n if (closestThread) {\n void dispatch(createIntent(ThreadAction.Select, { current: fullyQualifiedId(closestThread) }));\n }\n },\n [dispatch, threads],\n );\n\n const debounced = useMemo(() => {\n return debounce((cellCoords: DxGridPosition) => requestAnimationFrame(() => selectClosestThread(cellCoords)), 50);\n }, [selectClosestThread]);\n\n useEffect(() => {\n if (!cursor) {\n return;\n }\n debounced(cursor);\n }, [cursor, debounced]);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type PropsWithChildren, createContext, useCallback, useContext, useState } from 'react';\n\nimport { type ComputeGraph, type CellAddress, type CellRange, type CompleteCellRange } from '@dxos/compute';\nimport { invariant } from '@dxos/invariant';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport {\n Grid,\n type GridContentProps,\n type GridEditing,\n type GridScopedProps,\n useGridContext,\n} from '@dxos/react-ui-grid';\n\nimport { type SheetModel, useSheetModel } from '../../model';\nimport { type SheetType } from '../../types';\n\nexport type SheetContextValue = {\n id: string;\n\n model: SheetModel;\n\n // Cursor state.\n // TODO(burdon): Cursor and range should use indices.\n cursor?: CellAddress;\n setCursor: (cell: CellAddress | undefined) => void;\n range?: CellRange;\n setRange: (range: CellRange | undefined) => void;\n cursorFallbackRange?: CompleteCellRange;\n\n // Editing state (undefined if not editing).\n editing: GridEditing;\n setEditing: (editing: GridEditing) => void;\n\n // Active refs\n activeRefs: GridContentProps['activeRefs'];\n setActiveRefs: (activeRefs: GridContentProps['activeRefs']) => void;\n\n // Events.\n // TODO(burdon): Generalize.\n onInfo?: () => void;\n\n // Flags\n ignoreAttention?: boolean;\n};\n\nconst SheetContext = createContext<SheetContextValue | undefined>(undefined);\n\nexport const useSheetContext = (): SheetContextValue => {\n const context = useContext(SheetContext);\n invariant(context);\n return context;\n};\n\nconst SheetProviderImpl = ({\n model,\n onInfo,\n ignoreAttention,\n children,\n __gridScope,\n}: GridScopedProps<PropsWithChildren<Pick<SheetContextValue, 'onInfo' | 'model' | 'ignoreAttention'>>>) => {\n const { id, editing, setEditing } = useGridContext('SheetProvider', __gridScope);\n\n const [cursor, setCursorInternal] = useState<CellAddress>();\n const [range, setRangeInternal] = useState<CellRange>();\n const [cursorFallbackRange, setCursorFallbackRange] = useState<CompleteCellRange>();\n const [activeRefs, setActiveRefs] = useState<GridContentProps['activeRefs']>('');\n\n const setCursor = useCallback(\n (nextCursor?: CellAddress) => {\n setCursorInternal(nextCursor);\n setCursorFallbackRange(\n range?.to ? (range as CompleteCellRange) : nextCursor ? { from: nextCursor!, to: nextCursor! } : undefined,\n );\n },\n [range],\n );\n const setRange = useCallback(\n (nextRange?: CellRange) => {\n setRangeInternal(nextRange);\n setCursorFallbackRange(\n nextRange?.to ? (nextRange as CompleteCellRange) : cursor ? { from: cursor!, to: cursor! } : undefined,\n );\n },\n [cursor],\n );\n\n return (\n <SheetContext.Provider\n value={{\n id,\n model,\n editing,\n setEditing,\n cursor,\n setCursor,\n range,\n setRange,\n cursorFallbackRange,\n activeRefs,\n setActiveRefs,\n // TODO(burdon): Change to event.\n onInfo,\n ignoreAttention,\n }}\n >\n {children}\n </SheetContext.Provider>\n );\n};\n\nexport type SheetProviderProps = {\n graph: ComputeGraph;\n sheet: SheetType;\n readonly?: boolean;\n ignoreAttention?: boolean;\n} & Pick<SheetContextValue, 'onInfo'>;\n\nexport const SheetProvider = ({\n children,\n graph,\n sheet,\n readonly,\n ignoreAttention,\n onInfo,\n}: PropsWithChildren<SheetProviderProps>) => {\n const model = useSheetModel(graph, sheet, { readonly });\n\n return !model ? null : (\n <Grid.Root id={fullyQualifiedId(sheet)}>\n <SheetProviderImpl model={model} onInfo={onInfo} ignoreAttention={ignoreAttention}>\n {children}\n </SheetProviderImpl>\n </Grid.Root>\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["React", "createContext", "useContext", "raise", "useAsyncState", "ComputeGraphContext", "createContext", "undefined", "ComputeGraphContextProvider", "registry", "children", "Provider", "value", "useComputeGraph", "space", "useContext", "raise", "Error", "graph", "useAsyncState", "getOrCreateGraph", "open", "React", "useCallback", "rangeToA1Notation", "S", "useTranslation", "List", "ghostHover", "RangeList", "sheet", "t", "useTranslation", "SHEET_PLUGIN", "handleSelectRange", "range", "handleDeleteRange", "useCallback", "index", "ranges", "findIndex", "sheetRange", "splice", "React", "h2", "className", "List", "Root", "items", "isItem", "S", "is", "Range", "map", "i", "Item", "key", "item", "classNames", "ghostHover", "ItemDragHandle", "ItemTitle", "onClick", "position", "rangeToA1Notation", "rangeFromIndex", "value", "ItemDeleteButton", "lazy", "React", "useCallback", "useMemo", "useRef", "useState", "createIntent", "useIntentDispatcher", "rangeToA1Notation", "DropdownMenu", "Icon", "useTranslation", "useAttention", "closestCell", "defaultSizeRow", "editorKeys", "Grid", "GridCellEditor", "parseCellIndex", "useEffect", "useState", "inRange", "createDocAccessor", "fullyQualifiedId", "parseValue", "cellClassesForFieldType", "colToA1Notation", "rowToA1Notation", "commentedClassName", "mx", "useCallback", "useEffect", "useMemo", "createIntent", "createResolver", "LayoutAction", "useIntentDispatcher", "useIntentResolver", "debounce", "inRange", "ThreadAction", "fullyQualifiedId", "completeCellRangeToThreadCursor", "range", "from", "col", "row", "to", "parseThreadAnchorAsCellRange", "cursor", "coords", "split", "length", "fromCol", "fromRow", "toCol", "toRow", "parseInt", "useUpdateFocusedCellOnThreadSelection", "grid", "model", "setActiveRefs", "useSheetContext", "scrollIntoViewResolver", "useMemo", "createResolver", "LayoutAction", "ScrollIntoView", "ref", "setFocus", "plane", "disposition", "filter", "data", "id", "fullyQualifiedId", "sheet", "useIntentResolver", "SHEET_PLUGIN", "useSelectThreadOnCellFocus", "dispatchPromise", "dispatch", "useIntentDispatcher", "threads", "thread", "JSON", "stringify", "selectClosestThread", "useCallback", "cellAddress", "closestThread", "find", "target", "anchor", "inRange", "createIntent", "ThreadAction", "Select", "current", "debounced", "debounce", "cellCoords", "requestAnimationFrame", "useEffect", "createDxGridColumns", "model", "sheet", "columns", "reduce", "acc", "columnId", "numericIndex", "columnMeta", "size", "grid", "resizeable", "createDxGridRows", "rows", "rowId", "rowMeta", "projectCellProps", "col", "row", "address", "rawValue", "getValue", "ranges", "filter", "range", "inRange", "rangeFromIndex", "threadRefs", "threads", "thread", "target", "anchor", "parseThreadAnchorAsCellRange", "map", "fullyQualifiedId", "join", "description", "getValueDescription", "type", "format", "classNames", "cellClassNameForRange", "reverse", "value", "parseValue", "className", "mx", "cellClassesForFieldType", "commentedClassName", "dataRefs", "gridCellGetter", "cachedGridCells", "nextBounds", "Array", "end", "start", "forEach", "_", "c0", "r0", "rowLabelCell", "rowToA1Notation", "resizeHandle", "colLabelCell", "colToA1Notation", "cellGetter", "getGridCells", "plane", "r", "c", "useSheetModelDxGridProps", "dxGrid", "setColumns", "useState", "setRows", "useEffect", "cellsAccessor", "createDocAccessor", "getCells", "handleCellsUpdate", "requestUpdate", "handle", "addListener", "unsubscribe", "graph", "update", "on", "removeListener", "columnMetaAccessor", "rowMetaAccessor", "handleColumnMetaUpdate", "handleRowMetaUpdate", "React", "createContext", "useCallback", "useContext", "useState", "invariant", "fullyQualifiedId", "Grid", "useGridContext", "SheetContext", "createContext", "undefined", "useSheetContext", "context", "useContext", "invariant", "SheetProviderImpl", "model", "onInfo", "ignoreAttention", "children", "__gridScope", "id", "editing", "setEditing", "useGridContext", "cursor", "setCursorInternal", "useState", "range", "setRangeInternal", "cursorFallbackRange", "setCursorFallbackRange", "activeRefs", "setActiveRefs", "setCursor", "useCallback", "nextCursor", "to", "from", "setRange", "nextRange", "React", "Provider", "value", "SheetProvider", "graph", "sheet", "readonly", "useSheetModel", "Grid", "Root", "fullyQualifiedId", "inertPosition", "plane", "col", "row", "initialCells", "grid", "frozenColsStart", "Array", "reduce", "acc", "_", "i", "rowLabelCell", "frozenRowsStart", "colLabelCell", "frozen", "sheetRowDefault", "size", "defaultSizeRow", "readonly", "resizeable", "sheetColDefault", "GridSheet", "t", "useTranslation", "SHEET_PLUGIN", "id", "model", "editing", "setCursor", "setRange", "cursor", "cursorFallbackRange", "activeRefs", "ignoreAttention", "useSheetContext", "dxGrid", "setDxGrid", "useState", "extraplanarFocus", "setExtraplanarFocus", "dispatchPromise", "dispatch", "useIntentDispatcher", "rangeController", "useRef", "hasAttention", "useAttention", "handleFocus", "useCallback", "event", "cell", "closestCell", "target", "handleClose", "_value", "key", "shift", "axis", "includes", "undefined", "delta", "startsWith", "refocus", "handleBlur", "value", "setValue", "parseCellIndex", "index", "handleAxisResize", "numericIndex", "rowId", "sheet", "rows", "parseInt", "rowMeta", "columnId", "columns", "columnMeta", "handleSelect", "minCol", "maxCol", "minRow", "maxRow", "range", "from", "to", "current", "rangeToA1Notation", "handleWheel", "stopPropagation", "selectEntireAxis", "pos", "setSelection", "start", "end", "length", "handleClick", "handleKeyDown", "preventDefault", "clear", "metaKey", "ctrlKey", "cut", "copy", "paste", "shiftKey", "redo", "undo", "contextMenuAnchorRef", "contextMenuOpen", "setContextMenuOpen", "contextMenuAxis", "handleContextMenu", "handleAxisMenuAction", "operation", "createIntent", "SheetAction", "InsertAxis", "DropAxis", "axisIndex", "useSheetModelDxGridProps", "extension", "useMemo", "editorKeys", "onClose", "initialContent", "onNav", "sheetExtension", "functions", "graph", "getFunctions", "rangeExtension", "onInit", "fn", "onStateChange", "state", "mode", "activeRange", "getCellContent", "getCellText", "useUpdateFocusedCellOnThreadSelection", "useSelectThreadOnCellFocus", "React", "div", "role", "className", "GridCellEditor", "onBlur", "Grid", "Content", "limitColumns", "DEFAULT_COLS", "limitRows", "DEFAULT_ROWS", "onAxisResize", "onSelect", "rowDefault", "columnDefault", "onFocus", "onWheelCapture", "onKeyDown", "onContextMenu", "onClick", "overscroll", "ref", "DropdownMenu", "Root", "modal", "open", "onOpenChange", "nextOpen", "VirtualTrigger", "virtualRef", "side", "sideOffset", "collisionPadding", "Viewport", "Item", "data-testid", "Icon", "icon", "span", "Arrow", "SheetContainer", "lazy"]
7
- }
@@ -1,15 +0,0 @@
1
- // packages/plugins/plugin-sheet/src/meta.ts
2
- var SHEET_PLUGIN = "dxos.org/plugin/sheet";
3
- var meta = {
4
- id: SHEET_PLUGIN,
5
- name: "Sheet",
6
- description: "A simple spreadsheet plugin.",
7
- icon: "ph--grid-nine--regular",
8
- source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-sheet"
9
- };
10
-
11
- export {
12
- SHEET_PLUGIN,
13
- meta
14
- };
15
- //# sourceMappingURL=chunk-K6EUYKWT.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const SHEET_PLUGIN = 'dxos.org/plugin/sheet';\n\nexport const meta = {\n id: SHEET_PLUGIN,\n name: 'Sheet',\n description: 'A simple spreadsheet plugin.',\n icon: 'ph--grid-nine--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-sheet',\n} satisfies PluginMeta;\n"],
5
- "mappings": ";AAMO,IAAMA,eAAe;AAErB,IAAMC,OAAO;EAClBC,IAAIF;EACJG,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;AACV;",
6
- "names": ["SHEET_PLUGIN", "meta", "id", "name", "description", "icon", "source"]
7
- }
@@ -1,47 +0,0 @@
1
- import {
2
- SheetAction,
3
- createSheet
4
- } from "./chunk-T3IVPMRX.mjs";
5
- import {
6
- SHEET_PLUGIN
7
- } from "./chunk-K6EUYKWT.mjs";
8
-
9
- // packages/plugins/plugin-sheet/src/capabilities/intent-resolver.ts
10
- import { contributes, Capabilities, createResolver } from "@dxos/app-framework";
11
- var intent_resolver_default = () => contributes(Capabilities.IntentResolver, [
12
- createResolver(SheetAction.Create, ({ name }) => ({
13
- data: {
14
- object: createSheet({
15
- name
16
- })
17
- }
18
- })),
19
- createResolver(SheetAction.InsertAxis, ({ model, axis, index, count }) => {
20
- const _indices = model[axis === "col" ? "insertColumns" : "insertRows"](index, count);
21
- }),
22
- createResolver(SheetAction.DropAxis, ({ model, axis, axisIndex, deletionData }, undo) => {
23
- if (!undo) {
24
- const undoData = model[axis === "col" ? "dropColumn" : "dropRow"](axisIndex);
25
- return {
26
- undoable: {
27
- message: [
28
- `${axis} dropped label`,
29
- {
30
- ns: SHEET_PLUGIN
31
- }
32
- ],
33
- data: {
34
- ...undoData,
35
- model
36
- }
37
- }
38
- };
39
- } else if (undo && deletionData) {
40
- model[deletionData.axis === "col" ? "restoreColumn" : "restoreRow"](deletionData);
41
- }
42
- })
43
- ]);
44
- export {
45
- intent_resolver_default as default
46
- };
47
- //# sourceMappingURL=intent-resolver-Q7DTHAM5.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/intent-resolver.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes, Capabilities, createResolver } from '@dxos/app-framework';\n\nimport { SHEET_PLUGIN } from '../meta';\nimport { createSheet, SheetAction } from '../types';\n\nexport default () =>\n contributes(Capabilities.IntentResolver, [\n createResolver(SheetAction.Create, ({ name }) => ({ data: { object: createSheet({ name }) } })),\n createResolver(SheetAction.InsertAxis, ({ model, axis, index, count }) => {\n const _indices = model[axis === 'col' ? 'insertColumns' : 'insertRows'](index, count);\n }),\n createResolver(SheetAction.DropAxis, ({ model, axis, axisIndex, deletionData }, undo) => {\n if (!undo) {\n const undoData = model[axis === 'col' ? 'dropColumn' : 'dropRow'](axisIndex);\n return {\n undoable: {\n message: [`${axis} dropped label`, { ns: SHEET_PLUGIN }],\n data: { ...undoData, model },\n },\n };\n } else if (undo && deletionData) {\n model[deletionData.axis === 'col' ? 'restoreColumn' : 'restoreRow'](deletionData);\n }\n }),\n ]);\n"],
5
- "mappings": ";;;;;;;;;AAIA,SAASA,aAAaC,cAAcC,sBAAsB;AAK1D,IAAA,0BAAe,MACbC,YAAYC,aAAaC,gBAAgB;EACvCC,eAAeC,YAAYC,QAAQ,CAAC,EAAEC,KAAI,OAAQ;IAAEC,MAAM;MAAEC,QAAQC,YAAY;QAAEH;MAAK,CAAA;IAAG;EAAE,EAAA;EAC5FH,eAAeC,YAAYM,YAAY,CAAC,EAAEC,OAAOC,MAAMC,OAAOC,MAAK,MAAE;AACnE,UAAMC,WAAWJ,MAAMC,SAAS,QAAQ,kBAAkB,YAAA,EAAcC,OAAOC,KAAAA;EACjF,CAAA;EACAX,eAAeC,YAAYY,UAAU,CAAC,EAAEL,OAAOC,MAAMK,WAAWC,aAAY,GAAIC,SAAAA;AAC9E,QAAI,CAACA,MAAM;AACT,YAAMC,WAAWT,MAAMC,SAAS,QAAQ,eAAe,SAAA,EAAWK,SAAAA;AAClE,aAAO;QACLI,UAAU;UACRC,SAAS;YAAC,GAAGV,IAAAA;YAAsB;cAAEW,IAAIC;YAAa;;UACtDjB,MAAM;YAAE,GAAGa;YAAUT;UAAM;QAC7B;MACF;IACF,WAAWQ,QAAQD,cAAc;AAC/BP,YAAMO,aAAaN,SAAS,QAAQ,kBAAkB,YAAA,EAAcM,YAAAA;IACtE;EACF,CAAA;CACD;",
6
- "names": ["contributes", "Capabilities", "createResolver", "contributes", "Capabilities", "IntentResolver", "createResolver", "SheetAction", "Create", "name", "data", "object", "createSheet", "InsertAxis", "model", "axis", "index", "count", "_indices", "DropAxis", "axisIndex", "deletionData", "undo", "undoData", "undoable", "message", "ns", "SHEET_PLUGIN"]
7
- }