@dxos/plugin-sheet 0.6.12-main.78ddbdf → 0.6.12-main.89e9959
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-V4GCCZTX.mjs → SheetContainer-LG77O4RM.mjs} +14 -13
- package/dist/lib/browser/SheetContainer-LG77O4RM.mjs.map +7 -0
- package/dist/lib/browser/{chunk-U2JHW3L6.mjs → chunk-CHQAW4F4.mjs} +206 -53
- package/dist/lib/browser/chunk-CHQAW4F4.mjs.map +7 -0
- package/dist/lib/browser/{chunk-6ZMQVB4Z.mjs → chunk-GSV5QNLD.mjs} +220 -177
- package/dist/lib/browser/chunk-GSV5QNLD.mjs.map +7 -0
- package/dist/lib/browser/{chunk-T3NJFTD4.mjs → chunk-WZMOZKQZ.mjs} +2 -2
- package/dist/lib/browser/{chunk-T3NJFTD4.mjs.map → chunk-WZMOZKQZ.mjs.map} +3 -3
- package/dist/lib/browser/graph-M4IQ76QX.mjs +33 -0
- package/dist/lib/browser/index.mjs +45 -21
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/types.mjs +1 -1
- package/dist/lib/node/{SheetContainer-3ZY7MPWJ.cjs → SheetContainer-OZ7DHH4L.cjs} +21 -20
- package/dist/lib/node/SheetContainer-OZ7DHH4L.cjs.map +7 -0
- package/dist/lib/node/{chunk-OTTD7FBK.cjs → chunk-5FTFZL5W.cjs} +224 -70
- package/dist/lib/node/chunk-5FTFZL5W.cjs.map +7 -0
- package/dist/lib/node/{chunk-DD6FIXWC.cjs → chunk-5XPK2V4A.cjs} +222 -175
- package/dist/lib/node/chunk-5XPK2V4A.cjs.map +7 -0
- package/dist/lib/node/{chunk-Q3HBHPRL.cjs → chunk-AOP42UAA.cjs} +5 -5
- package/dist/lib/node/{chunk-Q3HBHPRL.cjs.map → chunk-AOP42UAA.cjs.map} +3 -3
- package/dist/lib/node/graph-Q3N2X26H.cjs +55 -0
- package/dist/lib/node/graph-Q3N2X26H.cjs.map +7 -0
- package/dist/lib/node/index.cjs +51 -30
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/types.cjs +8 -8
- package/dist/lib/node/types.cjs.map +1 -1
- package/dist/lib/node-esm/{SheetContainer-PXSJX6XK.mjs → SheetContainer-4XS2G25Z.mjs} +14 -13
- package/dist/lib/node-esm/SheetContainer-4XS2G25Z.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-D6KU5MI7.mjs → chunk-5WPZCXNS.mjs} +220 -177
- package/dist/lib/node-esm/chunk-5WPZCXNS.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-7HVSOTGA.mjs → chunk-KK3XL37M.mjs} +206 -53
- package/dist/lib/node-esm/chunk-KK3XL37M.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-BMNA27EX.mjs → chunk-RR2AO4SM.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-BMNA27EX.mjs.map → chunk-RR2AO4SM.mjs.map} +3 -3
- package/dist/lib/node-esm/graph-SMPUMOV2.mjs +34 -0
- package/dist/lib/node-esm/index.mjs +45 -21
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/types.mjs +1 -1
- package/dist/types/src/SheetPlugin.d.ts.map +1 -1
- package/dist/types/src/components/CellEditor/CellEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/CellEditor/extension.d.ts.map +1 -1
- package/dist/types/src/components/GridSheet/GridSheet.d.ts +3 -3
- package/dist/types/src/components/GridSheet/GridSheet.d.ts.map +1 -1
- package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts +1 -1
- package/dist/types/src/components/GridSheet/util.d.ts +9 -0
- package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
- package/dist/types/src/components/Sheet/Sheet.d.ts.map +1 -1
- package/dist/types/src/components/Sheet/Sheet.stories.d.ts.map +1 -1
- package/dist/types/src/components/Sheet/sheet-context.d.ts +3 -3
- package/dist/types/src/components/Sheet/sheet-context.d.ts.map +1 -1
- package/dist/types/src/components/SheetContainer.d.ts +1 -1
- package/dist/types/src/components/SheetContainer.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/defs/types.d.ts.map +1 -1
- package/dist/types/src/defs/util.d.ts +1 -1
- package/dist/types/src/defs/util.d.ts.map +1 -1
- package/dist/types/src/extensions/compute.d.ts +3 -2
- package/dist/types/src/extensions/compute.d.ts.map +1 -1
- package/dist/types/src/extensions/compute.stories.d.ts.map +1 -1
- package/dist/types/src/graph/compute-graph-registry.d.ts +34 -0
- package/dist/types/src/graph/compute-graph-registry.d.ts.map +1 -0
- package/dist/types/src/graph/compute-graph.d.ts +17 -34
- package/dist/types/src/graph/compute-graph.d.ts.map +1 -1
- package/dist/types/src/graph/compute-graph.stories.d.ts.map +1 -1
- package/dist/types/src/graph/compute-graph.test.d.ts +2 -0
- package/dist/types/src/graph/compute-graph.test.d.ts.map +1 -0
- package/dist/types/src/graph/compute-node.d.ts +9 -2
- package/dist/types/src/graph/compute-node.d.ts.map +1 -1
- package/dist/types/src/graph/{async-function.d.ts → functions/async-function.d.ts} +13 -4
- package/dist/types/src/graph/functions/async-function.d.ts.map +1 -0
- package/dist/types/src/graph/functions/edge-function.d.ts +21 -0
- package/dist/types/src/graph/functions/edge-function.d.ts.map +1 -0
- package/dist/types/src/graph/functions/function-defs.d.ts.map +1 -0
- package/dist/types/src/graph/functions/index.d.ts +4 -0
- package/dist/types/src/graph/functions/index.d.ts.map +1 -0
- package/dist/types/src/graph/index.d.ts +2 -1
- package/dist/types/src/graph/index.d.ts.map +1 -1
- package/dist/types/src/graph/testing/index.d.ts +3 -0
- package/dist/types/src/graph/testing/index.d.ts.map +1 -0
- package/dist/types/src/graph/testing/test-builder.d.ts +15 -0
- package/dist/types/src/graph/testing/test-builder.d.ts.map +1 -0
- package/dist/types/src/graph/testing/test-plugin.d.ts +36 -0
- package/dist/types/src/graph/testing/test-plugin.d.ts.map +1 -0
- package/dist/types/src/hooks/useComputeGraph.d.ts.map +1 -1
- package/dist/types/src/hooks/useSheetModel.d.ts +2 -2
- package/dist/types/src/hooks/useSheetModel.d.ts.map +1 -1
- package/dist/types/src/model/sheet-model.d.ts +3 -3
- package/dist/types/src/model/sheet-model.d.ts.map +1 -1
- package/dist/types/src/model/sheet-model.test.d.ts +2 -0
- package/dist/types/src/model/sheet-model.test.d.ts.map +1 -0
- package/dist/types/src/testing/testing.d.ts +4 -5
- package/dist/types/src/testing/testing.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +4 -3
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +40 -39
- package/src/SheetPlugin.tsx +19 -15
- package/src/components/CellEditor/CellEditor.stories.tsx +2 -3
- package/src/components/CellEditor/extension.test.ts +0 -1
- package/src/components/CellEditor/extension.ts +4 -3
- package/src/components/GridSheet/GridSheet.stories.tsx +3 -3
- package/src/components/GridSheet/GridSheet.tsx +26 -8
- package/src/components/GridSheet/util.ts +61 -21
- package/src/components/Sheet/Sheet.stories.tsx +21 -20
- package/src/components/Sheet/Sheet.tsx +30 -14
- package/src/components/Sheet/sheet-context.tsx +4 -4
- package/src/components/SheetContainer.tsx +13 -15
- package/src/defs/types.ts +1 -0
- package/src/defs/util.ts +19 -3
- package/src/extensions/compute.stories.tsx +20 -20
- package/src/extensions/compute.ts +91 -42
- package/src/graph/compute-graph-registry.ts +90 -0
- package/src/graph/compute-graph.stories.tsx +4 -3
- package/src/graph/compute-graph.test.ts +87 -0
- package/src/graph/compute-graph.ts +73 -121
- package/src/graph/compute-node.ts +17 -5
- package/src/graph/{async-function.ts → functions/async-function.ts} +23 -15
- package/src/graph/{edge-function.ts → functions/edge-function.ts} +14 -13
- package/src/graph/functions/index.ts +7 -0
- package/src/graph/hyperformula.test.ts +1 -2
- package/src/graph/index.ts +2 -1
- package/src/graph/testing/index.ts +6 -0
- package/src/graph/testing/test-builder.ts +54 -0
- package/src/graph/{custom-function.ts → testing/test-plugin.ts} +43 -9
- package/src/hooks/hooks.stories.tsx +3 -3
- package/src/hooks/useComputeGraph.ts +9 -1
- package/src/hooks/useSheetModel.ts +4 -7
- package/src/model/sheet-model.test.ts +59 -0
- package/src/model/sheet-model.ts +47 -30
- package/src/testing/testing.tsx +17 -15
- package/src/types.ts +3 -3
- package/dist/lib/browser/SheetContainer-V4GCCZTX.mjs.map +0 -7
- package/dist/lib/browser/chunk-6ZMQVB4Z.mjs.map +0 -7
- package/dist/lib/browser/chunk-U2JHW3L6.mjs.map +0 -7
- package/dist/lib/browser/graph-T27BOBOV.mjs +0 -21
- package/dist/lib/node/SheetContainer-3ZY7MPWJ.cjs.map +0 -7
- package/dist/lib/node/chunk-DD6FIXWC.cjs.map +0 -7
- package/dist/lib/node/chunk-OTTD7FBK.cjs.map +0 -7
- package/dist/lib/node/graph-SPKGX7W4.cjs +0 -43
- package/dist/lib/node/graph-SPKGX7W4.cjs.map +0 -7
- package/dist/lib/node-esm/SheetContainer-PXSJX6XK.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-7HVSOTGA.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-D6KU5MI7.mjs.map +0 -7
- package/dist/lib/node-esm/graph-U67IO4UC.mjs +0 -22
- package/dist/types/src/graph/async-function.d.ts.map +0 -1
- package/dist/types/src/graph/compute-graph.browser.test.d.ts +0 -2
- package/dist/types/src/graph/compute-graph.browser.test.d.ts.map +0 -1
- package/dist/types/src/graph/custom-function.d.ts +0 -21
- package/dist/types/src/graph/custom-function.d.ts.map +0 -1
- package/dist/types/src/graph/edge-function.d.ts +0 -20
- package/dist/types/src/graph/edge-function.d.ts.map +0 -1
- package/dist/types/src/graph/function-defs.d.ts.map +0 -1
- package/src/graph/compute-graph.browser.test.ts +0 -104
- /package/dist/lib/browser/{graph-T27BOBOV.mjs.map → graph-M4IQ76QX.mjs.map} +0 -0
- /package/dist/lib/node-esm/{graph-U67IO4UC.mjs.map → graph-SMPUMOV2.mjs.map} +0 -0
- /package/dist/types/src/graph/{function-defs.d.ts → functions/function-defs.d.ts} +0 -0
- /package/src/graph/{function-defs.ts → functions/function-defs.ts} +0 -0
|
@@ -2,18 +2,18 @@ import {
|
|
|
2
2
|
Sheet,
|
|
3
3
|
addressToIndex,
|
|
4
4
|
useSheetContext
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-CHQAW4F4.mjs";
|
|
6
|
+
import "./chunk-WZMOZKQZ.mjs";
|
|
7
7
|
import {
|
|
8
8
|
SHEET_PLUGIN
|
|
9
9
|
} from "./chunk-QILRZNE5.mjs";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-GSV5QNLD.mjs";
|
|
11
11
|
|
|
12
12
|
// packages/plugins/plugin-sheet/src/components/SheetContainer.tsx
|
|
13
13
|
import React3, { useCallback } from "react";
|
|
14
14
|
import { useIntentDispatcher } from "@dxos/app-framework";
|
|
15
15
|
import { fullyQualifiedId } from "@dxos/react-client/echo";
|
|
16
|
-
import {
|
|
16
|
+
import { useAttendableAttributes, useAttention } from "@dxos/react-ui-attention";
|
|
17
17
|
import { focusRing, mx } from "@dxos/react-ui-theme";
|
|
18
18
|
|
|
19
19
|
// packages/plugins/plugin-sheet/src/components/Toolbar/Toolbar.tsx
|
|
@@ -209,12 +209,12 @@ var Toolbar = {
|
|
|
209
209
|
};
|
|
210
210
|
|
|
211
211
|
// packages/plugins/plugin-sheet/src/components/SheetContainer.tsx
|
|
212
|
-
var attentionFragment = mx("group-focus-within/editor:attention-surface group-[[aria-current]]/editor:attention-surface", "group-focus-within/editor:border-separator");
|
|
213
212
|
var sectionToolbarLayout = "bs-[--rail-action] bg-[--sticky-bg] sticky block-start-0 __-block-start-px transition-opacity";
|
|
214
|
-
var SheetContainer = ({
|
|
213
|
+
var SheetContainer = ({ graph, sheet, role }) => {
|
|
215
214
|
const dispatch = useIntentDispatcher();
|
|
216
215
|
const id = fullyQualifiedId(sheet);
|
|
217
|
-
const
|
|
216
|
+
const attendableAttrs = useAttendableAttributes(id);
|
|
217
|
+
const { hasAttention } = useAttention(id);
|
|
218
218
|
const handleAction = useCallback((action) => {
|
|
219
219
|
switch (action.type) {
|
|
220
220
|
case "comment": {
|
|
@@ -234,9 +234,10 @@ var SheetContainer = ({ sheet, space, role }) => {
|
|
|
234
234
|
]);
|
|
235
235
|
return /* @__PURE__ */ React3.createElement("div", {
|
|
236
236
|
role: "none",
|
|
237
|
-
className: role === "article" ? "row-span-2 grid grid-rows-subgrid" : void 0
|
|
237
|
+
className: role === "article" ? "row-span-2 grid grid-rows-subgrid" : void 0,
|
|
238
|
+
...role === "article" && attendableAttrs
|
|
238
239
|
}, /* @__PURE__ */ React3.createElement(Sheet.Root, {
|
|
239
|
-
|
|
240
|
+
graph,
|
|
240
241
|
sheet
|
|
241
242
|
}, /* @__PURE__ */ React3.createElement("div", {
|
|
242
243
|
role: "none",
|
|
@@ -245,12 +246,12 @@ var SheetContainer = ({ sheet, space, role }) => {
|
|
|
245
246
|
onAction: handleAction,
|
|
246
247
|
classNames: mx(role === "section" ? [
|
|
247
248
|
"z-[2] group-focus-within/section:visible",
|
|
248
|
-
!
|
|
249
|
+
!hasAttention && "invisible",
|
|
249
250
|
sectionToolbarLayout
|
|
250
|
-
] : "
|
|
251
|
+
] : "attention-surface")
|
|
251
252
|
}, /* @__PURE__ */ React3.createElement(Toolbar.Separator, null), /* @__PURE__ */ React3.createElement(Toolbar.Actions, null))), /* @__PURE__ */ React3.createElement("div", {
|
|
252
253
|
role: "none",
|
|
253
|
-
className: mx(role === "section" && "aspect-square border-is border-bs border-be border-separator", role === "article" && "flex is-full overflow-hidden focus-visible:ring-inset row-span-1 data-[toolbar=disabled]:pbs-2 data-[toolbar=disabled]:row-span-2 border-bs border-separator", focusRing
|
|
254
|
+
className: mx(role === "section" && "aspect-square border-is border-bs border-be border-separator", role === "article" && "flex is-full overflow-hidden focus-visible:ring-inset row-span-1 data-[toolbar=disabled]:pbs-2 data-[toolbar=disabled]:row-span-2 border-bs border-separator attention-surface", focusRing)
|
|
254
255
|
}, /* @__PURE__ */ React3.createElement(Sheet.Main, null))));
|
|
255
256
|
};
|
|
256
257
|
var SheetContainer_default = SheetContainer;
|
|
@@ -258,4 +259,4 @@ export {
|
|
|
258
259
|
SheetContainer_default as default,
|
|
259
260
|
sectionToolbarLayout
|
|
260
261
|
};
|
|
261
|
-
//# sourceMappingURL=SheetContainer-
|
|
262
|
+
//# sourceMappingURL=SheetContainer-LG77O4RM.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/SheetContainer.tsx", "../../../src/components/Toolbar/Toolbar.tsx", "../../../src/components/Toolbar/common.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { useAttendableAttributes, useAttention } from '@dxos/react-ui-attention';\nimport { focusRing, mx } from '@dxos/react-ui-theme';\n\nimport { Sheet, type SheetRootProps } from './Sheet';\nimport { Toolbar, type ToolbarAction } from './Toolbar';\n\n// TODO(Zan): Factor out, copied this from MarkdownPlugin.\nexport const sectionToolbarLayout =\n 'bs-[--rail-action] bg-[--sticky-bg] sticky block-start-0 __-block-start-px transition-opacity';\n\nconst SheetContainer = ({ graph, sheet, role }: SheetRootProps & { role?: string }) => {\n const dispatch = useIntentDispatcher();\n\n const id = fullyQualifiedId(sheet);\n const attendableAttrs = useAttendableAttributes(id);\n const { hasAttention } = useAttention(id);\n\n // TODO(Zan): Centralise the toolbar action handler. Current implementation in stories.\n const handleAction = useCallback(\n (action: ToolbarAction) => {\n switch (action.type) {\n case 'comment': {\n // TODO(Zan): We shouldn't hardcode the action ID.\n void dispatch({\n action: 'dxos.org/plugin/thread/action/create',\n data: {\n cursor: action.anchor,\n name: action.cellContent,\n subject: sheet,\n },\n });\n }\n }\n },\n [sheet, dispatch],\n );\n\n return (\n <div\n role='none'\n className={role === 'article' ? 'row-span-2 grid grid-rows-subgrid' : undefined}\n {...(role === 'article' && attendableAttrs)}\n >\n <Sheet.Root graph={graph} sheet={sheet}>\n <div role='none' className={mx('flex flex-0 justify-center overflow-x-auto')}>\n <Toolbar.Root\n onAction={handleAction}\n classNames={mx(\n role === 'section'\n ? ['z-[2] group-focus-within/section:visible', !hasAttention && 'invisible', sectionToolbarLayout]\n : 'attention-surface',\n )}\n >\n {/* TODO(Zan): Restore some of this functionality */}\n {/* <Toolbar.Styles /> */}\n {/* <Toolbar.Format /> */}\n {/* <Toolbar.Alignment /> */}\n <Toolbar.Separator />\n <Toolbar.Actions />\n </Toolbar.Root>\n </div>\n <div\n role='none'\n className={mx(\n role === 'section' && 'aspect-square border-is border-bs border-be border-separator',\n role === 'article' &&\n 'flex is-full overflow-hidden focus-visible:ring-inset row-span-1 data-[toolbar=disabled]:pbs-2 data-[toolbar=disabled]:row-span-2 border-bs border-separator attention-surface',\n focusRing,\n )}\n >\n <Sheet.Main />\n </div>\n </Sheet.Root>\n </div>\n );\n};\n\nexport default SheetContainer;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport {\n type Icon,\n Calendar,\n ChatText,\n CurrencyDollar,\n Eraser,\n HighlighterCircle,\n TextAlignCenter,\n TextAlignLeft,\n TextAlignRight,\n} from '@phosphor-icons/react';\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren } from 'react';\n\nimport {\n DensityProvider,\n ElevationProvider,\n Toolbar as NaturalToolbar,\n type ThemedClassName,\n useTranslation,\n} from '@dxos/react-ui';\nimport { nonNullable } from '@dxos/util';\n\nimport { ToolbarButton, ToolbarSeparator, ToolbarToggleButton } from './common';\nimport { addressToIndex } from '../../defs';\nimport { SHEET_PLUGIN } from '../../meta';\nimport { type Formatting } from '../../types';\nimport { useSheetContext } from '../Sheet/sheet-context';\n\n//\n// Root\n//\n\nexport type ToolbarAction =\n | { type: 'clear' }\n | { type: 'highlight' }\n | { type: 'left' }\n | { type: 'center' }\n | { type: 'right' }\n | { type: 'date' }\n | { type: 'currency' }\n | { type: 'comment'; anchor: string; cellContent?: string };\n\nexport type ToolbarActionType = ToolbarAction['type'];\n\nexport type ToolbarActionHandler = (action: ToolbarAction) => void;\n\nexport type ToolbarProps = ThemedClassName<\n PropsWithChildren<{\n onAction?: ToolbarActionHandler;\n }>\n>;\n\nconst [ToolbarContextProvider, useToolbarContext] = createContext<ToolbarProps>('Toolbar');\n\nconst ToolbarRoot = ({ children, onAction, classNames }: ToolbarProps) => {\n return (\n <ToolbarContextProvider onAction={onAction}>\n <DensityProvider density='fine'>\n <ElevationProvider elevation='chrome'>\n <NaturalToolbar.Root classNames={['is-full shrink-0 overflow-x-auto overflow-y-hidden p-1', classNames]}>\n {children}\n </NaturalToolbar.Root>\n </ElevationProvider>\n </DensityProvider>\n </ToolbarContextProvider>\n );\n};\n\n// TODO(burdon): Generalize.\n// TODO(burdon): Detect and display current state.\ntype ButtonProps = {\n type: ToolbarActionType;\n Icon: Icon;\n getState: (state: Formatting) => boolean;\n disabled?: (state: Formatting) => boolean;\n};\n\n//\n// Alignment\n//\n\nconst formatOptions: ButtonProps[] = [\n { type: 'date', Icon: Calendar, getState: (state) => false },\n { type: 'currency', Icon: CurrencyDollar, getState: (state) => false },\n];\n\nconst Format = () => {\n const { onAction } = useToolbarContext('Format');\n const { t } = useTranslation(SHEET_PLUGIN);\n\n return (\n <NaturalToolbar.ToggleGroup\n type='single'\n // value={cellStyles.filter(({ getState }) => state && getState(state)).map(({ type }) => type)}\n >\n {formatOptions.map(({ type, getState, Icon }) => (\n <ToolbarToggleButton\n key={type}\n value={type}\n Icon={Icon}\n // disabled={state?.blockType === 'codeblock'}\n // onClick={state ? () => onAction?.({ type, data: !getState(state) }) : undefined}\n onClick={() => onAction?.({ type: type as Exclude<typeof type, 'comment'> })}\n >\n {t(`toolbar ${type} label`)}\n </ToolbarToggleButton>\n ))}\n </NaturalToolbar.ToggleGroup>\n );\n};\n\nconst alignmentOptions: ButtonProps[] = [\n { type: 'left', Icon: TextAlignLeft, getState: (state) => false },\n { type: 'center', Icon: TextAlignCenter, getState: (state) => false },\n { type: 'right', Icon: TextAlignRight, getState: (state) => false },\n];\n\nconst Alignment = () => {\n const { onAction } = useToolbarContext('Alignment');\n const { t } = useTranslation(SHEET_PLUGIN);\n\n return (\n <NaturalToolbar.ToggleGroup\n type='single'\n // value={cellStyles.filter(({ getState }) => state && getState(state)).map(({ type }) => type)}\n >\n {alignmentOptions.map(({ type, getState, Icon }) => (\n <ToolbarToggleButton\n key={type}\n value={type}\n Icon={Icon}\n // disabled={state?.blockType === 'codeblock'}\n // onClick={state ? () => onAction?.({ type, data: !getState(state) }) : undefined}\n onClick={() => onAction?.({ type: type as Exclude<typeof type, 'comment'> })}\n >\n {t(`toolbar ${type} label`)}\n </ToolbarToggleButton>\n ))}\n </NaturalToolbar.ToggleGroup>\n );\n};\n\nconst styleOptions: ButtonProps[] = [\n { type: 'clear', Icon: Eraser, getState: (state) => false },\n { type: 'highlight', Icon: HighlighterCircle, getState: (state) => false },\n];\n\nconst Styles = () => {\n const { onAction } = useToolbarContext('Alignment');\n const { t } = useTranslation(SHEET_PLUGIN);\n\n return (\n <NaturalToolbar.ToggleGroup\n type='single'\n // value={cellStyles.filter(({ getState }) => state && getState(state)).map(({ type }) => type)}\n >\n {styleOptions.map(({ type, getState, Icon }) => (\n <ToolbarToggleButton\n key={type}\n value={type}\n Icon={Icon}\n // disabled={state?.blockType === 'codeblock'}\n // onClick={state ? () => onAction?.({ type, data: !getState(state) }) : undefined}\n onClick={() => onAction?.({ type: type as Exclude<typeof type, 'comment'> })}\n >\n {t(`toolbar ${type} label`)}\n </ToolbarToggleButton>\n ))}\n </NaturalToolbar.ToggleGroup>\n );\n};\n\n//\n// Actions\n//\n\nconst Actions = () => {\n const { onAction } = useToolbarContext('Actions');\n const { cursor, range, model } = useSheetContext();\n const { t } = useTranslation(SHEET_PLUGIN);\n\n const overlapsCommentAnchor = (model.sheet.threads ?? [])\n .filter(nonNullable)\n .filter((thread) => thread.status !== 'resolved')\n .some((thread) => {\n if (!cursor) {\n return false;\n }\n return addressToIndex(model.sheet, cursor) === thread.anchor;\n });\n\n const hasCursor = !!cursor;\n const cursorOnly = hasCursor && !range && !overlapsCommentAnchor;\n\n const tooltipLabelKey = !hasCursor\n ? 'no cursor label'\n : overlapsCommentAnchor\n ? 'selection overlaps existing comment label'\n : range\n ? 'comment ranges not supported label'\n : 'comment label';\n\n return (\n <ToolbarButton\n value='comment'\n Icon={ChatText}\n data-testid='editor.toolbar.comment'\n onClick={() => {\n if (!cursor) {\n return;\n }\n return onAction?.({\n type: 'comment',\n anchor: addressToIndex(model.sheet, cursor),\n cellContent: model.getCellText(cursor),\n });\n }}\n disabled={!cursorOnly || overlapsCommentAnchor}\n >\n {t(tooltipLabelKey)}\n </ToolbarButton>\n );\n};\n\nexport const Toolbar = {\n Root: ToolbarRoot,\n Separator: ToolbarSeparator,\n Alignment,\n Format,\n Styles,\n Actions,\n};\n\nexport { useToolbarContext };\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Icon } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport {\n Toolbar as NaturalToolbar,\n Tooltip,\n type ToolbarButtonProps as NaturalToolbarButtonProps,\n type ToolbarToggleGroupItemProps as NaturalToolbarToggleGroupItemProps,\n} from '@dxos/react-ui';\nimport { getSize } from '@dxos/react-ui-theme';\n\n// TODO(burdon): Factor out in common with react-ui-editor.\n\nexport const iconStyles = getSize(5);\nexport const buttonStyles = 'min-bs-0 p-2';\nexport const tooltipProps = { side: 'top' as const, classNames: 'z-10' };\n\nexport const ToolbarSeparator = () => <div role='separator' className='grow' />;\n\n//\n// ToolbarButton\n//\n\ntype ToolbarButtonProps = NaturalToolbarButtonProps & { Icon: Icon };\n\nexport const ToolbarButton = ({ Icon, children, ...props }: ToolbarButtonProps) => {\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' {...props} classNames={buttonStyles}>\n <Icon className={iconStyles} />\n <span className='sr-only'>{children}</span>\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content {...tooltipProps}>\n {children}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n\n//\n// ToolbarToggleButton\n//\n\nexport type ToolbarToggleButtonProps = NaturalToolbarToggleGroupItemProps & { Icon: Icon };\n\nexport const ToolbarToggleButton = ({ Icon, children, ...props }: ToolbarToggleButtonProps) => {\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.ToggleGroupItem variant='ghost' {...props} classNames={buttonStyles}>\n <Icon className={iconStyles} />\n <span className='sr-only'>{children}</span>\n </NaturalToolbar.ToggleGroupItem>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content {...tooltipProps}>\n {children}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "useCallback", "useIntentDispatcher", "fullyQualifiedId", "useAttendableAttributes", "useAttention", "focusRing", "mx", "Calendar", "ChatText", "CurrencyDollar", "Eraser", "HighlighterCircle", "TextAlignCenter", "TextAlignLeft", "TextAlignRight", "createContext", "React", "DensityProvider", "ElevationProvider", "Toolbar", "NaturalToolbar", "useTranslation", "nonNullable", "React", "Toolbar", "NaturalToolbar", "Tooltip", "getSize", "iconStyles", "getSize", "buttonStyles", "tooltipProps", "side", "classNames", "ToolbarSeparator", "div", "role", "className", "ToolbarButton", "Icon", "children", "props", "Tooltip", "Root", "Trigger", "asChild", "NaturalToolbar", "Button", "variant", "span", "Portal", "Content", "Arrow", "ToolbarToggleButton", "ToggleGroupItem", "ToolbarContextProvider", "useToolbarContext", "createContext", "ToolbarRoot", "children", "onAction", "classNames", "React", "DensityProvider", "density", "ElevationProvider", "elevation", "NaturalToolbar", "Root", "formatOptions", "type", "Icon", "Calendar", "getState", "state", "CurrencyDollar", "Format", "t", "useTranslation", "SHEET_PLUGIN", "ToggleGroup", "map", "ToolbarToggleButton", "key", "value", "onClick", "alignmentOptions", "TextAlignLeft", "TextAlignCenter", "TextAlignRight", "Alignment", "styleOptions", "Eraser", "HighlighterCircle", "Styles", "Actions", "cursor", "range", "model", "useSheetContext", "overlapsCommentAnchor", "sheet", "threads", "filter", "nonNullable", "thread", "status", "some", "addressToIndex", "anchor", "hasCursor", "cursorOnly", "tooltipLabelKey", "ToolbarButton", "ChatText", "data-testid", "cellContent", "getCellText", "disabled", "Toolbar", "Separator", "ToolbarSeparator", "sectionToolbarLayout", "SheetContainer", "graph", "sheet", "role", "dispatch", "useIntentDispatcher", "id", "fullyQualifiedId", "attendableAttrs", "useAttendableAttributes", "hasAttention", "useAttention", "handleAction", "useCallback", "action", "type", "data", "cursor", "anchor", "name", "cellContent", "subject", "React", "div", "className", "undefined", "Sheet", "Root", "mx", "Toolbar", "onAction", "classNames", "Separator", "Actions", "focusRing", "Main"]
|
|
7
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SheetType,
|
|
3
3
|
ValueTypeEnum
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-WZMOZKQZ.mjs";
|
|
5
5
|
import {
|
|
6
6
|
SHEET_PLUGIN
|
|
7
7
|
} from "./chunk-QILRZNE5.mjs";
|
|
8
8
|
import {
|
|
9
9
|
createSheetName
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-GSV5QNLD.mjs";
|
|
11
11
|
|
|
12
12
|
// packages/plugins/plugin-sheet/src/components/Sheet/Sheet.tsx
|
|
13
13
|
import { DndContext, DragOverlay, KeyboardSensor, MouseSensor, TouchSensor, useDraggable, useDroppable, useSensor, useSensors } from "@dnd-kit/core";
|
|
@@ -21,7 +21,7 @@ import { useResizeDetector } from "react-resize-detector";
|
|
|
21
21
|
import { debounce as debounce2 } from "@dxos/async";
|
|
22
22
|
import { fullyQualifiedId as fullyQualifiedId2, createDocAccessor } from "@dxos/client/echo";
|
|
23
23
|
import { log as log2 } from "@dxos/log";
|
|
24
|
-
import {
|
|
24
|
+
import { ATTENABLE_ATTRIBUTE, useAttendableAttributes, useAttention, useAttentionPath } from "@dxos/react-ui-attention";
|
|
25
25
|
import { mx as mx2 } from "@dxos/react-ui-theme";
|
|
26
26
|
|
|
27
27
|
// packages/plugins/plugin-sheet/src/components/Sheet/grid.ts
|
|
@@ -56,7 +56,7 @@ var addressFromA1Notation = (ref) => {
|
|
|
56
56
|
const match = ref.match(/([A-Z]+)(\d+)/);
|
|
57
57
|
invariant(match, `Invalid notation: ${ref}`, {
|
|
58
58
|
F: __dxlog_file,
|
|
59
|
-
L:
|
|
59
|
+
L: 40,
|
|
60
60
|
S: void 0,
|
|
61
61
|
A: [
|
|
62
62
|
"match",
|
|
@@ -131,9 +131,9 @@ var initialize = (sheet, { rows = DEFAULT_ROWS, columns = DEFAULT_COLUMNS } = {}
|
|
|
131
131
|
insertIndices(sheet.columns, 0, columns, MAX_COLUMNS);
|
|
132
132
|
}
|
|
133
133
|
};
|
|
134
|
-
var createSheet = ({
|
|
134
|
+
var createSheet = ({ name, cells, ...size } = {}) => {
|
|
135
135
|
const sheet = create(SheetType, {
|
|
136
|
-
|
|
136
|
+
name,
|
|
137
137
|
cells: {},
|
|
138
138
|
rows: [],
|
|
139
139
|
columns: [],
|
|
@@ -142,6 +142,14 @@ var createSheet = ({ title, ...size } = {}) => {
|
|
|
142
142
|
formatting: {}
|
|
143
143
|
});
|
|
144
144
|
initialize(sheet, size);
|
|
145
|
+
if (cells) {
|
|
146
|
+
Object.entries(cells).forEach(([key, { value }]) => {
|
|
147
|
+
const idx = addressToIndex(sheet, addressFromA1Notation(key));
|
|
148
|
+
sheet.cells[idx] = {
|
|
149
|
+
value
|
|
150
|
+
};
|
|
151
|
+
});
|
|
152
|
+
}
|
|
145
153
|
return sheet;
|
|
146
154
|
};
|
|
147
155
|
var addressToIndex = (sheet, cell) => {
|
|
@@ -536,15 +544,22 @@ var ComputeGraphContextProvider = ({ registry, children }) => {
|
|
|
536
544
|
};
|
|
537
545
|
|
|
538
546
|
// packages/plugins/plugin-sheet/src/components/index.ts
|
|
539
|
-
var SheetContainer = React2.lazy(() => import("./SheetContainer-
|
|
547
|
+
var SheetContainer = React2.lazy(() => import("./SheetContainer-LG77O4RM.mjs"));
|
|
540
548
|
|
|
541
549
|
// packages/plugins/plugin-sheet/src/hooks/useComputeGraph.ts
|
|
542
550
|
var useComputeGraph = (space) => {
|
|
543
551
|
const { registry } = useContext(ComputeGraphContext) ?? raise(new Error("Missing ComputeGraphContext"));
|
|
544
|
-
|
|
552
|
+
const [graph] = useAsyncState(async () => {
|
|
553
|
+
if (space) {
|
|
554
|
+
const graph2 = registry.getOrCreateGraph(space);
|
|
555
|
+
await graph2.open();
|
|
556
|
+
return graph2;
|
|
557
|
+
}
|
|
558
|
+
}, [
|
|
545
559
|
space,
|
|
546
560
|
registry
|
|
547
561
|
]);
|
|
562
|
+
return graph;
|
|
548
563
|
};
|
|
549
564
|
|
|
550
565
|
// packages/plugins/plugin-sheet/src/hooks/useFormattingModel.ts
|
|
@@ -664,6 +679,7 @@ var FormattingModel = class {
|
|
|
664
679
|
// packages/plugins/plugin-sheet/src/model/sheet-model.ts
|
|
665
680
|
import { Event } from "@dxos/async";
|
|
666
681
|
import { Resource } from "@dxos/context";
|
|
682
|
+
import { getTypename } from "@dxos/echo-schema";
|
|
667
683
|
import { invariant as invariant2 } from "@dxos/invariant";
|
|
668
684
|
import { PublicKey } from "@dxos/keys";
|
|
669
685
|
import { log } from "@dxos/log";
|
|
@@ -702,8 +718,6 @@ var SheetModel = class extends Resource {
|
|
|
702
718
|
this._options = _options;
|
|
703
719
|
this.id = `model-${PublicKey.random().truncate()}`;
|
|
704
720
|
this.update = new Event();
|
|
705
|
-
this._node = this._graph.getOrCreateNode(createSheetName(this._sheet.id));
|
|
706
|
-
this.reset();
|
|
707
721
|
}
|
|
708
722
|
get graph() {
|
|
709
723
|
return this._graph;
|
|
@@ -728,14 +742,19 @@ var SheetModel = class extends Resource {
|
|
|
728
742
|
id: this.id
|
|
729
743
|
}, {
|
|
730
744
|
F: __dxlog_file2,
|
|
731
|
-
L:
|
|
745
|
+
L: 104,
|
|
732
746
|
S: this,
|
|
733
747
|
C: (f, a) => f(...a)
|
|
734
748
|
});
|
|
735
749
|
initialize(this._sheet);
|
|
736
|
-
this.
|
|
737
|
-
|
|
750
|
+
this._node = this._graph.getOrCreateNode(createSheetName({
|
|
751
|
+
type: getTypename(this._sheet),
|
|
752
|
+
id: this._sheet.id
|
|
753
|
+
}));
|
|
754
|
+
await this._node.open();
|
|
755
|
+
const unsubscribe = this._node.update.on((event) => this.update.emit(event));
|
|
738
756
|
this._ctx.onDispose(unsubscribe);
|
|
757
|
+
this.reset();
|
|
739
758
|
}
|
|
740
759
|
/**
|
|
741
760
|
* Update engine.
|
|
@@ -743,13 +762,31 @@ var SheetModel = class extends Resource {
|
|
|
743
762
|
* @deprecated
|
|
744
763
|
*/
|
|
745
764
|
reset() {
|
|
746
|
-
|
|
765
|
+
invariant2(this._node, void 0, {
|
|
766
|
+
F: __dxlog_file2,
|
|
767
|
+
L: 124,
|
|
768
|
+
S: this,
|
|
769
|
+
A: [
|
|
770
|
+
"this._node",
|
|
771
|
+
""
|
|
772
|
+
]
|
|
773
|
+
});
|
|
774
|
+
this._node.graph.hf.clearSheet(this._node.sheetId);
|
|
747
775
|
Object.entries(this._sheet.cells).forEach(([key, { value }]) => {
|
|
776
|
+
invariant2(this._node, void 0, {
|
|
777
|
+
F: __dxlog_file2,
|
|
778
|
+
L: 127,
|
|
779
|
+
S: this,
|
|
780
|
+
A: [
|
|
781
|
+
"this._node",
|
|
782
|
+
""
|
|
783
|
+
]
|
|
784
|
+
});
|
|
748
785
|
const { col, row } = addressFromIndex(this._sheet, key);
|
|
749
786
|
if (typeof value === "string" && value.charAt(0) === "=") {
|
|
750
787
|
value = this._graph.mapFormulaToNative(this._graph.mapFunctionBindingFromId(this.mapFormulaIndicesToRefs(value)));
|
|
751
788
|
}
|
|
752
|
-
this._node.hf.setCellContents({
|
|
789
|
+
this._node.graph.hf.setCellContents({
|
|
753
790
|
sheet: this._node.sheetId,
|
|
754
791
|
row,
|
|
755
792
|
col
|
|
@@ -764,7 +801,7 @@ var SheetModel = class extends Resource {
|
|
|
764
801
|
*/
|
|
765
802
|
// TODO(burdon): Remove.
|
|
766
803
|
recalculate() {
|
|
767
|
-
this._node.hf.rebuildAndRecalculate();
|
|
804
|
+
this._node?.graph.hf.rebuildAndRecalculate();
|
|
768
805
|
}
|
|
769
806
|
insertRows(i, n = 1) {
|
|
770
807
|
insertIndices(this._sheet.rows, i, n, MAX_ROWS);
|
|
@@ -782,27 +819,63 @@ var SheetModel = class extends Resource {
|
|
|
782
819
|
* Clear range of values.
|
|
783
820
|
*/
|
|
784
821
|
clear(range) {
|
|
822
|
+
invariant2(this._node, void 0, {
|
|
823
|
+
F: __dxlog_file2,
|
|
824
|
+
L: 169,
|
|
825
|
+
S: this,
|
|
826
|
+
A: [
|
|
827
|
+
"this._node",
|
|
828
|
+
""
|
|
829
|
+
]
|
|
830
|
+
});
|
|
785
831
|
const topLeft = getTopLeft(range);
|
|
786
832
|
const values = this._iterRange(range, () => null);
|
|
787
|
-
this._node.hf.setCellContents(toSimpleCellAddress(this._node.sheetId, topLeft), values);
|
|
833
|
+
this._node.graph.hf.setCellContents(toSimpleCellAddress(this._node.sheetId, topLeft), values);
|
|
788
834
|
this._iterRange(range, (cell) => {
|
|
789
835
|
const idx = addressToIndex(this._sheet, cell);
|
|
790
836
|
delete this._sheet.cells[idx];
|
|
791
837
|
});
|
|
792
838
|
}
|
|
793
839
|
cut(range) {
|
|
794
|
-
|
|
840
|
+
invariant2(this._node, void 0, {
|
|
841
|
+
F: __dxlog_file2,
|
|
842
|
+
L: 180,
|
|
843
|
+
S: this,
|
|
844
|
+
A: [
|
|
845
|
+
"this._node",
|
|
846
|
+
""
|
|
847
|
+
]
|
|
848
|
+
});
|
|
849
|
+
this._node.graph.hf.cut(toModelRange(this._node.sheetId, range));
|
|
795
850
|
this._iterRange(range, (cell) => {
|
|
796
851
|
const idx = addressToIndex(this._sheet, cell);
|
|
797
852
|
delete this._sheet.cells[idx];
|
|
798
853
|
});
|
|
799
854
|
}
|
|
800
855
|
copy(range) {
|
|
801
|
-
|
|
856
|
+
invariant2(this._node, void 0, {
|
|
857
|
+
F: __dxlog_file2,
|
|
858
|
+
L: 189,
|
|
859
|
+
S: this,
|
|
860
|
+
A: [
|
|
861
|
+
"this._node",
|
|
862
|
+
""
|
|
863
|
+
]
|
|
864
|
+
});
|
|
865
|
+
this._node.graph.hf.copy(toModelRange(this._node.sheetId, range));
|
|
802
866
|
}
|
|
803
867
|
paste(cell) {
|
|
804
|
-
|
|
805
|
-
|
|
868
|
+
invariant2(this._node, void 0, {
|
|
869
|
+
F: __dxlog_file2,
|
|
870
|
+
L: 194,
|
|
871
|
+
S: this,
|
|
872
|
+
A: [
|
|
873
|
+
"this._node",
|
|
874
|
+
""
|
|
875
|
+
]
|
|
876
|
+
});
|
|
877
|
+
if (!this._node.graph.hf.isClipboardEmpty()) {
|
|
878
|
+
const changes = this._node.graph.hf.paste(toSimpleCellAddress(this._node.sheetId, cell));
|
|
806
879
|
for (const change of changes) {
|
|
807
880
|
if (change instanceof ExportedCellChange) {
|
|
808
881
|
const { address, newValue } = change;
|
|
@@ -819,15 +892,31 @@ var SheetModel = class extends Resource {
|
|
|
819
892
|
}
|
|
820
893
|
// TODO(burdon): Display undo/redo state.
|
|
821
894
|
undo() {
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
895
|
+
invariant2(this._node, void 0, {
|
|
896
|
+
F: __dxlog_file2,
|
|
897
|
+
L: 209,
|
|
898
|
+
S: this,
|
|
899
|
+
A: [
|
|
900
|
+
"this._node",
|
|
901
|
+
""
|
|
902
|
+
]
|
|
903
|
+
});
|
|
904
|
+
if (this._node.graph.hf.isThereSomethingToUndo()) {
|
|
905
|
+
this._node.graph.hf.undo();
|
|
825
906
|
}
|
|
826
907
|
}
|
|
827
908
|
redo() {
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
909
|
+
invariant2(this._node, void 0, {
|
|
910
|
+
F: __dxlog_file2,
|
|
911
|
+
L: 217,
|
|
912
|
+
S: this,
|
|
913
|
+
A: [
|
|
914
|
+
"this._node",
|
|
915
|
+
""
|
|
916
|
+
]
|
|
917
|
+
});
|
|
918
|
+
if (this._node.graph.hf.isThereSomethingToRedo()) {
|
|
919
|
+
this._node.graph.hf.redo();
|
|
831
920
|
}
|
|
832
921
|
}
|
|
833
922
|
/**
|
|
@@ -861,7 +950,16 @@ var SheetModel = class extends Resource {
|
|
|
861
950
|
* Gets the regular or computed value from the engine.
|
|
862
951
|
*/
|
|
863
952
|
getValue(cell) {
|
|
864
|
-
|
|
953
|
+
invariant2(this._node, void 0, {
|
|
954
|
+
F: __dxlog_file2,
|
|
955
|
+
L: 260,
|
|
956
|
+
S: this,
|
|
957
|
+
A: [
|
|
958
|
+
"this._node",
|
|
959
|
+
""
|
|
960
|
+
]
|
|
961
|
+
});
|
|
962
|
+
const value = this._node.graph.hf.getCellValue(toSimpleCellAddress(this._node.sheetId, cell));
|
|
865
963
|
if (value instanceof DetailedCellError) {
|
|
866
964
|
return value.toString();
|
|
867
965
|
}
|
|
@@ -871,14 +969,32 @@ var SheetModel = class extends Resource {
|
|
|
871
969
|
* Get value type.
|
|
872
970
|
*/
|
|
873
971
|
getValueType(cell) {
|
|
972
|
+
invariant2(this._node, void 0, {
|
|
973
|
+
F: __dxlog_file2,
|
|
974
|
+
L: 273,
|
|
975
|
+
S: this,
|
|
976
|
+
A: [
|
|
977
|
+
"this._node",
|
|
978
|
+
""
|
|
979
|
+
]
|
|
980
|
+
});
|
|
874
981
|
const addr = toSimpleCellAddress(this._node.sheetId, cell);
|
|
875
|
-
const type = this._node.hf.getCellValueDetailedType(addr);
|
|
982
|
+
const type = this._node.graph.hf.getCellValueDetailedType(addr);
|
|
876
983
|
return typeMap[type];
|
|
877
984
|
}
|
|
878
985
|
/**
|
|
879
986
|
* Sets the value, updating the sheet and engine.
|
|
880
987
|
*/
|
|
881
988
|
setValue(cell, value) {
|
|
989
|
+
invariant2(this._node, void 0, {
|
|
990
|
+
F: __dxlog_file2,
|
|
991
|
+
L: 283,
|
|
992
|
+
S: this,
|
|
993
|
+
A: [
|
|
994
|
+
"this._node",
|
|
995
|
+
""
|
|
996
|
+
]
|
|
997
|
+
});
|
|
882
998
|
if (this._options.readonly) {
|
|
883
999
|
throw new ReadonlyException();
|
|
884
1000
|
}
|
|
@@ -894,7 +1010,7 @@ var SheetModel = class extends Resource {
|
|
|
894
1010
|
if (refresh) {
|
|
895
1011
|
this.reset();
|
|
896
1012
|
}
|
|
897
|
-
this._node.hf.setCellContents({
|
|
1013
|
+
this._node.graph.hf.setCellContents({
|
|
898
1014
|
sheet: this._node.sheetId,
|
|
899
1015
|
row: cell.row,
|
|
900
1016
|
col: cell.col
|
|
@@ -969,7 +1085,7 @@ var SheetModel = class extends Resource {
|
|
|
969
1085
|
mapFormulaRefsToIndices(formula) {
|
|
970
1086
|
invariant2(formula.charAt(0) === "=", void 0, {
|
|
971
1087
|
F: __dxlog_file2,
|
|
972
|
-
L:
|
|
1088
|
+
L: 372,
|
|
973
1089
|
S: this,
|
|
974
1090
|
A: [
|
|
975
1091
|
"formula.charAt(0) === '='",
|
|
@@ -986,7 +1102,7 @@ var SheetModel = class extends Resource {
|
|
|
986
1102
|
mapFormulaIndicesToRefs(formula) {
|
|
987
1103
|
invariant2(formula.charAt(0) === "=", void 0, {
|
|
988
1104
|
F: __dxlog_file2,
|
|
989
|
-
L:
|
|
1105
|
+
L: 382,
|
|
990
1106
|
S: this,
|
|
991
1107
|
A: [
|
|
992
1108
|
"formula.charAt(0) === '='",
|
|
@@ -1010,13 +1126,40 @@ var SheetModel = class extends Resource {
|
|
|
1010
1126
|
return new Date(year, month - 1, day, hours, minutes, seconds);
|
|
1011
1127
|
}
|
|
1012
1128
|
toDateTime(num) {
|
|
1013
|
-
|
|
1129
|
+
invariant2(this._node, void 0, {
|
|
1130
|
+
F: __dxlog_file2,
|
|
1131
|
+
L: 403,
|
|
1132
|
+
S: this,
|
|
1133
|
+
A: [
|
|
1134
|
+
"this._node",
|
|
1135
|
+
""
|
|
1136
|
+
]
|
|
1137
|
+
});
|
|
1138
|
+
return this._node.graph.hf.numberToDateTime(num);
|
|
1014
1139
|
}
|
|
1015
1140
|
toDate(num) {
|
|
1016
|
-
|
|
1141
|
+
invariant2(this._node, void 0, {
|
|
1142
|
+
F: __dxlog_file2,
|
|
1143
|
+
L: 408,
|
|
1144
|
+
S: this,
|
|
1145
|
+
A: [
|
|
1146
|
+
"this._node",
|
|
1147
|
+
""
|
|
1148
|
+
]
|
|
1149
|
+
});
|
|
1150
|
+
return this._node.graph.hf.numberToDate(num);
|
|
1017
1151
|
}
|
|
1018
1152
|
toTime(num) {
|
|
1019
|
-
|
|
1153
|
+
invariant2(this._node, void 0, {
|
|
1154
|
+
F: __dxlog_file2,
|
|
1155
|
+
L: 413,
|
|
1156
|
+
S: this,
|
|
1157
|
+
A: [
|
|
1158
|
+
"this._node",
|
|
1159
|
+
""
|
|
1160
|
+
]
|
|
1161
|
+
});
|
|
1162
|
+
return this._node.graph.hf.numberToTime(num);
|
|
1020
1163
|
}
|
|
1021
1164
|
};
|
|
1022
1165
|
|
|
@@ -1029,11 +1172,10 @@ var useFormattingModel = (model) => {
|
|
|
1029
1172
|
|
|
1030
1173
|
// packages/plugins/plugin-sheet/src/hooks/useSheetModel.ts
|
|
1031
1174
|
import { useEffect as useEffect2, useState as useState3 } from "react";
|
|
1032
|
-
var useSheetModel = (
|
|
1033
|
-
const graph = useComputeGraph(space);
|
|
1175
|
+
var useSheetModel = (graph, sheet, { readonly } = {}) => {
|
|
1034
1176
|
const [model, setModel] = useState3();
|
|
1035
1177
|
useEffect2(() => {
|
|
1036
|
-
if (!
|
|
1178
|
+
if (!graph || !sheet) {
|
|
1037
1179
|
return;
|
|
1038
1180
|
}
|
|
1039
1181
|
let model2;
|
|
@@ -1049,9 +1191,8 @@ var useSheetModel = (space, sheet, { readonly } = {}) => {
|
|
|
1049
1191
|
void model2?.close();
|
|
1050
1192
|
};
|
|
1051
1193
|
}, [
|
|
1052
|
-
space,
|
|
1053
|
-
sheet,
|
|
1054
1194
|
graph,
|
|
1195
|
+
sheet,
|
|
1055
1196
|
readonly
|
|
1056
1197
|
]);
|
|
1057
1198
|
return model;
|
|
@@ -1073,8 +1214,8 @@ var useSheetContext = () => {
|
|
|
1073
1214
|
});
|
|
1074
1215
|
return context;
|
|
1075
1216
|
};
|
|
1076
|
-
var SheetContextProvider = ({ children,
|
|
1077
|
-
const model = useSheetModel(
|
|
1217
|
+
var SheetContextProvider = ({ children, graph, sheet, readonly, onInfo }) => {
|
|
1218
|
+
const model = useSheetModel(graph, sheet, {
|
|
1078
1219
|
readonly
|
|
1079
1220
|
});
|
|
1080
1221
|
const formatting = useFormattingModel(model);
|
|
@@ -1456,10 +1597,10 @@ var CellEditor = ({ value, extension, autoFocus, onBlur, variant = "legacy", box
|
|
|
1456
1597
|
// packages/plugins/plugin-sheet/src/components/CellEditor/extension.ts
|
|
1457
1598
|
import { acceptCompletion, autocompletion, completionStatus, startCompletion } from "@codemirror/autocomplete";
|
|
1458
1599
|
import { HighlightStyle, syntaxHighlighting } from "@codemirror/language";
|
|
1459
|
-
import { Facet } from "@codemirror/state";
|
|
1460
1600
|
import { ViewPlugin, keymap as keymap2 } from "@codemirror/view";
|
|
1461
1601
|
import { tags } from "@lezer/highlight";
|
|
1462
1602
|
import { spreadsheet } from "codemirror-lang-spreadsheet";
|
|
1603
|
+
import { singleValueFacet } from "@dxos/react-ui-editor/state";
|
|
1463
1604
|
import { mx } from "@dxos/react-ui-theme";
|
|
1464
1605
|
var highlightStyles = HighlightStyle.define([
|
|
1465
1606
|
// Function.
|
|
@@ -1491,7 +1632,7 @@ var highlightStyles = HighlightStyle.define([
|
|
|
1491
1632
|
class: "text-unAccent"
|
|
1492
1633
|
}
|
|
1493
1634
|
]);
|
|
1494
|
-
var languageFacet =
|
|
1635
|
+
var languageFacet = singleValueFacet();
|
|
1495
1636
|
var sheetExtension = ({ functions = [] }) => {
|
|
1496
1637
|
const { extension, language } = spreadsheet({
|
|
1497
1638
|
idiom: "en-US",
|
|
@@ -1608,7 +1749,7 @@ var rangeExtension = (onInit) => {
|
|
|
1608
1749
|
update(view2) {
|
|
1609
1750
|
const { anchor } = view2.state.selection.ranges[0];
|
|
1610
1751
|
activeRange = void 0;
|
|
1611
|
-
const
|
|
1752
|
+
const language = view2.state.facet(languageFacet);
|
|
1612
1753
|
const { topNode } = language.parser.parse(view2.state.doc.toString());
|
|
1613
1754
|
visitTree(topNode, ({ type, from, to }) => {
|
|
1614
1755
|
if (from <= anchor && to >= anchor) {
|
|
@@ -2172,7 +2313,7 @@ var SheetGrid = /* @__PURE__ */ forwardRef(({ size, rows, columns, rowSizes, col
|
|
|
2172
2313
|
id: model.id
|
|
2173
2314
|
}, {
|
|
2174
2315
|
F: __dxlog_file4,
|
|
2175
|
-
L:
|
|
2316
|
+
L: 738,
|
|
2176
2317
|
S: void 0,
|
|
2177
2318
|
C: (f, a) => f(...a)
|
|
2178
2319
|
});
|
|
@@ -2290,8 +2431,7 @@ var SheetGrid = /* @__PURE__ */ forwardRef(({ size, rows, columns, rowSizes, col
|
|
|
2290
2431
|
columnSizes
|
|
2291
2432
|
});
|
|
2292
2433
|
const id = fullyQualifiedId2(model.sheet);
|
|
2293
|
-
const
|
|
2294
|
-
const hasAttention = useHasAttention(id);
|
|
2434
|
+
const { hasAttention } = useAttention(id);
|
|
2295
2435
|
return /* @__PURE__ */ React6.createElement("div", {
|
|
2296
2436
|
ref: containerRef,
|
|
2297
2437
|
role: "grid",
|
|
@@ -2378,13 +2518,25 @@ var SheetGrid = /* @__PURE__ */ forwardRef(({ size, rows, columns, rowSizes, col
|
|
|
2378
2518
|
}
|
|
2379
2519
|
});
|
|
2380
2520
|
});
|
|
2381
|
-
}))), /* @__PURE__ */ createPortal(/* @__PURE__ */ React6.createElement(
|
|
2521
|
+
}))), /* @__PURE__ */ createPortal(/* @__PURE__ */ React6.createElement(SheetInput, {
|
|
2382
2522
|
ref: inputRef,
|
|
2383
|
-
|
|
2523
|
+
id,
|
|
2524
|
+
onKeyDown: handleKeyDown
|
|
2525
|
+
}), document.body));
|
|
2526
|
+
});
|
|
2527
|
+
var SheetInput = /* @__PURE__ */ forwardRef(({ id, onKeyDown }, forwardedRef) => {
|
|
2528
|
+
const path = useAttentionPath();
|
|
2529
|
+
const attendableAttrs = useAttendableAttributes(id);
|
|
2530
|
+
return path.toReversed().reduce((acc, part) => {
|
|
2531
|
+
return /* @__PURE__ */ React6.createElement("div", {
|
|
2532
|
+
[ATTENABLE_ATTRIBUTE]: part
|
|
2533
|
+
}, acc);
|
|
2534
|
+
}, /* @__PURE__ */ React6.createElement("input", {
|
|
2535
|
+
ref: forwardedRef,
|
|
2384
2536
|
className: "absolute w-[1px] h-[1px] bg-transparent outline-none border-none caret-transparent",
|
|
2385
|
-
onKeyDown
|
|
2537
|
+
onKeyDown,
|
|
2386
2538
|
...attendableAttrs
|
|
2387
|
-
})
|
|
2539
|
+
}));
|
|
2388
2540
|
});
|
|
2389
2541
|
var SelectionOverlay = ({ root }) => {
|
|
2390
2542
|
const { range } = useSheetContext();
|
|
@@ -2545,8 +2697,9 @@ export {
|
|
|
2545
2697
|
createSheet,
|
|
2546
2698
|
addressToIndex,
|
|
2547
2699
|
compareIndexPositions,
|
|
2700
|
+
useComputeGraph,
|
|
2548
2701
|
useSheetContext,
|
|
2549
2702
|
Sheet,
|
|
2550
2703
|
SheetContainer
|
|
2551
2704
|
};
|
|
2552
|
-
//# sourceMappingURL=chunk-
|
|
2705
|
+
//# sourceMappingURL=chunk-CHQAW4F4.mjs.map
|