@dxos/plugin-sheet 0.8.2-main.5ca3450 → 0.8.2-main.600d381

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 (46) hide show
  1. package/dist/lib/browser/{SheetContainer-N74FX62K.mjs → SheetContainer-O4WVY7Y4.mjs} +86 -84
  2. package/dist/lib/browser/SheetContainer-O4WVY7Y4.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-SY25UNYZ.mjs → chunk-RSBJNX7L.mjs} +2 -2
  4. package/dist/lib/browser/index.mjs +1 -1
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/{react-surface-XUJZGNUH.mjs → react-surface-JNDDTM6K.mjs} +2 -2
  7. package/dist/lib/node/{SheetContainer-MERCQUPB.cjs → SheetContainer-2CFOIYBF.cjs} +96 -92
  8. package/dist/lib/node/SheetContainer-2CFOIYBF.cjs.map +7 -0
  9. package/dist/lib/node/{chunk-62JKBCGO.cjs → chunk-3QKD6C7X.cjs} +5 -5
  10. package/dist/lib/node/index.cjs +1 -1
  11. package/dist/lib/node/meta.json +1 -1
  12. package/dist/lib/node/{react-surface-GSS7VQ2D.cjs → react-surface-ZTKJM4TA.cjs} +8 -8
  13. package/dist/lib/node-esm/{SheetContainer-XFQTSA3I.mjs → SheetContainer-W3DQ7UFO.mjs} +86 -84
  14. package/dist/lib/node-esm/SheetContainer-W3DQ7UFO.mjs.map +7 -0
  15. package/dist/lib/node-esm/{chunk-RRIPYVEN.mjs → chunk-A5PYXQL6.mjs} +2 -2
  16. package/dist/lib/node-esm/index.mjs +1 -1
  17. package/dist/lib/node-esm/meta.json +1 -1
  18. package/dist/lib/node-esm/{react-surface-XUFWQE5B.mjs → react-surface-M6VLLWMY.mjs} +2 -2
  19. package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
  20. package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -1
  21. package/dist/types/src/components/SheetToolbar/align.d.ts +4 -1
  22. package/dist/types/src/components/SheetToolbar/align.d.ts.map +1 -1
  23. package/dist/types/src/components/SheetToolbar/comment.d.ts +3 -1
  24. package/dist/types/src/components/SheetToolbar/comment.d.ts.map +1 -1
  25. package/dist/types/src/components/SheetToolbar/style.d.ts +3 -1
  26. package/dist/types/src/components/SheetToolbar/style.d.ts.map +1 -1
  27. package/package.json +45 -45
  28. package/src/components/GridSheet/GridSheet.stories.tsx +1 -1
  29. package/src/components/SheetContainer/SheetContainer.stories.tsx +1 -5
  30. package/src/components/SheetToolbar/SheetToolbar.stories.tsx +1 -1
  31. package/src/components/SheetToolbar/SheetToolbar.tsx +33 -8
  32. package/src/components/SheetToolbar/align.ts +44 -14
  33. package/src/components/SheetToolbar/comment.ts +39 -11
  34. package/src/components/SheetToolbar/style.ts +48 -12
  35. package/dist/lib/browser/SheetContainer-N74FX62K.mjs.map +0 -7
  36. package/dist/lib/node/SheetContainer-MERCQUPB.cjs.map +0 -7
  37. package/dist/lib/node-esm/SheetContainer-XFQTSA3I.mjs.map +0 -7
  38. package/dist/types/src/components/SheetToolbar/useToolbarAction.d.ts +0 -8
  39. package/dist/types/src/components/SheetToolbar/useToolbarAction.d.ts.map +0 -1
  40. package/src/components/SheetToolbar/useToolbarAction.ts +0 -87
  41. /package/dist/lib/browser/{chunk-SY25UNYZ.mjs.map → chunk-RSBJNX7L.mjs.map} +0 -0
  42. /package/dist/lib/browser/{react-surface-XUJZGNUH.mjs.map → react-surface-JNDDTM6K.mjs.map} +0 -0
  43. /package/dist/lib/node/{chunk-62JKBCGO.cjs.map → chunk-3QKD6C7X.cjs.map} +0 -0
  44. /package/dist/lib/node/{react-surface-GSS7VQ2D.cjs.map → react-surface-ZTKJM4TA.cjs.map} +0 -0
  45. /package/dist/lib/node-esm/{chunk-RRIPYVEN.mjs.map → chunk-A5PYXQL6.mjs.map} +0 -0
  46. /package/dist/lib/node-esm/{react-surface-XUFWQE5B.mjs.map → react-surface-M6VLLWMY.mjs.map} +0 -0
