@dxos/plugin-sheet 0.10.0 → 0.11.0
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/SheetPlugin.mjs +32 -0
- package/dist/lib/SheetPlugin.mjs.map +1 -0
- package/dist/lib/SheetPlugin.node.mjs +11 -0
- package/dist/lib/SheetPlugin.node.mjs.map +1 -0
- package/dist/lib/SheetPlugin.workerd.mjs +11 -0
- package/dist/lib/SheetPlugin.workerd.mjs.map +1 -0
- package/dist/lib/capabilities/node.mjs +10 -0
- package/dist/lib/capabilities/node.mjs.map +1 -0
- package/dist/lib/capabilities.mjs +16 -0
- package/dist/lib/capabilities.mjs.map +1 -0
- package/dist/lib/chunk-RangeList.mjs +47 -0
- package/dist/lib/chunk-RangeList.mjs.map +1 -0
- package/dist/lib/chunk-SheetArticle.mjs +58 -0
- package/dist/lib/chunk-SheetArticle.mjs.map +1 -0
- package/dist/lib/chunk-anchor-sort.mjs +18 -0
- package/dist/lib/chunk-anchor-sort.mjs.map +1 -0
- package/dist/lib/chunk-comment-config.mjs +18 -0
- package/dist/lib/chunk-comment-config.mjs.map +1 -0
- package/dist/lib/chunk-compute-graph-registry.mjs +24 -0
- package/dist/lib/chunk-compute-graph-registry.mjs.map +1 -0
- package/dist/lib/chunk-create-object.mjs +24 -0
- package/dist/lib/chunk-create-object.mjs.map +1 -0
- package/dist/lib/chunk-create.mjs +20 -0
- package/dist/lib/chunk-create.mjs.map +1 -0
- package/dist/lib/chunk-drop-axis.mjs +18 -0
- package/dist/lib/chunk-drop-axis.mjs.map +1 -0
- package/dist/lib/chunk-extensions.mjs +246 -0
- package/dist/lib/chunk-extensions.mjs.map +1 -0
- package/dist/lib/chunk-get-values.mjs +73 -0
- package/dist/lib/chunk-get-values.mjs.map +1 -0
- package/dist/lib/chunk-insert-axis.mjs +11 -0
- package/dist/lib/chunk-insert-axis.mjs.map +1 -0
- package/dist/lib/chunk-markdown-extension.mjs +22 -0
- package/dist/lib/chunk-markdown-extension.mjs.map +1 -0
- package/dist/lib/{neutral/chunk-WTSCOM64.mjs → chunk-meta.mjs} +20 -28
- package/dist/lib/chunk-meta.mjs.map +1 -0
- package/dist/lib/chunk-operation-handler.mjs +11 -0
- package/dist/lib/chunk-operation-handler.mjs.map +1 -0
- package/dist/lib/chunk-react-surface.mjs +27 -0
- package/dist/lib/chunk-react-surface.mjs.map +1 -0
- package/dist/lib/chunk-restore-axis.mjs +11 -0
- package/dist/lib/chunk-restore-axis.mjs.map +1 -0
- package/dist/lib/chunk-scroll-to-anchor.mjs +20 -0
- package/dist/lib/chunk-scroll-to-anchor.mjs.map +1 -0
- package/dist/lib/chunk-set-values.mjs +20 -0
- package/dist/lib/chunk-set-values.mjs.map +1 -0
- package/dist/lib/{neutral/skill-definition-U3KQCFOI.mjs → chunk-skill-definition.mjs} +6 -8
- package/dist/lib/chunk-skill-definition.mjs.map +1 -0
- package/dist/lib/chunk-state.mjs +27 -0
- package/dist/lib/chunk-state.mjs.map +1 -0
- package/dist/lib/chunk-thread-ranges.mjs +59 -0
- package/dist/lib/chunk-thread-ranges.mjs.map +1 -0
- package/dist/lib/chunk-types.mjs +355 -0
- package/dist/lib/chunk-types.mjs.map +1 -0
- package/dist/lib/chunk-undo-mappings.mjs +22 -0
- package/dist/lib/chunk-undo-mappings.mjs.map +1 -0
- package/dist/lib/components.mjs +1377 -0
- package/dist/lib/components.mjs.map +1 -0
- package/dist/lib/containers.mjs +8 -0
- package/dist/lib/containers.mjs.map +1 -0
- package/dist/lib/index.mjs +4 -0
- package/dist/lib/meta.mjs +2 -0
- package/dist/lib/operations/node.mjs +7 -0
- package/dist/lib/operations/node.mjs.map +1 -0
- package/dist/lib/operations.mjs +7 -0
- package/dist/lib/operations.mjs.map +1 -0
- package/dist/lib/plugin.mjs +9 -0
- package/dist/lib/plugin.mjs.map +1 -0
- package/dist/lib/skills.mjs +42 -0
- package/dist/lib/skills.mjs.map +1 -0
- package/dist/lib/testing.mjs +59 -0
- package/dist/lib/testing.mjs.map +1 -0
- package/dist/lib/translations.mjs +50 -0
- package/dist/lib/translations.mjs.map +1 -0
- package/dist/lib/types.mjs +2 -0
- package/dist/types/src/capabilities/anchor-sort.d.ts +1 -1
- package/dist/types/src/capabilities/compute-graph-registry.d.ts +1 -1
- package/dist/types/src/capabilities/create-object.d.ts +1 -1
- package/dist/types/src/capabilities/markdown-extension.d.ts +1 -1
- package/dist/types/src/capabilities/node.d.ts +7 -0
- package/dist/types/src/capabilities/node.d.ts.map +1 -0
- package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/skill-definition.d.ts +1 -1
- package/dist/types/src/capabilities/state.d.ts +1 -1
- package/dist/types/src/capabilities/undo-mappings.d.ts +1 -1
- package/dist/types/src/components/ComputeGraph/ComputeGraphContext.d.ts +11 -0
- package/dist/types/src/components/ComputeGraph/ComputeGraphContext.d.ts.map +1 -0
- package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts +1 -10
- package/dist/types/src/components/ComputeGraph/ComputeGraphContextProvider.d.ts.map +1 -1
- package/dist/types/src/components/ComputeGraph/index.d.ts +1 -0
- package/dist/types/src/components/ComputeGraph/index.d.ts.map +1 -1
- package/dist/types/src/components/Sheet/Sheet.d.ts +4 -4
- package/dist/types/src/components/Sheet/Sheet.d.ts.map +1 -1
- package/dist/types/src/components/SheetContent/SheetContent.d.ts +1 -1
- package/dist/types/src/components/SheetContent/SheetContent.d.ts.map +1 -1
- package/dist/types/src/components/SheetContent/SheetContent.stories.d.ts +1 -1
- package/dist/types/src/components/SheetRoot/SheetContext.d.ts +4 -0
- package/dist/types/src/components/SheetRoot/SheetContext.d.ts.map +1 -0
- package/dist/types/src/components/SheetRoot/SheetRoot.d.ts +0 -1
- package/dist/types/src/components/SheetRoot/SheetRoot.d.ts.map +1 -1
- package/dist/types/src/components/SheetRoot/index.d.ts +1 -0
- package/dist/types/src/components/SheetRoot/index.d.ts.map +1 -1
- package/dist/types/src/components/SheetStatusbar/SheetStatusbar.d.ts +1 -1
- package/dist/types/src/components/SheetStatusbar/SheetStatusbar.d.ts.map +1 -1
- package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts +1 -1
- package/dist/types/src/components/SheetToolbar/SheetToolbar.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/RangeList/RangeList.d.ts +4 -1
- package/dist/types/src/containers/RangeList/RangeList.d.ts.map +1 -1
- package/dist/types/src/containers/SheetArticle/SheetArticle.d.ts +4 -5
- package/dist/types/src/containers/SheetArticle/SheetArticle.d.ts.map +1 -1
- package/dist/types/src/containers/SheetArticle/SheetArticle.stories.d.ts +4 -1
- package/dist/types/src/containers/SheetArticle/SheetArticle.stories.d.ts.map +1 -1
- package/dist/types/src/extensions/editor/sheet-extension.d.ts.map +1 -1
- package/dist/types/src/operations/node.d.ts +3 -0
- package/dist/types/src/operations/node.d.ts.map +1 -0
- package/dist/types/src/operations/scroll-to-anchor.d.ts.map +1 -1
- package/dist/types/src/plugin.d.ts +1 -1
- package/dist/types/src/plugin.d.ts.map +1 -1
- package/dist/types/src/testing/testing.d.ts +8 -2
- package/dist/types/src/testing/testing.d.ts.map +1 -1
- package/dist/types/src/types/SheetOperation.d.ts +1 -1
- package/dist/types/src/types/SheetOperation.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dx.config.ts +1 -0
- package/package.json +75 -67
- package/src/capabilities/node.ts +18 -0
- package/src/capabilities/{react-surface.tsx → react-surface.ts} +6 -18
- package/src/components/ComputeGraph/ComputeGraphContext.ts +35 -0
- package/src/components/ComputeGraph/ComputeGraphContextProvider.tsx +2 -27
- package/src/components/ComputeGraph/compute-graph.stories.tsx +1 -1
- package/src/components/ComputeGraph/index.ts +2 -0
- package/src/components/Sheet/Sheet.tsx +1 -1
- package/src/components/SheetRoot/SheetContext.ts +19 -0
- package/src/components/SheetRoot/SheetRoot.tsx +2 -9
- package/src/components/SheetRoot/index.ts +2 -0
- package/src/components/SheetStatusbar/SheetStatusbar.tsx +1 -1
- package/src/components/SheetToolbar/SheetToolbar.tsx +9 -9
- package/src/components/index.ts +1 -0
- package/src/containers/RangeList/RangeList.tsx +2 -0
- package/src/containers/SheetArticle/SheetArticle.stories.tsx +15 -24
- package/src/containers/SheetArticle/SheetArticle.tsx +23 -11
- package/src/extensions/editor/sheet-extension.ts +61 -2
- package/src/integrations/thread-ranges.ts +4 -4
- package/src/operations/node.ts +18 -0
- package/src/operations/scroll-to-anchor.ts +3 -2
- package/src/plugin.ts +1 -1
- package/src/testing/testing.tsx +11 -5
- package/src/types/SheetOperation.ts +6 -2
- package/dist/lib/neutral/RangeList-EIJTFS7P.mjs +0 -53
- package/dist/lib/neutral/RangeList-EIJTFS7P.mjs.map +0 -7
- package/dist/lib/neutral/SheetArticle-IUPQYGUU.mjs +0 -34
- package/dist/lib/neutral/SheetArticle-IUPQYGUU.mjs.map +0 -7
- package/dist/lib/neutral/SheetPlugin.mjs +0 -61
- package/dist/lib/neutral/SheetPlugin.mjs.map +0 -7
- package/dist/lib/neutral/SheetPlugin.node.mjs +0 -27
- package/dist/lib/neutral/SheetPlugin.node.mjs.map +0 -7
- package/dist/lib/neutral/SheetPlugin.workerd.mjs +0 -21
- package/dist/lib/neutral/SheetPlugin.workerd.mjs.map +0 -7
- package/dist/lib/neutral/anchor-sort-2POWTKTD.mjs +0 -22
- package/dist/lib/neutral/anchor-sort-2POWTKTD.mjs.map +0 -7
- package/dist/lib/neutral/capabilities/index.mjs +0 -27
- package/dist/lib/neutral/capabilities/index.mjs.map +0 -7
- package/dist/lib/neutral/chunk-ERHMBRSU.mjs +0 -234
- package/dist/lib/neutral/chunk-ERHMBRSU.mjs.map +0 -7
- package/dist/lib/neutral/chunk-HEN74ZWI.mjs +0 -83
- package/dist/lib/neutral/chunk-HEN74ZWI.mjs.map +0 -7
- package/dist/lib/neutral/chunk-HY4DM35G.mjs +0 -466
- package/dist/lib/neutral/chunk-HY4DM35G.mjs.map +0 -7
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +0 -10
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +0 -7
- package/dist/lib/neutral/chunk-TDGEOMRG.mjs +0 -8
- package/dist/lib/neutral/chunk-TDGEOMRG.mjs.map +0 -7
- package/dist/lib/neutral/chunk-WTSCOM64.mjs.map +0 -7
- package/dist/lib/neutral/comment-config-4CIQFYM2.mjs +0 -22
- package/dist/lib/neutral/comment-config-4CIQFYM2.mjs.map +0 -7
- package/dist/lib/neutral/components/index.mjs +0 -1552
- package/dist/lib/neutral/components/index.mjs.map +0 -7
- package/dist/lib/neutral/compute-graph-registry-YYINTFC2.mjs +0 -26
- package/dist/lib/neutral/compute-graph-registry-YYINTFC2.mjs.map +0 -7
- package/dist/lib/neutral/containers/index.mjs +0 -11
- package/dist/lib/neutral/containers/index.mjs.map +0 -7
- package/dist/lib/neutral/create-I3TKMPQO.mjs +0 -30
- package/dist/lib/neutral/create-I3TKMPQO.mjs.map +0 -7
- package/dist/lib/neutral/create-object-5WEY5XZJ.mjs +0 -27
- package/dist/lib/neutral/create-object-5WEY5XZJ.mjs.map +0 -7
- package/dist/lib/neutral/drop-axis-JPFU5CJO.mjs +0 -23
- package/dist/lib/neutral/drop-axis-JPFU5CJO.mjs.map +0 -7
- package/dist/lib/neutral/get-values-7YWQTH65.mjs +0 -92
- package/dist/lib/neutral/get-values-7YWQTH65.mjs.map +0 -7
- package/dist/lib/neutral/index.mjs +0 -66
- package/dist/lib/neutral/index.mjs.map +0 -7
- package/dist/lib/neutral/insert-axis-WD6ZC3UA.mjs +0 -16
- package/dist/lib/neutral/insert-axis-WD6ZC3UA.mjs.map +0 -7
- package/dist/lib/neutral/markdown-extension-HTJDICGT.mjs +0 -28
- package/dist/lib/neutral/markdown-extension-HTJDICGT.mjs.map +0 -7
- package/dist/lib/neutral/meta.json +0 -1
- package/dist/lib/neutral/meta.mjs +0 -8
- package/dist/lib/neutral/meta.mjs.map +0 -7
- package/dist/lib/neutral/operation-handler-TB6LFV2H.mjs +0 -13
- package/dist/lib/neutral/operation-handler-TB6LFV2H.mjs.map +0 -7
- package/dist/lib/neutral/operations/index.mjs +0 -8
- package/dist/lib/neutral/operations/index.mjs.map +0 -7
- package/dist/lib/neutral/plugin.mjs +0 -16
- package/dist/lib/neutral/plugin.mjs.map +0 -7
- package/dist/lib/neutral/react-surface-TJT6F2E4.mjs +0 -40
- package/dist/lib/neutral/react-surface-TJT6F2E4.mjs.map +0 -7
- package/dist/lib/neutral/restore-axis-RLPX7P3G.mjs +0 -16
- package/dist/lib/neutral/restore-axis-RLPX7P3G.mjs.map +0 -7
- package/dist/lib/neutral/scroll-to-anchor-6FJJQWZC.mjs +0 -33
- package/dist/lib/neutral/scroll-to-anchor-6FJJQWZC.mjs.map +0 -7
- package/dist/lib/neutral/set-values-5DVOVLJH.mjs +0 -30
- package/dist/lib/neutral/set-values-5DVOVLJH.mjs.map +0 -7
- package/dist/lib/neutral/skill-definition-U3KQCFOI.mjs.map +0 -7
- package/dist/lib/neutral/state-HPA27MX2.mjs +0 -29
- package/dist/lib/neutral/state-HPA27MX2.mjs.map +0 -7
- package/dist/lib/neutral/testing/index.mjs +0 -103
- package/dist/lib/neutral/testing/index.mjs.map +0 -7
- package/dist/lib/neutral/translations.mjs +0 -56
- package/dist/lib/neutral/translations.mjs.map +0 -7
- package/dist/lib/neutral/types/index.mjs +0 -58
- package/dist/lib/neutral/types/index.mjs.map +0 -7
- package/dist/lib/neutral/undo-mappings-O75AYIRG.mjs +0 -31
- package/dist/lib/neutral/undo-mappings-O75AYIRG.mjs.map +0 -7
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import "../chunk-J5LGTIGS.mjs";
|
|
2
|
-
|
|
3
|
-
// src/capabilities/index.ts
|
|
4
|
-
import { Capability } from "@dxos/app-framework";
|
|
5
|
-
var AnchorSort = Capability.lazy("AnchorSort", () => import("../anchor-sort-2POWTKTD.mjs"));
|
|
6
|
-
var CommentConfig = Capability.lazy("CommentConfig", () => import("../comment-config-4CIQFYM2.mjs"));
|
|
7
|
-
var ComputeGraphRegistry = Capability.lazy("ComputeGraphRegistry", () => import("../compute-graph-registry-YYINTFC2.mjs"));
|
|
8
|
-
var CreateObject = Capability.lazy("CreateObject", () => import("../create-object-5WEY5XZJ.mjs"));
|
|
9
|
-
var Markdown = Capability.lazy("MarkdownExtension", () => import("../markdown-extension-HTJDICGT.mjs"));
|
|
10
|
-
var OperationHandler = Capability.lazy("OperationHandler", () => import("../operation-handler-TB6LFV2H.mjs"));
|
|
11
|
-
var ReactSurface = Capability.lazy("ReactSurface", () => import("../react-surface-TJT6F2E4.mjs"));
|
|
12
|
-
var SheetState = Capability.lazy("SheetState", () => import("../state-HPA27MX2.mjs"));
|
|
13
|
-
var SkillDefinition = Capability.lazy("SkillDefinition", () => import("../skill-definition-U3KQCFOI.mjs"));
|
|
14
|
-
var UndoMappings = Capability.lazy("UndoMappings", () => import("../undo-mappings-O75AYIRG.mjs"));
|
|
15
|
-
export {
|
|
16
|
-
AnchorSort,
|
|
17
|
-
CommentConfig,
|
|
18
|
-
ComputeGraphRegistry,
|
|
19
|
-
CreateObject,
|
|
20
|
-
Markdown,
|
|
21
|
-
OperationHandler,
|
|
22
|
-
ReactSurface,
|
|
23
|
-
SheetState,
|
|
24
|
-
SkillDefinition,
|
|
25
|
-
UndoMappings
|
|
26
|
-
};
|
|
27
|
-
//# sourceMappingURL=index.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/capabilities/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capability } from '@dxos/app-framework';\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport const AnchorSort = Capability.lazy('AnchorSort', () => import('./anchor-sort'));\nexport const CommentConfig = Capability.lazy('CommentConfig', () => import('./comment-config'));\nexport const ComputeGraphRegistry = Capability.lazy('ComputeGraphRegistry', () => import('./compute-graph-registry'));\nexport const CreateObject = Capability.lazy('CreateObject', () => import('./create-object'));\nexport const Markdown = Capability.lazy('MarkdownExtension', () => import('./markdown-extension'));\nexport const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(\n 'OperationHandler',\n () => import('./operation-handler'),\n);\nexport const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));\nexport const SheetState = Capability.lazy('SheetState', () => import('./state'));\nexport const SkillDefinition = Capability.lazy('SkillDefinition', () => import('./skill-definition'));\nexport const UndoMappings = Capability.lazy('UndoMappings', () => import('./undo-mappings'));\n"],
|
|
5
|
-
"mappings": ";;;AAIA,SAASA,kBAAkB;AAGpB,IAAMC,aAAaD,WAAWE,KAAK,cAAc,MAAM,OAAO,6BAAA,CAAA;AAC9D,IAAMC,gBAAgBH,WAAWE,KAAK,iBAAiB,MAAM,OAAO,gCAAA,CAAA;AACpE,IAAME,uBAAuBJ,WAAWE,KAAK,wBAAwB,MAAM,OAAO,wCAAA,CAAA;AAClF,IAAMG,eAAeL,WAAWE,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;AAClE,IAAMI,WAAWN,WAAWE,KAAK,qBAAqB,MAAM,OAAO,oCAAA,CAAA;AACnE,IAAMK,mBAAmBP,WAAWE,KACzC,oBACA,MAAM,OAAO,mCAAA,CAAA;AAER,IAAMM,eAAeR,WAAWE,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;AAClE,IAAMO,aAAaT,WAAWE,KAAK,cAAc,MAAM,OAAO,uBAAA,CAAA;AAC9D,IAAMQ,kBAAkBV,WAAWE,KAAK,mBAAmB,MAAM,OAAO,kCAAA,CAAA;AACxE,IAAMS,eAAeX,WAAWE,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;",
|
|
6
|
-
"names": ["Capability", "AnchorSort", "lazy", "CommentConfig", "ComputeGraphRegistry", "CreateObject", "Markdown", "OperationHandler", "ReactSurface", "SheetState", "SkillDefinition", "UndoMappings"]
|
|
7
|
-
}
|
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
// src/extensions/compute.ts
|
|
2
|
-
import { syntaxTree } from "@codemirror/language";
|
|
3
|
-
import { RangeSetBuilder, StateEffect, StateField } from "@codemirror/state";
|
|
4
|
-
import { Decoration, EditorView, ViewPlugin, WidgetType } from "@codemirror/view";
|
|
5
|
-
import { debounce } from "@dxos/async";
|
|
6
|
-
import { createSheetName } from "@dxos/compute-hyperformula";
|
|
7
|
-
import { invariant } from "@dxos/invariant";
|
|
8
|
-
import { documentId, singleValueFacet } from "@dxos/ui-editor";
|
|
9
|
-
var updateAllDecorations = StateEffect.define();
|
|
10
|
-
var computeGraphFacet = singleValueFacet();
|
|
11
|
-
|
|
12
|
-
// src/extensions/editor/sheet-extension.ts
|
|
13
|
-
import { acceptCompletion, autocompletion, completionStatus, startCompletion } from "@codemirror/autocomplete";
|
|
14
|
-
import { HighlightStyle, syntaxHighlighting } from "@codemirror/language";
|
|
15
|
-
import { ViewPlugin as ViewPlugin2, keymap } from "@codemirror/view";
|
|
16
|
-
import { tags } from "@lezer/highlight";
|
|
17
|
-
import { spreadsheet } from "codemirror-lang-spreadsheet";
|
|
18
|
-
import { RANGE_NOTATION } from "@dxos/compute-hyperformula";
|
|
19
|
-
import { singleValueFacet as singleValueFacet2 } from "@dxos/ui-editor";
|
|
20
|
-
import { mx } from "@dxos/ui-theme";
|
|
21
|
-
var highlightStyles = HighlightStyle.define([
|
|
22
|
-
// Function.
|
|
23
|
-
{
|
|
24
|
-
tag: tags.name,
|
|
25
|
-
class: "text-accent-text"
|
|
26
|
-
},
|
|
27
|
-
// Range.
|
|
28
|
-
{
|
|
29
|
-
tag: tags.tagName,
|
|
30
|
-
class: "text-pink-text"
|
|
31
|
-
},
|
|
32
|
-
// Values.
|
|
33
|
-
{
|
|
34
|
-
tag: tags.number,
|
|
35
|
-
class: "text-teal-text"
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
tag: tags.bool,
|
|
39
|
-
class: "text-teal-text"
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
tag: tags.string,
|
|
43
|
-
class: "text-teal-text"
|
|
44
|
-
},
|
|
45
|
-
// Error.
|
|
46
|
-
{
|
|
47
|
-
tag: tags.invalid,
|
|
48
|
-
class: "text-un-accent"
|
|
49
|
-
}
|
|
50
|
-
]);
|
|
51
|
-
var languageFacet = singleValueFacet2();
|
|
52
|
-
var sheetExtension = ({ debug, functions = [] }) => {
|
|
53
|
-
const { extension, language } = spreadsheet({
|
|
54
|
-
idiom: "en-US",
|
|
55
|
-
decimalSeparator: "."
|
|
56
|
-
});
|
|
57
|
-
const createCompletion = (name) => {
|
|
58
|
-
const { section = "Custom", description, syntax } = functions.find((value) => value.name === name) ?? {};
|
|
59
|
-
return {
|
|
60
|
-
section,
|
|
61
|
-
label: name,
|
|
62
|
-
info: () => {
|
|
63
|
-
if (!description && !syntax) {
|
|
64
|
-
return null;
|
|
65
|
-
}
|
|
66
|
-
const root = document.createElement("div");
|
|
67
|
-
root.className = "flex flex-col gap-2 text-sm";
|
|
68
|
-
const title = document.createElement("h2");
|
|
69
|
-
title.innerText = name;
|
|
70
|
-
title.className = "text-lg font-mono text-accent-text";
|
|
71
|
-
root.appendChild(title);
|
|
72
|
-
if (description) {
|
|
73
|
-
const info = document.createElement("p");
|
|
74
|
-
info.innerText = description;
|
|
75
|
-
info.className = "text-subdued";
|
|
76
|
-
root.appendChild(info);
|
|
77
|
-
}
|
|
78
|
-
if (syntax) {
|
|
79
|
-
const detail = document.createElement("pre");
|
|
80
|
-
detail.innerText = syntax;
|
|
81
|
-
detail.className = "whitespace-pre-wrap text-green-text";
|
|
82
|
-
root.appendChild(detail);
|
|
83
|
-
}
|
|
84
|
-
return root;
|
|
85
|
-
},
|
|
86
|
-
apply: (view, completion, from, to) => {
|
|
87
|
-
const insertParens = to === view.state.doc.toString().length;
|
|
88
|
-
view.dispatch(view.state.update({
|
|
89
|
-
changes: {
|
|
90
|
-
from,
|
|
91
|
-
to,
|
|
92
|
-
insert: completion.label + (insertParens ? "()" : "")
|
|
93
|
-
},
|
|
94
|
-
selection: {
|
|
95
|
-
anchor: from + completion.label.length + 1
|
|
96
|
-
}
|
|
97
|
-
}));
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
};
|
|
101
|
-
return [
|
|
102
|
-
extension,
|
|
103
|
-
languageFacet.of(language),
|
|
104
|
-
language.data.of({
|
|
105
|
-
autocomplete: (context) => {
|
|
106
|
-
if (context.state.doc.toString()[0] !== "=") {
|
|
107
|
-
return null;
|
|
108
|
-
}
|
|
109
|
-
const match = context.matchBefore(/\w*/);
|
|
110
|
-
if (!match || match.from === match.to) {
|
|
111
|
-
return null;
|
|
112
|
-
}
|
|
113
|
-
const text = match.text.toUpperCase();
|
|
114
|
-
if (!context.explicit && match.text.length < 2) {
|
|
115
|
-
return null;
|
|
116
|
-
}
|
|
117
|
-
return {
|
|
118
|
-
from: match.from,
|
|
119
|
-
options: functions?.filter(({ name }) => name.startsWith(text)).map(({ name }) => createCompletion(name)) ?? []
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
}),
|
|
123
|
-
syntaxHighlighting(highlightStyles),
|
|
124
|
-
autocompletion({
|
|
125
|
-
aboveCursor: false,
|
|
126
|
-
defaultKeymap: true,
|
|
127
|
-
activateOnTyping: true,
|
|
128
|
-
closeOnBlur: !debug,
|
|
129
|
-
icons: false,
|
|
130
|
-
tooltipClass: () => mx("!-left-[1px] !top-[33px] !-m-0 border border-h-0! [&>ul]:!min-w-[198px]", "[&>ul>li[aria-selected]]:!bg-accent-bg", "border-separator")
|
|
131
|
-
}),
|
|
132
|
-
keymap.of([
|
|
133
|
-
{
|
|
134
|
-
key: "Tab",
|
|
135
|
-
run: (view) => {
|
|
136
|
-
return completionStatus(view.state) === "active" ? acceptCompletion(view) : startCompletion(view);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
])
|
|
140
|
-
];
|
|
141
|
-
};
|
|
142
|
-
var rangeExtension = ({ onInit, onStateChange }) => {
|
|
143
|
-
let view;
|
|
144
|
-
let activeRange;
|
|
145
|
-
const notifier = {
|
|
146
|
-
setRange: (range) => {
|
|
147
|
-
if (activeRange) {
|
|
148
|
-
view.dispatch(view.state.update({
|
|
149
|
-
changes: {
|
|
150
|
-
...activeRange,
|
|
151
|
-
insert: range.toString()
|
|
152
|
-
},
|
|
153
|
-
selection: {
|
|
154
|
-
anchor: activeRange.from + range.length
|
|
155
|
-
}
|
|
156
|
-
}));
|
|
157
|
-
}
|
|
158
|
-
view.focus();
|
|
159
|
-
}
|
|
160
|
-
};
|
|
161
|
-
return ViewPlugin2.fromClass(class {
|
|
162
|
-
constructor(_view) {
|
|
163
|
-
view = _view;
|
|
164
|
-
onInit?.(notifier);
|
|
165
|
-
}
|
|
166
|
-
update(view2) {
|
|
167
|
-
const { anchor } = view2.state.selection.ranges[0];
|
|
168
|
-
activeRange = void 0;
|
|
169
|
-
const language = view2.state.facet(languageFacet);
|
|
170
|
-
const { topNode } = language.parser.parse(view2.state.doc.toString());
|
|
171
|
-
visitTree(topNode, ({ type, from, to }) => {
|
|
172
|
-
if (from <= anchor && to >= anchor) {
|
|
173
|
-
switch (type.name) {
|
|
174
|
-
case "Function":
|
|
175
|
-
activeRange = {
|
|
176
|
-
from: to,
|
|
177
|
-
to
|
|
178
|
-
};
|
|
179
|
-
break;
|
|
180
|
-
case "CloseParen":
|
|
181
|
-
activeRange = {
|
|
182
|
-
from,
|
|
183
|
-
to: from
|
|
184
|
-
};
|
|
185
|
-
break;
|
|
186
|
-
case "RangeToken":
|
|
187
|
-
case "CellToken":
|
|
188
|
-
activeRange = {
|
|
189
|
-
from,
|
|
190
|
-
to
|
|
191
|
-
};
|
|
192
|
-
return true;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
return false;
|
|
196
|
-
});
|
|
197
|
-
if (!activeRange && view2.state.doc.toString()[0] === "=") {
|
|
198
|
-
const str = view2.state.doc.sliceString(1);
|
|
199
|
-
if (RANGE_NOTATION.test(str)) {
|
|
200
|
-
activeRange = {
|
|
201
|
-
from: 1,
|
|
202
|
-
to: str.length + 1
|
|
203
|
-
};
|
|
204
|
-
} else {
|
|
205
|
-
activeRange = {
|
|
206
|
-
from: str.length + 1,
|
|
207
|
-
to: str.length + 1
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
onStateChange?.({
|
|
212
|
-
activeRange: activeRange ? view2.state.doc.sliceString(activeRange.from, activeRange.to) : void 0
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
});
|
|
216
|
-
};
|
|
217
|
-
var visitTree = (node, callback) => {
|
|
218
|
-
if (callback(node)) {
|
|
219
|
-
return true;
|
|
220
|
-
}
|
|
221
|
-
for (let child = node.firstChild; child !== null; child = child.nextSibling) {
|
|
222
|
-
if (visitTree(child, callback)) {
|
|
223
|
-
return true;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
return false;
|
|
227
|
-
};
|
|
228
|
-
|
|
229
|
-
export {
|
|
230
|
-
computeGraphFacet,
|
|
231
|
-
sheetExtension,
|
|
232
|
-
rangeExtension
|
|
233
|
-
};
|
|
234
|
-
//# sourceMappingURL=chunk-ERHMBRSU.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/extensions/compute.ts", "../../../src/extensions/editor/sheet-extension.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { syntaxTree } from '@codemirror/language';\nimport {\n type EditorState,\n type Extension,\n type RangeSet,\n RangeSetBuilder,\n StateEffect,\n StateField,\n type Transaction,\n} from '@codemirror/state';\nimport { Decoration, EditorView, ViewPlugin, WidgetType } from '@codemirror/view';\n\nimport { type CleanupFn, debounce } from '@dxos/async';\nimport {\n type CellAddress,\n type CellScalarValue,\n type ComputeGraph,\n type ComputeNode,\n createSheetName,\n} from '@dxos/compute-hyperformula';\nimport { invariant } from '@dxos/invariant';\nimport { documentId, singleValueFacet } from '@dxos/ui-editor';\n\nconst LANGUAGE_TAG = 'dx';\n\n// TODO(burdon): Create marker just for our decorator?\nconst updateAllDecorations = StateEffect.define<void>();\n\nexport const computeGraphFacet = singleValueFacet<ComputeGraph>();\n\nexport type ComputeOptions = {};\n\nexport const compute = (_options: ComputeOptions = {}): Extension => {\n let computeNode: ComputeNode | undefined;\n\n const update = (state: EditorState, current?: RangeSet<Decoration>) => {\n const builder = new RangeSetBuilder<Decoration>();\n if (computeNode) {\n computeNode.clear();\n syntaxTree(state).iterate({\n enter: (node) => {\n switch (node.name) {\n case 'FencedCode': {\n const cursor = state.selection.main.head;\n if (state.readOnly || cursor < node.from || cursor > node.to) {\n const info = node.node.getChild('CodeInfo');\n if (info) {\n const type = state.sliceDoc(info.from, info.to);\n const text = node.node.getChild('CodeText');\n if (type === LANGUAGE_TAG && text) {\n const formula = state.sliceDoc(text.from, text.to);\n const iter = current?.iter(node.node.from);\n if (iter?.value && iter?.value.spec.formula === formula) {\n // Add existing widget.\n builder.add(node.from, node.to, iter.value);\n } else {\n // TODO(burdon): Create ordered list of cells on each decoration run.\n const cell: CellAddress = { col: node.node.from, row: 0 };\n invariant(computeNode);\n // NOTE: This triggers re-render (below).\n computeNode.setValue(cell, formula);\n const value = computeNode.getValue(cell);\n builder.add(\n node.from,\n node.to,\n Decoration.replace({\n widget: new ComputeWidget(formula, value),\n formula,\n }),\n );\n }\n }\n }\n }\n\n break;\n }\n }\n },\n });\n }\n\n return builder.finish();\n };\n\n return [\n ViewPlugin.fromClass(\n class {\n // Graph subscription.\n private _subscription?: CleanupFn;\n constructor(view: EditorView) {\n const id = view.state.facet(documentId);\n const computeGraph = view.state.facet(computeGraphFacet);\n if (id && computeGraph) {\n queueMicrotask(async () => {\n computeNode = computeGraph.getOrCreateNode(createSheetName({ type: '', id }));\n await computeNode.open();\n\n // Trigger re-render if values updated.\n // TODO(burdon): Trigger only if formula value updated (currently triggered during render).\n this._subscription = computeNode.update.on(\n debounce(({ type, ...rest }) => {\n if (type === 'valuesUpdated') {\n view.dispatch({\n effects: updateAllDecorations.of(),\n });\n }\n }, 250),\n );\n });\n }\n }\n\n destroy() {\n this._subscription?.();\n void computeNode?.close();\n computeNode = undefined;\n }\n },\n ),\n\n StateField.define<RangeSet<Decoration>>({\n create: (state) => update(state),\n update: (rangeSet: RangeSet<Decoration>, tr: Transaction) => update(tr.state, rangeSet),\n provide: (field) => EditorView.decorations.from(field),\n }),\n ];\n};\n\n// TODO(burdon): Click to edit.\nclass ComputeWidget extends WidgetType {\n constructor(\n private readonly formula: string,\n private readonly value: CellScalarValue,\n ) {\n super();\n }\n\n override toDOM(_view: EditorView): HTMLDivElement {\n const div = document.createElement('div');\n div.setAttribute('title', this.formula);\n div.innerText = String(this.value);\n return div;\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport {\n type Completion,\n type CompletionContext,\n type CompletionResult,\n acceptCompletion,\n autocompletion,\n completionStatus,\n startCompletion,\n} from '@codemirror/autocomplete';\nimport { HighlightStyle, type Language, syntaxHighlighting } from '@codemirror/language';\nimport { type Extension } from '@codemirror/state';\nimport { type EditorView, ViewPlugin, type ViewUpdate, keymap } from '@codemirror/view';\nimport { type SyntaxNode } from '@lezer/common';\nimport { tags } from '@lezer/highlight';\nimport { spreadsheet } from 'codemirror-lang-spreadsheet';\n\nimport { type FunctionDefinition } from '@dxos/compute-hyperformula';\nimport { RANGE_NOTATION } from '@dxos/compute-hyperformula';\nimport { singleValueFacet } from '@dxos/ui-editor';\nimport { mx } from '@dxos/ui-theme';\n\n/**\n * https://codemirror.net/examples/styling\n * https://lezer.codemirror.net/docs/ref/#highlight\n * https://github.com/luizzappa/codemirror-lang-spreadsheet/blob/main/src/index.ts#L28 (mapping)\n */\n// TODO(burdon): Define light/dark.\nconst highlightStyles = HighlightStyle.define([\n // Function.\n {\n tag: tags.name,\n class: 'text-accent-text',\n },\n // Range.\n {\n tag: tags.tagName,\n class: 'text-pink-text',\n },\n // Values.\n {\n tag: tags.number,\n class: 'text-teal-text',\n },\n {\n tag: tags.bool,\n class: 'text-teal-text',\n },\n {\n tag: tags.string,\n class: 'text-teal-text',\n },\n // Error.\n {\n tag: tags.invalid,\n class: 'text-un-accent',\n },\n]);\n\nconst languageFacet = singleValueFacet<Language>();\n\nexport type SheetExtensionOptions = {\n debug?: boolean;\n functions?: FunctionDefinition[];\n};\n\n/**\n * Spreadsheet formula extension and parser.\n * https://github.com/luizzappa/codemirror-lang-spreadsheet\n * https://github.com/luizzappa/codemirror-app-spreadsheet/blob/master/src/editor.ts\n * https://github.com/codemirror/lang-example\n * https://hyperformula.handsontable.com/guide/key-concepts.html#grammar\n */\nexport const sheetExtension = ({ debug, functions = [] }: SheetExtensionOptions): Extension => {\n const { extension, language } = spreadsheet({\n idiom: 'en-US',\n decimalSeparator: '.',\n });\n\n const createCompletion = (name: string) => {\n const { section = 'Custom', description, syntax } = functions.find((value) => value.name === name) ?? {};\n\n return {\n section,\n label: name,\n info: () => {\n if (!description && !syntax) {\n return null;\n }\n\n // TODO(burdon): Standardize color styles.\n const root = document.createElement('div');\n root.className = 'flex flex-col gap-2 text-sm';\n\n const title = document.createElement('h2');\n title.innerText = name;\n title.className = 'text-lg font-mono text-accent-text';\n root.appendChild(title);\n\n if (description) {\n const info = document.createElement('p');\n info.innerText = description;\n info.className = 'text-subdued';\n root.appendChild(info);\n }\n\n if (syntax) {\n const detail = document.createElement('pre');\n detail.innerText = syntax;\n detail.className = 'whitespace-pre-wrap text-green-text';\n root.appendChild(detail);\n }\n\n return root;\n },\n apply: (view, completion, from, to) => {\n const insertParens = to === view.state.doc.toString().length;\n view.dispatch(\n view.state.update({\n changes: {\n from,\n to,\n insert: completion.label + (insertParens ? '()' : ''),\n },\n selection: {\n anchor: from + completion.label.length + 1,\n },\n }),\n );\n },\n } satisfies Completion;\n };\n\n return [\n extension,\n languageFacet.of(language),\n language.data.of({\n autocomplete: (context: CompletionContext): CompletionResult | null => {\n if (context.state.doc.toString()[0] !== '=') {\n return null;\n }\n const match = context.matchBefore(/\\w*/);\n if (!match || match.from === match.to) {\n return null;\n }\n\n const text = match.text.toUpperCase();\n if (!context.explicit && match.text.length < 2) {\n return null;\n }\n\n return {\n from: match.from,\n options:\n functions?.filter(({ name }) => name.startsWith(text)).map(({ name }) => createCompletion(name)) ?? [],\n };\n },\n }),\n\n syntaxHighlighting(highlightStyles),\n autocompletion({\n aboveCursor: false,\n defaultKeymap: true,\n activateOnTyping: true,\n closeOnBlur: !debug,\n icons: false,\n tooltipClass: () =>\n mx(\n '!-left-[1px] !top-[33px] !-m-0 border border-h-0! [&>ul]:!min-w-[198px]',\n '[&>ul>li[aria-selected]]:!bg-accent-bg',\n 'border-separator',\n ),\n }),\n keymap.of([\n {\n key: 'Tab',\n run: (view) => {\n return completionStatus(view.state) === 'active' ? acceptCompletion(view) : startCompletion(view);\n },\n },\n ]),\n\n // Parsing.\n // StateField.define({\n // create: (state) => {},\n // update: (value, tr) => {\n // log.info('update');\n // syntaxTree(tr.state).iterate({\n // enter: ({ type, from, to }) => {\n // log.info('node', { type: type.name, from, to });\n // },\n // });\n // },\n // }),\n ];\n};\n\nexport type SelectionRange = { from: number; to: number };\n\nexport interface RangeController {\n setRange(range: string): void;\n}\n\nexport type RangeExtensionOptions = {\n /**\n * Provides controller callback when extension is initialized.\n */\n onInit?: (controller: RangeController) => void;\n /**\n * Called when the active range changes.\n * @param state The current state.\n * @param state.activeRange undefined if no range is active, otherwise a possibly partially defined range.\n */\n onStateChange?: (state: { activeRange: string | undefined }) => void;\n};\n\n/**\n * Tracks the currently active cell within a formula and provides a callback to modify it.\n */\nexport const rangeExtension = ({ onInit, onStateChange }: RangeExtensionOptions): Extension => {\n let view: EditorView;\n let activeRange: SelectionRange | undefined;\n\n // Called externally to provide current range.\n const notifier: RangeController = {\n setRange: (range: string) => {\n if (activeRange) {\n view.dispatch(\n view.state.update({\n changes: { ...activeRange, insert: range.toString() },\n selection: { anchor: activeRange.from + range.length },\n }),\n );\n }\n\n view.focus();\n },\n };\n\n return ViewPlugin.fromClass(\n class {\n constructor(_view: EditorView) {\n view = _view;\n onInit?.(notifier);\n }\n\n update(view: ViewUpdate) {\n const { anchor } = view.state.selection.ranges[0];\n\n // Find first Range or cell at cursor.\n activeRange = undefined;\n const language = view.state.facet(languageFacet);\n const { topNode } = language.parser.parse(view.state.doc.toString());\n visitTree(topNode, ({ type, from, to }) => {\n if (from <= anchor && to >= anchor) {\n switch (type.name) {\n case 'Function':\n // Mark but keep looking.\n activeRange = { from: to, to };\n break;\n\n case 'CloseParen':\n // Mark but keep looking.\n activeRange = { from, to: from };\n break;\n\n case 'RangeToken':\n case 'CellToken':\n activeRange = { from, to };\n return true;\n }\n }\n\n return false;\n });\n\n // Allow start of formula.\n if (!activeRange && view.state.doc.toString()[0] === '=') {\n const str = view.state.doc.sliceString(1);\n if (RANGE_NOTATION.test(str)) {\n activeRange = { from: 1, to: str.length + 1 };\n } else {\n activeRange = { from: str.length + 1, to: str.length + 1 };\n }\n }\n\n onStateChange?.({\n activeRange: activeRange ? view.state.doc.sliceString(activeRange.from, activeRange.to) : undefined,\n });\n }\n },\n );\n};\n\n/**\n * Lezer parse result visitor.\n */\nconst visitTree = (node: SyntaxNode, callback: (node: SyntaxNode) => boolean): boolean => {\n if (callback(node)) {\n return true;\n }\n\n for (let child = node.firstChild; child !== null; child = child.nextSibling) {\n if (visitTree(child, callback)) {\n return true;\n }\n }\n\n return false;\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["syntaxTree", "RangeSetBuilder", "StateEffect", "StateField", "Decoration", "EditorView", "ViewPlugin", "WidgetType", "debounce", "createSheetName", "invariant", "documentId", "singleValueFacet", "_options", "computeNode", "acceptCompletion", "autocompletion", "completionStatus", "startCompletion", "HighlightStyle", "syntaxHighlighting", "ViewPlugin", "keymap", "tags", "spreadsheet", "RANGE_NOTATION", "singleValueFacet", "mx", "highlightStyles", "define", "tag", "name", "class", "tagName", "number", "bool", "string", "invalid", "languageFacet", "sheetExtension", "debug", "functions", "extension", "language", "idiom", "decimalSeparator", "createCompletion", "section", "description", "syntax", "find", "value", "label", "info", "root", "document", "createElement", "className", "title", "innerText", "appendChild", "detail", "apply", "view", "completion", "from", "to", "insertParens", "state", "doc", "toString", "length", "dispatch", "update", "changes", "insert", "selection", "anchor", "of", "data", "autocomplete", "context", "match", "matchBefore", "text", "toUpperCase", "explicit", "options", "filter", "startsWith", "map", "aboveCursor", "defaultKeymap", "activateOnTyping", "closeOnBlur", "icons", "tooltipClass", "key", "run", "rangeExtension", "onInit", "onStateChange", "activeRange", "notifier", "setRange", "range", "focus", "fromClass", "_view", "ranges", "undefined", "facet", "topNode", "parser", "parse", "visitTree", "type", "str", "sliceString", "test", "node", "callback", "child", "firstChild", "nextSibling"]
|
|
7
|
-
}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
// src/integrations/thread-ranges.ts
|
|
2
|
-
import { useCallback, useEffect, useMemo } from "react";
|
|
3
|
-
import { useOperationInvoker } from "@dxos/app-framework/ui";
|
|
4
|
-
import { LayoutOperation } from "@dxos/app-toolkit";
|
|
5
|
-
import { debounce } from "@dxos/async";
|
|
6
|
-
import { inRange } from "@dxos/compute-hyperformula";
|
|
7
|
-
import { Filter, Obj, Query, Relation } from "@dxos/echo";
|
|
8
|
-
import { CommentOperation } from "@dxos/plugin-comments/types";
|
|
9
|
-
import { useQuery } from "@dxos/react-client/echo";
|
|
10
|
-
import { linkedSegment } from "@dxos/react-ui-attention";
|
|
11
|
-
import { AnchoredTo, Thread } from "@dxos/types";
|
|
12
|
-
import { useSheetContext } from "#components";
|
|
13
|
-
var parseThreadAnchorAsCellRange = (cursor) => {
|
|
14
|
-
const coords = cursor.split(",");
|
|
15
|
-
if (coords.length !== 4) {
|
|
16
|
-
return null;
|
|
17
|
-
} else {
|
|
18
|
-
const [fromCol, fromRow, toCol, toRow] = coords;
|
|
19
|
-
return {
|
|
20
|
-
from: {
|
|
21
|
-
col: parseInt(fromCol),
|
|
22
|
-
row: parseInt(fromRow)
|
|
23
|
-
},
|
|
24
|
-
to: {
|
|
25
|
-
col: parseInt(toCol),
|
|
26
|
-
row: parseInt(toRow)
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
var useSelectThreadOnCellFocus = () => {
|
|
32
|
-
const { model, cursor } = useSheetContext();
|
|
33
|
-
const { invokePromise } = useOperationInvoker();
|
|
34
|
-
const db = Obj.getDatabase(model.sheet);
|
|
35
|
-
const anchors = useQuery(db, Query.select(Filter.id(model.sheet.id)).targetOf(AnchoredTo.AnchoredTo));
|
|
36
|
-
const selectClosestThread = useCallback((cellAddress) => {
|
|
37
|
-
if (!cellAddress) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
const closestThread = anchors.find((anchor) => {
|
|
41
|
-
const source = Relation.getSource(anchor);
|
|
42
|
-
if (anchor.anchor && Obj.instanceOf(Thread.Thread, source)) {
|
|
43
|
-
const range = parseThreadAnchorAsCellRange(anchor.anchor);
|
|
44
|
-
return range ? inRange(range, cellAddress) : false;
|
|
45
|
-
} else {
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
if (closestThread) {
|
|
50
|
-
void (async () => {
|
|
51
|
-
await invokePromise(CommentOperation.Select, {
|
|
52
|
-
current: Relation.getURI(closestThread)
|
|
53
|
-
});
|
|
54
|
-
await invokePromise(LayoutOperation.UpdateCompanion, {
|
|
55
|
-
subject: linkedSegment("comments")
|
|
56
|
-
});
|
|
57
|
-
})();
|
|
58
|
-
}
|
|
59
|
-
}, [
|
|
60
|
-
invokePromise,
|
|
61
|
-
anchors
|
|
62
|
-
]);
|
|
63
|
-
const debounced = useMemo(() => {
|
|
64
|
-
return debounce((cellCoords) => requestAnimationFrame(() => selectClosestThread(cellCoords)), 50);
|
|
65
|
-
}, [
|
|
66
|
-
selectClosestThread
|
|
67
|
-
]);
|
|
68
|
-
useEffect(() => {
|
|
69
|
-
if (!cursor) {
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
debounced(cursor);
|
|
73
|
-
}, [
|
|
74
|
-
cursor,
|
|
75
|
-
debounced
|
|
76
|
-
]);
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
export {
|
|
80
|
-
parseThreadAnchorAsCellRange,
|
|
81
|
-
useSelectThreadOnCellFocus
|
|
82
|
-
};
|
|
83
|
-
//# sourceMappingURL=chunk-HEN74ZWI.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/integrations/thread-ranges.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback, useEffect, useMemo } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { debounce } from '@dxos/async';\nimport { type CellAddress, type CompleteCellRange, inRange } from '@dxos/compute-hyperformula';\nimport { Filter, Obj, Query, Relation } from '@dxos/echo';\nimport { CommentOperation } from '@dxos/plugin-comments/types';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { linkedSegment } from '@dxos/react-ui-attention';\nimport { AnchoredTo, Thread } from '@dxos/types';\n\nimport { useSheetContext } from '#components';\n\nexport const completeCellRangeToThreadCursor = (range: CompleteCellRange): string => {\n return `${range.from.col},${range.from.row},${range.to.col},${range.to.row}`;\n};\n\nexport const parseThreadAnchorAsCellRange = (cursor: string): CompleteCellRange | null => {\n const coords = cursor.split(',');\n if (coords.length !== 4) {\n return null;\n } else {\n const [fromCol, fromRow, toCol, toRow] = coords;\n return {\n from: { col: parseInt(fromCol), row: parseInt(fromRow) },\n to: { col: parseInt(toCol), row: parseInt(toRow) },\n };\n }\n};\n\nexport const useSelectThreadOnCellFocus = () => {\n const { model, cursor } = useSheetContext();\n const { invokePromise } = useOperationInvoker();\n\n const db = Obj.getDatabase(model.sheet);\n const anchors = useQuery(db, Query.select(Filter.id(model.sheet.id)).targetOf(AnchoredTo.AnchoredTo));\n\n const selectClosestThread = useCallback(\n (cellAddress: CellAddress) => {\n if (!cellAddress) {\n return;\n }\n\n const closestThread = anchors.find((anchor) => {\n const source = Relation.getSource(anchor);\n if (anchor.anchor && Obj.instanceOf(Thread.Thread, source)) {\n const range = parseThreadAnchorAsCellRange(anchor.anchor);\n return range ? inRange(range, cellAddress) : false;\n } else {\n return false;\n }\n });\n\n if (closestThread) {\n void (async () => {\n await invokePromise(CommentOperation.Select, { current: Relation.getURI(closestThread) });\n await invokePromise(LayoutOperation.UpdateCompanion, {\n subject: linkedSegment('comments'),\n });\n })();\n }\n },\n [invokePromise, anchors],\n );\n\n const debounced = useMemo(() => {\n return debounce((cellCoords: CellAddress) => requestAnimationFrame(() => selectClosestThread(cellCoords)), 50);\n }, [selectClosestThread]);\n\n useEffect(() => {\n if (!cursor) {\n return;\n }\n\n debounced(cursor);\n }, [cursor, debounced]);\n};\n"],
|
|
5
|
-
"mappings": ";AAIA,SAASA,aAAaC,WAAWC,eAAe;AAEhD,SAASC,2BAA2B;AACpC,SAASC,uBAAuB;AAChC,SAASC,gBAAgB;AACzB,SAAmDC,eAAe;AAClE,SAASC,QAAQC,KAAKC,OAAOC,gBAAgB;AAC7C,SAASC,wBAAwB;AACjC,SAASC,gBAAgB;AACzB,SAASC,qBAAqB;AAC9B,SAASC,YAAYC,cAAc;AAEnC,SAASC,uBAAuB;AAMzB,IAAMC,+BAA+B,CAACC,WAAAA;AAC3C,QAAMC,SAASD,OAAOE,MAAM,GAAA;AAC5B,MAAID,OAAOE,WAAW,GAAG;AACvB,WAAO;EACT,OAAO;AACL,UAAM,CAACC,SAASC,SAASC,OAAOC,KAAAA,IAASN;AACzC,WAAO;MACLO,MAAM;QAAEC,KAAKC,SAASN,OAAAA;QAAUO,KAAKD,SAASL,OAAAA;MAAS;MACvDO,IAAI;QAAEH,KAAKC,SAASJ,KAAAA;QAAQK,KAAKD,SAASH,KAAAA;MAAO;IACnD;EACF;AACF;AAEO,IAAMM,6BAA6B,MAAA;AACxC,QAAM,EAAEC,OAAOd,OAAM,IAAKe,gBAAAA;AAC1B,QAAM,EAAEC,cAAa,IAAKC,oBAAAA;AAE1B,QAAMC,KAAKC,IAAIC,YAAYN,MAAMO,KAAK;AACtC,QAAMC,UAAUC,SAASL,IAAIM,MAAMC,OAAOC,OAAOC,GAAGb,MAAMO,MAAMM,EAAE,CAAA,EAAGC,SAASC,WAAWA,UAAU,CAAA;AAEnG,QAAMC,sBAAsBC,YAC1B,CAACC,gBAAAA;AACC,QAAI,CAACA,aAAa;AAChB;IACF;AAEA,UAAMC,gBAAgBX,QAAQY,KAAK,CAACC,WAAAA;AAClC,YAAMC,SAASC,SAASC,UAAUH,MAAAA;AAClC,UAAIA,OAAOA,UAAUhB,IAAIoB,WAAWC,OAAOA,QAAQJ,MAAAA,GAAS;AAC1D,cAAMK,QAAQ1C,6BAA6BoC,OAAOA,MAAM;AACxD,eAAOM,QAAQC,QAAQD,OAAOT,WAAAA,IAAe;MAC/C,OAAO;AACL,eAAO;MACT;IACF,CAAA;AAEA,QAAIC,eAAe;AACjB,YAAM,YAAA;AACJ,cAAMjB,cAAc2B,iBAAiBC,QAAQ;UAAEC,SAASR,SAASS,OAAOb,aAAAA;QAAe,CAAA;AACvF,cAAMjB,cAAc+B,gBAAgBC,iBAAiB;UACnDC,SAASC,cAAc,UAAA;QACzB,CAAA;MACF,GAAA;IACF;EACF,GACA;IAAClC;IAAeM;GAAQ;AAG1B,QAAM6B,YAAYC,QAAQ,MAAA;AACxB,WAAOC,SAAS,CAACC,eAA4BC,sBAAsB,MAAMzB,oBAAoBwB,UAAAA,CAAAA,GAAc,EAAA;EAC7G,GAAG;IAACxB;GAAoB;AAExB0B,YAAU,MAAA;AACR,QAAI,CAACxD,QAAQ;AACX;IACF;AAEAmD,cAAUnD,MAAAA;EACZ,GAAG;IAACA;IAAQmD;GAAU;AACxB;",
|
|
6
|
-
"names": ["useCallback", "useEffect", "useMemo", "useOperationInvoker", "LayoutOperation", "debounce", "inRange", "Filter", "Obj", "Query", "Relation", "CommentOperation", "useQuery", "linkedSegment", "AnchoredTo", "Thread", "useSheetContext", "parseThreadAnchorAsCellRange", "cursor", "coords", "split", "length", "fromCol", "fromRow", "toCol", "toRow", "from", "col", "parseInt", "row", "to", "useSelectThreadOnCellFocus", "model", "useSheetContext", "invokePromise", "useOperationInvoker", "db", "Obj", "getDatabase", "sheet", "anchors", "useQuery", "Query", "select", "Filter", "id", "targetOf", "AnchoredTo", "selectClosestThread", "useCallback", "cellAddress", "closestThread", "find", "anchor", "source", "Relation", "getSource", "instanceOf", "Thread", "range", "inRange", "CommentOperation", "Select", "current", "getURI", "LayoutOperation", "UpdateCompanion", "subject", "linkedSegment", "debounced", "useMemo", "debounce", "cellCoords", "requestAnimationFrame", "useEffect"]
|
|
7
|
-
}
|