@dxos/plugin-sheet 0.8.4-main.406dc2a → 0.8.4-main.52d7546f51

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 (239) hide show
  1. package/dist/lib/browser/SheetContainer-6DNFC4TY.mjs +397 -0
  2. package/dist/lib/browser/SheetContainer-6DNFC4TY.mjs.map +7 -0
  3. package/dist/lib/browser/anchor-sort-AMMLA66W.mjs +24 -0
  4. package/dist/lib/browser/anchor-sort-AMMLA66W.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-EDWHV64N.mjs +1473 -0
  6. package/dist/lib/browser/chunk-EDWHV64N.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-SSN4HYJL.mjs → chunk-IFLWVS2V.mjs} +9 -9
  8. package/dist/lib/browser/chunk-IFLWVS2V.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-KE3AKN5W.mjs +397 -0
  10. package/dist/lib/browser/chunk-KE3AKN5W.mjs.map +7 -0
  11. package/dist/lib/browser/compute-graph-registry-RC5L7RE4.mjs +21 -0
  12. package/dist/lib/browser/compute-graph-registry-RC5L7RE4.mjs.map +7 -0
  13. package/dist/lib/browser/index.mjs +71 -80
  14. package/dist/lib/browser/index.mjs.map +4 -4
  15. package/dist/lib/browser/markdown-D2T2DOVX.mjs +29 -0
  16. package/dist/lib/browser/markdown-D2T2DOVX.mjs.map +7 -0
  17. package/dist/lib/browser/meta.json +1 -1
  18. package/dist/lib/browser/operation-resolver-P2RX75DA.mjs +79 -0
  19. package/dist/lib/browser/operation-resolver-P2RX75DA.mjs.map +7 -0
  20. package/dist/lib/browser/{react-surface-7ZDMQDCT.mjs → react-surface-45CRAB5G.mjs} +19 -21
  21. package/dist/lib/browser/react-surface-45CRAB5G.mjs.map +7 -0
  22. package/dist/lib/browser/types/index.mjs +7 -12
  23. package/dist/lib/node-esm/SheetContainer-7H5R7M54.mjs +398 -0
  24. package/dist/lib/node-esm/SheetContainer-7H5R7M54.mjs.map +7 -0
  25. package/dist/lib/node-esm/anchor-sort-VHMBRX2E.mjs +25 -0
  26. package/dist/lib/node-esm/anchor-sort-VHMBRX2E.mjs.map +7 -0
  27. package/dist/lib/node-esm/chunk-6J5L47IB.mjs +398 -0
  28. package/dist/lib/node-esm/chunk-6J5L47IB.mjs.map +7 -0
  29. package/dist/lib/node-esm/chunk-AYSEWH7N.mjs +1474 -0
  30. package/dist/lib/node-esm/chunk-AYSEWH7N.mjs.map +7 -0
  31. package/dist/lib/node-esm/{chunk-IK4O7FUJ.mjs → chunk-PPOYR7DK.mjs} +9 -9
  32. package/dist/lib/node-esm/chunk-PPOYR7DK.mjs.map +7 -0
  33. package/dist/lib/node-esm/compute-graph-registry-ZGXVLVGD.mjs +22 -0
  34. package/dist/lib/node-esm/compute-graph-registry-ZGXVLVGD.mjs.map +7 -0
  35. package/dist/lib/node-esm/index.mjs +71 -80
  36. package/dist/lib/node-esm/index.mjs.map +4 -4
  37. package/dist/lib/node-esm/markdown-PTV72DLO.mjs +30 -0
  38. package/dist/lib/node-esm/markdown-PTV72DLO.mjs.map +7 -0
  39. package/dist/lib/node-esm/meta.json +1 -1
  40. package/dist/lib/node-esm/operation-resolver-WPIWQ5IO.mjs +80 -0
  41. package/dist/lib/node-esm/operation-resolver-WPIWQ5IO.mjs.map +7 -0
  42. package/dist/lib/node-esm/{react-surface-TUME5MM2.mjs → react-surface-ITV2L6HK.mjs} +19 -21
  43. package/dist/lib/node-esm/react-surface-ITV2L6HK.mjs.map +7 -0
  44. package/dist/lib/node-esm/types/index.mjs +7 -12
  45. package/dist/types/src/SheetPlugin.d.ts +2 -1
  46. package/dist/types/src/SheetPlugin.d.ts.map +1 -1
  47. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts +6 -0
  48. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts.map +1 -0
  49. package/dist/types/src/capabilities/anchor-sort/index.d.ts +3 -0
  50. package/dist/types/src/capabilities/anchor-sort/index.d.ts.map +1 -0
  51. package/dist/types/src/capabilities/compute-graph-registry/compute-graph-registry.d.ts +5 -0
  52. package/dist/types/src/capabilities/compute-graph-registry/compute-graph-registry.d.ts.map +1 -0
  53. package/dist/types/src/capabilities/compute-graph-registry/index.d.ts +3 -0
  54. package/dist/types/src/capabilities/compute-graph-registry/index.d.ts.map +1 -0
  55. package/dist/types/src/capabilities/index.d.ts +5 -9
  56. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  57. package/dist/types/src/capabilities/markdown/index.d.ts +3 -0
  58. package/dist/types/src/capabilities/markdown/index.d.ts.map +1 -0
  59. package/dist/types/src/capabilities/markdown/markdown.d.ts +5 -0
  60. package/dist/types/src/capabilities/markdown/markdown.d.ts.map +1 -0
  61. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  62. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  63. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  64. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  65. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  66. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  67. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  68. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  69. package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
  70. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts +3 -2
  71. package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +1 -1
  72. package/dist/types/src/components/GridSheet/SheetCellEditor.stories.d.ts +1 -1
  73. package/dist/types/src/components/GridSheet/SheetCellEditor.stories.d.ts.map +1 -1
  74. package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
  75. package/dist/types/src/components/RangeList/RangeList.d.ts +2 -2
  76. package/dist/types/src/components/RangeList/RangeList.d.ts.map +1 -1
  77. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts +5 -6
  78. package/dist/types/src/components/SheetContainer/SheetContainer.d.ts.map +1 -1
  79. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts +5 -3
  80. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
  81. package/dist/types/src/components/SheetContext/SheetContext.d.ts +2 -2
  82. package/dist/types/src/components/SheetContext/SheetContext.d.ts.map +1 -1
  83. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts +3 -4
  84. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -1
  85. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts +2 -0
  86. package/dist/types/src/components/SheetToolbar/SheetToolbar.stories.d.ts.map +1 -1
  87. package/dist/types/src/components/SheetToolbar/align.d.ts +12 -19
  88. package/dist/types/src/components/SheetToolbar/align.d.ts.map +1 -1
  89. package/dist/types/src/components/SheetToolbar/style.d.ts +12 -18
  90. package/dist/types/src/components/SheetToolbar/style.d.ts.map +1 -1
  91. package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts +14 -1
  92. package/dist/types/src/components/SheetToolbar/useToolbarState.d.ts.map +1 -1
  93. package/dist/types/src/components/index.d.ts +1 -1
  94. package/dist/types/src/components/index.d.ts.map +1 -1
  95. package/dist/types/src/extensions/compute.stories.d.ts.map +1 -1
  96. package/dist/types/src/extensions/editor/sheet-extension.d.ts.map +1 -1
  97. package/dist/types/src/index.d.ts +1 -1
  98. package/dist/types/src/index.d.ts.map +1 -1
  99. package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
  100. package/dist/types/src/meta.d.ts +2 -2
  101. package/dist/types/src/meta.d.ts.map +1 -1
  102. package/dist/types/src/model/sheet-model.d.ts +6 -6
  103. package/dist/types/src/model/sheet-model.d.ts.map +1 -1
  104. package/dist/types/src/model/testing.d.ts +2 -2
  105. package/dist/types/src/model/testing.d.ts.map +1 -1
  106. package/dist/types/src/model/useSheetModel.d.ts +2 -2
  107. package/dist/types/src/model/useSheetModel.d.ts.map +1 -1
  108. package/dist/types/src/serializer.d.ts +2 -2
  109. package/dist/types/src/serializer.d.ts.map +1 -1
  110. package/dist/types/src/testing/data.d.ts +2 -2
  111. package/dist/types/src/testing/data.d.ts.map +1 -1
  112. package/dist/types/src/testing/testing.d.ts +26 -2
  113. package/dist/types/src/testing/testing.d.ts.map +1 -1
  114. package/dist/types/src/translations.d.ts +3 -2
  115. package/dist/types/src/translations.d.ts.map +1 -1
  116. package/dist/types/src/types/Sheet.d.ts +76 -0
  117. package/dist/types/src/types/Sheet.d.ts.map +1 -0
  118. package/dist/types/src/types/capabilities.d.ts +6 -0
  119. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  120. package/dist/types/src/types/index.d.ts +2 -1
  121. package/dist/types/src/types/index.d.ts.map +1 -1
  122. package/dist/types/src/types/sheet-range-types.d.ts +2 -2
  123. package/dist/types/src/types/sheet-range-types.d.ts.map +1 -1
  124. package/dist/types/src/types/types.d.ts +91 -74
  125. package/dist/types/src/types/types.d.ts.map +1 -1
  126. package/dist/types/src/types/util.d.ts +10 -10
  127. package/dist/types/src/types/util.d.ts.map +1 -1
  128. package/dist/types/tsconfig.tsbuildinfo +1 -1
  129. package/package.json +76 -68
  130. package/src/SheetPlugin.tsx +41 -61
  131. package/src/capabilities/anchor-sort/anchor-sort.ts +27 -0
  132. package/src/capabilities/anchor-sort/index.ts +7 -0
  133. package/src/capabilities/compute-graph-registry/compute-graph-registry.ts +27 -0
  134. package/src/capabilities/compute-graph-registry/index.ts +7 -0
  135. package/src/capabilities/index.ts +5 -9
  136. package/src/capabilities/markdown/index.ts +7 -0
  137. package/src/capabilities/markdown/markdown.ts +30 -0
  138. package/src/capabilities/operation-resolver/index.ts +7 -0
  139. package/src/capabilities/operation-resolver/operation-resolver.ts +77 -0
  140. package/src/capabilities/react-surface/index.ts +7 -0
  141. package/src/capabilities/react-surface/react-surface.tsx +43 -0
  142. package/src/components/ComputeGraph/compute-graph.stories.tsx +9 -9
  143. package/src/components/FunctionEditor/FunctionEditor.tsx +2 -2
  144. package/src/components/GridSheet/GridSheet.stories.tsx +5 -5
  145. package/src/components/GridSheet/GridSheet.tsx +40 -30
  146. package/src/components/GridSheet/SheetCellEditor.stories.tsx +12 -9
  147. package/src/components/GridSheet/util.ts +11 -5
  148. package/src/components/RangeList/RangeList.tsx +10 -7
  149. package/src/components/SheetContainer/SheetContainer.stories.tsx +46 -23
  150. package/src/components/SheetContainer/SheetContainer.tsx +30 -22
  151. package/src/components/SheetContext/SheetContext.tsx +8 -8
  152. package/src/components/SheetToolbar/SheetToolbar.stories.tsx +1 -1
  153. package/src/components/SheetToolbar/SheetToolbar.tsx +39 -30
  154. package/src/components/SheetToolbar/align.ts +41 -16
  155. package/src/components/SheetToolbar/style.ts +45 -15
  156. package/src/components/SheetToolbar/useToolbarState.ts +22 -5
  157. package/src/extensions/compute.stories.tsx +19 -10
  158. package/src/extensions/compute.ts +1 -1
  159. package/src/extensions/editor/sheet-extension.ts +7 -4
  160. package/src/index.ts +1 -1
  161. package/src/integrations/thread-ranges.ts +39 -49
  162. package/src/meta.ts +8 -4
  163. package/src/model/sheet-model.test.ts +4 -4
  164. package/src/model/sheet-model.ts +80 -48
  165. package/src/model/testing.ts +4 -4
  166. package/src/model/useSheetModel.ts +2 -2
  167. package/src/playwright/playwright.config.ts +1 -1
  168. package/src/playwright/sheet.spec.ts +1 -0
  169. package/src/sanity.test.ts +3 -4
  170. package/src/serializer.ts +4 -4
  171. package/src/testing/data.ts +2 -2
  172. package/src/testing/testing.tsx +3 -3
  173. package/src/translations.ts +3 -2
  174. package/src/types/Sheet.ts +97 -0
  175. package/src/{capabilities → types}/capabilities.ts +2 -2
  176. package/src/types/index.ts +2 -1
  177. package/src/types/sheet-range-types.ts +2 -2
  178. package/src/types/types.ts +82 -48
  179. package/src/types/util.ts +11 -38
  180. package/dist/lib/browser/SheetContainer-VL34UND4.mjs +0 -351
  181. package/dist/lib/browser/SheetContainer-VL34UND4.mjs.map +0 -7
  182. package/dist/lib/browser/anchor-sort-3N44DS5F.mjs +0 -24
  183. package/dist/lib/browser/anchor-sort-3N44DS5F.mjs.map +0 -7
  184. package/dist/lib/browser/chunk-ADK2HW4A.mjs +0 -906
  185. package/dist/lib/browser/chunk-ADK2HW4A.mjs.map +0 -7
  186. package/dist/lib/browser/chunk-CSBSADPQ.mjs +0 -16
  187. package/dist/lib/browser/chunk-CSBSADPQ.mjs.map +0 -7
  188. package/dist/lib/browser/chunk-SSN4HYJL.mjs.map +0 -7
  189. package/dist/lib/browser/chunk-ZJWJMX4E.mjs +0 -852
  190. package/dist/lib/browser/chunk-ZJWJMX4E.mjs.map +0 -7
  191. package/dist/lib/browser/chunk-ZMPNHFIP.mjs +0 -15
  192. package/dist/lib/browser/chunk-ZMPNHFIP.mjs.map +0 -7
  193. package/dist/lib/browser/compute-graph-registry-MF65HGGM.mjs +0 -21
  194. package/dist/lib/browser/compute-graph-registry-MF65HGGM.mjs.map +0 -7
  195. package/dist/lib/browser/intent-resolver-BQLV6IAA.mjs +0 -56
  196. package/dist/lib/browser/intent-resolver-BQLV6IAA.mjs.map +0 -7
  197. package/dist/lib/browser/markdown-RMTMI237.mjs +0 -26
  198. package/dist/lib/browser/markdown-RMTMI237.mjs.map +0 -7
  199. package/dist/lib/browser/react-surface-7ZDMQDCT.mjs.map +0 -7
  200. package/dist/lib/node-esm/SheetContainer-NWJ7L6FC.mjs +0 -352
  201. package/dist/lib/node-esm/SheetContainer-NWJ7L6FC.mjs.map +0 -7
  202. package/dist/lib/node-esm/anchor-sort-YL2OZHYM.mjs +0 -25
  203. package/dist/lib/node-esm/anchor-sort-YL2OZHYM.mjs.map +0 -7
  204. package/dist/lib/node-esm/chunk-BZAPYBSH.mjs +0 -907
  205. package/dist/lib/node-esm/chunk-BZAPYBSH.mjs.map +0 -7
  206. package/dist/lib/node-esm/chunk-H3GSD33H.mjs +0 -18
  207. package/dist/lib/node-esm/chunk-H3GSD33H.mjs.map +0 -7
  208. package/dist/lib/node-esm/chunk-IK4O7FUJ.mjs.map +0 -7
  209. package/dist/lib/node-esm/chunk-LN6ZSAII.mjs +0 -16
  210. package/dist/lib/node-esm/chunk-LN6ZSAII.mjs.map +0 -7
  211. package/dist/lib/node-esm/chunk-YL7BVJPC.mjs +0 -853
  212. package/dist/lib/node-esm/chunk-YL7BVJPC.mjs.map +0 -7
  213. package/dist/lib/node-esm/compute-graph-registry-P2O5LDFZ.mjs +0 -22
  214. package/dist/lib/node-esm/compute-graph-registry-P2O5LDFZ.mjs.map +0 -7
  215. package/dist/lib/node-esm/intent-resolver-MV5ZFXAQ.mjs +0 -57
  216. package/dist/lib/node-esm/intent-resolver-MV5ZFXAQ.mjs.map +0 -7
  217. package/dist/lib/node-esm/markdown-EDIWHA3P.mjs +0 -27
  218. package/dist/lib/node-esm/markdown-EDIWHA3P.mjs.map +0 -7
  219. package/dist/lib/node-esm/react-surface-TUME5MM2.mjs.map +0 -7
  220. package/dist/types/src/capabilities/anchor-sort.d.ts +0 -6
  221. package/dist/types/src/capabilities/anchor-sort.d.ts.map +0 -1
  222. package/dist/types/src/capabilities/capabilities.d.ts +0 -5
  223. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  224. package/dist/types/src/capabilities/compute-graph-registry.d.ts +0 -4
  225. package/dist/types/src/capabilities/compute-graph-registry.d.ts.map +0 -1
  226. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  227. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  228. package/dist/types/src/capabilities/markdown.d.ts +0 -4
  229. package/dist/types/src/capabilities/markdown.d.ts.map +0 -1
  230. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  231. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  232. package/dist/types/src/types/schema.d.ts +0 -37
  233. package/dist/types/src/types/schema.d.ts.map +0 -1
  234. package/src/capabilities/anchor-sort.ts +0 -22
  235. package/src/capabilities/compute-graph-registry.ts +0 -23
  236. package/src/capabilities/intent-resolver.ts +0 -38
  237. package/src/capabilities/markdown.ts +0 -23
  238. package/src/capabilities/react-surface.tsx +0 -40
  239. package/src/types/schema.ts +0 -61
