@dxos/plugin-sheet 0.6.14-main.8b352a0 → 0.6.14-staging.3e2eaca
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-P3NF5KEI.mjs} +49 -43
- package/dist/lib/browser/SheetContainer-P3NF5KEI.mjs.map +7 -0
- package/dist/lib/browser/{chunk-I2DKJ72A.mjs → chunk-4LKIURJA.mjs} +283 -84
- package/dist/lib/browser/chunk-4LKIURJA.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-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-MPFKXY26.cjs} +67 -62
- package/dist/lib/node/SheetContainer-MPFKXY26.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-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/{chunk-DEPJHN47.cjs → chunk-OO24XJBV.cjs} +318 -120
- package/dist/lib/node/chunk-OO24XJBV.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-22IOAW3B.mjs} +49 -43
- package/dist/lib/node-esm/SheetContainer-22IOAW3B.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-25V7WY4R.mjs → chunk-BW36PM2Y.mjs} +283 -84
- package/dist/lib/node-esm/chunk-BW36PM2Y.mjs.map +7 -0
- 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-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/FunctionEditor/FunctionEditor.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 +1 -0
- package/dist/types/src/components/GridSheet/util.d.ts.map +1 -1
- package/dist/types/src/components/SheetContainer/SheetContainer.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/components/index.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 +37 -36
- package/src/SheetPlugin.tsx +20 -0
- package/src/components/FunctionEditor/FunctionEditor.tsx +1 -5
- package/src/components/GridSheet/GridSheet.tsx +102 -38
- package/src/components/GridSheet/util.ts +19 -9
- package/src/components/SheetContainer/SheetContainer.stories.tsx +2 -0
- package/src/components/SheetContainer/SheetContainer.tsx +9 -8
- package/src/components/Toolbar/Toolbar.tsx +62 -53
- 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/defs/util.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,iBAAiB,EAKvB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG9E,qBAAa,QAAS,SAAQ,KAAK;CAAG;AAEtC,qBAAa,iBAAkB,SAAQ,QAAQ;CAAG;AAElD,qBAAa,cAAe,SAAQ,QAAQ;gBAC9B,CAAC,EAAE,MAAM;CAGtB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,uBAAiB,MAKxC,CAAC;AAEF,eAAO,MAAM,aAAa,WAAY,MAAM,KAAG,MAAM,EAAqD,CAAC;AAE3G,eAAO,MAAM,aAAa,YAAa,MAAM,EAAE,KAAK,MAAM,KAAK,MAAM,OAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/defs/util.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,iBAAiB,EAKvB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG9E,qBAAa,QAAS,SAAQ,KAAK;CAAG;AAEtC,qBAAa,iBAAkB,SAAQ,QAAQ;CAAG;AAElD,qBAAa,cAAe,SAAQ,QAAQ;gBAC9B,CAAC,EAAE,MAAM;CAGtB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,uBAAiB,MAKxC,CAAC;AAEF,eAAO,MAAM,aAAa,WAAY,MAAM,KAAG,MAAM,EAAqD,CAAC;AAE3G,eAAO,MAAM,aAAa,YAAa,MAAM,EAAE,KAAK,MAAM,KAAK,MAAM,OAAO,MAAM,aAQjF,CAAC;AAEF,eAAO,MAAM,UAAU,UACd,SAAS,sBACoC,OAAO,CAAC,SAAS,CAAC,SAQvE,CAAC;AAEF,eAAO,MAAM,WAAW,8BAA8B,kBAAkB,KAAQ,SAsB/E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,UAAW,SAAS,QAAQ,WAAW,KAAG,MAEpE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,UAAW,SAAS,OAAO,MAAM,KAAG,WAMhE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,UAAW,SAAS,SAAS,SAAS,KAAG,MAEjE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,UAAW,SAAS,OAAO,MAAM,KAAG,iBAG9D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,UAAW,SAAS,UAAU,MAAM,UAAU,MAAM,KAAG,MAUxF,CAAC"}
|
package/dist/types/src/meta.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/meta.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,YAAY,0BAA0B,CAAC
|
|
1
|
+
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/meta.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,YAAY,0BAA0B,CAAC;;;;;;;;AAEpD,wBAMuB"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { type SimpleDate, type SimpleDateTime } from 'hyperformula/typings/DateTimeHelper';
|
|
2
2
|
import { Event } from '@dxos/async';
|
|
3
3
|
import { Resource } from '@dxos/context';
|
|
4
|
-
import {
|
|
4
|
+
import { FormatEnum, TypeEnum } from '@dxos/echo-schema';
|
|
5
5
|
import { type ComputeGraph, type ComputeNodeEvent } from '../compute-graph';
|
|
6
6
|
import { type CellAddress, type CellRange } from '../defs';
|
|
7
|
-
import { type CellScalarValue, type CellValue, type SheetType } from '../types';
|
|
7
|
+
import { type CellScalarValue, type CellValue, type SheetType, type RestoreAxis } from '../types';
|
|
8
8
|
export type SheetModelOptions = {
|
|
9
9
|
readonly?: boolean;
|
|
10
10
|
};
|
|
@@ -45,8 +45,12 @@ export declare class SheetModel extends Resource {
|
|
|
45
45
|
* @deprecated
|
|
46
46
|
*/
|
|
47
47
|
recalculate(): void;
|
|
48
|
-
insertRows(i: number, n?: number):
|
|
49
|
-
insertColumns(i: number, n?: number):
|
|
48
|
+
insertRows(i: number, n?: number): string[];
|
|
49
|
+
insertColumns(i: number, n?: number): string[];
|
|
50
|
+
dropRow(rowIndex: string): RestoreAxis;
|
|
51
|
+
dropColumn(colIndex: string): RestoreAxis;
|
|
52
|
+
restoreRow({ index, axisIndex, axisMeta, values }: RestoreAxis): void;
|
|
53
|
+
restoreColumn({ index, axisIndex, axisMeta, values }: RestoreAxis): void;
|
|
50
54
|
/**
|
|
51
55
|
* Clear range of values.
|
|
52
56
|
*/
|
|
@@ -75,7 +79,10 @@ export declare class SheetModel extends Resource {
|
|
|
75
79
|
/**
|
|
76
80
|
* Get value type.
|
|
77
81
|
*/
|
|
78
|
-
|
|
82
|
+
getValueDescription(cell: CellAddress): {
|
|
83
|
+
type: TypeEnum;
|
|
84
|
+
format?: FormatEnum;
|
|
85
|
+
} | undefined;
|
|
79
86
|
/**
|
|
80
87
|
* Sets the value, updating the sheet and engine.
|
|
81
88
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sheet-model.d.ts","sourceRoot":"","sources":["../../../../src/model/sheet-model.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAE3F,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"sheet-model.d.ts","sourceRoot":"","sources":["../../../../src/model/sheet-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,10 +7,13 @@ declare const _default: readonly [{
|
|
|
7
7
|
readonly 'create sheet section label': "Create sheet";
|
|
8
8
|
readonly 'cell placeholder': "Cell value...";
|
|
9
9
|
readonly 'range key alignment label': "Align";
|
|
10
|
-
readonly 'range
|
|
11
|
-
readonly 'range value
|
|
12
|
-
readonly 'range value
|
|
13
|
-
readonly '
|
|
10
|
+
readonly 'range key style label': "Style";
|
|
11
|
+
readonly 'range value start label': "Align left";
|
|
12
|
+
readonly 'range value center label': "Align center";
|
|
13
|
+
readonly 'range value end label': "Align right";
|
|
14
|
+
readonly 'range value softwrap label': "Wrap text";
|
|
15
|
+
readonly 'range value highlight label': "Highlight";
|
|
16
|
+
readonly 'toolbar action label': "{{value}}";
|
|
14
17
|
readonly 'selection overlaps existing comment label': "Selected cell already has a comment";
|
|
15
18
|
readonly 'comment label': "Add comment";
|
|
16
19
|
readonly 'comment ranges not supported label': "Commenting on ranges is not yet supported";
|
|
@@ -23,7 +26,9 @@ declare const _default: readonly [{
|
|
|
23
26
|
readonly 'add row after label': "Add row after";
|
|
24
27
|
readonly 'delete row label': "Delete row";
|
|
25
28
|
readonly 'range list heading': "Ranges";
|
|
26
|
-
readonly 'range title': "{{position}} — {{
|
|
29
|
+
readonly 'range title': "{{position}} — {{value}}";
|
|
30
|
+
readonly 'col dropped label': "Deleted a column";
|
|
31
|
+
readonly 'row dropped label': "Deleted a row";
|
|
27
32
|
};
|
|
28
33
|
};
|
|
29
34
|
}];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../../src/translations.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../../src/translations.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,wBAmCW"}
|
|
@@ -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.3e2eaca",
|
|
4
4
|
"description": "Braneframe sketch plugin",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -69,32 +69,33 @@
|
|
|
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/client": "0.6.14-
|
|
75
|
-
"@dxos/
|
|
76
|
-
"@dxos/
|
|
77
|
-
"@dxos/debug": "0.6.14-
|
|
78
|
-
"@dxos/echo-schema": "0.6.14-
|
|
79
|
-
"@dxos/invariant": "0.6.14-
|
|
80
|
-
"@dxos/keys": "0.6.14-
|
|
81
|
-
"@dxos/log": "0.6.14-
|
|
82
|
-
"@dxos/plugin-attention": "0.6.14-
|
|
83
|
-
"@dxos/plugin-client": "0.6.14-
|
|
84
|
-
"@dxos/plugin-graph": "0.6.14-
|
|
85
|
-
"@dxos/plugin-markdown": "0.6.14-
|
|
86
|
-
"@dxos/plugin-
|
|
87
|
-
"@dxos/plugin-
|
|
88
|
-
"@dxos/
|
|
89
|
-
"@dxos/
|
|
90
|
-
"@dxos/react-hooks": "0.6.14-
|
|
91
|
-
"@dxos/react-ui-attention": "0.6.14-
|
|
92
|
-
"@dxos/react-ui-
|
|
93
|
-
"@dxos/react-ui-
|
|
94
|
-
"@dxos/react-ui-grid": "0.6.14-
|
|
95
|
-
"@dxos/
|
|
96
|
-
"@dxos/
|
|
97
|
-
"@dxos/react-ui-list": "0.6.14-
|
|
72
|
+
"@dxos/app-framework": "0.6.14-staging.3e2eaca",
|
|
73
|
+
"@dxos/async": "0.6.14-staging.3e2eaca",
|
|
74
|
+
"@dxos/client": "0.6.14-staging.3e2eaca",
|
|
75
|
+
"@dxos/context": "0.6.14-staging.3e2eaca",
|
|
76
|
+
"@dxos/crypto": "0.6.14-staging.3e2eaca",
|
|
77
|
+
"@dxos/debug": "0.6.14-staging.3e2eaca",
|
|
78
|
+
"@dxos/echo-schema": "0.6.14-staging.3e2eaca",
|
|
79
|
+
"@dxos/invariant": "0.6.14-staging.3e2eaca",
|
|
80
|
+
"@dxos/keys": "0.6.14-staging.3e2eaca",
|
|
81
|
+
"@dxos/log": "0.6.14-staging.3e2eaca",
|
|
82
|
+
"@dxos/plugin-attention": "0.6.14-staging.3e2eaca",
|
|
83
|
+
"@dxos/plugin-client": "0.6.14-staging.3e2eaca",
|
|
84
|
+
"@dxos/plugin-graph": "0.6.14-staging.3e2eaca",
|
|
85
|
+
"@dxos/plugin-markdown": "0.6.14-staging.3e2eaca",
|
|
86
|
+
"@dxos/plugin-script": "0.6.14-staging.3e2eaca",
|
|
87
|
+
"@dxos/plugin-space": "0.6.14-staging.3e2eaca",
|
|
88
|
+
"@dxos/react-client": "0.6.14-staging.3e2eaca",
|
|
89
|
+
"@dxos/plugin-stack": "0.6.14-staging.3e2eaca",
|
|
90
|
+
"@dxos/react-hooks": "0.6.14-staging.3e2eaca",
|
|
91
|
+
"@dxos/react-ui-attention": "0.6.14-staging.3e2eaca",
|
|
92
|
+
"@dxos/react-ui-data": "0.6.14-staging.3e2eaca",
|
|
93
|
+
"@dxos/react-ui-editor": "0.6.14-staging.3e2eaca",
|
|
94
|
+
"@dxos/react-ui-grid": "0.6.14-staging.3e2eaca",
|
|
95
|
+
"@dxos/react-ui-stack": "0.6.14-staging.3e2eaca",
|
|
96
|
+
"@dxos/schema": "0.6.14-staging.3e2eaca",
|
|
97
|
+
"@dxos/react-ui-list": "0.6.14-staging.3e2eaca",
|
|
98
|
+
"@dxos/util": "0.6.14-staging.3e2eaca"
|
|
98
99
|
},
|
|
99
100
|
"devDependencies": {
|
|
100
101
|
"@lezer/generator": "^1.7.1",
|
|
@@ -106,19 +107,19 @@
|
|
|
106
107
|
"react": "~18.2.0",
|
|
107
108
|
"react-dom": "~18.2.0",
|
|
108
109
|
"vite": "5.4.7",
|
|
109
|
-
"@dxos/echo-generator": "0.6.14-
|
|
110
|
-
"@dxos/
|
|
111
|
-
"@dxos/
|
|
112
|
-
"@dxos/react-ui": "0.6.14-
|
|
113
|
-
"@dxos/react-ui-theme": "0.6.14-
|
|
114
|
-
"@dxos/
|
|
115
|
-
"@dxos/
|
|
110
|
+
"@dxos/echo-generator": "0.6.14-staging.3e2eaca",
|
|
111
|
+
"@dxos/react-ui": "0.6.14-staging.3e2eaca",
|
|
112
|
+
"@dxos/random": "0.6.14-staging.3e2eaca",
|
|
113
|
+
"@dxos/react-ui-syntax-highlighter": "0.6.14-staging.3e2eaca",
|
|
114
|
+
"@dxos/react-ui-theme": "0.6.14-staging.3e2eaca",
|
|
115
|
+
"@dxos/react-ui-types": "0.6.14-staging.3e2eaca",
|
|
116
|
+
"@dxos/storybook-utils": "0.6.14-staging.3e2eaca"
|
|
116
117
|
},
|
|
117
118
|
"peerDependencies": {
|
|
118
119
|
"react": "~18.2.0",
|
|
119
120
|
"react-dom": "~18.2.0",
|
|
120
|
-
"@dxos/react-ui": "0.6.14-
|
|
121
|
-
"@dxos/react-ui-theme": "0.6.14-
|
|
121
|
+
"@dxos/react-ui": "0.6.14-staging.3e2eaca",
|
|
122
|
+
"@dxos/react-ui-theme": "0.6.14-staging.3e2eaca"
|
|
122
123
|
},
|
|
123
124
|
"publishConfig": {
|
|
124
125
|
"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
|
},
|
|
@@ -26,11 +26,7 @@ export const FunctionEditor = () => {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
return (
|
|
29
|
-
<div
|
|
30
|
-
className={mx(
|
|
31
|
-
'flex shrink-0 justify-between items-center px-4 py-1 text-sm border-bs !border-separator attention-surface',
|
|
32
|
-
)}
|
|
33
|
-
>
|
|
29
|
+
<div className={mx('flex shrink-0 justify-between items-center px-4 py-1 text-sm attention-surface')}>
|
|
34
30
|
<div className='flex gap-4 items-center'>
|
|
35
31
|
<div className='flex w-16 items-center font-mono'>
|
|
36
32
|
{(range && rangeToA1Notation(range)) || (cursor && addressToA1Notation(cursor))}
|
|
@@ -13,15 +13,18 @@ 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 {
|
|
19
20
|
closestCell,
|
|
21
|
+
defaultSizeRow,
|
|
20
22
|
editorKeys,
|
|
21
23
|
Grid,
|
|
22
24
|
GridCellEditor,
|
|
23
25
|
type DxGridElement,
|
|
24
|
-
type
|
|
26
|
+
type EditorKeyHandler,
|
|
27
|
+
type EditorBlurHandler,
|
|
25
28
|
type GridContentProps,
|
|
26
29
|
type DxGridPosition,
|
|
27
30
|
} from '@dxos/react-ui-grid';
|
|
@@ -31,6 +34,7 @@ import { DEFAULT_COLUMNS, DEFAULT_ROWS, rangeToA1Notation, type CellRange } from
|
|
|
31
34
|
import { rangeExtension, sheetExtension, type RangeController } from '../../extensions';
|
|
32
35
|
import { useSelectThreadOnCellFocus, useUpdateFocusedCellOnThreadSelection } from '../../integrations';
|
|
33
36
|
import { SHEET_PLUGIN } from '../../meta';
|
|
37
|
+
import { SheetAction } from '../../types';
|
|
34
38
|
import { useSheetContext } from '../SheetContext';
|
|
35
39
|
|
|
36
40
|
const inertPosition: DxGridPosition = { plane: 'grid', col: 0, row: 0 };
|
|
@@ -52,15 +56,20 @@ const frozen = {
|
|
|
52
56
|
frozenRowsStart: 1,
|
|
53
57
|
};
|
|
54
58
|
|
|
55
|
-
const sheetRowDefault = {
|
|
59
|
+
const sheetRowDefault = {
|
|
60
|
+
frozenRowsStart: { size: defaultSizeRow, readonly: true },
|
|
61
|
+
grid: { size: defaultSizeRow, resizeable: true },
|
|
62
|
+
};
|
|
56
63
|
const sheetColDefault = { frozenColsStart: { size: 48, readonly: true }, grid: { size: 180, resizeable: true } };
|
|
57
64
|
|
|
58
65
|
export const GridSheet = () => {
|
|
59
66
|
const { t } = useTranslation(SHEET_PLUGIN);
|
|
60
|
-
const { id, model, editing,
|
|
61
|
-
|
|
62
|
-
//
|
|
67
|
+
const { id, model, editing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs } = useSheetContext();
|
|
68
|
+
// NOTE(thure): using `useState` instead of `useRef` works with refs provided by `@lit/react` and gives us
|
|
69
|
+
// a reliable dependency for `useEffect` whereas `useLayoutEffect` does not guarantee the element will be defined.
|
|
63
70
|
const [dxGrid, setDxGrid] = useState<DxGridElement | null>(null);
|
|
71
|
+
const [extraplanarFocus, setExtraplanarFocus] = useState<DxGridPosition | null>(null);
|
|
72
|
+
const dispatch = useIntentDispatcher();
|
|
64
73
|
const rangeController = useRef<RangeController>();
|
|
65
74
|
const { hasAttention } = useAttention(id);
|
|
66
75
|
|
|
@@ -68,8 +77,15 @@ export const GridSheet = () => {
|
|
|
68
77
|
(event: FocusEvent) => {
|
|
69
78
|
if (!editing) {
|
|
70
79
|
const cell = closestCell(event.target);
|
|
71
|
-
if (cell
|
|
72
|
-
|
|
80
|
+
if (cell) {
|
|
81
|
+
if (cell.plane === 'grid') {
|
|
82
|
+
setCursor({ col: cell.col, row: cell.row });
|
|
83
|
+
setExtraplanarFocus(null);
|
|
84
|
+
} else {
|
|
85
|
+
setExtraplanarFocus(cell);
|
|
86
|
+
}
|
|
87
|
+
} else {
|
|
88
|
+
setExtraplanarFocus(null);
|
|
73
89
|
}
|
|
74
90
|
}
|
|
75
91
|
},
|
|
@@ -77,29 +93,27 @@ export const GridSheet = () => {
|
|
|
77
93
|
);
|
|
78
94
|
|
|
79
95
|
// TODO(burdon): Validate formula before closing: hf.validateFormula();
|
|
80
|
-
const handleClose = useCallback<
|
|
81
|
-
(
|
|
82
|
-
if (
|
|
83
|
-
|
|
96
|
+
const handleClose = useCallback<EditorKeyHandler>(
|
|
97
|
+
(_value, event) => {
|
|
98
|
+
if (event) {
|
|
99
|
+
const { key, shift } = event;
|
|
100
|
+
const axis = ['Enter', 'ArrowUp', 'ArrowDown'].includes(key)
|
|
101
|
+
? 'row'
|
|
102
|
+
: ['Tab', 'ArrowLeft', 'ArrowRight'].includes(key)
|
|
103
|
+
? 'col'
|
|
104
|
+
: undefined;
|
|
105
|
+
const delta = key.startsWith('Arrow') ? (['ArrowUp', 'ArrowLeft'].includes(key) ? -1 : 1) : shift ? -1 : 1;
|
|
106
|
+
dxGrid?.refocus(axis, delta);
|
|
84
107
|
}
|
|
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
108
|
},
|
|
94
109
|
[model, editing, dxGrid],
|
|
95
110
|
);
|
|
96
111
|
|
|
97
|
-
const handleBlur = useCallback(
|
|
98
|
-
(value
|
|
112
|
+
const handleBlur = useCallback<EditorBlurHandler>(
|
|
113
|
+
(value) => {
|
|
99
114
|
if (value !== undefined) {
|
|
100
115
|
model.setValue(dxGridCellIndexToSheetCellAddress(editing!.index), value);
|
|
101
116
|
}
|
|
102
|
-
setEditing(null);
|
|
103
117
|
},
|
|
104
118
|
[model, editing],
|
|
105
119
|
);
|
|
@@ -144,6 +158,34 @@ export const GridSheet = () => {
|
|
|
144
158
|
[hasAttention],
|
|
145
159
|
);
|
|
146
160
|
|
|
161
|
+
const selectEntireAxis = useCallback(
|
|
162
|
+
(pos: DxGridPosition) => {
|
|
163
|
+
switch (pos.plane) {
|
|
164
|
+
case 'frozenRowsStart':
|
|
165
|
+
return dxGrid?.setSelection({
|
|
166
|
+
start: { col: pos.col, row: 0, plane: 'grid' },
|
|
167
|
+
end: { col: pos.col, row: model.sheet.rows.length - 1, plane: 'grid' },
|
|
168
|
+
});
|
|
169
|
+
case 'frozenColsStart':
|
|
170
|
+
return dxGrid?.setSelection({
|
|
171
|
+
start: { row: pos.row, col: 0, plane: 'grid' },
|
|
172
|
+
end: { row: pos.row, col: model.sheet.columns.length - 1, plane: 'grid' },
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
[dxGrid, model.sheet],
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
const handleClick = useCallback(
|
|
180
|
+
(event: MouseEvent) => {
|
|
181
|
+
const cell = closestCell(event.target);
|
|
182
|
+
if (cell) {
|
|
183
|
+
selectEntireAxis(cell);
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
[selectEntireAxis],
|
|
187
|
+
);
|
|
188
|
+
|
|
147
189
|
const handleKeyDown = useCallback(
|
|
148
190
|
(event: KeyboardEvent) => {
|
|
149
191
|
switch (event.key) {
|
|
@@ -151,6 +193,16 @@ export const GridSheet = () => {
|
|
|
151
193
|
case 'Delete':
|
|
152
194
|
event.preventDefault();
|
|
153
195
|
return cursorFallbackRange && model.clear(cursorFallbackRange);
|
|
196
|
+
case 'Enter':
|
|
197
|
+
case 'Space':
|
|
198
|
+
if (dxGrid && extraplanarFocus) {
|
|
199
|
+
switch (extraplanarFocus.plane) {
|
|
200
|
+
case 'frozenRowsStart':
|
|
201
|
+
case 'frozenColsStart':
|
|
202
|
+
event.preventDefault();
|
|
203
|
+
return selectEntireAxis(extraplanarFocus);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
154
206
|
}
|
|
155
207
|
if (event.metaKey || event.ctrlKey) {
|
|
156
208
|
switch (event.key) {
|
|
@@ -176,7 +228,7 @@ export const GridSheet = () => {
|
|
|
176
228
|
}
|
|
177
229
|
}
|
|
178
230
|
},
|
|
179
|
-
[cursorFallbackRange, model, cursor],
|
|
231
|
+
[cursorFallbackRange, model, cursor, extraplanarFocus, selectEntireAxis],
|
|
180
232
|
);
|
|
181
233
|
|
|
182
234
|
const contextMenuAnchorRef = useRef<HTMLButtonElement | null>(null);
|
|
@@ -193,20 +245,31 @@ export const GridSheet = () => {
|
|
|
193
245
|
}, []);
|
|
194
246
|
|
|
195
247
|
const handleAxisMenuAction = useCallback(
|
|
196
|
-
(operation: '
|
|
248
|
+
(operation: 'insert-before' | 'insert-after' | 'drop') => {
|
|
197
249
|
switch (operation) {
|
|
198
|
-
case '
|
|
199
|
-
case '
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
250
|
+
case 'insert-before':
|
|
251
|
+
case 'insert-after':
|
|
252
|
+
return dispatch({
|
|
253
|
+
action: SheetAction.INSERT_AXIS,
|
|
254
|
+
data: {
|
|
255
|
+
model,
|
|
256
|
+
axis: contextMenuAxis,
|
|
257
|
+
index: contextMenuOpen![contextMenuAxis] + (operation === 'insert-before' ? 0 : 1),
|
|
258
|
+
} satisfies SheetAction.InsertAxis,
|
|
259
|
+
});
|
|
204
260
|
break;
|
|
205
|
-
case '
|
|
206
|
-
|
|
261
|
+
case 'drop':
|
|
262
|
+
return dispatch({
|
|
263
|
+
action: SheetAction.DROP_AXIS,
|
|
264
|
+
data: {
|
|
265
|
+
model,
|
|
266
|
+
axis: contextMenuAxis,
|
|
267
|
+
axisIndex: model.sheet[contextMenuAxis === 'row' ? 'rows' : 'columns'][contextMenuOpen![contextMenuAxis]],
|
|
268
|
+
} satisfies SheetAction.DropAxis,
|
|
269
|
+
});
|
|
207
270
|
}
|
|
208
271
|
},
|
|
209
|
-
[contextMenuAxis, contextMenuOpen, model],
|
|
272
|
+
[contextMenuAxis, contextMenuOpen, model, dispatch],
|
|
210
273
|
);
|
|
211
274
|
|
|
212
275
|
const { columns, rows } = useSheetModelDxGridProps(dxGrid, model);
|
|
@@ -257,8 +320,9 @@ export const GridSheet = () => {
|
|
|
257
320
|
onWheelCapture={handleWheel}
|
|
258
321
|
onKeyDown={handleKeyDown}
|
|
259
322
|
onContextMenu={handleContextMenu}
|
|
260
|
-
|
|
261
|
-
|
|
323
|
+
onClick={handleClick}
|
|
324
|
+
overscroll='trap'
|
|
325
|
+
className='[--dx-grid-base:var(--surface-bg)] [&_.dx-grid]:border-bs [&_.dx-grid]:border-separator'
|
|
262
326
|
activeRefs={activeRefs}
|
|
263
327
|
ref={setDxGrid}
|
|
264
328
|
/>
|
|
@@ -270,21 +334,21 @@ export const GridSheet = () => {
|
|
|
270
334
|
<DropdownMenu.VirtualTrigger virtualRef={contextMenuAnchorRef} />
|
|
271
335
|
<DropdownMenu.Content side={contextMenuAxis === 'col' ? 'bottom' : 'right'} sideOffset={4} collisionPadding={8}>
|
|
272
336
|
<DropdownMenu.Viewport>
|
|
273
|
-
<DropdownMenu.Item onClick={() => handleAxisMenuAction('
|
|
337
|
+
<DropdownMenu.Item onClick={() => handleAxisMenuAction('insert-before')}>
|
|
274
338
|
<Icon
|
|
275
339
|
size={5}
|
|
276
340
|
icon={contextMenuAxis === 'col' ? 'ph--columns-plus-left--regular' : 'ph--rows-plus-top--regular'}
|
|
277
341
|
/>
|
|
278
342
|
<span>{t(`add ${contextMenuAxis} before label`)}</span>
|
|
279
343
|
</DropdownMenu.Item>
|
|
280
|
-
<DropdownMenu.Item onClick={() => handleAxisMenuAction('
|
|
344
|
+
<DropdownMenu.Item onClick={() => handleAxisMenuAction('insert-after')}>
|
|
281
345
|
<Icon
|
|
282
346
|
size={5}
|
|
283
347
|
icon={contextMenuAxis === 'col' ? 'ph--columns-plus-right--regular' : 'ph--rows-plus-bottom--regular'}
|
|
284
348
|
/>
|
|
285
349
|
<span>{t(`add ${contextMenuAxis} after label`)}</span>
|
|
286
350
|
</DropdownMenu.Item>
|
|
287
|
-
<DropdownMenu.Item
|
|
351
|
+
<DropdownMenu.Item onClick={() => handleAxisMenuAction('drop')}>
|
|
288
352
|
<Icon size={5} icon='ph--backspace--regular' />
|
|
289
353
|
<span>{t(`delete ${contextMenuAxis} label`)}</span>
|
|
290
354
|
</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 = {};
|
|
@@ -94,11 +96,15 @@ const gridCellGetter = (model: SheetModel) => {
|
|
|
94
96
|
|
|
95
97
|
export const rowLabelCell = (row: number) => ({
|
|
96
98
|
value: rowToA1Notation(row),
|
|
97
|
-
className: 'text-end !pie-1',
|
|
99
|
+
className: 'text-end !pie-1 text-subdued',
|
|
98
100
|
resizeHandle: 'row',
|
|
99
101
|
});
|
|
100
102
|
|
|
101
|
-
export const colLabelCell = (col: number) => ({
|
|
103
|
+
export const colLabelCell = (col: number) => ({
|
|
104
|
+
value: colToA1Notation(col),
|
|
105
|
+
className: 'text-subdued',
|
|
106
|
+
resizeHandle: 'col',
|
|
107
|
+
});
|
|
102
108
|
|
|
103
109
|
const cellGetter = (model: SheetModel) => {
|
|
104
110
|
const getGridCells = gridCellGetter(model);
|
|
@@ -129,7 +135,7 @@ export const useSheetModelDxGridProps = (
|
|
|
129
135
|
model: SheetModel,
|
|
130
136
|
): Pick<GridContentProps, 'columns' | 'rows'> => {
|
|
131
137
|
const [columns, setColumns] = useState<DxGridAxisMeta>(createDxGridColumns(model));
|
|
132
|
-
const [rows, setRows] = useState<DxGridAxisMeta>(
|
|
138
|
+
const [rows, setRows] = useState<DxGridAxisMeta>(createDxGridRows(model));
|
|
133
139
|
|
|
134
140
|
useEffect(() => {
|
|
135
141
|
const cellsAccessor = createDocAccessor(model.sheet, ['cells']);
|
|
@@ -140,7 +146,11 @@ export const useSheetModelDxGridProps = (
|
|
|
140
146
|
dxGrid?.requestUpdate('initialCells');
|
|
141
147
|
};
|
|
142
148
|
cellsAccessor.handle.addListener('change', handleCellsUpdate);
|
|
143
|
-
|
|
149
|
+
const unsubscribe = model.graph.update.on(handleCellsUpdate);
|
|
150
|
+
return () => {
|
|
151
|
+
cellsAccessor.handle.removeListener('change', handleCellsUpdate);
|
|
152
|
+
unsubscribe();
|
|
153
|
+
};
|
|
144
154
|
}, [model, dxGrid]);
|
|
145
155
|
|
|
146
156
|
useEffect(() => {
|
|
@@ -158,7 +168,7 @@ export const useSheetModelDxGridProps = (
|
|
|
158
168
|
columnMetaAccessor.handle.removeListener('change', handleColumnMetaUpdate);
|
|
159
169
|
rowMetaAccessor.handle.removeListener('change', handleRowMetaUpdate);
|
|
160
170
|
};
|
|
161
|
-
}, [model]);
|
|
171
|
+
}, [model, dxGrid]);
|
|
162
172
|
|
|
163
173
|
return { columns, rows };
|
|
164
174
|
};
|