@dxos/plugin-sheet 0.7.2 → 0.7.3-main.2dd075e
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-YAMIOFC6.mjs → SheetContainer-KCLT6PEO.mjs} +8 -6
- package/dist/lib/browser/SheetContainer-KCLT6PEO.mjs.map +7 -0
- package/dist/lib/browser/{chunk-QHQFM7LV.mjs → chunk-E5WQ7U7G.mjs} +77 -78
- package/dist/lib/browser/chunk-E5WQ7U7G.mjs.map +7 -0
- package/dist/lib/browser/{chunk-VMSX6Z4X.mjs → chunk-F3HE6D3J.mjs} +76 -26
- package/dist/lib/browser/chunk-F3HE6D3J.mjs.map +7 -0
- package/dist/lib/browser/{chunk-BVUN7SHF.mjs → chunk-JXFPOYNA.mjs} +1 -1
- package/dist/lib/browser/chunk-JXFPOYNA.mjs.map +7 -0
- package/dist/lib/browser/{compute-graph-GGWUX644.mjs → compute-graph-SNUS7HOH.mjs} +3 -3
- package/dist/lib/browser/index.mjs +84 -32
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/types.mjs +1 -1
- package/dist/lib/node/{SheetContainer-BSDHHYXE.cjs → SheetContainer-VVVRYTQG.cjs} +32 -31
- package/dist/lib/node/SheetContainer-VVVRYTQG.cjs.map +7 -0
- package/dist/lib/node/{chunk-J5ZFWMOD.cjs → chunk-45YW2DX2.cjs} +96 -101
- package/dist/lib/node/chunk-45YW2DX2.cjs.map +7 -0
- package/dist/lib/node/{chunk-O7XR4R7Y.cjs → chunk-KSEEI5VC.cjs} +87 -27
- package/dist/lib/node/chunk-KSEEI5VC.cjs.map +7 -0
- package/dist/lib/node/{chunk-AWKOWDMI.cjs → chunk-OWH2EUHZ.cjs} +4 -4
- package/dist/lib/node/chunk-OWH2EUHZ.cjs.map +7 -0
- package/dist/lib/node/{compute-graph-KGWA2QLE.cjs → compute-graph-WILPHO4A.cjs} +20 -20
- package/dist/lib/node/{compute-graph-KGWA2QLE.cjs.map → compute-graph-WILPHO4A.cjs.map} +2 -2
- package/dist/lib/node/index.cjs +101 -47
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/types.cjs +6 -6
- package/dist/lib/node/types.cjs.map +1 -1
- package/dist/lib/node-esm/{SheetContainer-T47T2NYJ.mjs → SheetContainer-LSBE6Q4X.mjs} +8 -6
- package/dist/lib/node-esm/SheetContainer-LSBE6Q4X.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-CR4K75EL.mjs → chunk-6JF2AHKO.mjs} +76 -26
- package/dist/lib/node-esm/chunk-6JF2AHKO.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-UIBWRHW7.mjs → chunk-BVS2IQRO.mjs} +1 -1
- package/dist/lib/node-esm/chunk-BVS2IQRO.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-6GSTEN7N.mjs → chunk-NYDNXI7L.mjs} +77 -78
- package/dist/lib/node-esm/chunk-NYDNXI7L.mjs.map +7 -0
- package/dist/lib/node-esm/{compute-graph-2SCZT7N5.mjs → compute-graph-S6CVN7RS.mjs} +3 -3
- package/dist/lib/node-esm/index.mjs +84 -32
- package/dist/lib/node-esm/index.mjs.map +3 -3
- 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/GridSheet/GridSheet.d.ts.map +1 -1
- package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts +1 -0
- package/dist/types/src/components/GridSheet/GridSheet.stories.d.ts.map +1 -1
- package/dist/types/src/components/GridSheet/util.d.ts +0 -2
- package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
- package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts +2 -0
- package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/SheetObjectSettings.d.ts +7 -0
- package/dist/types/src/components/SheetObjectSettings.d.ts.map +1 -0
- package/dist/types/src/components/Toolbar/Toolbar.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/defs/sheet-range-types.d.ts.map +1 -1
- package/dist/types/src/defs/types.d.ts +2 -4
- package/dist/types/src/defs/types.d.ts.map +1 -1
- package/dist/types/src/defs/util.d.ts +8 -0
- package/dist/types/src/defs/util.d.ts.map +1 -1
- package/dist/types/src/extensions/editor/extension.d.ts +2 -1
- package/dist/types/src/extensions/editor/extension.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/integrations/thread-ranges.d.ts.map +1 -1
- package/dist/types/src/model/sheet-model.d.ts +0 -4
- package/dist/types/src/model/sheet-model.d.ts.map +1 -1
- package/dist/types/src/model/testing.d.ts +6 -0
- package/dist/types/src/model/testing.d.ts.map +1 -0
- package/dist/types/src/testing/data.d.ts +3 -0
- package/dist/types/src/testing/data.d.ts.map +1 -0
- package/dist/types/src/testing/index.d.ts +1 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/playwright/playwright.config.d.ts +3 -0
- package/dist/types/src/testing/playwright/playwright.config.d.ts.map +1 -0
- package/dist/types/src/testing/playwright/sheet-manager.d.ts +24 -0
- package/dist/types/src/testing/playwright/sheet-manager.d.ts.map +1 -0
- package/dist/types/src/testing/playwright/sheet.spec.d.ts +2 -0
- package/dist/types/src/testing/playwright/sheet.spec.d.ts.map +1 -0
- package/dist/types/src/testing/testing.d.ts +1 -2
- package/dist/types/src/testing/testing.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +61 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +2 -3
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +40 -37
- package/src/SheetPlugin.tsx +9 -21
- package/src/components/FunctionEditor/FunctionEditor.tsx +2 -2
- package/src/components/GridSheet/GridSheet.stories.tsx +2 -0
- package/src/components/GridSheet/GridSheet.tsx +18 -8
- package/src/components/GridSheet/util.ts +1 -9
- package/src/components/SheetContainer/SheetContainer.stories.tsx +44 -2
- package/src/components/SheetObjectSettings.tsx +38 -0
- package/src/components/Toolbar/Toolbar.tsx +7 -1
- package/src/components/index.ts +1 -0
- package/src/compute-graph/compute-graph.stories.tsx +1 -1
- package/src/compute-graph/compute-graph.test.ts +1 -1
- package/src/defs/sheet-range-types.ts +3 -0
- package/src/defs/types.ts +3 -1
- package/src/defs/util.ts +32 -1
- package/src/extensions/editor/extension.ts +3 -3
- package/src/index.ts +3 -0
- package/src/integrations/thread-ranges.ts +2 -0
- package/src/model/sheet-model.test.ts +35 -1
- package/src/model/sheet-model.ts +5 -17
- package/src/model/testing.ts +35 -0
- package/src/sanity.test.ts +1 -1
- package/src/testing/data.ts +33 -0
- package/src/testing/index.ts +1 -0
- package/src/testing/playwright/playwright.config.ts +18 -0
- package/src/testing/playwright/sheet-manager.ts +91 -0
- package/src/testing/playwright/sheet.spec.ts +78 -0
- package/src/testing/testing.tsx +1 -31
- package/src/translations.ts +4 -0
- package/src/types.ts +1 -3
- package/dist/lib/browser/SheetContainer-YAMIOFC6.mjs.map +0 -7
- package/dist/lib/browser/chunk-BVUN7SHF.mjs.map +0 -7
- package/dist/lib/browser/chunk-QHQFM7LV.mjs.map +0 -7
- package/dist/lib/browser/chunk-VMSX6Z4X.mjs.map +0 -7
- package/dist/lib/node/SheetContainer-BSDHHYXE.cjs.map +0 -7
- package/dist/lib/node/chunk-AWKOWDMI.cjs.map +0 -7
- package/dist/lib/node/chunk-J5ZFWMOD.cjs.map +0 -7
- package/dist/lib/node/chunk-O7XR4R7Y.cjs.map +0 -7
- package/dist/lib/node-esm/SheetContainer-T47T2NYJ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-6GSTEN7N.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CR4K75EL.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-UIBWRHW7.mjs.map +0 -7
- /package/dist/lib/browser/{compute-graph-GGWUX644.mjs.map → compute-graph-SNUS7HOH.mjs.map} +0 -0
- /package/dist/lib/node-esm/{compute-graph-2SCZT7N5.mjs.map → compute-graph-S6CVN7RS.mjs.map} +0 -0
|
@@ -4,18 +4,19 @@ import {
|
|
|
4
4
|
completeCellRangeToThreadCursor,
|
|
5
5
|
useComputeGraph,
|
|
6
6
|
useSheetContext
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-E5WQ7U7G.mjs";
|
|
8
8
|
import {
|
|
9
9
|
addressToA1Notation,
|
|
10
10
|
alignKey,
|
|
11
11
|
inRange,
|
|
12
12
|
isFormula,
|
|
13
|
+
mapFormulaIndicesToRefs,
|
|
13
14
|
rangeFromIndex,
|
|
14
15
|
rangeToA1Notation,
|
|
15
16
|
rangeToIndex,
|
|
16
17
|
styleKey
|
|
17
|
-
} from "./chunk-
|
|
18
|
-
import "./chunk-
|
|
18
|
+
} from "./chunk-F3HE6D3J.mjs";
|
|
19
|
+
import "./chunk-JXFPOYNA.mjs";
|
|
19
20
|
import {
|
|
20
21
|
SHEET_PLUGIN
|
|
21
22
|
} from "./chunk-RABELMEQ.mjs";
|
|
@@ -34,7 +35,7 @@ var FunctionEditor = () => {
|
|
|
34
35
|
if (cursor) {
|
|
35
36
|
value = model.getCellValue(cursor);
|
|
36
37
|
if (isFormula(value)) {
|
|
37
|
-
value = model.graph.mapFunctionBindingFromId(model.
|
|
38
|
+
value = model.graph.mapFunctionBindingFromId(mapFormulaIndicesToRefs(model.sheet, value));
|
|
38
39
|
formula = true;
|
|
39
40
|
} else if (value != null) {
|
|
40
41
|
value = String(value);
|
|
@@ -190,7 +191,8 @@ var Alignment = () => {
|
|
|
190
191
|
itemType: "toggleGroupItem",
|
|
191
192
|
key: value2,
|
|
192
193
|
value: value2,
|
|
193
|
-
icon
|
|
194
|
+
icon,
|
|
195
|
+
"data-testid": `grid.toolbar.${alignKey}.${value2}`
|
|
194
196
|
}, t("toolbar action label", {
|
|
195
197
|
key: t(`range key ${alignKey} label`),
|
|
196
198
|
value: t(`range value ${value2} label`)
|
|
@@ -291,4 +293,4 @@ var SheetContainer_default = SheetContainer;
|
|
|
291
293
|
export {
|
|
292
294
|
SheetContainer_default as default
|
|
293
295
|
};
|
|
294
|
-
//# sourceMappingURL=SheetContainer-
|
|
296
|
+
//# sourceMappingURL=SheetContainer-KCLT6PEO.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/SheetContainer/SheetContainer.tsx", "../../../src/components/FunctionEditor/FunctionEditor.tsx", "../../../src/components/Toolbar/Toolbar.tsx", "../../../src/components/SheetContainer/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { type SheetType } from '../../types';\nimport { useComputeGraph } from '../ComputeGraph';\nimport { FunctionEditor } from '../FunctionEditor';\nimport { GridSheet } from '../GridSheet';\nimport { SheetProvider } from '../SheetContext';\nimport { Toolbar } from '../Toolbar';\n\nexport const SheetContainer = ({\n space,\n sheet,\n role,\n ignoreAttention,\n}: {\n space: Space;\n sheet: SheetType;\n role?: string;\n ignoreAttention?: boolean;\n}) => {\n const graph = useComputeGraph(space);\n\n return graph ? (\n <SheetProvider sheet={sheet} graph={graph} ignoreAttention={ignoreAttention}>\n <StackItem.Content toolbar statusbar {...(role === 'section' && { classNames: 'aspect-video' })}>\n <Toolbar.Root role={role}>\n <Toolbar.Styles />\n <Toolbar.Alignment />\n <Toolbar.Separator />\n <Toolbar.Actions />\n </Toolbar.Root>\n <GridSheet />\n <FunctionEditor />\n </StackItem.Content>\n </SheetProvider>\n ) : null;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Icon } from '@dxos/react-ui';\n\nimport { addressToA1Notation, isFormula, mapFormulaIndicesToRefs, rangeToA1Notation } from '../../defs';\nimport { useSheetContext } from '../SheetContext';\n\nexport const FunctionEditor = () => {\n const { model, cursor, range } = useSheetContext();\n\n let value;\n let formula = false;\n if (cursor) {\n value = model.getCellValue(cursor);\n if (isFormula(value)) {\n value = model.graph.mapFunctionBindingFromId(mapFormulaIndicesToRefs(model.sheet, value));\n formula = true;\n } else if (value != null) {\n value = String(value);\n }\n }\n\n return (\n <div className='flex shrink-0 justify-between items-center px-4 py-1 text-sm attention-surface border-bs !border-separator'>\n <div className='flex gap-4 items-center'>\n <div className='flex w-16 items-center font-mono'>\n {(range && rangeToA1Notation(range)) || (cursor && addressToA1Notation(cursor))}\n </div>\n <div className='flex gap-2 items-center'>\n <Icon icon='ph--function--regular' classNames={['text-greenText', formula ? 'visible' : 'invisible']} />\n <span className='font-mono'>{value}</span>\n </div>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren, useCallback } from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\nimport {\n Icon,\n type ThemedClassName,\n Toolbar as NaturalToolbar,\n type ToolbarButtonProps as NaturalToolbarButtonProps,\n type ToolbarToggleGroupItemProps as NaturalToolbarToggleGroupItemProps,\n type ToolbarToggleProps as NaturalToolbarToggleProps,\n Tooltip,\n useTranslation,\n} from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport { nonNullable } from '@dxos/util';\n\nimport {\n alignKey,\n type AlignKey,\n type AlignValue,\n type CommentKey,\n type CommentValue,\n inRange,\n rangeFromIndex,\n rangeToIndex,\n styleKey,\n type StyleKey,\n type StyleValue,\n} from '../../defs';\nimport { completeCellRangeToThreadCursor } from '../../integrations';\nimport { SHEET_PLUGIN } from '../../meta';\nimport { type SheetType } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\n//\n// Buttons\n//\n\nconst buttonStyles = 'min-bs-0 p-2';\nconst tooltipProps = { side: 'bottom' as const, classNames: 'z-10' };\n\nconst ToolbarSeparator = () => <div role='separator' className='grow' />;\n\n//\n// ToolbarItem\n//\n\ntype ToolbarItemProps =\n | (NaturalToolbarButtonProps & { itemType: 'button'; icon: string })\n | (NaturalToolbarToggleGroupItemProps & { itemType: 'toggleGroupItem'; icon: string })\n | (NaturalToolbarToggleProps & { itemType: 'toggle'; icon: string });\n\nexport const ToolbarItem = ({ itemType, icon, children, ...props }: ToolbarItemProps) => {\n const Invoker =\n itemType === 'toggleGroupItem'\n ? NaturalToolbar.ToggleGroupItem\n : itemType === 'toggle'\n ? NaturalToolbar.Toggle\n : NaturalToolbar.Button;\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n {/* TODO(thure): type the props spread better. */}\n <Invoker variant='ghost' {...(props as any)} classNames={buttonStyles}>\n <Icon icon={icon} size={5} />\n <span className='sr-only'>{children}</span>\n </Invoker>\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// Root\n//\n\ntype AlignAction = { key: AlignKey; value: AlignValue };\ntype CommentAction = { key: CommentKey; value: CommentValue; cellContent?: string };\ntype StyleAction = { key: StyleKey; value: StyleValue };\n\nexport type ToolbarAction = StyleAction | AlignAction | CommentAction;\nexport type ToolbarActionAnnotated = ToolbarAction & { unset?: boolean };\n\nexport type ToolbarActionType = ToolbarAction['key'];\n\nexport type ToolbarActionHandler = (action: ToolbarActionAnnotated) => void;\n\nexport type ToolbarProps = ThemedClassName<\n PropsWithChildren<{\n role?: string;\n }>\n>;\n\nconst [ToolbarContextProvider, useToolbarContext] = createContext<{\n onAction: (action: ToolbarActionAnnotated) => void;\n}>('Toolbar');\n\ntype Range = SheetType['ranges'][number];\n\nconst ToolbarRoot = ({ children, role, classNames }: ToolbarProps) => {\n const { id, model, cursorFallbackRange, cursor } = useSheetContext();\n const { hasAttention } = useAttention(id);\n const dispatch = useIntentDispatcher();\n\n // TODO(Zan): Externalize the toolbar action handler. E.g., Toolbar/keys should both fire events.\n const handleAction = useCallback(\n (action: ToolbarActionAnnotated) => {\n switch (action.key) {\n case 'alignment':\n if (cursorFallbackRange) {\n const index =\n model.sheet.ranges?.findIndex(\n (range) =>\n range.key === action.key &&\n inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n ) ?? -1;\n const nextRangeEntity = {\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key: action.key,\n value: action.value,\n };\n if (index < 0) {\n model.sheet.ranges?.push(nextRangeEntity);\n } else if (model.sheet.ranges![index].value === action.value) {\n model.sheet.ranges?.splice(index, 1);\n } else {\n model.sheet.ranges?.splice(index, 1, nextRangeEntity);\n }\n }\n break;\n case 'style':\n if (action.unset) {\n const index = model.sheet.ranges?.findIndex(\n (range) =>\n range.key === action.key &&\n cursorFallbackRange &&\n inRange(rangeFromIndex(model.sheet, range.range), cursorFallbackRange.from),\n );\n if (index >= 0) {\n model.sheet.ranges?.splice(index, 1);\n }\n } else if (cursorFallbackRange) {\n model.sheet.ranges?.push({\n range: rangeToIndex(model.sheet, cursorFallbackRange),\n key: action.key,\n value: action.value,\n });\n }\n break;\n case 'comment': {\n // TODO(Zan): We shouldn't hardcode the action ID.\n if (cursorFallbackRange) {\n void dispatch({\n action: 'dxos.org/plugin/thread/action/create',\n data: {\n cursor: completeCellRangeToThreadCursor(cursorFallbackRange),\n name: action.cellContent,\n subject: model.sheet,\n },\n });\n }\n }\n }\n },\n [model.sheet, cursorFallbackRange, cursor, dispatch],\n );\n\n return (\n <ToolbarContextProvider onAction={handleAction}>\n <NaturalToolbar.Root classNames={['pli-0.5 attention-surface', !hasAttention && 'opacity-20', classNames]}>\n {children}\n </NaturalToolbar.Root>\n </ToolbarContextProvider>\n );\n};\n\n// TODO(burdon): Generalize.\n// TODO(burdon): Detect and display current state.\ntype ButtonProps<T> = {\n value: T;\n icon: string;\n disabled?: (state: Range) => boolean;\n};\n\n//\n// Alignment\n//\n\nconst alignmentOptions: ButtonProps<AlignValue>[] = [\n { value: 'start', icon: 'ph--text-align-left--regular' },\n { value: 'center', icon: 'ph--text-align-center--regular' },\n { value: 'end', icon: 'ph--text-align-right--regular' },\n];\n\nconst Alignment = () => {\n const { cursor, model } = useSheetContext();\n const { onAction } = useToolbarContext('Alignment');\n const { t } = useTranslation(SHEET_PLUGIN);\n\n // TODO(thure): Can this O(n) call be memoized?\n const value = cursor\n ? model.sheet.ranges?.findLast(\n ({ range, key }) => key === alignKey && inRange(rangeFromIndex(model.sheet, range), cursor),\n )?.value\n : undefined;\n\n return (\n <NaturalToolbar.ToggleGroup\n type='single'\n value={\n // TODO(thure): providing `undefined` leaves the last item active which was active rather than showing none.\n value ?? 'never'\n }\n onValueChange={(value: AlignValue) => onAction?.({ key: alignKey, value })}\n >\n {alignmentOptions.map(({ value, icon }) => (\n <ToolbarItem\n itemType='toggleGroupItem'\n key={value}\n value={value}\n icon={icon}\n data-testid={`grid.toolbar.${alignKey}.${value}`}\n >\n {t('toolbar action label', {\n key: t(`range key ${alignKey} label`),\n value: t(`range value ${value} label`),\n })}\n </ToolbarItem>\n ))}\n </NaturalToolbar.ToggleGroup>\n );\n};\n\nconst styleOptions: ButtonProps<StyleValue>[] = [\n { value: 'highlight', icon: 'ph--highlighter--regular' },\n { value: 'softwrap', icon: 'ph--paragraph--regular' },\n];\n\nconst Styles = () => {\n const { cursorFallbackRange, model } = useSheetContext();\n const { onAction } = useToolbarContext('Styles');\n const { t } = useTranslation(SHEET_PLUGIN);\n\n // TODO(thure): Can this O(n) call be memoized?\n const activeValues = cursorFallbackRange\n ? model.sheet.ranges\n ?.filter(\n ({ range, key }) => key === 'style' && inRange(rangeFromIndex(model.sheet, range), cursorFallbackRange.from),\n )\n .reduce((acc, { value }) => {\n acc.add(value);\n return acc;\n }, new Set())\n : undefined;\n\n return (\n <>\n {styleOptions.map(({ value, icon }) => (\n <ToolbarItem\n itemType='toggle'\n key={value}\n pressed={activeValues?.has(value)}\n onPressedChange={(nextPressed: boolean) => {\n onAction?.({ key: 'style', value, unset: !nextPressed });\n }}\n icon={icon}\n >\n {t('toolbar action label', {\n key: t(`range key ${styleKey} label`),\n value: t(`range value ${value} label`),\n })}\n </ToolbarItem>\n ))}\n </>\n );\n};\n\n//\n// Actions\n//\n\nconst Actions = () => {\n const { onAction } = useToolbarContext('Actions');\n const { cursorFallbackRange, cursor, model } = useSheetContext();\n const { t } = useTranslation(SHEET_PLUGIN);\n\n // TODO(thure): Can this O(n) call be memoized?\n const overlapsCommentAnchor = (model.sheet.threads ?? [])\n .filter(nonNullable)\n .filter((thread) => thread.status !== 'resolved')\n .some((thread) => {\n if (!cursorFallbackRange) {\n return false;\n }\n return rangeToIndex(model.sheet, cursorFallbackRange) === thread.anchor;\n });\n\n const tooltipLabelKey = !cursor\n ? 'no cursor label'\n : overlapsCommentAnchor\n ? 'selection overlaps existing comment label'\n : 'comment label';\n\n return (\n <ToolbarItem\n itemType='button'\n value='comment'\n icon='ph--chat-text--regular'\n data-testid='editor.toolbar.comment'\n onClick={() => {\n if (!cursorFallbackRange) {\n return;\n }\n return onAction?.({\n key: 'comment',\n value: rangeToIndex(model.sheet, cursorFallbackRange),\n cellContent: model.getCellText(cursorFallbackRange.from),\n });\n }}\n disabled={!cursorFallbackRange || overlapsCommentAnchor}\n >\n {t(tooltipLabelKey)}\n </ToolbarItem>\n );\n};\n\nexport const Toolbar = {\n Root: ToolbarRoot,\n Separator: ToolbarSeparator,\n Alignment,\n Styles,\n Actions,\n};\n\nexport { useToolbarContext };\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { SheetContainer } from './SheetContainer';\n\nexport default SheetContainer;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "StackItem", "React", "Icon", "FunctionEditor", "model", "cursor", "range", "useSheetContext", "value", "formula", "getCellValue", "isFormula", "graph", "mapFunctionBindingFromId", "mapFormulaIndicesToRefs", "sheet", "String", "div", "className", "rangeToA1Notation", "addressToA1Notation", "Icon", "icon", "classNames", "span", "createContext", "React", "useCallback", "useIntentDispatcher", "Icon", "Toolbar", "NaturalToolbar", "Tooltip", "useTranslation", "useAttention", "nonNullable", "buttonStyles", "tooltipProps", "side", "classNames", "ToolbarSeparator", "React", "div", "role", "className", "ToolbarItem", "itemType", "icon", "children", "props", "Invoker", "NaturalToolbar", "ToggleGroupItem", "Toggle", "Button", "Tooltip", "Root", "Trigger", "asChild", "variant", "Icon", "size", "span", "Portal", "Content", "Arrow", "ToolbarContextProvider", "useToolbarContext", "createContext", "ToolbarRoot", "id", "model", "cursorFallbackRange", "cursor", "useSheetContext", "hasAttention", "useAttention", "dispatch", "useIntentDispatcher", "handleAction", "useCallback", "action", "key", "index", "sheet", "ranges", "findIndex", "range", "inRange", "rangeFromIndex", "from", "nextRangeEntity", "rangeToIndex", "value", "push", "splice", "unset", "data", "completeCellRangeToThreadCursor", "name", "cellContent", "subject", "onAction", "alignmentOptions", "Alignment", "t", "useTranslation", "SHEET_PLUGIN", "findLast", "alignKey", "undefined", "ToggleGroup", "type", "onValueChange", "map", "data-testid", "styleOptions", "Styles", "activeValues", "filter", "reduce", "acc", "add", "Set", "pressed", "has", "onPressedChange", "nextPressed", "styleKey", "Actions", "overlapsCommentAnchor", "threads", "nonNullable", "thread", "status", "some", "anchor", "tooltipLabelKey", "onClick", "getCellText", "disabled", "Toolbar", "Separator", "SheetContainer", "space", "sheet", "role", "ignoreAttention", "graph", "useComputeGraph", "React", "SheetProvider", "StackItem", "Content", "toolbar", "statusbar", "classNames", "Toolbar", "Root", "Styles", "Alignment", "Separator", "Actions", "GridSheet", "FunctionEditor", "SheetContainer"]
|
|
7
|
+
}
|
|
@@ -15,13 +15,15 @@ import {
|
|
|
15
15
|
initialize,
|
|
16
16
|
insertIndices,
|
|
17
17
|
isFormula,
|
|
18
|
+
mapFormulaIndicesToRefs,
|
|
19
|
+
mapFormulaRefsToIndices,
|
|
18
20
|
rangeFromIndex,
|
|
19
21
|
rangeToA1Notation
|
|
20
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-F3HE6D3J.mjs";
|
|
21
23
|
import {
|
|
22
24
|
Range,
|
|
23
25
|
SheetAction
|
|
24
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-JXFPOYNA.mjs";
|
|
25
27
|
import {
|
|
26
28
|
SHEET_PLUGIN
|
|
27
29
|
} from "./chunk-RABELMEQ.mjs";
|
|
@@ -102,7 +104,7 @@ var highlightStyles = HighlightStyle.define([
|
|
|
102
104
|
}
|
|
103
105
|
]);
|
|
104
106
|
var languageFacet = singleValueFacet2();
|
|
105
|
-
var sheetExtension = ({ functions = [] }) => {
|
|
107
|
+
var sheetExtension = ({ debug, functions = [] }) => {
|
|
106
108
|
const { extension, language } = spreadsheet({
|
|
107
109
|
idiom: "en-US",
|
|
108
110
|
decimalSeparator: "."
|
|
@@ -178,8 +180,7 @@ var sheetExtension = ({ functions = [] }) => {
|
|
|
178
180
|
aboveCursor: false,
|
|
179
181
|
defaultKeymap: true,
|
|
180
182
|
activateOnTyping: true,
|
|
181
|
-
|
|
182
|
-
closeOnBlur: false,
|
|
183
|
+
closeOnBlur: !debug,
|
|
183
184
|
icons: false,
|
|
184
185
|
tooltipClass: () => mx("!-left-[1px] !top-[33px] !-m-0 border !border-t-0 [&>ul]:!min-w-[198px]", "[&>ul>li[aria-selected]]:!bg-accentSurface", "border-separator")
|
|
185
186
|
}),
|
|
@@ -366,7 +367,7 @@ var SheetModel = class extends Resource {
|
|
|
366
367
|
id: this.id
|
|
367
368
|
}, {
|
|
368
369
|
F: __dxlog_file,
|
|
369
|
-
L:
|
|
370
|
+
L: 115,
|
|
370
371
|
S: this,
|
|
371
372
|
C: (f, a) => f(...a)
|
|
372
373
|
});
|
|
@@ -393,7 +394,7 @@ var SheetModel = class extends Resource {
|
|
|
393
394
|
reset() {
|
|
394
395
|
invariant2(this._node, void 0, {
|
|
395
396
|
F: __dxlog_file,
|
|
396
|
-
L:
|
|
397
|
+
L: 141,
|
|
397
398
|
S: this,
|
|
398
399
|
A: [
|
|
399
400
|
"this._node",
|
|
@@ -404,7 +405,7 @@ var SheetModel = class extends Resource {
|
|
|
404
405
|
Object.entries(this._sheet.cells).forEach(([key, { value }]) => {
|
|
405
406
|
invariant2(this._node, void 0, {
|
|
406
407
|
F: __dxlog_file,
|
|
407
|
-
L:
|
|
408
|
+
L: 144,
|
|
408
409
|
S: this,
|
|
409
410
|
A: [
|
|
410
411
|
"this._node",
|
|
@@ -413,7 +414,7 @@ var SheetModel = class extends Resource {
|
|
|
413
414
|
});
|
|
414
415
|
const { col, row } = addressFromIndex(this._sheet, key);
|
|
415
416
|
if (isFormula(value)) {
|
|
416
|
-
const binding = this._graph.mapFunctionBindingFromId(this.
|
|
417
|
+
const binding = this._graph.mapFunctionBindingFromId(mapFormulaIndicesToRefs(this._sheet, value));
|
|
417
418
|
if (binding) {
|
|
418
419
|
value = this._graph.mapFormulaToNative(binding);
|
|
419
420
|
} else {
|
|
@@ -523,7 +524,7 @@ var SheetModel = class extends Resource {
|
|
|
523
524
|
clear(range) {
|
|
524
525
|
invariant2(this._node, void 0, {
|
|
525
526
|
F: __dxlog_file,
|
|
526
|
-
L:
|
|
527
|
+
L: 247,
|
|
527
528
|
S: this,
|
|
528
529
|
A: [
|
|
529
530
|
"this._node",
|
|
@@ -541,7 +542,7 @@ var SheetModel = class extends Resource {
|
|
|
541
542
|
cut(range) {
|
|
542
543
|
invariant2(this._node, void 0, {
|
|
543
544
|
F: __dxlog_file,
|
|
544
|
-
L:
|
|
545
|
+
L: 258,
|
|
545
546
|
S: this,
|
|
546
547
|
A: [
|
|
547
548
|
"this._node",
|
|
@@ -557,7 +558,7 @@ var SheetModel = class extends Resource {
|
|
|
557
558
|
copy(range) {
|
|
558
559
|
invariant2(this._node, void 0, {
|
|
559
560
|
F: __dxlog_file,
|
|
560
|
-
L:
|
|
561
|
+
L: 267,
|
|
561
562
|
S: this,
|
|
562
563
|
A: [
|
|
563
564
|
"this._node",
|
|
@@ -569,7 +570,7 @@ var SheetModel = class extends Resource {
|
|
|
569
570
|
paste(cell) {
|
|
570
571
|
invariant2(this._node, void 0, {
|
|
571
572
|
F: __dxlog_file,
|
|
572
|
-
L:
|
|
573
|
+
L: 272,
|
|
573
574
|
S: this,
|
|
574
575
|
A: [
|
|
575
576
|
"this._node",
|
|
@@ -596,7 +597,7 @@ var SheetModel = class extends Resource {
|
|
|
596
597
|
undo() {
|
|
597
598
|
invariant2(this._node, void 0, {
|
|
598
599
|
F: __dxlog_file,
|
|
599
|
-
L:
|
|
600
|
+
L: 287,
|
|
600
601
|
S: this,
|
|
601
602
|
A: [
|
|
602
603
|
"this._node",
|
|
@@ -610,7 +611,7 @@ var SheetModel = class extends Resource {
|
|
|
610
611
|
redo() {
|
|
611
612
|
invariant2(this._node, void 0, {
|
|
612
613
|
F: __dxlog_file,
|
|
613
|
-
L:
|
|
614
|
+
L: 295,
|
|
614
615
|
S: this,
|
|
615
616
|
A: [
|
|
616
617
|
"this._node",
|
|
@@ -637,7 +638,7 @@ var SheetModel = class extends Resource {
|
|
|
637
638
|
return void 0;
|
|
638
639
|
}
|
|
639
640
|
if (isFormula(value)) {
|
|
640
|
-
return this._graph.mapFunctionBindingFromId(this.
|
|
641
|
+
return this._graph.mapFunctionBindingFromId(mapFormulaIndicesToRefs(this._sheet, value));
|
|
641
642
|
} else {
|
|
642
643
|
return String(value);
|
|
643
644
|
}
|
|
@@ -654,7 +655,7 @@ var SheetModel = class extends Resource {
|
|
|
654
655
|
getValue(cell) {
|
|
655
656
|
invariant2(this._node, void 0, {
|
|
656
657
|
F: __dxlog_file,
|
|
657
|
-
L:
|
|
658
|
+
L: 338,
|
|
658
659
|
S: this,
|
|
659
660
|
A: [
|
|
660
661
|
"this._node",
|
|
@@ -669,7 +670,7 @@ var SheetModel = class extends Resource {
|
|
|
669
670
|
error: value
|
|
670
671
|
}, {
|
|
671
672
|
F: __dxlog_file,
|
|
672
|
-
L:
|
|
673
|
+
L: 343,
|
|
673
674
|
S: this,
|
|
674
675
|
C: (f, a) => f(...a)
|
|
675
676
|
});
|
|
@@ -683,7 +684,7 @@ var SheetModel = class extends Resource {
|
|
|
683
684
|
getValueDescription(cell) {
|
|
684
685
|
invariant2(this._node, void 0, {
|
|
685
686
|
F: __dxlog_file,
|
|
686
|
-
L:
|
|
687
|
+
L: 354,
|
|
687
688
|
S: this,
|
|
688
689
|
A: [
|
|
689
690
|
"this._node",
|
|
@@ -700,7 +701,7 @@ var SheetModel = class extends Resource {
|
|
|
700
701
|
setValue(cell, value) {
|
|
701
702
|
invariant2(this._node, void 0, {
|
|
702
703
|
F: __dxlog_file,
|
|
703
|
-
L:
|
|
704
|
+
L: 364,
|
|
704
705
|
S: this,
|
|
705
706
|
A: [
|
|
706
707
|
"this._node",
|
|
@@ -736,7 +737,7 @@ var SheetModel = class extends Resource {
|
|
|
736
737
|
delete this._sheet.cells[idx];
|
|
737
738
|
} else {
|
|
738
739
|
if (isFormula(value)) {
|
|
739
|
-
value = this._graph.mapFunctionBindingToId(this.
|
|
740
|
+
value = this._graph.mapFunctionBindingToId(mapFormulaRefsToIndices(this._sheet, value));
|
|
740
741
|
}
|
|
741
742
|
this._sheet.cells[idx] = {
|
|
742
743
|
value
|
|
@@ -788,33 +789,13 @@ var SheetModel = class extends Resource {
|
|
|
788
789
|
_moveIndices(indices, i, j, n) {
|
|
789
790
|
throw new Error("Not implemented");
|
|
790
791
|
}
|
|
791
|
-
//
|
|
792
|
-
// Indices.
|
|
793
|
-
//
|
|
794
|
-
/**
|
|
795
|
-
* Map from A1 notation to indices.
|
|
796
|
-
*/
|
|
797
|
-
mapFormulaRefsToIndices(formula) {
|
|
798
|
-
invariant2(isFormula(formula), void 0, {
|
|
799
|
-
F: __dxlog_file,
|
|
800
|
-
L: 451,
|
|
801
|
-
S: this,
|
|
802
|
-
A: [
|
|
803
|
-
"isFormula(formula)",
|
|
804
|
-
""
|
|
805
|
-
]
|
|
806
|
-
});
|
|
807
|
-
return formula.replace(/([a-zA-Z]+)([0-9]+)/g, (match) => {
|
|
808
|
-
return addressToIndex(this._sheet, addressFromA1Notation(match));
|
|
809
|
-
});
|
|
810
|
-
}
|
|
811
792
|
/**
|
|
812
793
|
* Map from indices to A1 notation.
|
|
813
794
|
*/
|
|
814
795
|
mapFormulaIndicesToRefs(formula) {
|
|
815
796
|
invariant2(isFormula(formula), void 0, {
|
|
816
797
|
F: __dxlog_file,
|
|
817
|
-
L:
|
|
798
|
+
L: 449,
|
|
818
799
|
S: this,
|
|
819
800
|
A: [
|
|
820
801
|
"isFormula(formula)",
|
|
@@ -840,7 +821,7 @@ var SheetModel = class extends Resource {
|
|
|
840
821
|
toDateTime(num) {
|
|
841
822
|
invariant2(this._node, void 0, {
|
|
842
823
|
F: __dxlog_file,
|
|
843
|
-
L:
|
|
824
|
+
L: 470,
|
|
844
825
|
S: this,
|
|
845
826
|
A: [
|
|
846
827
|
"this._node",
|
|
@@ -852,7 +833,7 @@ var SheetModel = class extends Resource {
|
|
|
852
833
|
toDate(num) {
|
|
853
834
|
invariant2(this._node, void 0, {
|
|
854
835
|
F: __dxlog_file,
|
|
855
|
-
L:
|
|
836
|
+
L: 475,
|
|
856
837
|
S: this,
|
|
857
838
|
A: [
|
|
858
839
|
"this._node",
|
|
@@ -864,7 +845,7 @@ var SheetModel = class extends Resource {
|
|
|
864
845
|
toTime(num) {
|
|
865
846
|
invariant2(this._node, void 0, {
|
|
866
847
|
F: __dxlog_file,
|
|
867
|
-
L:
|
|
848
|
+
L: 480,
|
|
868
849
|
S: this,
|
|
869
850
|
A: [
|
|
870
851
|
"this._node",
|
|
@@ -976,11 +957,11 @@ var SheetProvider = ({ children, graph, sheet, readonly, ignoreAttention, onInfo
|
|
|
976
957
|
};
|
|
977
958
|
|
|
978
959
|
// packages/plugins/plugin-sheet/src/components/GridSheet/GridSheet.tsx
|
|
979
|
-
import
|
|
960
|
+
import React5, { useCallback as useCallback4, useMemo as useMemo2, useRef, useState as useState4 } from "react";
|
|
980
961
|
import { useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework";
|
|
981
|
-
import { DropdownMenu, Icon, useTranslation as
|
|
962
|
+
import { DropdownMenu, Icon, useTranslation as useTranslation3 } from "@dxos/react-ui";
|
|
982
963
|
import { useAttention } from "@dxos/react-ui-attention";
|
|
983
|
-
import { closestCell, defaultSizeRow, editorKeys, Grid as Grid2, GridCellEditor } from "@dxos/react-ui-grid";
|
|
964
|
+
import { closestCell, defaultSizeRow, editorKeys, Grid as Grid2, GridCellEditor, parseCellIndex } from "@dxos/react-ui-grid";
|
|
984
965
|
|
|
985
966
|
// packages/plugins/plugin-sheet/src/components/GridSheet/util.ts
|
|
986
967
|
import { useEffect as useEffect3, useState as useState3 } from "react";
|
|
@@ -1037,8 +1018,28 @@ var RangeList = ({ sheet }) => {
|
|
|
1037
1018
|
})))));
|
|
1038
1019
|
};
|
|
1039
1020
|
|
|
1021
|
+
// packages/plugins/plugin-sheet/src/components/SheetObjectSettings.tsx
|
|
1022
|
+
import React4 from "react";
|
|
1023
|
+
import { SPACE_PLUGIN } from "@dxos/plugin-space/meta";
|
|
1024
|
+
import { Input, useTranslation as useTranslation2 } from "@dxos/react-ui";
|
|
1025
|
+
var SheetObjectSettings = ({ sheet }) => {
|
|
1026
|
+
const { t } = useTranslation2(SPACE_PLUGIN);
|
|
1027
|
+
return /* @__PURE__ */ React4.createElement(React4.Fragment, null, /* @__PURE__ */ React4.createElement("div", {
|
|
1028
|
+
role: "form",
|
|
1029
|
+
className: "flex flex-col w-full p-2 gap-1"
|
|
1030
|
+
}, /* @__PURE__ */ React4.createElement(Input.Root, null, /* @__PURE__ */ React4.createElement(Input.Label, null, t("name label")), /* @__PURE__ */ React4.createElement(Input.TextInput, {
|
|
1031
|
+
placeholder: t("name placeholder"),
|
|
1032
|
+
value: sheet.name ?? "",
|
|
1033
|
+
onChange: (event) => {
|
|
1034
|
+
sheet.name = event.target.value;
|
|
1035
|
+
}
|
|
1036
|
+
}))), /* @__PURE__ */ React4.createElement(RangeList, {
|
|
1037
|
+
sheet
|
|
1038
|
+
}));
|
|
1039
|
+
};
|
|
1040
|
+
|
|
1040
1041
|
// packages/plugins/plugin-sheet/src/components/index.ts
|
|
1041
|
-
var SheetContainer = lazy(() => import("./SheetContainer-
|
|
1042
|
+
var SheetContainer = lazy(() => import("./SheetContainer-KCLT6PEO.mjs"));
|
|
1042
1043
|
|
|
1043
1044
|
// packages/plugins/plugin-sheet/src/integrations/thread-ranges.ts
|
|
1044
1045
|
var completeCellRangeToThreadCursor = (range) => {
|
|
@@ -1076,6 +1077,9 @@ var useUpdateFocusedCellOnThreadSelection = (grid) => {
|
|
|
1076
1077
|
...range.to,
|
|
1077
1078
|
plane: "grid"
|
|
1078
1079
|
}, true);
|
|
1080
|
+
return {
|
|
1081
|
+
data: true
|
|
1082
|
+
};
|
|
1079
1083
|
}
|
|
1080
1084
|
}
|
|
1081
1085
|
}, [
|
|
@@ -1134,13 +1138,6 @@ var useSelectThreadOnCellFocus = () => {
|
|
|
1134
1138
|
};
|
|
1135
1139
|
|
|
1136
1140
|
// packages/plugins/plugin-sheet/src/components/GridSheet/util.ts
|
|
1137
|
-
var dxGridCellIndexToSheetCellAddress = (index) => {
|
|
1138
|
-
const [colStr, rowStr] = index.split(",");
|
|
1139
|
-
return {
|
|
1140
|
-
col: parseInt(colStr),
|
|
1141
|
-
row: parseInt(rowStr)
|
|
1142
|
-
};
|
|
1143
|
-
};
|
|
1144
1141
|
var createDxGridColumns = (model) => {
|
|
1145
1142
|
return model.sheet.columns.reduce((acc, columnId, numericIndex) => {
|
|
1146
1143
|
if (model.sheet.columnMeta[columnId] && model.sheet.columnMeta[columnId].size) {
|
|
@@ -1347,7 +1344,7 @@ var sheetColDefault = {
|
|
|
1347
1344
|
}
|
|
1348
1345
|
};
|
|
1349
1346
|
var GridSheet = () => {
|
|
1350
|
-
const { t } =
|
|
1347
|
+
const { t } = useTranslation3(SHEET_PLUGIN);
|
|
1351
1348
|
const { id, model, editing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs, ignoreAttention } = useSheetContext();
|
|
1352
1349
|
const [dxGrid, setDxGrid] = useState4(null);
|
|
1353
1350
|
const [extraplanarFocus, setExtraplanarFocus] = useState4(null);
|
|
@@ -1399,7 +1396,7 @@ var GridSheet = () => {
|
|
|
1399
1396
|
]);
|
|
1400
1397
|
const handleBlur = useCallback4((value) => {
|
|
1401
1398
|
if (value !== void 0) {
|
|
1402
|
-
model.setValue(
|
|
1399
|
+
model.setValue(parseCellIndex(editing.index), value);
|
|
1403
1400
|
}
|
|
1404
1401
|
}, [
|
|
1405
1402
|
model,
|
|
@@ -1600,21 +1597,20 @@ var GridSheet = () => {
|
|
|
1600
1597
|
editing
|
|
1601
1598
|
]);
|
|
1602
1599
|
const getCellContent = useCallback4((index) => {
|
|
1603
|
-
|
|
1604
|
-
return model.getCellText(cell);
|
|
1600
|
+
return model.getCellText(parseCellIndex(index));
|
|
1605
1601
|
}, [
|
|
1606
1602
|
model
|
|
1607
1603
|
]);
|
|
1608
1604
|
useUpdateFocusedCellOnThreadSelection(dxGrid);
|
|
1609
1605
|
useSelectThreadOnCellFocus();
|
|
1610
|
-
return /* @__PURE__ */
|
|
1606
|
+
return /* @__PURE__ */ React5.createElement("div", {
|
|
1611
1607
|
role: "none",
|
|
1612
1608
|
className: "relative min-bs-0"
|
|
1613
|
-
}, /* @__PURE__ */
|
|
1609
|
+
}, /* @__PURE__ */ React5.createElement(GridCellEditor, {
|
|
1614
1610
|
getCellContent,
|
|
1615
1611
|
extension,
|
|
1616
1612
|
onBlur: handleBlur
|
|
1617
|
-
}), /* @__PURE__ */
|
|
1613
|
+
}), /* @__PURE__ */ React5.createElement(Grid2.Content, {
|
|
1618
1614
|
initialCells,
|
|
1619
1615
|
limitColumns: DEFAULT_COLUMNS,
|
|
1620
1616
|
limitRows: DEFAULT_ROWS,
|
|
@@ -1634,32 +1630,35 @@ var GridSheet = () => {
|
|
|
1634
1630
|
className: "[--dx-grid-base:var(--surface-bg)] [&_.dx-grid]:border-bs [&_.dx-grid]:absolute [&_.dx-grid]:inset-0 [&_.dx-grid]:border-separator",
|
|
1635
1631
|
activeRefs,
|
|
1636
1632
|
ref: setDxGrid
|
|
1637
|
-
}), /* @__PURE__ */
|
|
1633
|
+
}), /* @__PURE__ */ React5.createElement(DropdownMenu.Root, {
|
|
1638
1634
|
modal: false,
|
|
1639
1635
|
open: !!contextMenuOpen,
|
|
1640
1636
|
onOpenChange: (nextOpen) => setContextMenuOpen(nextOpen ? inertPosition : null)
|
|
1641
|
-
}, /* @__PURE__ */
|
|
1637
|
+
}, /* @__PURE__ */ React5.createElement(DropdownMenu.VirtualTrigger, {
|
|
1642
1638
|
virtualRef: contextMenuAnchorRef
|
|
1643
|
-
}), /* @__PURE__ */
|
|
1639
|
+
}), /* @__PURE__ */ React5.createElement(DropdownMenu.Content, {
|
|
1644
1640
|
side: contextMenuAxis === "col" ? "bottom" : "right",
|
|
1645
1641
|
sideOffset: 4,
|
|
1646
1642
|
collisionPadding: 8
|
|
1647
|
-
}, /* @__PURE__ */
|
|
1648
|
-
onClick: () => handleAxisMenuAction("insert-before")
|
|
1649
|
-
|
|
1643
|
+
}, /* @__PURE__ */ React5.createElement(DropdownMenu.Viewport, null, /* @__PURE__ */ React5.createElement(DropdownMenu.Item, {
|
|
1644
|
+
onClick: () => handleAxisMenuAction("insert-before"),
|
|
1645
|
+
"data-testid": `grid.${contextMenuAxis}.insert-before`
|
|
1646
|
+
}, /* @__PURE__ */ React5.createElement(Icon, {
|
|
1650
1647
|
size: 5,
|
|
1651
1648
|
icon: contextMenuAxis === "col" ? "ph--columns-plus-left--regular" : "ph--rows-plus-top--regular"
|
|
1652
|
-
}), /* @__PURE__ */
|
|
1653
|
-
onClick: () => handleAxisMenuAction("insert-after")
|
|
1654
|
-
|
|
1649
|
+
}), /* @__PURE__ */ React5.createElement("span", null, t(`add ${contextMenuAxis} before label`))), /* @__PURE__ */ React5.createElement(DropdownMenu.Item, {
|
|
1650
|
+
onClick: () => handleAxisMenuAction("insert-after"),
|
|
1651
|
+
"data-testid": `grid.${contextMenuAxis}.insert-after`
|
|
1652
|
+
}, /* @__PURE__ */ React5.createElement(Icon, {
|
|
1655
1653
|
size: 5,
|
|
1656
1654
|
icon: contextMenuAxis === "col" ? "ph--columns-plus-right--regular" : "ph--rows-plus-bottom--regular"
|
|
1657
|
-
}), /* @__PURE__ */
|
|
1658
|
-
onClick: () => handleAxisMenuAction("drop")
|
|
1659
|
-
|
|
1655
|
+
}), /* @__PURE__ */ React5.createElement("span", null, t(`add ${contextMenuAxis} after label`))), /* @__PURE__ */ React5.createElement(DropdownMenu.Item, {
|
|
1656
|
+
onClick: () => handleAxisMenuAction("drop"),
|
|
1657
|
+
"data-testid": `grid.${contextMenuAxis}.drop`
|
|
1658
|
+
}, /* @__PURE__ */ React5.createElement(Icon, {
|
|
1660
1659
|
size: 5,
|
|
1661
1660
|
icon: "ph--backspace--regular"
|
|
1662
|
-
}), /* @__PURE__ */
|
|
1661
|
+
}), /* @__PURE__ */ React5.createElement("span", null, t(`delete ${contextMenuAxis} label`)))), /* @__PURE__ */ React5.createElement(DropdownMenu.Arrow, null))));
|
|
1663
1662
|
};
|
|
1664
1663
|
|
|
1665
1664
|
export {
|
|
@@ -1670,7 +1669,7 @@ export {
|
|
|
1670
1669
|
useSheetContext,
|
|
1671
1670
|
SheetProvider,
|
|
1672
1671
|
GridSheet,
|
|
1673
|
-
|
|
1672
|
+
SheetObjectSettings,
|
|
1674
1673
|
SheetContainer
|
|
1675
1674
|
};
|
|
1676
|
-
//# sourceMappingURL=chunk-
|
|
1675
|
+
//# sourceMappingURL=chunk-E5WQ7U7G.mjs.map
|