@@ -4,65 +4,99 @@
4
4
 
5
5
  import * as Schema from 'effect/Schema';
6
6
 
7
- import { meta } from '../meta';
8
- import { SheetModel } from '../model';
7
+ import { Capability } from '@dxos/app-framework';
8
+ import { Operation } from '@dxos/operation';
9
+ import { SpaceSchema } from '@dxos/react-client/echo';
10
+ import { Collection } from '@dxos/schema';
9
11
 
10
- import { type CellValue, RowColumnMeta, SheetType } from './schema';
12
+ import { meta } from '../meta';
11
13
 
12
- export type SheetSize = {
13
- rows: number;
14
- columns: number;
15
- };
14
+ import * as Sheet from './Sheet';
16
15
 
17
- export type CreateSheetOptions = {
18
- name?: string;
19
- cells?: Record<string, CellValue>;
20
- } & Partial<SheetSize>;
16
+ // TODO(wittjosiah): Factor out. This is `DxGridAxis` from `@dxos/react-ui-grid`.
17
+ const ActionAxis = Schema.Union(Schema.Literal('row'), Schema.Literal('col'));
21
18
 
22
19
  export namespace SheetAction {
23
- const SHEET_ACTION = `${meta.id}/action`;
24
-
25
- export class Create extends Schema.TaggedClass<Create>()(`${SHEET_ACTION}/create`, {
26
- input: Schema.Struct({
27
- name: Schema.optional(Schema.String),
28
- }),
29
- output: Schema.Struct({
30
- object: SheetType,
31
- }),
32
- }) {}
33
-
34
- // TODO(wittjosiah): Factor out. This is `DxGridAxis` from `@dxos/react-ui-grid`.
35
- const Axis = Schema.Union(Schema.Literal('row'), Schema.Literal('col'));
36
-
37
- export class InsertAxis extends Schema.TaggedClass<InsertAxis>()(`${SHEET_ACTION}/axis-insert`, {
38
- input: Schema.Struct({
39
- // TODO(wittjosiah): Schema.instanceOf(SheetModel) throws when running tests.
40
- model: Schema.Any.pipe(Schema.filter((model) => model instanceof SheetModel)) as Schema.Schema<SheetModel>,
41
- axis: Axis,
42
- index: Schema.Number,
43
- count: Schema.optional(Schema.Number),
44
- }),
45
- output: Schema.Void,
46
- }) {}
47
-
48
20
  export const RestoreAxis = Schema.Struct({
49
- axis: Axis,
21
+ axis: ActionAxis,
50
22
  axisIndex: Schema.String,
51
23
  index: Schema.Number,
52
- axisMeta: RowColumnMeta,
24
+ axisMeta: Sheet.RowColumnMeta,
53
25
  values: Schema.Array(Schema.Any),
54
26
  });
55
27
 
56
28
  export type RestoreAxis = Schema.Schema.Type<typeof RestoreAxis>;
29
+ }
30
+
31
+ const SHEET_OPERATION = `${meta.id}/operation`;
57
32
 