@@ -4,7 +4,7 @@ import {
4
4
  completeCellRangeToThreadCursor,
5
5
  useComputeGraph,
6
6
  useSheetContext
7
- } from "./chunk-SY25UNYZ.mjs";
7
+ } from "./chunk-RSBJNX7L.mjs";
8
8
  import "./chunk-AT5ZK6JD.mjs";
9
9
  import {
10
10
  alignKey,
@@ -59,7 +59,9 @@ var FunctionEditor = () => {
59
59
  };
60
60
 
61
61
  // packages/plugins/plugin-sheet/src/components/SheetToolbar/SheetToolbar.tsx
62
- import React2, { useCallback as useCallback2 } from "react";
62
+ import React2, { useCallback } from "react";
63
+ import { createIntent, useIntentDispatcher } from "@dxos/app-framework";
64
+ import { ThreadAction } from "@dxos/plugin-thread/types";
63
65
  import { createGapSeparator, MenuProvider, ToolbarMenu, useMenuActions } from "@dxos/react-ui-menu";
64
66
 
65
67
  // packages/plugins/plugin-sheet/src/components/SheetToolbar/align.ts
@@ -91,11 +93,31 @@ var createAlignGroupAction = (value) => createMenuItemGroup("align", {
91
93
  selectCardinality: "single",
92
94
  value: `${alignKey}--${value}`
93
95
  });
94
- var createAlignActions = (value) => Object.entries(aligns).map(([alignValue, icon]) => {
95
- return createMenuAction(`${alignKey}--${alignValue}`, {
96
+ var createAlignActions = (model, state, cursorFallbackRange) => Object.entries(aligns).map(([alignValue, icon]) => {
97
+ return createMenuAction(`${alignKey}--${alignValue}`, () => {
98
+ if (!cursorFallbackRange) {
99
+ return;
100
+ }
101
+ const index = model.sheet.ranges?.findIndex((range) => range.key === alignKey && inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from)) ?? -1;
102
+ const nextRangeEntity = {
103
+ range: rangeToIndex(model.sheet, cursorFallbackRange),
104
+ key: alignKey,
105
+ value: alignValue
106
+ };
107
+ if (index < 0) {
108
+ model.sheet.ranges?.push(nextRangeEntity);
109
+ state[alignKey] = nextRangeEntity.value;
110
+ } else if (model.sheet.ranges[index].value === nextRangeEntity.value) {
111
+ model.sheet.ranges?.splice(index, 1);
112
+ state[alignKey] = void 0;
113
+ } else {
114
+ model.sheet.ranges?.splice(index, 1, nextRangeEntity);
115
+ state[alignKey] = nextRangeEntity.value;
116
+ }
117
+ }, {
96
118
  key: alignKey,
97
119
  value: alignValue,
98
- checked: value === alignValue,
120
+ checked: state[alignKey] === alignValue,
99
121
  label: [
100
122
  `range value ${alignValue} label`,
101
123
  {
@@ -106,9 +128,9 @@ var createAlignActions = (value) => Object.entries(aligns).map(([alignValue, ico
106
128
  testId: `grid.toolbar.${alignKey}.${alignValue}`
107
129
  });
108
130
  });
109
- var createAlign = ({ [alignKey]: alignValue }) => {
110
- const alignGroup = createAlignGroupAction(alignValue);
111
- const alignActions = createAlignActions(alignValue);
131
+ var createAlign = (model, state, cursorFallbackRange) => {
132
+ const alignGroup = createAlignGroupAction(state[alignKey]);
133
+ const alignActions = createAlignActions(model, state, cursorFallbackRange);
112
134
  return {
113
135
  nodes: [
114
136
  alignGroup,
@@ -149,7 +171,16 @@ var useCommentState = (state) => {
149
171
  cursorFallbackRange
150
172
  ]);
151
173
  };
152
- var createCommentAction = (state) => createMenuAction2("comment", {
174
+ var createCommentAction = (model, state, onComment, cursorFallbackRange) => createMenuAction2("comment", () => {
175
+ if (!cursorFallbackRange) {
176
+ return;
177
+ }
178
+ const cellContent = model.getCellText(cursorFallbackRange.from);
179
+ if (!cellContent) {
180
+ return;
181
+ }
182
+ onComment(cellContent, completeCellRangeToThreadCursor(cursorFallbackRange));
183
+ }, {
153
184
  key: commentKey,
154
185
  testId: "editor.toolbar.comment",
155
186
  icon: "ph--chat-text--regular",
@@ -161,9 +192,9 @@ var createCommentAction = (state) => createMenuAction2("comment", {
161
192
  ],
162
193
  disabled: state.commentEnabled !== "comment"
163
194
  });
164
- var createComment = (state) => ({
195
+ var createComment = (model, state, onComment, cursorFallbackRange) => ({
165
196
  nodes: [
166
- createCommentAction(state)
197
+ createCommentAction(model, state, onComment, cursorFallbackRange)
167
198
  ],
168
199
  edges: [
169
200
  {
@@ -203,8 +234,27 @@ var createStyleGroup = (state) => {
203
234
  value: Object.keys(styles).filter((key) => !!state[key]).map((styleValue) => `style--${styleValue}`)
204
235
  });
205
236
  };
206
- var createStyleActions = (state) => Object.entries(styles).map(([styleValue, icon]) => {
207
- return createMenuAction3(`style--${styleValue}`, {
237
+ var createStyleActions = (model, state, cursorFallbackRange) => Object.entries(styles).map(([styleValue, icon]) => {
238
+ return createMenuAction3(`style--${styleValue}`, () => {
239
+ if (!cursorFallbackRange) {
240
+ return;
241
+ }
242
+ const index = model.sheet.ranges?.findIndex((range) => range.key === "style" && inRange2(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from)) ?? -1;
243
+ const nextRangeEntity = {
244
+ range: rangeToIndex(model.sheet, cursorFallbackRange),
245
+ key: "style",
246
+ value: styleValue
247
+ };
248
+ if (model.sheet.ranges.filter(({ range, key: rangeKey }) => rangeKey === "style" && inRange2(rangeFromIndex(model.sheet, range), cursorFallbackRange.from)).some(({ value: rangeValue }) => rangeValue === styleValue)) {
249
+ if (index >= 0) {
250
+ model.sheet.ranges?.splice(index, 1);
251
+ }
252
+ state[nextRangeEntity.value] = false;
253
+ } else {
254
+ model.sheet.ranges?.push(nextRangeEntity);
255
+ state[nextRangeEntity.value] = true;
256
+ }
257
+ }, {
208
258
  key: "style",
209
259
  value: styleValue,
210
260
  icon,
@@ -217,9 +267,9 @@ var createStyleActions = (state) => Object.entries(styles).map(([styleValue, ico
217
267
  checked: !!state[styleValue]
218
268
  });
219
269
  });
220
- var createStyle = (state) => {
270
+ var createStyle = (model, state, cursorFallbackRange) => {
221
271
  const styleGroupAction = createStyleGroup(state);
222
- const styleActions = createStyleActions(state);
272
+ const styleActions = createStyleActions(model, state, cursorFallbackRange);
223
273
  return {
224
274
  nodes: [
225
275
  styleGroupAction,
@@ -238,65 +288,6 @@ var createStyle = (state) => {
238
288
  };
239
289
  };
240
290
 
241
- // packages/plugins/plugin-sheet/src/components/SheetToolbar/useToolbarAction.ts
242
- import { useCallback } from "react";
243
- import { createIntent, useIntentDispatcher } from "@dxos/app-framework";
244
- import { inRange as inRange3 } from "@dxos/compute";
245
- import { ThreadAction } from "@dxos/plugin-thread/types";
246
- var useToolbarAction = (state) => {
247
- const { model, cursorFallbackRange, cursor } = useSheetContext();
248
- const { dispatchPromise: dispatch } = useIntentDispatcher();
249
- return useCallback((action) => {
250
- const { key, value } = action.properties;
251
- if (cursorFallbackRange) {
252
- const index = model.sheet.ranges?.findIndex((range) => range.key === key && inRange3(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from)) ?? -1;
253
- const nextRangeEntity = {
254
- range: rangeToIndex(model.sheet, cursorFallbackRange),
255
- key,
256
- value
257
- };
258
- switch (key) {
259
- case "alignment":
260
- if (index < 0) {
261
- model.sheet.ranges?.push(nextRangeEntity);
262
- state[alignKey] = value;
263
- } else if (model.sheet.ranges[index].value === value) {
264
- model.sheet.ranges?.splice(index, 1);
265
- state[alignKey] = void 0;
266
- } else {
267
- model.sheet.ranges?.splice(index, 1, nextRangeEntity);
268
- state[alignKey] = value;
269
- }
270
- break;
271
- case "style":
272
- if (model.sheet.ranges.filter(({ range, key: rangeKey }) => rangeKey === "style" && inRange3(rangeFromIndex(model.sheet, range), cursorFallbackRange.from)).some(({ value: rangeValue }) => rangeValue === value)) {
273
- if (index >= 0) {
274
- model.sheet.ranges?.splice(index, 1);
275
- }
276
- state[value] = false;
277
- } else {
278
- model.sheet.ranges?.push(nextRangeEntity);
279
- state[value] = true;
280
- }
281
- break;
282
- case "comment": {
283
- const cellContent = model.getCellText(cursorFallbackRange.from);
284
- void dispatch(createIntent(ThreadAction.Create, {
285
- cursor: completeCellRangeToThreadCursor(cursorFallbackRange),
286
- name: cellContent,
287
- subject: model.sheet
288
- }));
289
- }
290
- }
291
- }
292
- }, [
293
- model.sheet,
294
- cursorFallbackRange,
295
- cursor,
296
- dispatch
297
- ]);
298
- };
299
-
300
291
  // packages/plugins/plugin-sheet/src/components/SheetToolbar/useToolbarState.ts
301
292
  import { useMemo as useMemo2 } from "react";
302
293
  import { live } from "@dxos/live-object";
@@ -305,11 +296,11 @@ var useToolbarState = (initialState = {}) => {
305
296
  };
306
297
 
307
298
  // packages/plugins/plugin-sheet/src/components/SheetToolbar/SheetToolbar.tsx
308
- var createToolbarActions = (state) => {
309
- const align = createAlign(state);
310
- const style = createStyle(state);
299
+ var createToolbarActions = (model, state, onComment, cursorFallbackRange) => {
300
+ const align = createAlign(model, state, cursorFallbackRange);
301
+ const style = createStyle(model, state, cursorFallbackRange);
311
302
  const gap = createGapSeparator();
312
- const comment = createComment(state);
303
+ const comment = createComment(model, state, onComment, cursorFallbackRange);
313
304
  return {
314
305
  nodes: [
315
306
  ...align.nodes,
@@ -326,19 +317,30 @@ var createToolbarActions = (state) => {
326
317
  };
327
318
  };
328
319
  var SheetToolbar = ({ attendableId, classNames }) => {
320
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
321
+ const { model, cursorFallbackRange } = useSheetContext();
329
322
  const state = useToolbarState({});
330
323
  useAlignState(state);
331
324
  useStyleState(state);
332
325
  useCommentState(state);
333
- const actionsCreator = useCallback2(() => createToolbarActions(state), [
334
- state
326
+ const handleComment = useCallback((name, cursor) => dispatch(createIntent(ThreadAction.Create, {
327
+ cursor,
328
+ name,
329
+ subject: model.sheet
330
+ })), [
331
+ model.sheet,
332
+ dispatch
333
+ ]);
334
+ const actionsCreator = useCallback(() => createToolbarActions(model, state, handleComment, cursorFallbackRange), [
335
+ model,
336
+ state,
337
+ handleComment,
338
+ cursorFallbackRange
335
339
  ]);
336
340
  const menu = useMenuActions(actionsCreator);
337
- const handleAction = useToolbarAction(state);
338
341
  return /* @__PURE__ */ React2.createElement(MenuProvider, {
339
342
  ...menu,
340
- attendableId,
341
- onAction: handleAction
343
+ attendableId
342
344
  }, /* @__PURE__ */ React2.createElement(ToolbarMenu, {
343
345
  classNames
344
346
  }));
@@ -367,4 +369,4 @@ var SheetContainer_default = SheetContainer;
367
369
  export {
368
370
  SheetContainer_default as default
369
371
  };
370
- //# sourceMappingURL=SheetContainer-N74FX62K.mjs.map
372
+ //# sourceMappingURL=SheetContainer-O4WVY7Y4.mjs.map
@@ -0,0 +1,7 @@
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/comment.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 { fullyQualifiedId, type Space } 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 const SheetContainer = ({\n space,\n sheet,\n role,\n ignoreAttention,\n}: {\n space: Space;\n sheet: SheetType;\n role?: string;\n ignoreAttention?: boolean;\n}) => {\n const graph = useComputeGraph(space);\n\n return graph ? (\n <SheetProvider sheet={sheet} graph={graph} ignoreAttention={ignoreAttention}>\n <StackItem.Content toolbar statusbar {...(role === 'section' && { classNames: 'aspect-video' })}>\n <SheetToolbar attendableId={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 attention-surface border-bs !border-separator'>\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 React, { type PropsWithChildren, useCallback } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { type CompleteCellRange } from '@dxos/compute';\nimport { ThreadAction } from '@dxos/plugin-thread/types';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { createGapSeparator, MenuProvider, ToolbarMenu, useMenuActions } from '@dxos/react-ui-menu';\n\nimport { createAlign, useAlignState } from './align';\nimport { createComment, useCommentState } from './comment';\nimport { createStyle, useStyleState } from './style';\nimport { type ToolbarState, useToolbarState } from './useToolbarState';\nimport { type SheetModel } from '../../model';\nimport { useSheetContext } from '../SheetContext';\n\n//\n// Root\n//\n\nexport type SheetToolbarProps = ThemedClassName<PropsWithChildren<{ attendableId?: string }>>;\n\nconst createToolbarActions = (\n model: SheetModel,\n state: ToolbarState,\n onComment: (cellContent: string, cursor: string) => void,\n cursorFallbackRange?: CompleteCellRange,\n) => {\n const align = createAlign(model, state, cursorFallbackRange);\n const style = createStyle(model, state, cursorFallbackRange);\n const gap = createGapSeparator();\n const comment = createComment(model, state, onComment, cursorFallbackRange);\n return {\n nodes: [...align.nodes, ...style.nodes, ...gap.nodes, ...comment.nodes],\n edges: [...align.edges, ...style.edges, ...gap.edges, ...comment.edges],\n };\n};\n\nexport const SheetToolbar = ({ attendableId, classNames }: SheetToolbarProps) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const { model, cursorFallbackRange } = useSheetContext();\n const state = useToolbarState({});\n useAlignState(state);\n useStyleState(state);\n useCommentState(state);\n\n const handleComment = useCallback(\n (name: string, cursor: string) =>\n dispatch(\n createIntent(ThreadAction.Create, {\n cursor,\n name,\n subject: model.sheet,\n }),\n ),\n [model.sheet, dispatch],\n );\n\n const actionsCreator = useCallback(\n () => createToolbarActions(model, state, handleComment, cursorFallbackRange),\n [model, state, handleComment, cursorFallbackRange],\n );\n const menu = useMenuActions(actionsCreator);\n\n return (\n <MenuProvider {...menu} attendableId={attendableId}>\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 { createMenuAction, createMenuItemGroup, type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';\n\nimport { type ToolbarState } from './useToolbarState';\nimport { SHEET_PLUGIN } from '../../meta';\nimport { type SheetModel } from '../../model';\nimport { type AlignKey, alignKey, type AlignValue, rangeFromIndex, rangeToIndex } from '../../types';\nimport { useSheetContext } from '../SheetContext';\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: SHEET_PLUGIN }],\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: SHEET_PLUGIN }],\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, useMemo } from 'react';\n\nimport { type CompleteCellRange } from '@dxos/compute';\nimport { RefArray } from '@dxos/live-object';\nimport { createMenuAction } from '@dxos/react-ui-menu';\n\nimport { completeCellRangeToThreadCursor } from '../../integrations/thread-ranges';\nimport { SHEET_PLUGIN } from '../../meta';\nimport { type SheetModel } from '../../model';\nimport { commentKey, type CommentKey, type CommentValue, rangeToIndex } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nexport type CommentAction = { key: CommentKey; value: CommentValue; cellContent?: string };\n\nexport type CommentState = { commentEnabled: 'comment' | 'no cursor' | 'selection overlaps existing comment' };\n\nexport const useCommentState = (state: Partial<CommentState>) => {\n const { cursorFallbackRange, model } = useSheetContext();\n\n // TODO(thure): Can this O(n) call be memoized?\n const overlapsCommentAnchor = useMemo(\n () =>\n RefArray.targets(model.sheet.threads ?? [])\n .filter((thread) => thread.status !== 'resolved')\n .some((thread) => {\n if (!cursorFallbackRange) {\n return false;\n }\n return rangeToIndex(model.sheet, cursorFallbackRange) === thread.anchor;\n }),\n [cursorFallbackRange, model.sheet],\n );\n\n useEffect(() => {\n state.commentEnabled = !cursorFallbackRange\n ? 'no cursor'\n : overlapsCommentAnchor\n ? 'selection overlaps existing comment'\n : 'comment';\n }, [overlapsCommentAnchor, cursorFallbackRange]);\n};\n\nconst createCommentAction = (\n model: SheetModel,\n state: Partial<CommentState>,\n onComment: (cellContent: string, cursor: string) => void,\n cursorFallbackRange?: CompleteCellRange,\n) =>\n createMenuAction<Pick<CommentAction, 'key'>>(\n 'comment',\n () => {\n if (!cursorFallbackRange) {\n return;\n }\n\n const cellContent = model.getCellText(cursorFallbackRange.from);\n if (!cellContent) {\n return;\n }\n\n onComment(cellContent, completeCellRangeToThreadCursor(cursorFallbackRange));\n },\n {\n key: commentKey,\n testId: 'editor.toolbar.comment',\n icon: 'ph--chat-text--regular',\n label: [`${state.commentEnabled} label`, { ns: SHEET_PLUGIN }],\n disabled: state.commentEnabled !== 'comment',\n },\n );\n\nexport const createComment = (\n model: SheetModel,\n state: Partial<CommentState>,\n onComment: (cellContent: string, cursor: string) => void,\n cursorFallbackRange?: CompleteCellRange,\n) => ({\n nodes: [createCommentAction(model, state, onComment, cursorFallbackRange)],\n edges: [{ source: 'root', target: 'comment' }],\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { type CompleteCellRange, inRange } from '@dxos/compute';\nimport { createMenuAction, createMenuItemGroup, type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';\n\nimport { SHEET_PLUGIN } from '../../meta';\nimport { type SheetModel } from '../../model';\nimport { rangeFromIndex, rangeToIndex, type StyleKey, type StyleValue } 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: SHEET_PLUGIN }],\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 CommentState } from './comment';\nimport { type StyleState } from './style';\n\nexport type ToolbarState = Partial<StyleState & AlignState & CommentState>;\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": "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",
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", "React", "useCallback", "createIntent", "useIntentDispatcher", "ThreadAction", "createGapSeparator", "MenuProvider", "ToolbarMenu", "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", "SHEET_PLUGIN", "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", "id", "useEffect", "useMemo", "RefArray", "createMenuAction", "useCommentState", "state", "cursorFallbackRange", "model", "useSheetContext", "overlapsCommentAnchor", "useMemo", "RefArray", "targets", "sheet", "threads", "filter", "thread", "status", "some", "rangeToIndex", "anchor", "useEffect", "commentEnabled", "createCommentAction", "onComment", "createMenuAction", "cellContent", "getCellText", "from", "completeCellRangeToThreadCursor", "key", "commentKey", "testId", "icon", "label", "ns", "SHEET_PLUGIN", "disabled", "createComment", "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", "SHEET_PLUGIN", "checked", "createStyle", "styleGroupAction", "styleActions", "nodes", "edges", "source", "target", "id", "useMemo", "live", "useToolbarState", "initialState", "useMemo", "live", "createToolbarActions", "model", "state", "onComment", "cursorFallbackRange", "align", "createAlign", "style", "createStyle", "gap", "createGapSeparator", "comment", "createComment", "nodes", "edges", "SheetToolbar", "attendableId", "classNames", "dispatchPromise", "dispatch", "useIntentDispatcher", "useSheetContext", "useToolbarState", "useAlignState", "useStyleState", "useCommentState", "handleComment", "useCallback", "name", "cursor", "createIntent", "ThreadAction", "Create", "subject", "sheet", "actionsCreator", "menu", "useMenuActions", "React", "MenuProvider", "ToolbarMenu", "SheetContainer", "space", "sheet", "role", "ignoreAttention", "graph", "useComputeGraph", "React", "SheetProvider", "StackItem", "Content", "toolbar", "statusbar", "classNames", "SheetToolbar", "attendableId", "fullyQualifiedId", "GridSheet", "FunctionEditor", "SheetContainer"]
7
+ }
@@ -799,7 +799,7 @@ var GridSheet = () => {
799
799
  };
800
800
 
801
801
  // packages/plugins/plugin-sheet/src/components/index.ts
802
- var SheetContainer = lazy(() => import("./SheetContainer-N74FX62K.mjs"));
802
+ var SheetContainer = lazy(() => import("./SheetContainer-O4WVY7Y4.mjs"));
803
803
 
804
804
  export {
805
805
  ComputeGraphContextProvider,
@@ -811,4 +811,4 @@ export {
811
811
  RangeList,
812
812
  SheetContainer
813
813
  };
814
- //# sourceMappingURL=chunk-SY25UNYZ.mjs.map
814
+ //# sourceMappingURL=chunk-RSBJNX7L.mjs.map
@@ -15,7 +15,7 @@ import { lazy } from "@dxos/app-framework";
15
15
  var ComputeGraphRegistry = lazy(() => import("./compute-graph-registry-WEJLJJ6T.mjs"));
16
16
  var IntentResolver = lazy(() => import("./intent-resolver-DN7JXDAV.mjs"));
17
17
  var Markdown = lazy(() => import("./markdown-DR4RDEEY.mjs"));
18
- var ReactSurface = lazy(() => import("./react-surface-XUJZGNUH.mjs"));
18
+ var ReactSurface = lazy(() => import("./react-surface-JNDDTM6K.mjs"));
19
19
  var Thread = lazy(() => import("./thread-WU64QL2A.mjs"));
20
20
 
21
21
  // packages/plugins/plugin-sheet/src/SheetPlugin.tsx