@dxos/plugin-sheet 0.6.14-main.8b352a0 → 0.6.14-staging.8758a12
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-R65IDJHN.mjs → SheetContainer-GPJOTYCI.mjs} +41 -30
- package/dist/lib/browser/SheetContainer-GPJOTYCI.mjs.map +7 -0
- package/dist/lib/browser/{chunk-5KVQ5IPW.mjs → chunk-BVUN7SHF.mjs} +4 -2
- package/dist/lib/browser/chunk-BVUN7SHF.mjs.map +7 -0
- package/dist/lib/browser/{chunk-I2DKJ72A.mjs → chunk-CYOQA6UK.mjs} +277 -79
- package/dist/lib/browser/chunk-CYOQA6UK.mjs.map +7 -0
- package/dist/lib/browser/{chunk-D3QTX46O.mjs → chunk-RABELMEQ.mjs} +3 -2
- package/dist/lib/browser/{chunk-D3QTX46O.mjs.map → chunk-RABELMEQ.mjs.map} +3 -3
- package/dist/lib/browser/{chunk-KCYJSOFB.mjs → chunk-VMSX6Z4X.mjs} +51 -17
- package/dist/lib/browser/chunk-VMSX6Z4X.mjs.map +7 -0
- package/dist/lib/browser/{compute-graph-SJT67236.mjs → compute-graph-GGWUX644.mjs} +4 -4
- package/dist/lib/browser/index.mjs +38 -10
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/meta.mjs +1 -1
- package/dist/lib/browser/types.mjs +2 -2
- package/dist/lib/node/{SheetContainer-6BO4C5X2.cjs → SheetContainer-VSC6XF3M.cjs} +60 -50
- package/dist/lib/node/SheetContainer-VSC6XF3M.cjs.map +7 -0
- package/dist/lib/node/{chunk-QIFIGEKV.cjs → chunk-2ZVZI2KJ.cjs} +6 -5
- package/dist/lib/node/{chunk-QIFIGEKV.cjs.map → chunk-2ZVZI2KJ.cjs.map} +3 -3
- package/dist/lib/node/{chunk-DEPJHN47.cjs → chunk-545PZPK3.cjs} +313 -116
- package/dist/lib/node/chunk-545PZPK3.cjs.map +7 -0
- package/dist/lib/node/{chunk-2XJ5I4UF.cjs → chunk-AWKOWDMI.cjs} +8 -6
- package/dist/lib/node/chunk-AWKOWDMI.cjs.map +7 -0
- package/dist/lib/node/{chunk-JF5XNTF3.cjs → chunk-O7XR4R7Y.cjs} +61 -26
- package/dist/lib/node/chunk-O7XR4R7Y.cjs.map +7 -0
- package/dist/lib/node/{compute-graph-AQBDL7HO.cjs → compute-graph-KGWA2QLE.cjs} +21 -21
- package/dist/lib/node/{compute-graph-AQBDL7HO.cjs.map → compute-graph-KGWA2QLE.cjs.map} +2 -2
- package/dist/lib/node/index.cjs +66 -38
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.cjs +3 -3
- package/dist/lib/node/meta.cjs.map +1 -1
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/types.cjs +7 -7
- package/dist/lib/node/types.cjs.map +1 -1
- package/dist/lib/node-esm/{SheetContainer-MJXC5E3P.mjs → SheetContainer-SJK25GKT.mjs} +41 -30
- package/dist/lib/node-esm/SheetContainer-SJK25GKT.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-VCYJWE3O.mjs → chunk-BM2Q3FFC.mjs} +3 -2
- package/dist/lib/node-esm/{chunk-VCYJWE3O.mjs.map → chunk-BM2Q3FFC.mjs.map} +3 -3
- package/dist/lib/node-esm/{chunk-XBEHKYO7.mjs → chunk-CR4K75EL.mjs} +51 -17
- package/dist/lib/node-esm/chunk-CR4K75EL.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-25V7WY4R.mjs → chunk-EZ6K2W62.mjs} +277 -79
- package/dist/lib/node-esm/chunk-EZ6K2W62.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-5TXLF6PL.mjs → chunk-UIBWRHW7.mjs} +4 -2
- package/dist/lib/node-esm/chunk-UIBWRHW7.mjs.map +7 -0
- package/dist/lib/node-esm/{compute-graph-FRCKXEYK.mjs → compute-graph-2SCZT7N5.mjs} +4 -4
- package/dist/lib/node-esm/index.mjs +38 -10
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/meta.mjs +1 -1
- package/dist/lib/node-esm/types.mjs +2 -2
- 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/util.d.ts.map +1 -1
- package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +5 -2
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/types/src/compute-graph/compute-graph.d.ts +2 -2
- package/dist/types/src/compute-graph/compute-graph.d.ts.map +1 -1
- package/dist/types/src/compute-graph/functions/async-function.d.ts.map +1 -1
- package/dist/types/src/compute-graph/functions/edge-function.d.ts.map +1 -1
- package/dist/types/src/defs/sheet-range-types.d.ts +1 -1
- package/dist/types/src/defs/sheet-range-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/meta.d.ts +1 -0
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/model/sheet-model.d.ts +12 -5
- package/dist/types/src/model/sheet-model.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +10 -5
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +33 -3
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +36 -36
- package/src/SheetPlugin.tsx +20 -0
- package/src/components/GridSheet/GridSheet.tsx +96 -36
- package/src/components/GridSheet/util.ts +13 -7
- package/src/components/SheetContainer/SheetContainer.stories.tsx +2 -0
- package/src/components/Toolbar/Toolbar.tsx +62 -41
- package/src/compute-graph/compute-graph.ts +22 -7
- package/src/compute-graph/functions/async-function.ts +1 -0
- package/src/compute-graph/functions/edge-function.ts +5 -3
- package/src/defs/sheet-range-types.ts +4 -2
- package/src/defs/util.ts +1 -0
- package/src/meta.ts +1 -0
- package/src/model/sheet-model.test.ts +5 -3
- package/src/model/sheet-model.ts +93 -21
- package/src/translations.ts +10 -5
- package/src/types.ts +20 -0
- package/dist/lib/browser/SheetContainer-R65IDJHN.mjs.map +0 -7
- package/dist/lib/browser/chunk-5KVQ5IPW.mjs.map +0 -7
- package/dist/lib/browser/chunk-I2DKJ72A.mjs.map +0 -7
- package/dist/lib/browser/chunk-KCYJSOFB.mjs.map +0 -7
- package/dist/lib/node/SheetContainer-6BO4C5X2.cjs.map +0 -7
- package/dist/lib/node/chunk-2XJ5I4UF.cjs.map +0 -7
- package/dist/lib/node/chunk-DEPJHN47.cjs.map +0 -7
- package/dist/lib/node/chunk-JF5XNTF3.cjs.map +0 -7
- package/dist/lib/node-esm/SheetContainer-MJXC5E3P.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-25V7WY4R.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-5TXLF6PL.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-XBEHKYO7.mjs.map +0 -7
- /package/dist/lib/browser/{compute-graph-SJT67236.mjs.map → compute-graph-GGWUX644.mjs.map} +0 -0
- /package/dist/lib/node-esm/{compute-graph-FRCKXEYK.mjs.map → compute-graph-2SCZT7N5.mjs.map} +0 -0
|
@@ -1,11 +1,41 @@
|
|
|
1
|
-
import type { GraphBuilderProvides, IntentResolverProvides, MetadataRecordsProvides, SurfaceProvides, TranslationsProvides } from '@dxos/app-framework';
|
|
1
|
+
import type { GraphBuilderProvides, IntentResolverProvides, MetadataRecordsProvides, SurfaceProvides, TranslationsProvides, IntentData } from '@dxos/app-framework';
|
|
2
2
|
import { ref, S } from '@dxos/echo-schema';
|
|
3
3
|
import { type SchemaProvides } from '@dxos/plugin-client';
|
|
4
4
|
import { type MarkdownExtensionProvides } from '@dxos/plugin-markdown';
|
|
5
5
|
import { type SpaceInitProvides } from '@dxos/plugin-space';
|
|
6
6
|
import { type StackProvides } from '@dxos/plugin-stack';
|
|
7
|
+
import { type DxGridAxis } from '@dxos/react-ui-grid';
|
|
8
|
+
import { type SheetModel } from './model';
|
|
7
9
|
export declare enum SheetAction {
|
|
8
|
-
CREATE = "dxos.org/plugin/sheet/action/create"
|
|
10
|
+
CREATE = "dxos.org/plugin/sheet/action/create",
|
|
11
|
+
INSERT_AXIS = "dxos.org/plugin/sheet/action/axis-insert",
|
|
12
|
+
DROP_AXIS = "dxos.org/plugin/sheet/action/axis-drop"
|
|
13
|
+
}
|
|
14
|
+
export type RestoreAxis = {
|
|
15
|
+
axis: DxGridAxis;
|
|
16
|
+
axisIndex: string;
|
|
17
|
+
index: number;
|
|
18
|
+
axisMeta?: S.Schema.Type<typeof RowColumnMeta>;
|
|
19
|
+
values: CellScalarValue[];
|
|
20
|
+
};
|
|
21
|
+
export declare namespace SheetAction {
|
|
22
|
+
type Create = IntentData<{
|
|
23
|
+
sheet: SheetType;
|
|
24
|
+
}>;
|
|
25
|
+
type InsertAxis = IntentData<{
|
|
26
|
+
model: SheetModel;
|
|
27
|
+
axis: DxGridAxis;
|
|
28
|
+
index: number;
|
|
29
|
+
count?: number;
|
|
30
|
+
}>;
|
|
31
|
+
type DropAxis = IntentData<{
|
|
32
|
+
model: SheetModel;
|
|
33
|
+
axis: DxGridAxis;
|
|
34
|
+
axisIndex: string;
|
|
35
|
+
}>;
|
|
36
|
+
type DropAxisRestore = IntentData<RestoreAxis & {
|
|
37
|
+
model: SheetModel;
|
|
38
|
+
}>;
|
|
9
39
|
}
|
|
10
40
|
type ThreadProvides<T> = {
|
|
11
41
|
thread: {
|
|
@@ -48,9 +78,9 @@ declare const SheetType_base: import("@dxos/echo-schema").AbstractTypedObject<{
|
|
|
48
78
|
};
|
|
49
79
|
};
|
|
50
80
|
ranges: {
|
|
81
|
+
readonly key: string;
|
|
51
82
|
readonly value: string;
|
|
52
83
|
readonly range: string;
|
|
53
|
-
readonly key: string;
|
|
54
84
|
}[];
|
|
55
85
|
threads?: import("@dxos/echo-schema").Ref<{
|
|
56
86
|
name?: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,EACf,oBAAoB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/plugin-sheet",
|
|
3
|
-
"version": "0.6.14-
|
|
3
|
+
"version": "0.6.14-staging.8758a12",
|
|
4
4
|
"description": "Braneframe sketch plugin",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -69,32 +69,32 @@
|
|
|
69
69
|
"re-resizable": "^6.9.17",
|
|
70
70
|
"react-markdown": "^8.0.5",
|
|
71
71
|
"react-resize-detector": "^11.0.1",
|
|
72
|
-
"@dxos/app-framework": "0.6.14-
|
|
73
|
-
"@dxos/async": "0.6.14-
|
|
74
|
-
"@dxos/
|
|
75
|
-
"@dxos/crypto": "0.6.14-
|
|
76
|
-
"@dxos/
|
|
77
|
-
"@dxos/
|
|
78
|
-
"@dxos/
|
|
79
|
-
"@dxos/
|
|
80
|
-
"@dxos/keys": "0.6.14-
|
|
81
|
-
"@dxos/log": "0.6.14-
|
|
82
|
-
"@dxos/plugin-attention": "0.6.14-
|
|
83
|
-
"@dxos/plugin-
|
|
84
|
-
"@dxos/plugin-
|
|
85
|
-
"@dxos/plugin-
|
|
86
|
-
"@dxos/plugin-space": "0.6.14-
|
|
87
|
-
"@dxos/plugin-
|
|
88
|
-
"@dxos/
|
|
89
|
-
"@dxos/react-
|
|
90
|
-
"@dxos/
|
|
91
|
-
"@dxos/react-
|
|
92
|
-
"@dxos/react-ui-
|
|
93
|
-
"@dxos/react-ui-
|
|
94
|
-
"@dxos/react-ui-grid": "0.6.14-
|
|
95
|
-
"@dxos/schema": "0.6.14-
|
|
96
|
-
"@dxos/util": "0.6.14-
|
|
97
|
-
"@dxos/react-ui-list": "0.6.14-
|
|
72
|
+
"@dxos/app-framework": "0.6.14-staging.8758a12",
|
|
73
|
+
"@dxos/async": "0.6.14-staging.8758a12",
|
|
74
|
+
"@dxos/context": "0.6.14-staging.8758a12",
|
|
75
|
+
"@dxos/crypto": "0.6.14-staging.8758a12",
|
|
76
|
+
"@dxos/debug": "0.6.14-staging.8758a12",
|
|
77
|
+
"@dxos/echo-schema": "0.6.14-staging.8758a12",
|
|
78
|
+
"@dxos/invariant": "0.6.14-staging.8758a12",
|
|
79
|
+
"@dxos/client": "0.6.14-staging.8758a12",
|
|
80
|
+
"@dxos/keys": "0.6.14-staging.8758a12",
|
|
81
|
+
"@dxos/log": "0.6.14-staging.8758a12",
|
|
82
|
+
"@dxos/plugin-attention": "0.6.14-staging.8758a12",
|
|
83
|
+
"@dxos/plugin-graph": "0.6.14-staging.8758a12",
|
|
84
|
+
"@dxos/plugin-script": "0.6.14-staging.8758a12",
|
|
85
|
+
"@dxos/plugin-client": "0.6.14-staging.8758a12",
|
|
86
|
+
"@dxos/plugin-space": "0.6.14-staging.8758a12",
|
|
87
|
+
"@dxos/plugin-markdown": "0.6.14-staging.8758a12",
|
|
88
|
+
"@dxos/react-client": "0.6.14-staging.8758a12",
|
|
89
|
+
"@dxos/react-ui-attention": "0.6.14-staging.8758a12",
|
|
90
|
+
"@dxos/plugin-stack": "0.6.14-staging.8758a12",
|
|
91
|
+
"@dxos/react-hooks": "0.6.14-staging.8758a12",
|
|
92
|
+
"@dxos/react-ui-data": "0.6.14-staging.8758a12",
|
|
93
|
+
"@dxos/react-ui-editor": "0.6.14-staging.8758a12",
|
|
94
|
+
"@dxos/react-ui-grid": "0.6.14-staging.8758a12",
|
|
95
|
+
"@dxos/schema": "0.6.14-staging.8758a12",
|
|
96
|
+
"@dxos/util": "0.6.14-staging.8758a12",
|
|
97
|
+
"@dxos/react-ui-list": "0.6.14-staging.8758a12"
|
|
98
98
|
},
|
|
99
99
|
"devDependencies": {
|
|
100
100
|
"@lezer/generator": "^1.7.1",
|
|
@@ -106,19 +106,19 @@
|
|
|
106
106
|
"react": "~18.2.0",
|
|
107
107
|
"react-dom": "~18.2.0",
|
|
108
108
|
"vite": "5.4.7",
|
|
109
|
-
"@dxos/echo-generator": "0.6.14-
|
|
110
|
-
"@dxos/random": "0.6.14-
|
|
111
|
-
"@dxos/react-ui
|
|
112
|
-
"@dxos/react-ui": "0.6.14-
|
|
113
|
-
"@dxos/react-ui-theme": "0.6.14-
|
|
114
|
-
"@dxos/
|
|
115
|
-
"@dxos/
|
|
109
|
+
"@dxos/echo-generator": "0.6.14-staging.8758a12",
|
|
110
|
+
"@dxos/random": "0.6.14-staging.8758a12",
|
|
111
|
+
"@dxos/react-ui": "0.6.14-staging.8758a12",
|
|
112
|
+
"@dxos/react-ui-syntax-highlighter": "0.6.14-staging.8758a12",
|
|
113
|
+
"@dxos/react-ui-theme": "0.6.14-staging.8758a12",
|
|
114
|
+
"@dxos/react-ui-types": "0.6.14-staging.8758a12",
|
|
115
|
+
"@dxos/storybook-utils": "0.6.14-staging.8758a12"
|
|
116
116
|
},
|
|
117
117
|
"peerDependencies": {
|
|
118
118
|
"react": "~18.2.0",
|
|
119
119
|
"react-dom": "~18.2.0",
|
|
120
|
-
"@dxos/react-ui": "0.6.14-
|
|
121
|
-
"@dxos/react-ui-theme": "0.6.14-
|
|
120
|
+
"@dxos/react-ui": "0.6.14-staging.8758a12",
|
|
121
|
+
"@dxos/react-ui-theme": "0.6.14-staging.8758a12"
|
|
122
122
|
},
|
|
123
123
|
"publishConfig": {
|
|
124
124
|
"access": "public"
|
package/src/SheetPlugin.tsx
CHANGED
|
@@ -175,6 +175,26 @@ export const SheetPlugin = (): PluginDefinition<SheetPluginProvides> => {
|
|
|
175
175
|
case SheetAction.CREATE: {
|
|
176
176
|
return { data: createSheet() };
|
|
177
177
|
}
|
|
178
|
+
case SheetAction.INSERT_AXIS: {
|
|
179
|
+
const { model, axis, index, count } = intent.data as SheetAction.InsertAxis;
|
|
180
|
+
const _indices = model[axis === 'col' ? 'insertColumns' : 'insertRows'](index, count);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
case SheetAction.DROP_AXIS: {
|
|
184
|
+
if (!intent.undo) {
|
|
185
|
+
const { model, axis, axisIndex } = intent.data as SheetAction.DropAxis;
|
|
186
|
+
const undoData = model[axis === 'col' ? 'dropColumn' : 'dropRow'](axisIndex);
|
|
187
|
+
return {
|
|
188
|
+
undoable: {
|
|
189
|
+
message: translations[0]['en-US'][SHEET_PLUGIN][`${axis} dropped label`],
|
|
190
|
+
data: { ...undoData, model },
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
} else {
|
|
194
|
+
const { model, ...undoData } = intent.data as SheetAction.DropAxisRestore;
|
|
195
|
+
model[undoData.axis === 'col' ? 'restoreColumn' : 'restoreRow'](undoData);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
178
198
|
}
|
|
179
199
|
},
|
|
180
200
|
},
|
|
@@ -13,6 +13,7 @@ import React, {
|
|
|
13
13
|
useState,
|
|
14
14
|
} from 'react';
|
|
15
15
|
|
|
16
|
+
import { useIntentDispatcher } from '@dxos/app-framework';
|
|
16
17
|
import { DropdownMenu, Icon, useTranslation } from '@dxos/react-ui';
|
|
17
18
|
import { useAttention } from '@dxos/react-ui-attention';
|
|
18
19
|
import {
|
|
@@ -21,7 +22,8 @@ import {
|
|
|
21
22
|
Grid,
|
|
22
23
|
GridCellEditor,
|
|
23
24
|
type DxGridElement,
|
|
24
|
-
type
|
|
25
|
+
type EditorKeyHandler,
|
|
26
|
+
type EditorBlurHandler,
|
|
25
27
|
type GridContentProps,
|
|
26
28
|
type DxGridPosition,
|
|
27
29
|
} from '@dxos/react-ui-grid';
|
|
@@ -31,6 +33,7 @@ import { DEFAULT_COLUMNS, DEFAULT_ROWS, rangeToA1Notation, type CellRange } from
|
|
|
31
33
|
import { rangeExtension, sheetExtension, type RangeController } from '../../extensions';
|
|
32
34
|
import { useSelectThreadOnCellFocus, useUpdateFocusedCellOnThreadSelection } from '../../integrations';
|
|
33
35
|
import { SHEET_PLUGIN } from '../../meta';
|
|
36
|
+
import { SheetAction } from '../../types';
|
|
34
37
|
import { useSheetContext } from '../SheetContext';
|
|
35
38
|
|
|
36
39
|
const inertPosition: DxGridPosition = { plane: 'grid', col: 0, row: 0 };
|
|
@@ -57,10 +60,12 @@ const sheetColDefault = { frozenColsStart: { size: 48, readonly: true }, grid: {
|
|
|
57
60
|
|
|
58
61
|
export const GridSheet = () => {
|
|
59
62
|
const { t } = useTranslation(SHEET_PLUGIN);
|
|
60
|
-
const { id, model, editing,
|
|
61
|
-
|
|
62
|
-
//
|
|
63
|
+
const { id, model, editing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs } = useSheetContext();
|
|
64
|
+
// NOTE(thure): using `useState` instead of `useRef` works with refs provided by `@lit/react` and gives us
|
|
65
|
+
// a reliable dependency for `useEffect` whereas `useLayoutEffect` does not guarantee the element will be defined.
|
|
63
66
|
const [dxGrid, setDxGrid] = useState<DxGridElement | null>(null);
|
|
67
|
+
const [extraplanarFocus, setExtraplanarFocus] = useState<DxGridPosition | null>(null);
|
|
68
|
+
const dispatch = useIntentDispatcher();
|
|
64
69
|
const rangeController = useRef<RangeController>();
|
|
65
70
|
const { hasAttention } = useAttention(id);
|
|
66
71
|
|
|
@@ -68,8 +73,15 @@ export const GridSheet = () => {
|
|
|
68
73
|
(event: FocusEvent) => {
|
|
69
74
|
if (!editing) {
|
|
70
75
|
const cell = closestCell(event.target);
|
|
71
|
-
if (cell
|
|
72
|
-
|
|
76
|
+
if (cell) {
|
|
77
|
+
if (cell.plane === 'grid') {
|
|
78
|
+
setCursor({ col: cell.col, row: cell.row });
|
|
79
|
+
setExtraplanarFocus(null);
|
|
80
|
+
} else {
|
|
81
|
+
setExtraplanarFocus(cell);
|
|
82
|
+
}
|
|
83
|
+
} else {
|
|
84
|
+
setExtraplanarFocus(null);
|
|
73
85
|
}
|
|
74
86
|
}
|
|
75
87
|
},
|
|
@@ -77,29 +89,27 @@ export const GridSheet = () => {
|
|
|
77
89
|
);
|
|
78
90
|
|
|
79
91
|
// TODO(burdon): Validate formula before closing: hf.validateFormula();
|
|
80
|
-
const handleClose = useCallback<
|
|
81
|
-
(
|
|
82
|
-
if (
|
|
83
|
-
|
|
92
|
+
const handleClose = useCallback<EditorKeyHandler>(
|
|
93
|
+
(_value, event) => {
|
|
94
|
+
if (event) {
|
|
95
|
+
const { key, shift } = event;
|
|
96
|
+
const axis = ['Enter', 'ArrowUp', 'ArrowDown'].includes(key)
|
|
97
|
+
? 'row'
|
|
98
|
+
: ['Tab', 'ArrowLeft', 'ArrowRight'].includes(key)
|
|
99
|
+
? 'col'
|
|
100
|
+
: undefined;
|
|
101
|
+
const delta = key.startsWith('Arrow') ? (['ArrowUp', 'ArrowLeft'].includes(key) ? -1 : 1) : shift ? -1 : 1;
|
|
102
|
+
dxGrid?.refocus(axis, delta);
|
|
84
103
|
}
|
|
85
|
-
setEditing(null);
|
|
86
|
-
const axis = ['Enter', 'ArrowUp', 'ArrowDown'].includes(key)
|
|
87
|
-
? 'row'
|
|
88
|
-
: ['Tab', 'ArrowLeft', 'ArrowRight'].includes(key)
|
|
89
|
-
? 'col'
|
|
90
|
-
: undefined;
|
|
91
|
-
const delta = key.startsWith('Arrow') ? (['ArrowUp', 'ArrowLeft'].includes(key) ? -1 : 1) : shift ? -1 : 1;
|
|
92
|
-
dxGrid?.refocus(axis, delta);
|
|
93
104
|
},
|
|
94
105
|
[model, editing, dxGrid],
|
|
95
106
|
);
|
|
96
107
|
|
|
97
|
-
const handleBlur = useCallback(
|
|
98
|
-
(value
|
|
108
|
+
const handleBlur = useCallback<EditorBlurHandler>(
|
|
109
|
+
(value) => {
|
|
99
110
|
if (value !== undefined) {
|
|
100
111
|
model.setValue(dxGridCellIndexToSheetCellAddress(editing!.index), value);
|
|
101
112
|
}
|
|
102
|
-
setEditing(null);
|
|
103
113
|
},
|
|
104
114
|
[model, editing],
|
|
105
115
|
);
|
|
@@ -144,6 +154,34 @@ export const GridSheet = () => {
|
|
|
144
154
|
[hasAttention],
|
|
145
155
|
);
|
|
146
156
|
|
|
157
|
+
const selectEntireAxis = useCallback(
|
|
158
|
+
(pos: DxGridPosition) => {
|
|
159
|
+
switch (pos.plane) {
|
|
160
|
+
case 'frozenRowsStart':
|
|
161
|
+
return dxGrid?.setSelection({
|
|
162
|
+
start: { col: pos.col, row: 0, plane: 'grid' },
|
|
163
|
+
end: { col: pos.col, row: model.sheet.rows.length - 1, plane: 'grid' },
|
|
164
|
+
});
|
|
165
|
+
case 'frozenColsStart':
|
|
166
|
+
return dxGrid?.setSelection({
|
|
167
|
+
start: { row: pos.row, col: 0, plane: 'grid' },
|
|
168
|
+
end: { row: pos.row, col: model.sheet.columns.length - 1, plane: 'grid' },
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
[dxGrid, model.sheet],
|
|
173
|
+
);
|
|
174
|
+
|
|
175
|
+
const handleClick = useCallback(
|
|
176
|
+
(event: MouseEvent) => {
|
|
177
|
+
const cell = closestCell(event.target);
|
|
178
|
+
if (cell) {
|
|
179
|
+
selectEntireAxis(cell);
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
[selectEntireAxis],
|
|
183
|
+
);
|
|
184
|
+
|
|
147
185
|
const handleKeyDown = useCallback(
|
|
148
186
|
(event: KeyboardEvent) => {
|
|
149
187
|
switch (event.key) {
|
|
@@ -151,6 +189,16 @@ export const GridSheet = () => {
|
|
|
151
189
|
case 'Delete':
|
|
152
190
|
event.preventDefault();
|
|
153
191
|
return cursorFallbackRange && model.clear(cursorFallbackRange);
|
|
192
|
+
case 'Enter':
|
|
193
|
+
case 'Space':
|
|
194
|
+
if (dxGrid && extraplanarFocus) {
|
|
195
|
+
switch (extraplanarFocus.plane) {
|
|
196
|
+
case 'frozenRowsStart':
|
|
197
|
+
case 'frozenColsStart':
|
|
198
|
+
event.preventDefault();
|
|
199
|
+
return selectEntireAxis(extraplanarFocus);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
154
202
|
}
|
|
155
203
|
if (event.metaKey || event.ctrlKey) {
|
|
156
204
|
switch (event.key) {
|
|
@@ -176,7 +224,7 @@ export const GridSheet = () => {
|
|
|
176
224
|
}
|
|
177
225
|
}
|
|
178
226
|
},
|
|
179
|
-
[cursorFallbackRange, model, cursor],
|
|
227
|
+
[cursorFallbackRange, model, cursor, extraplanarFocus, selectEntireAxis],
|
|
180
228
|
);
|
|
181
229
|
|
|
182
230
|
const contextMenuAnchorRef = useRef<HTMLButtonElement | null>(null);
|
|
@@ -193,20 +241,31 @@ export const GridSheet = () => {
|
|
|
193
241
|
}, []);
|
|
194
242
|
|
|
195
243
|
const handleAxisMenuAction = useCallback(
|
|
196
|
-
(operation: '
|
|
244
|
+
(operation: 'insert-before' | 'insert-after' | 'drop') => {
|
|
197
245
|
switch (operation) {
|
|
198
|
-
case '
|
|
199
|
-
case '
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
246
|
+
case 'insert-before':
|
|
247
|
+
case 'insert-after':
|
|
248
|
+
return dispatch({
|
|
249
|
+
action: SheetAction.INSERT_AXIS,
|
|
250
|
+
data: {
|
|
251
|
+
model,
|
|
252
|
+
axis: contextMenuAxis,
|
|
253
|
+
index: contextMenuOpen![contextMenuAxis] + (operation === 'insert-before' ? 0 : 1),
|
|
254
|
+
} satisfies SheetAction.InsertAxis,
|
|
255
|
+
});
|
|
204
256
|
break;
|
|
205
|
-
case '
|
|
206
|
-
|
|
257
|
+
case 'drop':
|
|
258
|
+
return dispatch({
|
|
259
|
+
action: SheetAction.DROP_AXIS,
|
|
260
|
+
data: {
|
|
261
|
+
model,
|
|
262
|
+
axis: contextMenuAxis,
|
|
263
|
+
axisIndex: model.sheet[contextMenuAxis === 'row' ? 'rows' : 'columns'][contextMenuOpen![contextMenuAxis]],
|
|
264
|
+
} satisfies SheetAction.DropAxis,
|
|
265
|
+
});
|
|
207
266
|
}
|
|
208
267
|
},
|
|
209
|
-
[contextMenuAxis, contextMenuOpen, model],
|
|
268
|
+
[contextMenuAxis, contextMenuOpen, model, dispatch],
|
|
210
269
|
);
|
|
211
270
|
|
|
212
271
|
const { columns, rows } = useSheetModelDxGridProps(dxGrid, model);
|
|
@@ -257,7 +316,8 @@ export const GridSheet = () => {
|
|
|
257
316
|
onWheelCapture={handleWheel}
|
|
258
317
|
onKeyDown={handleKeyDown}
|
|
259
318
|
onContextMenu={handleContextMenu}
|
|
260
|
-
|
|
319
|
+
onClick={handleClick}
|
|
320
|
+
overscroll='trap'
|
|
261
321
|
className='[--dx-grid-base:var(--surface-bg)]'
|
|
262
322
|
activeRefs={activeRefs}
|
|
263
323
|
ref={setDxGrid}
|
|
@@ -270,21 +330,21 @@ export const GridSheet = () => {
|
|
|
270
330
|
<DropdownMenu.VirtualTrigger virtualRef={contextMenuAnchorRef} />
|
|
271
331
|
<DropdownMenu.Content side={contextMenuAxis === 'col' ? 'bottom' : 'right'} sideOffset={4} collisionPadding={8}>
|
|
272
332
|
<DropdownMenu.Viewport>
|
|
273
|
-
<DropdownMenu.Item onClick={() => handleAxisMenuAction('
|
|
333
|
+
<DropdownMenu.Item onClick={() => handleAxisMenuAction('insert-before')}>
|
|
274
334
|
<Icon
|
|
275
335
|
size={5}
|
|
276
336
|
icon={contextMenuAxis === 'col' ? 'ph--columns-plus-left--regular' : 'ph--rows-plus-top--regular'}
|
|
277
337
|
/>
|
|
278
338
|
<span>{t(`add ${contextMenuAxis} before label`)}</span>
|
|
279
339
|
</DropdownMenu.Item>
|
|
280
|
-
<DropdownMenu.Item onClick={() => handleAxisMenuAction('
|
|
340
|
+
<DropdownMenu.Item onClick={() => handleAxisMenuAction('insert-after')}>
|
|
281
341
|
<Icon
|
|
282
342
|
size={5}
|
|
283
343
|
icon={contextMenuAxis === 'col' ? 'ph--columns-plus-right--regular' : 'ph--rows-plus-bottom--regular'}
|
|
284
344
|
/>
|
|
285
345
|
<span>{t(`add ${contextMenuAxis} after label`)}</span>
|
|
286
346
|
</DropdownMenu.Item>
|
|
287
|
-
<DropdownMenu.Item
|
|
347
|
+
<DropdownMenu.Item onClick={() => handleAxisMenuAction('drop')}>
|
|
288
348
|
<Icon size={5} icon='ph--backspace--regular' />
|
|
289
349
|
<span>{t(`delete ${contextMenuAxis} label`)}</span>
|
|
290
350
|
</DropdownMenu.Item>
|
|
@@ -67,16 +67,18 @@ const projectCellProps = (model: SheetModel, col: number, row: number): DxGridCe
|
|
|
67
67
|
})
|
|
68
68
|
.map((thread) => fullyQualifiedId(thread!))
|
|
69
69
|
.join(' ');
|
|
70
|
-
|
|
70
|
+
|
|
71
|
+
const description = model.getValueDescription(address);
|
|
72
|
+
const type = description?.type;
|
|
73
|
+
const format = description?.format;
|
|
71
74
|
const classNames = ranges?.map(cellClassNameForRange).reverse();
|
|
72
75
|
|
|
73
76
|
return {
|
|
74
|
-
value: parseValue(type, rawValue),
|
|
75
|
-
className: mx(cellClassesForFieldType(type), threadRefs && commentedClassName, classNames),
|
|
77
|
+
value: parseValue({ type, format, value: rawValue }),
|
|
78
|
+
className: mx(cellClassesForFieldType({ type, format }), threadRefs && commentedClassName, classNames),
|
|
76
79
|
dataRefs: threadRefs,
|
|
77
80
|
};
|
|
78
81
|
};
|
|
79
|
-
|
|
80
82
|
const gridCellGetter = (model: SheetModel) => {
|
|
81
83
|
// TODO(thure): Actually use the cache.
|
|
82
84
|
const cachedGridCells: DxGridPlaneCells = {};
|
|
@@ -129,7 +131,7 @@ export const useSheetModelDxGridProps = (
|
|
|
129
131
|
model: SheetModel,
|
|
130
132
|
): Pick<GridContentProps, 'columns' | 'rows'> => {
|
|
131
133
|
const [columns, setColumns] = useState<DxGridAxisMeta>(createDxGridColumns(model));
|
|
132
|
-
const [rows, setRows] = useState<DxGridAxisMeta>(
|
|
134
|
+
const [rows, setRows] = useState<DxGridAxisMeta>(createDxGridRows(model));
|
|
133
135
|
|
|
134
136
|
useEffect(() => {
|
|
135
137
|
const cellsAccessor = createDocAccessor(model.sheet, ['cells']);
|
|
@@ -140,7 +142,11 @@ export const useSheetModelDxGridProps = (
|
|
|
140
142
|
dxGrid?.requestUpdate('initialCells');
|
|
141
143
|
};
|
|
142
144
|
cellsAccessor.handle.addListener('change', handleCellsUpdate);
|
|
143
|
-
|
|
145
|
+
const unsubscribe = model.graph.update.on(handleCellsUpdate);
|
|
146
|
+
return () => {
|
|
147
|
+
cellsAccessor.handle.removeListener('change', handleCellsUpdate);
|
|
148
|
+
unsubscribe();
|
|
149
|
+
};
|
|
144
150
|
}, [model, dxGrid]);
|
|
145
151
|
|
|
146
152
|
useEffect(() => {
|
|
@@ -158,7 +164,7 @@ export const useSheetModelDxGridProps = (
|
|
|
158
164
|
columnMetaAccessor.handle.removeListener('change', handleColumnMetaUpdate);
|
|
159
165
|
rowMetaAccessor.handle.removeListener('change', handleRowMetaUpdate);
|
|
160
166
|
};
|
|
161
|
-
}, [model]);
|
|
167
|
+
}, [model, dxGrid]);
|
|
162
168
|
|
|
163
169
|
return { columns, rows };
|
|
164
170
|
};
|
|
@@ -11,6 +11,7 @@ import { withTheme, withLayout } from '@dxos/storybook-utils';
|
|
|
11
11
|
|
|
12
12
|
import { SheetContainer } from './SheetContainer';
|
|
13
13
|
import { createTestCells, useTestSheet, withComputeGraphDecorator } from '../../testing';
|
|
14
|
+
import translations from '../../translations';
|
|
14
15
|
import { SheetType } from '../../types';
|
|
15
16
|
import { useComputeGraph } from '../ComputeGraph';
|
|
16
17
|
|
|
@@ -38,6 +39,7 @@ const meta: Meta = {
|
|
|
38
39
|
classNames: 'grid grid-cols-1 grid-rows-[min-content_minmax(0,1fr)_min-content]',
|
|
39
40
|
}),
|
|
40
41
|
],
|
|
42
|
+
parameters: { translations },
|
|
41
43
|
};
|
|
42
44
|
|
|
43
45
|
export default meta;
|