58
- export class DropAxis extends Schema.TaggedClass<DropAxis>()(`${SHEET_ACTION}/axis-drop`, {
59
- input: Schema.Struct({
60
- // TODO(wittjosiah): Schema.instanceOf(SheetModel) throws when running tests.
61
- model: Schema.Any.pipe(Schema.filter((model) => model instanceof SheetModel)) as Schema.Schema<SheetModel>,
62
- axis: Axis,
63
- axisIndex: Schema.String,
64
- deletionData: Schema.optional(RestoreAxis),
65
- }),
66
- output: Schema.Void,
67
- }) {}
33
+ // TODO(wittjosiah): Factor out. This is `DxGridAxis` from `@dxos/react-ui-grid`.
34
+ const Axis = Schema.Union(Schema.Literal('row'), Schema.Literal('col'));
35
+
36
+ export namespace SheetOperation {
37
+ export const OnCreateSpace = Operation.make({
38
+ meta: { key: `${SHEET_OPERATION}/on-create-space`, name: 'On Create Space' },
39
+ services: [Capability.Service],
40
+ schema: {
41
+ input: Schema.Struct({
42
+ space: SpaceSchema,
43
+ rootCollection: Collection.Collection,
44
+ isDefault: Schema.optional(Schema.Boolean),
45
+ }),
46
+ output: Schema.Void,
47
+ },
48
+ });
49
+
50
+ export const InsertAxis = Operation.make({
51
+ meta: { key: `${SHEET_OPERATION}/axis-insert`, name: 'Insert Axis' },
52
+ schema: {
53
+ input: Schema.Struct({
54
+ model: Schema.Any,
55
+ axis: Axis,
56
+ index: Schema.Number,
57
+ count: Schema.optional(Schema.Number),
58
+ }),
59
+ output: Schema.Void,
60
+ },
61
+ });
62
+
63
+ export const DropAxisOutput = Schema.Struct({
64
+ axis: Axis.annotations({ description: 'The axis type (row or col).' }),
65
+ axisIndex: Schema.String.annotations({ description: 'The dropped axis index.' }),
66
+ index: Schema.Number.annotations({ description: 'The position the axis was at.' }),
67
+ axisMeta: Schema.Any.annotations({ description: 'The row/column metadata.' }),
68
+ values: Schema.Array(Schema.Any).annotations({ description: 'The cell values that were dropped.' }),
69
+ });
70
+
71
+ export type DropAxisOutput = Schema.Schema.Type<typeof DropAxisOutput>;
72
+
73
+ export const DropAxis = Operation.make({
74
+ meta: { key: `${SHEET_OPERATION}/axis-drop`, name: 'Drop Axis' },
75
+ schema: {
76
+ input: Schema.Struct({
77
+ model: Schema.Any,
78
+ axis: Axis,
79
+ axisIndex: Schema.String,
80
+ }),
81
+ output: DropAxisOutput,
82
+ },
83
+ });
84
+
85
+ /**
86
+ * Restore a dropped axis (inverse of DropAxis).
87
+ */
88
+ export const RestoreAxis = Operation.make({
89
+ meta: { key: `${SHEET_OPERATION}/restore-axis`, name: 'Restore Axis' },
90
+ schema: {
91
+ input: Schema.Struct({
92
+ model: Schema.Any.annotations({ description: 'The sheet model.' }),
93
+ axis: Axis.annotations({ description: 'The axis type (row or col).' }),
94
+ axisIndex: Schema.String.annotations({ description: 'The axis index to restore.' }),
95
+ index: Schema.Number.annotations({ description: 'The position to restore at.' }),
96
+ axisMeta: Schema.Any.annotations({ description: 'The row/column metadata.' }),
97
+ values: Schema.Array(Schema.Any).annotations({ description: 'The cell values to restore.' }),
98
+ }),
99
+ output: Schema.Void,
100
+ },
101
+ });
68
102
  }
package/src/types/util.ts CHANGED
@@ -11,10 +11,10 @@ import {
11
11
  isFormula,
12
12
  } from '@dxos/compute';
13
13
  import { randomBytes } from '@dxos/crypto';
14
- import { Obj } from '@dxos/echo';
14
+ import { type Obj } from '@dxos/echo';
15
15
  import { invariant } from '@dxos/invariant';
16
16
 
17
- import { type CreateSheetOptions, type SheetSize, SheetType } from '../types';
17
+ import { type Sheet } from '../types';
18
18
 
19
19
  export const MAX_ROWS = 500;
20
20
  export const MAX_COLS = 676; // 26^2;
@@ -56,8 +56,8 @@ export const insertIndices = (indices: string[], i: number, n: number, max: numb
56
56
  };
57
57
 
