@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.
- package/dist/lib/browser/{SheetContainer-N74FX62K.mjs → SheetContainer-O4WVY7Y4.mjs} +86 -84
- package/dist/lib/browser/SheetContainer-O4WVY7Y4.mjs.map +7 -0
- package/dist/lib/browser/{chunk-SY25UNYZ.mjs → chunk-RSBJNX7L.mjs} +2 -2
- package/dist/lib/browser/index.mjs +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-XUJZGNUH.mjs → react-surface-JNDDTM6K.mjs} +2 -2
- package/dist/lib/node/{SheetContainer-MERCQUPB.cjs → SheetContainer-2CFOIYBF.cjs} +96 -92
- package/dist/lib/node/SheetContainer-2CFOIYBF.cjs.map +7 -0
- package/dist/lib/node/{chunk-62JKBCGO.cjs → chunk-3QKD6C7X.cjs} +5 -5
- package/dist/lib/node/index.cjs +1 -1
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-surface-GSS7VQ2D.cjs → react-surface-ZTKJM4TA.cjs} +8 -8
- package/dist/lib/node-esm/{SheetContainer-XFQTSA3I.mjs → SheetContainer-W3DQ7UFO.mjs} +86 -84
- package/dist/lib/node-esm/SheetContainer-W3DQ7UFO.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-RRIPYVEN.mjs → chunk-A5PYXQL6.mjs} +2 -2
- package/dist/lib/node-esm/index.mjs +1 -1
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-XUFWQE5B.mjs → react-surface-M6VLLWMY.mjs} +2 -2
- package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -1
- package/dist/types/src/components/SheetToolbar/align.d.ts +4 -1
- package/dist/types/src/components/SheetToolbar/align.d.ts.map +1 -1
- package/dist/types/src/components/SheetToolbar/comment.d.ts +3 -1
- package/dist/types/src/components/SheetToolbar/comment.d.ts.map +1 -1
- package/dist/types/src/components/SheetToolbar/style.d.ts +3 -1
- package/dist/types/src/components/SheetToolbar/style.d.ts.map +1 -1
- package/package.json +45 -45
- package/src/components/GridSheet/GridSheet.stories.tsx +1 -1
- package/src/components/SheetContainer/SheetContainer.stories.tsx +1 -5
- package/src/components/SheetToolbar/SheetToolbar.stories.tsx +1 -1
- package/src/components/SheetToolbar/SheetToolbar.tsx +33 -8
- package/src/components/SheetToolbar/align.ts +44 -14
- package/src/components/SheetToolbar/comment.ts +39 -11
- package/src/components/SheetToolbar/style.ts +48 -12
- package/dist/lib/browser/SheetContainer-N74FX62K.mjs.map +0 -7
- package/dist/lib/node/SheetContainer-MERCQUPB.cjs.map +0 -7
- package/dist/lib/node-esm/SheetContainer-XFQTSA3I.mjs.map +0 -7
- package/dist/types/src/components/SheetToolbar/useToolbarAction.d.ts +0 -8
- package/dist/types/src/components/SheetToolbar/useToolbarAction.d.ts.map +0 -1
- package/src/components/SheetToolbar/useToolbarAction.ts +0 -87
- /package/dist/lib/browser/{chunk-SY25UNYZ.mjs.map → chunk-RSBJNX7L.mjs.map} +0 -0
- /package/dist/lib/browser/{react-surface-XUJZGNUH.mjs.map → react-surface-JNDDTM6K.mjs.map} +0 -0
- /package/dist/lib/node/{chunk-62JKBCGO.cjs.map → chunk-3QKD6C7X.cjs.map} +0 -0
- /package/dist/lib/node/{react-surface-GSS7VQ2D.cjs.map → react-surface-ZTKJM4TA.cjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-RRIPYVEN.mjs.map → chunk-A5PYXQL6.mjs.map} +0 -0
- /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-
|
|
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
|
|
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 = (
|
|
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:
|
|
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 = (
|
|
110
|
-
const alignGroup = createAlignGroupAction(
|
|
111
|
-
const alignActions = createAlignActions(
|
|
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
|
|
334
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|