58
58
  export const initialize = (
59
- sheet: SheetType,
60
- { rows = DEFAULT_ROWS, columns = DEFAULT_COLS }: Partial<SheetSize> = {},
59
+ sheet: Obj.Mutable<Sheet.Sheet>,
60
+ { rows = DEFAULT_ROWS, columns = DEFAULT_COLS }: Partial<Sheet.SheetSize> = {},
61
61
  ) => {
62
62
  if (!sheet.rows.length) {
63
63
  insertIndices(sheet.rows, 0, rows, MAX_ROWS);
@@ -67,44 +67,17 @@ export const initialize = (
67
67
  }
68
68
  };
69
69
 
70
- export const createSheet = ({ name, cells, ...size }: CreateSheetOptions = {}): SheetType => {
71
- const sheet = Obj.make(SheetType, {
72
- name,
73
- cells: {},
74
- rows: [],
75
- columns: [],
76
- rowMeta: {},
77
- columnMeta: {},
78
- ranges: [],
79
- });
80
-
81
- initialize(sheet, size);
82
-
83
- if (cells) {
84
- Object.entries(cells).forEach(([key, { value }]) => {
85
- const idx = addressToIndex(sheet, addressFromA1Notation(key));
86
- if (isFormula(value)) {
87
- value = mapFormulaRefsToIndices(sheet, value);
88
- }
89
-
90
- sheet.cells[idx] = { value };
91
- });
92
- }
93
-
94
- return sheet;
95
- };
96
-
97
70
  /**
98
71
  * E.g., "A1" => "CA2@CB3".
99
72
  */
100
- export const addressToIndex = (sheet: SheetType, cell: CellAddress): string => {
73
+ export const addressToIndex = (sheet: Sheet.Sheet, cell: CellAddress): string => {
101
74
  return `${sheet.columns[cell.col]}@${sheet.rows[cell.row]}`;
102
75
  };
103
76
 
104
77
  /**
105
78
  * E.g., "CA2@CB3" => "A1".
106
79
  */
107
- export const addressFromIndex = (sheet: SheetType, idx: string): CellAddress => {
80
+ export const addressFromIndex = (sheet: Sheet.Sheet, idx: string): CellAddress => {
108
81
  const [column, row] = idx.split('@');
109
82
  return {
110
83
  col: sheet.columns.indexOf(column),
@@ -115,14 +88,14 @@ export const addressFromIndex = (sheet: SheetType, idx: string): CellAddress =>
115
88
  /**
116
89
  * E.g., "A1:B2" => "CA2@CB3:CC4@CD5".
117
90
  */
118
- export const rangeToIndex = (sheet: SheetType, range: CellRange): string => {
91
+ export const rangeToIndex = (sheet: Sheet.Sheet, range: CellRange): string => {
119
92
  return [range.from, range.to ?? range.from].map((cell) => addressToIndex(sheet, cell)).join(':');
120
93
  };
121
94
 
122
95
  /**
123
96
  * E.g., "CA2@CB3:CC4@CD5" => "A1:B2".
124
97
  */
125
- export const rangeFromIndex = (sheet: SheetType, idx: string): CompleteCellRange => {
98
+ export const rangeFromIndex = (sheet: Sheet.Sheet, idx: string): CompleteCellRange => {
126
99
  const [from, to] = idx.split(':').map((index) => addressFromIndex(sheet, index));
127
100
  return { from, to };
128
101
  };
@@ -131,7 +104,7 @@ export const rangeFromIndex = (sheet: SheetType, idx: string): CompleteCellRange
131
104
  * Compares the positions of two cell indexes in a sheet.
132
105
  * Sorts primarily by row, then by column if rows are equal.
133
106
  */
134
- export const compareIndexPositions = (sheet: SheetType, indexA: string, indexB: string): number => {
107
+ export const compareIndexPositions = (sheet: Sheet.Sheet, indexA: string, indexB: string): number => {
135
108
  const { row: rowA, col: columnA } = addressFromIndex(sheet, indexA);
136
109
  const { row: rowB, col: columnB } = addressFromIndex(sheet, indexB);
137
110
 
@@ -148,7 +121,7 @@ export const compareIndexPositions = (sheet: SheetType, indexA: string, indexB:
148
121
  /**
149
122
  * Map from A1 notation to indices.
150
123
  */
151
- export const mapFormulaRefsToIndices = (sheet: SheetType, formula: string): string => {
124
+ export const mapFormulaRefsToIndices = (sheet: Sheet.Sheet, formula: string): string => {
152
125
  invariant(isFormula(formula));
153
126
  return formula.replace(/([a-zA-Z]+)([0-9]+)/g, (match) => {
154
127
  return addressToIndex(sheet, addressFromA1Notation(match));
@@ -158,7 +131,7 @@ export const mapFormulaRefsToIndices = (sheet: SheetType, formula: string): stri
158
131
  /**
159
132
  * Map from indices to A1 notation.
160
133
  */
161
- export const mapFormulaIndicesToRefs = (sheet: SheetType, formula: string): string => {
134
+ export const mapFormulaIndicesToRefs = (sheet: Sheet.Sheet, formula: string): string => {
162
135
  invariant(isFormula(formula));
163
136
  return formula.replace(/([a-zA-Z0-9]+)@([a-zA-Z0-9]+)/g, (idx) => {
164
137
  return addressToA1Notation(addressFromIndex(sheet, idx));
@@ -1,351 +0,0 @@
1
- import {
2
- GridSheet,
3
- SheetProvider,
4
- useComputeGraph,
5
- useSheetContext
6
- } from "./chunk-ZJWJMX4E.mjs";
7
- import {
8
- alignKey,
9
- mapFormulaIndicesToRefs,
10
- rangeFromIndex,
11
- rangeToIndex
12
- } from "./chunk-ADK2HW4A.mjs";
13
- import "./chunk-SSN4HYJL.mjs";
14
- import {
15
- meta
16
- } from "./chunk-CSBSADPQ.mjs";
17
-
18
- // src/components/SheetContainer/SheetContainer.tsx
19
- import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
20
- import React3 from "react";
21
- import { fullyQualifiedId } from "@dxos/react-client/echo";
22
- import { StackItem } from "@dxos/react-ui-stack";
23
-
24
- // src/components/FunctionEditor/FunctionEditor.tsx
25
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
26
- import React from "react";
27
- import { addressToA1Notation, isFormula, rangeToA1Notation } from "@dxos/compute";
28
- import { Icon } from "@dxos/react-ui";
29
- var FunctionEditor = () => {
30
- var _effect = _useSignals();
31
- try {
32
- const { model, cursor, range } = useSheetContext();
33
- let value;
34
- let formula = false;
35
- if (cursor) {
36
- value = model.getCellValue(cursor);
37
- if (isFormula(value)) {
38
- value = model.graph.mapFunctionBindingFromId(mapFormulaIndicesToRefs(model.sheet, value));
39
- formula = true;
40
- } else if (value != null) {
41
- value = String(value);
42
- }
43
- }
44
- return /* @__PURE__ */ React.createElement("div", {
45
- className: "flex shrink-0 justify-between items-center px-4 py-1 text-sm bg-toolbarSurface border-bs !border-subduedSeparator"
46
- }, /* @__PURE__ */ React.createElement("div", {
47
- className: "flex gap-4 items-center"
48
- }, /* @__PURE__ */ React.createElement("div", {
49
- className: "flex w-16 items-center font-mono"
50
- }, range && rangeToA1Notation(range) || cursor && addressToA1Notation(cursor)), /* @__PURE__ */ React.createElement("div", {
51
- className: "flex gap-2 items-center"
52
- }, /* @__PURE__ */ React.createElement(Icon, {
53
- icon: "ph--function--regular",
54
- classNames: [
55
- "text-greenText",
56
- formula ? "visible" : "invisible"
57
- ]
58
- }), /* @__PURE__ */ React.createElement("span", {
59
- className: "font-mono"
60
- }, value))));
61
- } finally {
62
- _effect.f();
63
- }
64
- };
65
-
66
- // src/components/SheetToolbar/SheetToolbar.tsx
67
- import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
68
- import { Rx } from "@effect-rx/rx-react";
69
- import React2, { useMemo as useMemo2 } from "react";
70
- import { useAppGraph } from "@dxos/app-framework";
71
- import { MenuProvider, ToolbarMenu, createGapSeparator, rxFromSignal, useMenuActions } from "@dxos/react-ui-menu";
72
-
73
- // src/components/SheetToolbar/align.ts
74
- import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
75
- import { useEffect } from "react";
76
- import { inRange } from "@dxos/compute";
77
- import { createMenuAction, createMenuItemGroup } from "@dxos/react-ui-menu";
78
- var aligns = {
79
- start: "ph--text-align-left--regular",
80
- center: "ph--text-align-center--regular",
81
- end: "ph--text-align-right--regular"
82
- };
83
- var useAlignState = (state) => {
84
- var _effect = _useSignals2();
85
- try {
86
- const { cursor, model } = useSheetContext();
87
- useEffect(() => {
88
- state[alignKey] = cursor ? model.sheet.ranges?.findLast(({ range, key }) => key === alignKey && inRange(rangeFromIndex(model.sheet, range), cursor))?.value : void 0;
89
- }, [
90
- cursor,
91
- model.sheet
92
- ]);
93
- } finally {
94
- _effect.f();
95
- }
96
- };
97
- var createAlignGroupAction = (value) => createMenuItemGroup("align", {
98
- label: [
99
- "align label",
100
- {
101
- ns: meta.id
102
- }
103
- ],
104
- variant: "toggleGroup",
105
- selectCardinality: "single",
106
- value: `${alignKey}--${value}`
107
- });
108
- var createAlignActions = (model, state, cursorFallbackRange) => Object.entries(aligns).map(([alignValue, icon]) => {
109
- return createMenuAction(`${alignKey}--${alignValue}`, () => {
110
- if (!cursorFallbackRange) {
111
- return;
112
- }
113
- const index = model.sheet.ranges?.findIndex((range) => range.key === alignKey && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from)) ?? -1;
114
- const nextRangeEntity = {
115
- range: rangeToIndex(model.sheet, cursorFallbackRange),
116
- key: alignKey,
117
- value: alignValue
118
- };
119
- if (index < 0) {
120
- model.sheet.ranges?.push(nextRangeEntity);
121
- state[alignKey] = nextRangeEntity.value;
122
- } else if (model.sheet.ranges[index].value === nextRangeEntity.value) {
123
- model.sheet.ranges?.splice(index, 1);
124
- state[alignKey] = void 0;
125
- } else {
126
- model.sheet.ranges?.splice(index, 1, nextRangeEntity);
127
- state[alignKey] = nextRangeEntity.value;
128
- }
129
- }, {
130
- key: alignKey,
131
- value: alignValue,
132
- checked: state[alignKey] === alignValue,
133
- label: [
134
- `range value ${alignValue} label`,
135
- {
136
- ns: meta.id
137
- }
138
- ],
139
- icon,
140
- testId: `grid.toolbar.${alignKey}.${alignValue}`
141
- });
142
- });
143
- var createAlign = (model, state, cursorFallbackRange) => {
144
- const alignGroup = createAlignGroupAction(state[alignKey]);
145
- const alignActions = createAlignActions(model, state, cursorFallbackRange);
146
- return {
147
- nodes: [
148
- alignGroup,
149
- ...alignActions
150
- ],
151
- edges: [
152
- {
153
- source: "root",
154
- target: "align"
155
- },
156
- ...alignActions.map(({ id }) => ({
157
- source: alignGroup.id,
158
- target: id
159
- }))
160
- ]
161
- };
162
- };
163
-
164
- // src/components/SheetToolbar/style.ts
165
- import { useEffect as useEffect2 } from "react";
166
- import { inRange as inRange2 } from "@dxos/compute";
167
- import { createMenuAction as createMenuAction2, createMenuItemGroup as createMenuItemGroup2 } from "@dxos/react-ui-menu";
168
- var styles = {
169
- highlight: "ph--highlighter--regular",
170
- softwrap: "ph--paragraph--regular"
171
- };
172
- var useStyleState = (state) => {
173
- const { cursorFallbackRange, model } = useSheetContext();
174
- useEffect2(() => {
175
- state.highlight = false;
176
- state.softwrap = false;
177
- if (cursorFallbackRange && model.sheet.ranges) {
178
- model.sheet.ranges.filter(({ range, key }) => key === "style" && inRange2(rangeFromIndex(model.sheet, range), cursorFallbackRange.from)).forEach(({ value }) => {
179
- state[value] = true;
180
- });
181
- }
182
- }, [
183
- cursorFallbackRange,
184
- model.sheet
185
- ]);
186
- };
187
- var createStyleGroup = (state) => {
188
- return createMenuItemGroup2("style", {
189
- variant: "toggleGroup",
190
- selectCardinality: "multiple",
191
- value: Object.keys(styles).filter((key) => !!state[key]).map((styleValue) => `style--${styleValue}`)
192
- });
193
- };
194
- var createStyleActions = (model, state, cursorFallbackRange) => Object.entries(styles).map(([styleValue, icon]) => {
195
- return createMenuAction2(`style--${styleValue}`, () => {
196
- if (!cursorFallbackRange) {
197
- return;
198
- }
199
- const index = model.sheet.ranges?.findIndex((range) => range.key === "style" && inRange2(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from)) ?? -1;
200
- const nextRangeEntity = {
201
- range: rangeToIndex(model.sheet, cursorFallbackRange),
202
- key: "style",
203
- value: styleValue
204
- };
205
- if (model.sheet.ranges.filter(({ range, key: rangeKey }) => rangeKey === "style" && inRange2(rangeFromIndex(model.sheet, range), cursorFallbackRange.from)).some(({ value: rangeValue }) => rangeValue === styleValue)) {
206
- if (index >= 0) {
207
- model.sheet.ranges?.splice(index, 1);
208
- }
209
- state[nextRangeEntity.value] = false;
210
- } else {
211
- model.sheet.ranges?.push(nextRangeEntity);
212
- state[nextRangeEntity.value] = true;
213
- }
214
- }, {
215
- key: "style",
216
- value: styleValue,
217
- icon,
218
- label: [
219
- `range value ${styleValue} label`,
220
- {
221
- ns: meta.id
222
- }
223
- ],
224
- checked: !!state[styleValue]
225
- });
226
- });
227
- var createStyle = (model, state, cursorFallbackRange) => {
228
- const styleGroupAction = createStyleGroup(state);
229
- const styleActions = createStyleActions(model, state, cursorFallbackRange);
230
- return {
231
- nodes: [
232
- styleGroupAction,
233
- ...styleActions
234
- ],
235
- edges: [
236
- {
237
- source: "root",
238
- target: "style"
239
- },
240
- ...styleActions.map(({ id }) => ({
241
- source: styleGroupAction.id,
242
- target: id
243
- }))
244
- ]
245
- };
246
- };
247
-
248
- // src/components/SheetToolbar/useToolbarState.ts
249
- import { useMemo } from "react";
250
- import { live } from "@dxos/live-object";
251
- var useToolbarState = (initialState = {}) => {
252
- return useMemo(() => live(initialState), []);
253
- };
254
-
255
- // src/components/SheetToolbar/SheetToolbar.tsx
256
- var createToolbarActions = (model, state, cursorFallbackRange, customActions) => {
257
- return Rx.make((get) => {
258
- const align = get(rxFromSignal(() => createAlign(model, state, cursorFallbackRange)));
259
- const style = get(rxFromSignal(() => createStyle(model, state, cursorFallbackRange)));
260
- const gap = createGapSeparator();
261
- const graph = {
262
- nodes: [
263
- ...align.nodes,
264
- ...style.nodes,
265
- ...gap.nodes
266
- ],
267
- edges: [
268
- ...align.edges,
269
- ...style.edges,
270
- ...gap.edges
271
- ]
272
- };
273
- if (customActions) {
274
- const custom = get(customActions);
275
- graph.nodes.push(...custom.nodes);
276
- graph.edges.push(...custom.edges);
277
- }
278
- return graph;
279
- });
280
- };
281
- var SheetToolbar = ({ id, classNames }) => {
282
- var _effect = _useSignals3();
283
- try {
284
- const { model, cursorFallbackRange } = useSheetContext();
285
- const state = useToolbarState({});
286
- useAlignState(state);
287
- useStyleState(state);
288
- const { graph } = useAppGraph();
289
- const customActions = useMemo2(() => {
290
- return Rx.make((get) => {
291
- const actions = get(graph.actions(id));
292
- const nodes = actions.filter((action) => action.properties.disposition === "toolbar");
293
- return {
294
- nodes,
295
- edges: nodes.map((node) => ({
296
- source: "root",
297
- target: node.id
298
- }))
299
- };
300
- });
301
- }, [
302
- graph
303
- ]);
304
- const actionsCreator = useMemo2(() => createToolbarActions(model, state, cursorFallbackRange, customActions), [
305
- model,
306
- state,
307
- cursorFallbackRange,
308
- customActions
309
- ]);
310
- const menu = useMenuActions(actionsCreator);
311
- return /* @__PURE__ */ React2.createElement(MenuProvider, {
312
- ...menu,
313
- attendableId: id
314
- }, /* @__PURE__ */ React2.createElement(ToolbarMenu, {
315
- classNames
316
- }));
317
- } finally {
318
- _effect.f();
319
- }
320
- };
321
-
322
- // src/components/SheetContainer/SheetContainer.tsx
323
- var SheetContainer = ({ space, sheet, role, ignoreAttention }) => {
324
- var _effect = _useSignals4();
325
- try {
326
- const graph = useComputeGraph(space);
327
- return graph ? /* @__PURE__ */ React3.createElement(SheetProvider, {
328
- sheet,
329
- graph,
330
- ignoreAttention
331
- }, /* @__PURE__ */ React3.createElement(StackItem.Content, {
332
- toolbar: true,
333
- statusbar: true,
334
- classNames: [
335
- role === "section" && "aspect-video",
336
- role === "story" && "bs-full"
337
- ]
338
- }, /* @__PURE__ */ React3.createElement(SheetToolbar, {
339
- id: fullyQualifiedId(sheet)
340
- }), /* @__PURE__ */ React3.createElement(GridSheet, null), /* @__PURE__ */ React3.createElement(FunctionEditor, null))) : null;
341
- } finally {
342
- _effect.f();
343
- }
344
- };
345
-
346
- // src/components/SheetContainer/index.ts
347
- var SheetContainer_default = SheetContainer;
348
- export {
349
- SheetContainer_default as default
350
- };
351
- //# sourceMappingURL=SheetContainer-VL34UND4.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/SheetContainer/SheetContainer.tsx", "../../../src/components/FunctionEditor/FunctionEditor.tsx", "../../../src/components/SheetToolbar/SheetToolbar.tsx", "../../../src/components/SheetToolbar/align.ts", "../../../src/components/SheetToolbar/style.ts", "../../../src/components/SheetToolbar/useToolbarState.ts", "../../../src/components/SheetContainer/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Space, fullyQualifiedId } from '@dxos/react-client/echo';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { type SheetType } from '../../types';\nimport { useComputeGraph } from '../ComputeGraph';\nimport { FunctionEditor } from '../FunctionEditor';\nimport { GridSheet } from '../GridSheet';\nimport { SheetProvider } from '../SheetContext';\nimport { SheetToolbar } from '../SheetToolbar';\n\nexport type SheetContainerProps = {\n space: Space;\n sheet: SheetType;\n role?: string;\n ignoreAttention?: boolean;\n};\n\nexport const SheetContainer = ({ space, sheet, role, ignoreAttention }: SheetContainerProps) => {\n const graph = useComputeGraph(space);\n\n return graph ? (\n <SheetProvider sheet={sheet} graph={graph} ignoreAttention={ignoreAttention}>\n <StackItem.Content\n toolbar\n statusbar\n classNames={[role === 'section' && 'aspect-video', role === 'story' && 'bs-full']}\n >\n <SheetToolbar id={fullyQualifiedId(sheet)} />\n <GridSheet />\n <FunctionEditor />\n </StackItem.Content>\n </SheetProvider>\n ) : null;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { addressToA1Notation, isFormula, rangeToA1Notation } from '@dxos/compute';\nimport { Icon } from '@dxos/react-ui';\n\nimport { mapFormulaIndicesToRefs } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nexport const FunctionEditor = () => {\n const { model, cursor, range } = useSheetContext();\n\n let value;\n let formula = false;\n if (cursor) {\n value = model.getCellValue(cursor);\n if (isFormula(value)) {\n value = model.graph.mapFunctionBindingFromId(mapFormulaIndicesToRefs(model.sheet, value));\n formula = true;\n } else if (value != null) {\n value = String(value);\n }\n }\n\n return (\n <div className='flex shrink-0 justify-between items-center px-4 py-1 text-sm bg-toolbarSurface border-bs !border-subduedSeparator'>\n <div className='flex gap-4 items-center'>\n <div className='flex w-16 items-center font-mono'>\n {(range && rangeToA1Notation(range)) || (cursor && addressToA1Notation(cursor))}\n </div>\n <div className='flex gap-2 items-center'>\n <Icon icon='ph--function--regular' classNames={['text-greenText', formula ? 'visible' : 'invisible']} />\n <span className='font-mono'>{value}</span>\n </div>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Rx } from '@effect-rx/rx-react';\nimport React, { type PropsWithChildren, useMemo } from 'react';\n\nimport { useAppGraph } from '@dxos/app-framework';\nimport { type CompleteCellRange } from '@dxos/compute';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport {\n type ActionGraphProps,\n MenuProvider,\n ToolbarMenu,\n createGapSeparator,\n rxFromSignal,\n useMenuActions,\n} from '@dxos/react-ui-menu';\n\nimport { type SheetModel } from '../../model';\nimport { useSheetContext } from '../SheetContext';\n\nimport { createAlign, useAlignState } from './align';\nimport { createStyle, useStyleState } from './style';\nimport { type ToolbarState, useToolbarState } from './useToolbarState';\n\n//\n// Root\n//\n\nexport type SheetToolbarProps = ThemedClassName<PropsWithChildren<{ id: string }>>;\n\nconst createToolbarActions = (\n model: SheetModel,\n state: ToolbarState,\n cursorFallbackRange?: CompleteCellRange,\n customActions?: Rx.Rx<ActionGraphProps>,\n): Rx.Rx<ActionGraphProps> => {\n return Rx.make((get) => {\n const align = get(rxFromSignal(() => createAlign(model, state, cursorFallbackRange)));\n const style = get(rxFromSignal(() => createStyle(model, state, cursorFallbackRange)));\n const gap = createGapSeparator();\n\n const graph: ActionGraphProps = {\n nodes: [...align.nodes, ...style.nodes, ...gap.nodes],\n edges: [...align.edges, ...style.edges, ...gap.edges],\n };\n\n if (customActions) {\n const custom = get(customActions);\n graph.nodes.push(...custom.nodes);\n graph.edges.push(...custom.edges);\n }\n\n return graph;\n });\n};\n\nexport const SheetToolbar = ({ id, classNames }: SheetToolbarProps) => {\n const { model, cursorFallbackRange } = useSheetContext();\n const state = useToolbarState({});\n useAlignState(state);\n useStyleState(state);\n\n const { graph } = useAppGraph();\n const customActions = useMemo(() => {\n return Rx.make((get) => {\n const actions = get(graph.actions(id));\n const nodes = actions.filter((action) => action.properties.disposition === 'toolbar');\n return { nodes, edges: nodes.map((node) => ({ source: 'root', target: node.id })) };\n });\n }, [graph]);\n\n const actionsCreator = useMemo(\n () => createToolbarActions(model, state, cursorFallbackRange, customActions),\n [model, state, cursorFallbackRange, customActions],\n );\n const menu = useMenuActions(actionsCreator);\n\n return (\n <MenuProvider {...menu} attendableId={id}>\n <ToolbarMenu classNames={classNames} />\n </MenuProvider>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { type CompleteCellRange, inRange } from '@dxos/compute';\nimport { type ToolbarMenuActionGroupProperties, createMenuAction, createMenuItemGroup } from '@dxos/react-ui-menu';\n\nimport { meta } from '../../meta';\nimport { type SheetModel } from '../../model';\nimport { type AlignKey, type AlignValue, alignKey, rangeFromIndex, rangeToIndex } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nimport { type ToolbarState } from './useToolbarState';\n\nexport type AlignAction = { key: AlignKey; value: AlignValue };\n\nexport type AlignState = { [alignKey]: AlignValue | undefined };\n\nconst aligns: Record<AlignValue, string> = {\n start: 'ph--text-align-left--regular',\n center: 'ph--text-align-center--regular',\n end: 'ph--text-align-right--regular',\n};\n\nexport const useAlignState = (state: Partial<AlignState>) => {\n const { cursor, model } = useSheetContext();\n useEffect(() => {\n // TODO(thure): Can this O(n) call be memoized?\n state[alignKey] = (\n cursor\n ? model.sheet.ranges?.findLast(\n ({ range, key }) => key === alignKey && inRange(rangeFromIndex(model.sheet, range), cursor),\n )?.value\n : undefined\n ) as AlignValue | undefined;\n }, [cursor, model.sheet]);\n};\n\nconst createAlignGroupAction = (value?: AlignValue) =>\n createMenuItemGroup('align', {\n label: ['align label', { ns: meta.id }],\n variant: 'toggleGroup',\n selectCardinality: 'single',\n value: `${alignKey}--${value}`,\n } as ToolbarMenuActionGroupProperties);\n\nconst createAlignActions = (model: SheetModel, state: ToolbarState, cursorFallbackRange?: CompleteCellRange) =>\n Object.entries(aligns).map(([alignValue, icon]) => {\n return createMenuAction<AlignAction>(\n `${alignKey}--${alignValue}`,\n () => {\n if (!cursorFallbackRange) {\n return;\n }\n const index =\n model.sheet.ranges?.findIndex(\n (range) =>\n range.key === alignKey && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n ) ?? -1;\n const nextRangeEntity = {\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key: alignKey,\n value: alignValue as AlignValue,\n };\n if (index < 0) {\n model.sheet.ranges?.push(nextRangeEntity);\n state[alignKey] = nextRangeEntity.value;\n } else if (model.sheet.ranges![index].value === nextRangeEntity.value) {\n model.sheet.ranges?.splice(index, 1);\n state[alignKey] = undefined;\n } else {\n model.sheet.ranges?.splice(index, 1, nextRangeEntity);\n state[alignKey] = nextRangeEntity.value;\n }\n },\n {\n key: alignKey,\n value: alignValue as AlignValue,\n checked: state[alignKey] === alignValue,\n label: [`range value ${alignValue} label`, { ns: meta.id }],\n icon,\n testId: `grid.toolbar.${alignKey}.${alignValue}`,\n },\n );\n });\n\nexport const createAlign = (model: SheetModel, state: ToolbarState, cursorFallbackRange?: CompleteCellRange) => {\n const alignGroup = createAlignGroupAction(state[alignKey]);\n const alignActions = createAlignActions(model, state, cursorFallbackRange);\n return {\n nodes: [alignGroup, ...alignActions],\n edges: [\n { source: 'root', target: 'align' },\n ...alignActions.map(({ id }) => ({ source: alignGroup.id, target: id })),\n ],\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { type CompleteCellRange, inRange } from '@dxos/compute';\nimport { type ToolbarMenuActionGroupProperties, createMenuAction, createMenuItemGroup } from '@dxos/react-ui-menu';\n\nimport { meta } from '../../meta';\nimport { type SheetModel } from '../../model';\nimport { type StyleKey, type StyleValue, rangeFromIndex, rangeToIndex } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nexport type StyleState = Partial<Record<StyleValue, boolean>>;\n\nexport type StyleAction = { key: StyleKey; value: StyleValue };\n\nconst styles: Record<StyleValue, string> = {\n highlight: 'ph--highlighter--regular',\n softwrap: 'ph--paragraph--regular',\n};\n\nexport const useStyleState = (state: StyleState) => {\n const { cursorFallbackRange, model } = useSheetContext();\n\n useEffect(() => {\n state.highlight = false;\n state.softwrap = false;\n if (cursorFallbackRange && model.sheet.ranges) {\n model.sheet.ranges\n .filter(\n ({ range, key }) => key === 'style' && inRange(rangeFromIndex(model.sheet, range), cursorFallbackRange.from),\n )\n .forEach(({ value }) => {\n state[value as StyleValue] = true;\n });\n }\n }, [cursorFallbackRange, model.sheet]);\n};\n\nconst createStyleGroup = (state: StyleState) => {\n return createMenuItemGroup('style', {\n variant: 'toggleGroup',\n selectCardinality: 'multiple',\n value: Object.keys(styles)\n .filter((key) => !!state[key as StyleValue])\n .map((styleValue) => `style--${styleValue}`),\n } as ToolbarMenuActionGroupProperties);\n};\n\nconst createStyleActions = (model: SheetModel, state: StyleState, cursorFallbackRange?: CompleteCellRange) =>\n Object.entries(styles).map(([styleValue, icon]) => {\n return createMenuAction<StyleAction>(\n `style--${styleValue}`,\n () => {\n if (!cursorFallbackRange) {\n return;\n }\n const index =\n model.sheet.ranges?.findIndex(\n (range) =>\n range.key === 'style' && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n ) ?? -1;\n const nextRangeEntity = {\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key: 'style',\n value: styleValue as StyleValue,\n };\n if (\n model.sheet.ranges\n .filter(\n ({ range, key: rangeKey }) =>\n rangeKey === 'style' && inRange(rangeFromIndex(model.sheet, range), cursorFallbackRange.from),\n )\n .some(({ value: rangeValue }) => rangeValue === styleValue)\n ) {\n // this value should be unset\n if (index >= 0) {\n model.sheet.ranges?.splice(index, 1);\n }\n state[nextRangeEntity.value] = false;\n } else {\n model.sheet.ranges?.push(nextRangeEntity);\n state[nextRangeEntity.value] = true;\n }\n },\n {\n key: 'style',\n value: styleValue as StyleValue,\n icon,\n label: [`range value ${styleValue} label`, { ns: meta.id }],\n checked: !!state[styleValue as StyleValue],\n },\n );\n });\n\nexport const createStyle = (model: SheetModel, state: StyleState, cursorFallbackRange?: CompleteCellRange) => {\n const styleGroupAction = createStyleGroup(state);\n const styleActions = createStyleActions(model, state, cursorFallbackRange);\n return {\n nodes: [styleGroupAction, ...styleActions],\n edges: [\n { source: 'root', target: 'style' },\n ...styleActions.map(({ id }) => ({ source: styleGroupAction.id, target: id })),\n ],\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { live } from '@dxos/live-object';\n\nimport { type AlignState } from './align';\nimport { type StyleState } from './style';\n\nexport type ToolbarState = Partial<StyleState & AlignState>;\n\nexport const useToolbarState = (initialState: ToolbarState = {}) => {\n return useMemo(() => live<ToolbarState>(initialState), []);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { SheetContainer } from './SheetContainer';\n\nexport default SheetContainer;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAIA,OAAOA,YAAW;AAElB,SAAqBC,wBAAwB;AAC7C,SAASC,iBAAiB;;;;ACH1B,OAAOC,WAAW;AAElB,SAASC,qBAAqBC,WAAWC,yBAAyB;AAClE,SAASC,YAAY;AAKd,IAAMC,iBAAiB,MAAA;;;AAC5B,UAAM,EAAEC,OAAOC,QAAQC,MAAK,IAAKC,gBAAAA;AAEjC,QAAIC;AACJ,QAAIC,UAAU;AACd,QAAIJ,QAAQ;AACVG,cAAQJ,MAAMM,aAAaL,MAAAA;AAC3B,UAAIM,UAAUH,KAAAA,GAAQ;AACpBA,gBAAQJ,MAAMQ,MAAMC,yBAAyBC,wBAAwBV,MAAMW,OAAOP,KAAAA,CAAAA;AAClFC,kBAAU;MACZ,WAAWD,SAAS,MAAM;AACxBA,gBAAQQ,OAAOR,KAAAA;MACjB;IACF;AAEA,WACE,sBAAA,cAACS,OAAAA;MAAIC,WAAU;OACb,sBAAA,cAACD,OAAAA;MAAIC,WAAU;OACb,sBAAA,cAACD,OAAAA;MAAIC,WAAU;OACXZ,SAASa,kBAAkBb,KAAAA,KAAYD,UAAUe,oBAAoBf,MAAAA,CAAAA,GAEzE,sBAAA,cAACY,OAAAA;MAAIC,WAAU;OACb,sBAAA,cAACG,MAAAA;MAAKC,MAAK;MAAwBC,YAAY;QAAC;QAAkBd,UAAU,YAAY;;QACxF,sBAAA,cAACe,QAAAA;MAAKN,WAAU;OAAaV,KAAAA,CAAAA,CAAAA,CAAAA;;;;AAKvC;;;;ACpCA,SAASiB,UAAU;AACnB,OAAOC,UAAiCC,WAAAA,gBAAe;AAEvD,SAASC,mBAAmB;AAG5B,SAEEC,cACAC,aACAC,oBACAC,cACAC,sBACK;;;;ACbP,SAASC,iBAAiB;AAE1B,SAAiCC,eAAe;AAChD,SAAgDC,kBAAkBC,2BAA2B;AAa7F,IAAMC,SAAqC;EACzCC,OAAO;EACPC,QAAQ;EACRC,KAAK;AACP;AAEO,IAAMC,gBAAgB,CAACC,UAAAA;;;AAC5B,UAAM,EAAEC,QAAQC,MAAK,IAAKC,gBAAAA;AAC1BC,cAAU,MAAA;AAERJ,YAAMK,QAAAA,IACJJ,SACIC,MAAMI,MAAMC,QAAQC,SAClB,CAAC,EAAEC,OAAOC,IAAG,MAAOA,QAAQL,YAAYM,QAAQC,eAAeV,MAAMI,OAAOG,KAAAA,GAAQR,MAAAA,CAAAA,GACnFY,QACHC;IAER,GAAG;MAACb;MAAQC,MAAMI;KAAM;;;;AAC1B;AAEA,IAAMS,yBAAyB,CAACF,UAC9BG,oBAAoB,SAAS;EAC3BC,OAAO;IAAC;IAAe;MAAEC,IAAIC,KAAKC;IAAG;;EACrCC,SAAS;EACTC,mBAAmB;EACnBT,OAAO,GAAGR,QAAAA,KAAaQ,KAAAA;AACzB,CAAA;AAEF,IAAMU,qBAAqB,CAACrB,OAAmBF,OAAqBwB,wBAClEC,OAAOC,QAAQ/B,MAAAA,EAAQgC,IAAI,CAAC,CAACC,YAAYC,IAAAA,MAAK;AAC5C,SAAOC,iBACL,GAAGzB,QAAAA,KAAauB,UAAAA,IAChB,MAAA;AACE,QAAI,CAACJ,qBAAqB;AACxB;IACF;AACA,UAAMO,QACJ7B,MAAMI,MAAMC,QAAQyB,UAClB,CAACvB,UACCA,MAAMC,QAAQL,YAAYM,QAAQC,eAAeV,MAAMI,OAAOG,MAAMA,KAAK,GAAGe,oBAAoBS,IAAI,CAAA,KACnG;AACP,UAAMC,kBAAkB;MACtBzB,OAAO0B,aAAajC,MAAMI,OAAOkB,mBAAAA;MACjCd,KAAKL;MACLQ,OAAOe;IACT;AACA,QAAIG,QAAQ,GAAG;AACb7B,YAAMI,MAAMC,QAAQ6B,KAAKF,eAAAA;AACzBlC,YAAMK,QAAAA,IAAY6B,gBAAgBrB;IACpC,WAAWX,MAAMI,MAAMC,OAAQwB,KAAAA,EAAOlB,UAAUqB,gBAAgBrB,OAAO;AACrEX,YAAMI,MAAMC,QAAQ8B,OAAON,OAAO,CAAA;AAClC/B,YAAMK,QAAAA,IAAYS;IACpB,OAAO;AACLZ,YAAMI,MAAMC,QAAQ8B,OAAON,OAAO,GAAGG,eAAAA;AACrClC,YAAMK,QAAAA,IAAY6B,gBAAgBrB;IACpC;EACF,GACA;IACEH,KAAKL;IACLQ,OAAOe;IACPU,SAAStC,MAAMK,QAAAA,MAAcuB;IAC7BX,OAAO;MAAC,eAAeW,UAAAA;MAAoB;QAAEV,IAAIC,KAAKC;MAAG;;IACzDS;IACAU,QAAQ,gBAAgBlC,QAAAA,IAAYuB,UAAAA;EACtC,CAAA;AAEJ,CAAA;AAEK,IAAMY,cAAc,CAACtC,OAAmBF,OAAqBwB,wBAAAA;AAClE,QAAMiB,aAAa1B,uBAAuBf,MAAMK,QAAAA,CAAS;AACzD,QAAMqC,eAAenB,mBAAmBrB,OAAOF,OAAOwB,mBAAAA;AACtD,SAAO;IACLmB,OAAO;MAACF;SAAeC;;IACvBE,OAAO;MACL;QAAEC,QAAQ;QAAQC,QAAQ;MAAQ;SAC/BJ,aAAaf,IAAI,CAAC,EAAEP,GAAE,OAAQ;QAAEyB,QAAQJ,WAAWrB;QAAI0B,QAAQ1B;MAAG,EAAA;;EAEzE;AACF;;;AC9FA,SAAS2B,aAAAA,kBAAiB;AAE1B,SAAiCC,WAAAA,gBAAe;AAChD,SAAgDC,oBAAAA,mBAAkBC,uBAAAA,4BAA2B;AAW7F,IAAMC,SAAqC;EACzCC,WAAW;EACXC,UAAU;AACZ;AAEO,IAAMC,gBAAgB,CAACC,UAAAA;AAC5B,QAAM,EAAEC,qBAAqBC,MAAK,IAAKC,gBAAAA;AAEvCC,EAAAA,WAAU,MAAA;AACRJ,UAAMH,YAAY;AAClBG,UAAMF,WAAW;AACjB,QAAIG,uBAAuBC,MAAMG,MAAMC,QAAQ;AAC7CJ,YAAMG,MAAMC,OACTC,OACC,CAAC,EAAEC,OAAOC,IAAG,MAAOA,QAAQ,WAAWC,SAAQC,eAAeT,MAAMG,OAAOG,KAAAA,GAAQP,oBAAoBW,IAAI,CAAA,EAE5GC,QAAQ,CAAC,EAAEC,MAAK,MAAE;AACjBd,cAAMc,KAAAA,IAAuB;MAC/B,CAAA;IACJ;EACF,GAAG;IAACb;IAAqBC,MAAMG;GAAM;AACvC;AAEA,IAAMU,mBAAmB,CAACf,UAAAA;AACxB,SAAOgB,qBAAoB,SAAS;IAClCC,SAAS;IACTC,mBAAmB;IACnBJ,OAAOK,OAAOC,KAAKxB,MAAAA,EAChBW,OAAO,CAACE,QAAQ,CAAC,CAACT,MAAMS,GAAAA,CAAkB,EAC1CY,IAAI,CAACC,eAAe,UAAUA,UAAAA,EAAY;EAC/C,CAAA;AACF;AAEA,IAAMC,qBAAqB,CAACrB,OAAmBF,OAAmBC,wBAChEkB,OAAOK,QAAQ5B,MAAAA,EAAQyB,IAAI,CAAC,CAACC,YAAYG,IAAAA,MAAK;AAC5C,SAAOC,kBACL,UAAUJ,UAAAA,IACV,MAAA;AACE,QAAI,CAACrB,qBAAqB;AACxB;IACF;AACA,UAAM0B,QACJzB,MAAMG,MAAMC,QAAQsB,UAClB,CAACpB,UACCA,MAAMC,QAAQ,WAAWC,SAAQC,eAAeT,MAAMG,OAAOG,MAAMA,KAAK,GAAGP,oBAAoBW,IAAI,CAAA,KAClG;AACP,UAAMiB,kBAAkB;MACtBrB,OAAOsB,aAAa5B,MAAMG,OAAOJ,mBAAAA;MACjCQ,KAAK;MACLK,OAAOQ;IACT;AACA,QACEpB,MAAMG,MAAMC,OACTC,OACC,CAAC,EAAEC,OAAOC,KAAKsB,SAAQ,MACrBA,aAAa,WAAWrB,SAAQC,eAAeT,MAAMG,OAAOG,KAAAA,GAAQP,oBAAoBW,IAAI,CAAA,EAE/FoB,KAAK,CAAC,EAAElB,OAAOmB,WAAU,MAAOA,eAAeX,UAAAA,GAClD;AAEA,UAAIK,SAAS,GAAG;AACdzB,cAAMG,MAAMC,QAAQ4B,OAAOP,OAAO,CAAA;MACpC;AACA3B,YAAM6B,gBAAgBf,KAAK,IAAI;IACjC,OAAO;AACLZ,YAAMG,MAAMC,QAAQ6B,KAAKN,eAAAA;AACzB7B,YAAM6B,gBAAgBf,KAAK,IAAI;IACjC;EACF,GACA;IACEL,KAAK;IACLK,OAAOQ;IACPG;IACAW,OAAO;MAAC,eAAed,UAAAA;MAAoB;QAAEe,IAAIC,KAAKC;MAAG;;IACzDC,SAAS,CAAC,CAACxC,MAAMsB,UAAAA;EACnB,CAAA;AAEJ,CAAA;AAEK,IAAMmB,cAAc,CAACvC,OAAmBF,OAAmBC,wBAAAA;AAChE,QAAMyC,mBAAmB3B,iBAAiBf,KAAAA;AAC1C,QAAM2C,eAAepB,mBAAmBrB,OAAOF,OAAOC,mBAAAA;AACtD,SAAO;IACL2C,OAAO;MAACF;SAAqBC;;IAC7BE,OAAO;MACL;QAAEC,QAAQ;QAAQC,QAAQ;MAAQ;SAC/BJ,aAAatB,IAAI,CAAC,EAAEkB,GAAE,OAAQ;QAAEO,QAAQJ,iBAAiBH;QAAIQ,QAAQR;MAAG,EAAA;;EAE/E;AACF;;;ACvGA,SAASS,eAAe;AAExB,SAASC,YAAY;AAOd,IAAMC,kBAAkB,CAACC,eAA6B,CAAC,MAAC;AAC7D,SAAOC,QAAQ,MAAMC,KAAmBF,YAAAA,GAAe,CAAA,CAAE;AAC3D;;;AHiBA,IAAMG,uBAAuB,CAC3BC,OACAC,OACAC,qBACAC,kBAAAA;AAEA,SAAOC,GAAGC,KAAK,CAACC,QAAAA;AACd,UAAMC,QAAQD,IAAIE,aAAa,MAAMC,YAAYT,OAAOC,OAAOC,mBAAAA,CAAAA,CAAAA;AAC/D,UAAMQ,QAAQJ,IAAIE,aAAa,MAAMG,YAAYX,OAAOC,OAAOC,mBAAAA,CAAAA,CAAAA;AAC/D,UAAMU,MAAMC,mBAAAA;AAEZ,UAAMC,QAA0B;MAC9BC,OAAO;WAAIR,MAAMQ;WAAUL,MAAMK;WAAUH,IAAIG;;MAC/CC,OAAO;WAAIT,MAAMS;WAAUN,MAAMM;WAAUJ,IAAII;;IACjD;AAEA,QAAIb,eAAe;AACjB,YAAMc,SAASX,IAAIH,aAAAA;AACnBW,YAAMC,MAAMG,KAAI,GAAID,OAAOF,KAAK;AAChCD,YAAME,MAAME,KAAI,GAAID,OAAOD,KAAK;IAClC;AAEA,WAAOF;EACT,CAAA;AACF;AAEO,IAAMK,eAAe,CAAC,EAAEC,IAAIC,WAAU,MAAqB;;;AAChE,UAAM,EAAErB,OAAOE,oBAAmB,IAAKoB,gBAAAA;AACvC,UAAMrB,QAAQsB,gBAAgB,CAAC,CAAA;AAC/BC,kBAAcvB,KAAAA;AACdwB,kBAAcxB,KAAAA;AAEd,UAAM,EAAEa,MAAK,IAAKY,YAAAA;AAClB,UAAMvB,gBAAgBwB,SAAQ,MAAA;AAC5B,aAAOvB,GAAGC,KAAK,CAACC,QAAAA;AACd,cAAMsB,UAAUtB,IAAIQ,MAAMc,QAAQR,EAAAA,CAAAA;AAClC,cAAML,QAAQa,QAAQC,OAAO,CAACC,WAAWA,OAAOC,WAAWC,gBAAgB,SAAA;AAC3E,eAAO;UAAEjB;UAAOC,OAAOD,MAAMkB,IAAI,CAACC,UAAU;YAAEC,QAAQ;YAAQC,QAAQF,KAAKd;UAAG,EAAA;QAAI;MACpF,CAAA;IACF,GAAG;MAACN;KAAM;AAEV,UAAMuB,iBAAiBV,SACrB,MAAM5B,qBAAqBC,OAAOC,OAAOC,qBAAqBC,aAAAA,GAC9D;MAACH;MAAOC;MAAOC;MAAqBC;KAAc;AAEpD,UAAMmC,OAAOC,eAAeF,cAAAA;AAE5B,WACE,gBAAAG,OAAA,cAACC,cAAAA;MAAc,GAAGH;MAAMI,cAActB;OACpC,gBAAAoB,OAAA,cAACG,aAAAA;MAAYtB;;;;;AAGnB;;;AF7DO,IAAMuB,iBAAiB,CAAC,EAAEC,OAAOC,OAAOC,MAAMC,gBAAe,MAAuB;;;AACzF,UAAMC,QAAQC,gBAAgBL,KAAAA;AAE9B,WAAOI,QACL,gBAAAE,OAAA,cAACC,eAAAA;MAAcN;MAAcG;MAAcD;OACzC,gBAAAG,OAAA,cAACE,UAAUC,SAAO;MAChBC,SAAAA;MACAC,WAAAA;MACAC,YAAY;QAACV,SAAS,aAAa;QAAgBA,SAAS,WAAW;;OAEvE,gBAAAI,OAAA,cAACO,cAAAA;MAAaC,IAAIC,iBAAiBd,KAAAA;QACnC,gBAAAK,OAAA,cAACU,WAAAA,IAAAA,GACD,gBAAAV,OAAA,cAACW,gBAAAA,IAAAA,CAAAA,CAAAA,IAGH;;;;AACN;;;AMjCA,IAAA,yBAAeC;",
6
- "names": ["React", "fullyQualifiedId", "StackItem", "React", "addressToA1Notation", "isFormula", "rangeToA1Notation", "Icon", "FunctionEditor", "model", "cursor", "range", "useSheetContext", "value", "formula", "getCellValue", "isFormula", "graph", "mapFunctionBindingFromId", "mapFormulaIndicesToRefs", "sheet", "String", "div", "className", "rangeToA1Notation", "addressToA1Notation", "Icon", "icon", "classNames", "span", "Rx", "React", "useMemo", "useAppGraph", "MenuProvider", "ToolbarMenu", "createGapSeparator", "rxFromSignal", "useMenuActions", "useEffect", "inRange", "createMenuAction", "createMenuItemGroup", "aligns", "start", "center", "end", "useAlignState", "state", "cursor", "model", "useSheetContext", "useEffect", "alignKey", "sheet", "ranges", "findLast", "range", "key", "inRange", "rangeFromIndex", "value", "undefined", "createAlignGroupAction", "createMenuItemGroup", "label", "ns", "meta", "id", "variant", "selectCardinality", "createAlignActions", "cursorFallbackRange", "Object", "entries", "map", "alignValue", "icon", "createMenuAction", "index", "findIndex", "from", "nextRangeEntity", "rangeToIndex", "push", "splice", "checked", "testId", "createAlign", "alignGroup", "alignActions", "nodes", "edges", "source", "target", "useEffect", "inRange", "createMenuAction", "createMenuItemGroup", "styles", "highlight", "softwrap", "useStyleState", "state", "cursorFallbackRange", "model", "useSheetContext", "useEffect", "sheet", "ranges", "filter", "range", "key", "inRange", "rangeFromIndex", "from", "forEach", "value", "createStyleGroup", "createMenuItemGroup", "variant", "selectCardinality", "Object", "keys", "map", "styleValue", "createStyleActions", "entries", "icon", "createMenuAction", "index", "findIndex", "nextRangeEntity", "rangeToIndex", "rangeKey", "some", "rangeValue", "splice", "push", "label", "ns", "meta", "id", "checked", "createStyle", "styleGroupAction", "styleActions", "nodes", "edges", "source", "target", "useMemo", "live", "useToolbarState", "initialState", "useMemo", "live", "createToolbarActions", "model", "state", "cursorFallbackRange", "customActions", "Rx", "make", "get", "align", "rxFromSignal", "createAlign", "style", "createStyle", "gap", "createGapSeparator", "graph", "nodes", "edges", "custom", "push", "SheetToolbar", "id", "classNames", "useSheetContext", "useToolbarState", "useAlignState", "useStyleState", "useAppGraph", "useMemo", "actions", "filter", "action", "properties", "disposition", "map", "node", "source", "target", "actionsCreator", "menu", "useMenuActions", "React", "MenuProvider", "attendableId", "ToolbarMenu", "SheetContainer", "space", "sheet", "role", "ignoreAttention", "graph", "useComputeGraph", "React", "SheetProvider", "StackItem", "Content", "toolbar", "statusbar", "classNames", "SheetToolbar", "id", "fullyQualifiedId", "GridSheet", "FunctionEditor", "SheetContainer"]
7
- }