@dxos/plugin-sheet 0.7.5-main.9d2a38b → 0.7.5-main.ff8607b
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-CM4CO3DC.mjs → SheetContainer-IMHGS7Z4.mjs} +5 -5
- package/dist/lib/browser/{chunk-H23JW3DX.mjs → chunk-AT7F2WDW.mjs} +28 -20
- package/dist/lib/browser/chunk-AT7F2WDW.mjs.map +7 -0
- package/dist/lib/browser/chunk-GAFHJBCU.mjs +18 -0
- package/dist/lib/browser/chunk-GAFHJBCU.mjs.map +7 -0
- package/dist/lib/browser/{chunk-PW25VUP6.mjs → chunk-LXHRT3CC.mjs} +2 -2
- package/dist/lib/browser/{chunk-T3IVPMRX.mjs → chunk-OOSRC36N.mjs} +2 -2
- package/dist/lib/browser/{compute-graph-registry-XH6B2SWG.mjs → compute-graph-registry-EGPD4HEX.mjs} +3 -3
- package/dist/lib/browser/index.mjs +13 -19
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/intent-resolver-6S2RMLQF.mjs +56 -0
- package/dist/lib/browser/intent-resolver-6S2RMLQF.mjs.map +7 -0
- package/dist/lib/browser/{markdown-IKG5FNCA.mjs → markdown-CFJIWHZX.mjs} +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-URRC3AFC.mjs → react-surface-PHKJZYFB.mjs} +20 -11
- package/dist/lib/browser/react-surface-PHKJZYFB.mjs.map +7 -0
- package/dist/lib/browser/{thread-YX6KBQNQ.mjs → thread-7ZWW5EA7.mjs} +3 -3
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node/{SheetContainer-TJ3JQLWM.cjs → SheetContainer-NNIZN4AK.cjs} +36 -36
- package/dist/lib/node/{chunk-ZPWW4LPY.cjs → chunk-2KCZUH72.cjs} +38 -30
- package/dist/lib/node/chunk-2KCZUH72.cjs.map +7 -0
- package/dist/lib/node/{chunk-E3RXOEL6.cjs → chunk-4LSYTNS4.cjs} +6 -6
- package/dist/lib/node/{chunk-NLDXUFDG.cjs → chunk-MLU6KRQN.cjs} +9 -6
- package/dist/lib/node/chunk-MLU6KRQN.cjs.map +7 -0
- package/dist/lib/node/{chunk-FU5K66DS.cjs → chunk-ZV2RS3QH.cjs} +6 -6
- package/dist/lib/node/{compute-graph-registry-ORGTIE5M.cjs → compute-graph-registry-GJK5H264.cjs} +7 -7
- package/dist/lib/node/index.cjs +32 -38
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/intent-resolver-I25V7SBT.cjs +69 -0
- package/dist/lib/node/intent-resolver-I25V7SBT.cjs.map +7 -0
- package/dist/lib/node/{markdown-EUUL3Q36.cjs → markdown-YTCSW66K.cjs} +7 -7
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-surface-IQN5JKSS.cjs → react-surface-HLE6CRA6.cjs} +23 -17
- package/dist/lib/node/react-surface-HLE6CRA6.cjs.map +7 -0
- package/dist/lib/node/{thread-VBPS23P2.cjs → thread-DRNYTR6M.cjs} +8 -8
- package/dist/lib/node/types/index.cjs +30 -30
- package/dist/lib/node/types/index.cjs.map +1 -1
- package/dist/lib/node-esm/{SheetContainer-QEEFORIC.mjs → SheetContainer-PGDJKGTZ.mjs} +5 -5
- package/dist/lib/node-esm/{chunk-NSVUOAI6.mjs → chunk-HPAMZ6SP.mjs} +2 -2
- package/dist/lib/node-esm/chunk-RTZXXOS2.mjs +20 -0
- package/dist/lib/node-esm/chunk-RTZXXOS2.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-KCXK5UM6.mjs → chunk-SX3S7UKU.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-OXD6RBFF.mjs → chunk-ZM7XLUGL.mjs} +28 -20
- package/dist/lib/node-esm/chunk-ZM7XLUGL.mjs.map +7 -0
- package/dist/lib/node-esm/{compute-graph-registry-JH2FRHLD.mjs → compute-graph-registry-3F5JCYEN.mjs} +3 -3
- package/dist/lib/node-esm/index.mjs +13 -19
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/intent-resolver-IPRSINII.mjs +57 -0
- package/dist/lib/node-esm/intent-resolver-IPRSINII.mjs.map +7 -0
- package/dist/lib/node-esm/{markdown-D2ZMN7LR.mjs → markdown-CGSK44XJ.mjs} +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-XJIX5G3I.mjs → react-surface-PFRJ7V5N.mjs} +20 -11
- package/dist/lib/node-esm/react-surface-PFRJ7V5N.mjs.map +7 -0
- package/dist/lib/node-esm/{thread-HSJD3SR6.mjs → thread-6T5VXPAF.mjs} +3 -3
- package/dist/lib/node-esm/types/index.mjs +2 -2
- package/dist/types/src/SheetPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +7 -12
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/components/SheetContainer/SheetContainer.stories.d.ts.map +1 -1
- package/dist/types/src/integrations/thread-ranges.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/package.json +45 -45
- package/src/SheetPlugin.tsx +6 -19
- package/src/capabilities/index.ts +0 -1
- package/src/capabilities/intent-resolver.ts +24 -15
- package/src/capabilities/react-surface.tsx +12 -5
- package/src/components/GridSheet/util.ts +1 -1
- package/src/components/SheetContainer/SheetContainer.stories.tsx +5 -2
- package/src/integrations/thread-ranges.ts +21 -10
- package/src/meta.ts +3 -1
- package/dist/lib/browser/chunk-H23JW3DX.mjs.map +0 -7
- package/dist/lib/browser/chunk-K6EUYKWT.mjs +0 -15
- package/dist/lib/browser/chunk-K6EUYKWT.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-Q7DTHAM5.mjs +0 -47
- package/dist/lib/browser/intent-resolver-Q7DTHAM5.mjs.map +0 -7
- package/dist/lib/browser/react-context-JG43577H.mjs +0 -28
- package/dist/lib/browser/react-context-JG43577H.mjs.map +0 -7
- package/dist/lib/browser/react-surface-URRC3AFC.mjs.map +0 -7
- package/dist/lib/node/chunk-NLDXUFDG.cjs.map +0 -7
- package/dist/lib/node/chunk-ZPWW4LPY.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-ZUDJJUFG.cjs +0 -60
- package/dist/lib/node/intent-resolver-ZUDJJUFG.cjs.map +0 -7
- package/dist/lib/node/react-context-OOH5QFE2.cjs +0 -50
- package/dist/lib/node/react-context-OOH5QFE2.cjs.map +0 -7
- package/dist/lib/node/react-surface-IQN5JKSS.cjs.map +0 -7
- package/dist/lib/node-esm/chunk-FMOVRTS4.mjs +0 -17
- package/dist/lib/node-esm/chunk-FMOVRTS4.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-OXD6RBFF.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-IF64RN7B.mjs +0 -48
- package/dist/lib/node-esm/intent-resolver-IF64RN7B.mjs.map +0 -7
- package/dist/lib/node-esm/react-context-CJVSLO74.mjs +0 -29
- package/dist/lib/node-esm/react-context-CJVSLO74.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-XJIX5G3I.mjs.map +0 -7
- package/dist/types/src/capabilities/react-context.d.ts +0 -8
- package/dist/types/src/capabilities/react-context.d.ts.map +0 -1
- package/src/capabilities/react-context.tsx +0 -20
- /package/dist/lib/browser/{SheetContainer-CM4CO3DC.mjs.map → SheetContainer-IMHGS7Z4.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-PW25VUP6.mjs.map → chunk-LXHRT3CC.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-T3IVPMRX.mjs.map → chunk-OOSRC36N.mjs.map} +0 -0
- /package/dist/lib/browser/{compute-graph-registry-XH6B2SWG.mjs.map → compute-graph-registry-EGPD4HEX.mjs.map} +0 -0
- /package/dist/lib/browser/{markdown-IKG5FNCA.mjs.map → markdown-CFJIWHZX.mjs.map} +0 -0
- /package/dist/lib/browser/{thread-YX6KBQNQ.mjs.map → thread-7ZWW5EA7.mjs.map} +0 -0
- /package/dist/lib/node/{SheetContainer-TJ3JQLWM.cjs.map → SheetContainer-NNIZN4AK.cjs.map} +0 -0
- /package/dist/lib/node/{chunk-E3RXOEL6.cjs.map → chunk-4LSYTNS4.cjs.map} +0 -0
- /package/dist/lib/node/{chunk-FU5K66DS.cjs.map → chunk-ZV2RS3QH.cjs.map} +0 -0
- /package/dist/lib/node/{compute-graph-registry-ORGTIE5M.cjs.map → compute-graph-registry-GJK5H264.cjs.map} +0 -0
- /package/dist/lib/node/{markdown-EUUL3Q36.cjs.map → markdown-YTCSW66K.cjs.map} +0 -0
- /package/dist/lib/node/{thread-VBPS23P2.cjs.map → thread-DRNYTR6M.cjs.map} +0 -0
- /package/dist/lib/node-esm/{SheetContainer-QEEFORIC.mjs.map → SheetContainer-PGDJKGTZ.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-NSVUOAI6.mjs.map → chunk-HPAMZ6SP.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-KCXK5UM6.mjs.map → chunk-SX3S7UKU.mjs.map} +0 -0
- /package/dist/lib/node-esm/{compute-graph-registry-JH2FRHLD.mjs.map → compute-graph-registry-3F5JCYEN.mjs.map} +0 -0
- /package/dist/lib/node-esm/{markdown-D2ZMN7LR.mjs.map → markdown-CGSK44XJ.mjs.map} +0 -0
- /package/dist/lib/node-esm/{thread-HSJD3SR6.mjs.map → thread-6T5VXPAF.mjs.map} +0 -0
|
@@ -26,15 +26,15 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
mod
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var
|
|
30
|
-
__export(
|
|
29
|
+
var SheetContainer_NNIZN4AK_exports = {};
|
|
30
|
+
__export(SheetContainer_NNIZN4AK_exports, {
|
|
31
31
|
default: () => SheetContainer_default
|
|
32
32
|
});
|
|
33
|
-
module.exports = __toCommonJS(
|
|
34
|
-
var
|
|
35
|
-
var import_chunk_E3RXOEL6 = require("./chunk-E3RXOEL6.cjs");
|
|
33
|
+
module.exports = __toCommonJS(SheetContainer_NNIZN4AK_exports);
|
|
34
|
+
var import_chunk_2KCZUH72 = require("./chunk-2KCZUH72.cjs");
|
|
36
35
|
var import_chunk_P4KSGZSS = require("./chunk-P4KSGZSS.cjs");
|
|
37
|
-
var
|
|
36
|
+
var import_chunk_4LSYTNS4 = require("./chunk-4LSYTNS4.cjs");
|
|
37
|
+
var import_chunk_MLU6KRQN = require("./chunk-MLU6KRQN.cjs");
|
|
38
38
|
var import_react = __toESM(require("react"));
|
|
39
39
|
var import_echo = require("@dxos/react-client/echo");
|
|
40
40
|
var import_react_ui_stack = require("@dxos/react-ui-stack");
|
|
@@ -59,13 +59,13 @@ var import_types = require("@dxos/plugin-thread/types");
|
|
|
59
59
|
var import_react8 = require("react");
|
|
60
60
|
var import_live_object2 = require("@dxos/live-object");
|
|
61
61
|
var FunctionEditor = () => {
|
|
62
|
-
const { model, cursor, range } = (0,
|
|
62
|
+
const { model, cursor, range } = (0, import_chunk_2KCZUH72.useSheetContext)();
|
|
63
63
|
let value;
|
|
64
64
|
let formula = false;
|
|
65
65
|
if (cursor) {
|
|
66
66
|
value = model.getCellValue(cursor);
|
|
67
67
|
if ((0, import_compute.isFormula)(value)) {
|
|
68
|
-
value = model.graph.mapFunctionBindingFromId((0,
|
|
68
|
+
value = model.graph.mapFunctionBindingFromId((0, import_chunk_4LSYTNS4.mapFormulaIndicesToRefs)(model.sheet, value));
|
|
69
69
|
formula = true;
|
|
70
70
|
} else if (value != null) {
|
|
71
71
|
value = String(value);
|
|
@@ -95,9 +95,9 @@ var aligns = {
|
|
|
95
95
|
end: "ph--text-align-right--regular"
|
|
96
96
|
};
|
|
97
97
|
var useAlignState = (state) => {
|
|
98
|
-
const { cursor, model } = (0,
|
|
98
|
+
const { cursor, model } = (0, import_chunk_2KCZUH72.useSheetContext)();
|
|
99
99
|
(0, import_react4.useEffect)(() => {
|
|
100
|
-
state[
|
|
100
|
+
state[import_chunk_4LSYTNS4.alignKey] = cursor ? model.sheet.ranges?.findLast(({ range, key }) => key === import_chunk_4LSYTNS4.alignKey && (0, import_compute2.inRange)((0, import_chunk_4LSYTNS4.rangeFromIndex)(model.sheet, range), cursor))?.value : void 0;
|
|
101
101
|
}, [
|
|
102
102
|
cursor,
|
|
103
103
|
model.sheet
|
|
@@ -107,29 +107,29 @@ var createAlignGroupAction = (value) => (0, import_react_ui_menu2.createMenuItem
|
|
|
107
107
|
label: [
|
|
108
108
|
"align label",
|
|
109
109
|
{
|
|
110
|
-
ns:
|
|
110
|
+
ns: import_chunk_MLU6KRQN.SHEET_PLUGIN
|
|
111
111
|
}
|
|
112
112
|
],
|
|
113
113
|
variant: "toggleGroup",
|
|
114
114
|
selectCardinality: "single",
|
|
115
|
-
value: `${
|
|
115
|
+
value: `${import_chunk_4LSYTNS4.alignKey}--${value}`
|
|
116
116
|
});
|
|
117
117
|
var createAlignActions = (value) => Object.entries(aligns).map(([alignValue, icon]) => {
|
|
118
|
-
return (0, import_react_ui_menu2.createMenuAction)(`${
|
|
119
|
-
key:
|
|
118
|
+
return (0, import_react_ui_menu2.createMenuAction)(`${import_chunk_4LSYTNS4.alignKey}--${alignValue}`, {
|
|
119
|
+
key: import_chunk_4LSYTNS4.alignKey,
|
|
120
120
|
value: alignValue,
|
|
121
121
|
checked: value === alignValue,
|
|
122
122
|
label: [
|
|
123
123
|
`range value ${alignValue} label`,
|
|
124
124
|
{
|
|
125
|
-
ns:
|
|
125
|
+
ns: import_chunk_MLU6KRQN.SHEET_PLUGIN
|
|
126
126
|
}
|
|
127
127
|
],
|
|
128
128
|
icon,
|
|
129
|
-
testId: `grid.toolbar.${
|
|
129
|
+
testId: `grid.toolbar.${import_chunk_4LSYTNS4.alignKey}.${alignValue}`
|
|
130
130
|
});
|
|
131
131
|
});
|
|
132
|
-
var createAlign = ({ [
|
|
132
|
+
var createAlign = ({ [import_chunk_4LSYTNS4.alignKey]: alignValue }) => {
|
|
133
133
|
const alignGroup = createAlignGroupAction(alignValue);
|
|
134
134
|
const alignActions = createAlignActions(alignValue);
|
|
135
135
|
return {
|
|
@@ -150,12 +150,12 @@ var createAlign = ({ [import_chunk_E3RXOEL6.alignKey]: alignValue }) => {
|
|
|
150
150
|
};
|
|
151
151
|
};
|
|
152
152
|
var useCommentState = (state) => {
|
|
153
|
-
const { cursorFallbackRange, model } = (0,
|
|
153
|
+
const { cursorFallbackRange, model } = (0, import_chunk_2KCZUH72.useSheetContext)();
|
|
154
154
|
const overlapsCommentAnchor = (0, import_react5.useMemo)(() => import_live_object.RefArray.allResolvedTargets(model.sheet.threads ?? []).filter((thread) => thread.status !== "resolved").some((thread) => {
|
|
155
155
|
if (!cursorFallbackRange) {
|
|
156
156
|
return false;
|
|
157
157
|
}
|
|
158
|
-
return (0,
|
|
158
|
+
return (0, import_chunk_4LSYTNS4.rangeToIndex)(model.sheet, cursorFallbackRange) === thread.anchor;
|
|
159
159
|
}), [
|
|
160
160
|
cursorFallbackRange,
|
|
161
161
|
model.sheet
|
|
@@ -168,13 +168,13 @@ var useCommentState = (state) => {
|
|
|
168
168
|
]);
|
|
169
169
|
};
|
|
170
170
|
var createCommentAction = (state) => (0, import_react_ui_menu3.createMenuAction)("comment", {
|
|
171
|
-
key:
|
|
171
|
+
key: import_chunk_4LSYTNS4.commentKey,
|
|
172
172
|
testId: "editor.toolbar.comment",
|
|
173
173
|
icon: "ph--chat-text--regular",
|
|
174
174
|
label: [
|
|
175
175
|
`${state.commentEnabled} label`,
|
|
176
176
|
{
|
|
177
|
-
ns:
|
|
177
|
+
ns: import_chunk_MLU6KRQN.SHEET_PLUGIN
|
|
178
178
|
}
|
|
179
179
|
],
|
|
180
180
|
disabled: state.commentEnabled !== "comment"
|
|
@@ -195,12 +195,12 @@ var styles = {
|
|
|
195
195
|
softwrap: "ph--paragraph--regular"
|
|
196
196
|
};
|
|
197
197
|
var useStyleState = (state) => {
|
|
198
|
-
const { cursorFallbackRange, model } = (0,
|
|
198
|
+
const { cursorFallbackRange, model } = (0, import_chunk_2KCZUH72.useSheetContext)();
|
|
199
199
|
(0, import_react6.useEffect)(() => {
|
|
200
200
|
state.highlight = false;
|
|
201
201
|
state.softwrap = false;
|
|
202
202
|
if (cursorFallbackRange && model.sheet.ranges) {
|
|
203
|
-
model.sheet.ranges.filter(({ range, key }) => key === "style" && (0, import_compute3.inRange)((0,
|
|
203
|
+
model.sheet.ranges.filter(({ range, key }) => key === "style" && (0, import_compute3.inRange)((0, import_chunk_4LSYTNS4.rangeFromIndex)(model.sheet, range), cursorFallbackRange.from)).forEach(({ value }) => {
|
|
204
204
|
state[value] = true;
|
|
205
205
|
});
|
|
206
206
|
}
|
|
@@ -224,7 +224,7 @@ var createStyleActions = (state) => Object.entries(styles).map(([styleValue, ico
|
|
|
224
224
|
label: [
|
|
225
225
|
`range value ${styleValue} label`,
|
|
226
226
|
{
|
|
227
|
-
ns:
|
|
227
|
+
ns: import_chunk_MLU6KRQN.SHEET_PLUGIN
|
|
228
228
|
}
|
|
229
229
|
],
|
|
230
230
|
checked: !!state[styleValue]
|
|
@@ -251,14 +251,14 @@ var createStyle = (state) => {
|
|
|
251
251
|
};
|
|
252
252
|
};
|
|
253
253
|
var useToolbarAction = (state) => {
|
|
254
|
-
const { model, cursorFallbackRange, cursor } = (0,
|
|
254
|
+
const { model, cursorFallbackRange, cursor } = (0, import_chunk_2KCZUH72.useSheetContext)();
|
|
255
255
|
const { dispatchPromise: dispatch } = (0, import_app_framework.useIntentDispatcher)();
|
|
256
256
|
return (0, import_react7.useCallback)((action) => {
|
|
257
257
|
const { key, value } = action.properties;
|
|
258
258
|
if (cursorFallbackRange) {
|
|
259
|
-
const index = model.sheet.ranges?.findIndex((range) => range.key === key && (0, import_compute4.inRange)((0,
|
|
259
|
+
const index = model.sheet.ranges?.findIndex((range) => range.key === key && (0, import_compute4.inRange)((0, import_chunk_4LSYTNS4.rangeFromIndex)(model.sheet, range.range), cursorFallbackRange.from)) ?? -1;
|
|
260
260
|
const nextRangeEntity = {
|
|
261
|
-
range: (0,
|
|
261
|
+
range: (0, import_chunk_4LSYTNS4.rangeToIndex)(model.sheet, cursorFallbackRange),
|
|
262
262
|
key,
|
|
263
263
|
value
|
|
264
264
|
};
|
|
@@ -266,17 +266,17 @@ var useToolbarAction = (state) => {
|
|
|
266
266
|
case "alignment":
|
|
267
267
|
if (index < 0) {
|
|
268
268
|
model.sheet.ranges?.push(nextRangeEntity);
|
|
269
|
-
state[
|
|
269
|
+
state[import_chunk_4LSYTNS4.alignKey] = value;
|
|
270
270
|
} else if (model.sheet.ranges[index].value === value) {
|
|
271
271
|
model.sheet.ranges?.splice(index, 1);
|
|
272
|
-
state[
|
|
272
|
+
state[import_chunk_4LSYTNS4.alignKey] = void 0;
|
|
273
273
|
} else {
|
|
274
274
|
model.sheet.ranges?.splice(index, 1, nextRangeEntity);
|
|
275
|
-
state[
|
|
275
|
+
state[import_chunk_4LSYTNS4.alignKey] = value;
|
|
276
276
|
}
|
|
277
277
|
break;
|
|
278
278
|
case "style":
|
|
279
|
-
if (model.sheet.ranges.filter(({ range, key: rangeKey }) => rangeKey === "style" && (0, import_compute4.inRange)((0,
|
|
279
|
+
if (model.sheet.ranges.filter(({ range, key: rangeKey }) => rangeKey === "style" && (0, import_compute4.inRange)((0, import_chunk_4LSYTNS4.rangeFromIndex)(model.sheet, range), cursorFallbackRange.from)).some(({ value: rangeValue }) => rangeValue === value)) {
|
|
280
280
|
if (index >= 0) {
|
|
281
281
|
model.sheet.ranges?.splice(index, 1);
|
|
282
282
|
}
|
|
@@ -289,7 +289,7 @@ var useToolbarAction = (state) => {
|
|
|
289
289
|
case "comment": {
|
|
290
290
|
const cellContent = model.getCellText(cursorFallbackRange.from);
|
|
291
291
|
void dispatch((0, import_app_framework.createIntent)(import_types.ThreadAction.Create, {
|
|
292
|
-
cursor: (0,
|
|
292
|
+
cursor: (0, import_chunk_2KCZUH72.completeCellRangeToThreadCursor)(cursorFallbackRange),
|
|
293
293
|
name: cellContent,
|
|
294
294
|
subject: model.sheet
|
|
295
295
|
}));
|
|
@@ -345,8 +345,8 @@ var SheetToolbar = ({ attendableId, classNames }) => {
|
|
|
345
345
|
}));
|
|
346
346
|
};
|
|
347
347
|
var SheetContainer = ({ space, sheet, role, ignoreAttention }) => {
|
|
348
|
-
const graph = (0,
|
|
349
|
-
return graph ? /* @__PURE__ */ import_react.default.createElement(
|
|
348
|
+
const graph = (0, import_chunk_2KCZUH72.useComputeGraph)(space);
|
|
349
|
+
return graph ? /* @__PURE__ */ import_react.default.createElement(import_chunk_2KCZUH72.SheetProvider, {
|
|
350
350
|
sheet,
|
|
351
351
|
graph,
|
|
352
352
|
ignoreAttention
|
|
@@ -358,7 +358,7 @@ var SheetContainer = ({ space, sheet, role, ignoreAttention }) => {
|
|
|
358
358
|
}
|
|
359
359
|
}, /* @__PURE__ */ import_react.default.createElement(SheetToolbar, {
|
|
360
360
|
attendableId: (0, import_echo.fullyQualifiedId)(sheet)
|
|
361
|
-
}), /* @__PURE__ */ import_react.default.createElement(
|
|
361
|
+
}), /* @__PURE__ */ import_react.default.createElement(import_chunk_2KCZUH72.GridSheet, null), /* @__PURE__ */ import_react.default.createElement(FunctionEditor, null))) : null;
|
|
362
362
|
};
|
|
363
363
|
var SheetContainer_default = SheetContainer;
|
|
364
|
-
//# sourceMappingURL=SheetContainer-
|
|
364
|
+
//# sourceMappingURL=SheetContainer-NNIZN4AK.cjs.map
|
|
@@ -26,8 +26,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
mod
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var
|
|
30
|
-
__export(
|
|
29
|
+
var chunk_2KCZUH72_exports = {};
|
|
30
|
+
__export(chunk_2KCZUH72_exports, {
|
|
31
31
|
ComputeGraphContextProvider: () => ComputeGraphContextProvider,
|
|
32
32
|
GridSheet: () => GridSheet,
|
|
33
33
|
RangeList: () => RangeList,
|
|
@@ -37,10 +37,10 @@ __export(chunk_ZPWW4LPY_exports, {
|
|
|
37
37
|
useComputeGraph: () => useComputeGraph,
|
|
38
38
|
useSheetContext: () => useSheetContext
|
|
39
39
|
});
|
|
40
|
-
module.exports = __toCommonJS(
|
|
41
|
-
var import_chunk_E3RXOEL6 = require("./chunk-E3RXOEL6.cjs");
|
|
40
|
+
module.exports = __toCommonJS(chunk_2KCZUH72_exports);
|
|
42
41
|
var import_chunk_P4KSGZSS = require("./chunk-P4KSGZSS.cjs");
|
|
43
|
-
var
|
|
42
|
+
var import_chunk_4LSYTNS4 = require("./chunk-4LSYTNS4.cjs");
|
|
43
|
+
var import_chunk_MLU6KRQN = require("./chunk-MLU6KRQN.cjs");
|
|
44
44
|
var import_react = __toESM(require("react"));
|
|
45
45
|
var import_debug = require("@dxos/debug");
|
|
46
46
|
var import_react_hooks = require("@dxos/react-hooks");
|
|
@@ -67,6 +67,7 @@ var import_react6 = require("react");
|
|
|
67
67
|
var import_app_framework2 = require("@dxos/app-framework");
|
|
68
68
|
var import_async = require("@dxos/async");
|
|
69
69
|
var import_compute4 = require("@dxos/compute");
|
|
70
|
+
var import_echo_schema2 = require("@dxos/echo-schema");
|
|
70
71
|
var import_types = require("@dxos/plugin-thread/types");
|
|
71
72
|
var import_echo2 = require("@dxos/react-client/echo");
|
|
72
73
|
var import_react7 = __toESM(require("react"));
|
|
@@ -96,7 +97,7 @@ var useComputeGraph = (space) => {
|
|
|
96
97
|
return graph;
|
|
97
98
|
};
|
|
98
99
|
var RangeList = ({ sheet }) => {
|
|
99
|
-
const { t } = (0, import_react_ui.useTranslation)(
|
|
100
|
+
const { t } = (0, import_react_ui.useTranslation)(import_chunk_MLU6KRQN.SHEET_PLUGIN);
|
|
100
101
|
const handleSelectRange = (range) => {
|
|
101
102
|
};
|
|
102
103
|
const handleDeleteRange = (0, import_react2.useCallback)((range) => {
|
|
@@ -109,7 +110,7 @@ var RangeList = ({ sheet }) => {
|
|
|
109
110
|
className: "p-2 text-sm font-semibold"
|
|
110
111
|
}, t("range list heading")), /* @__PURE__ */ import_react2.default.createElement(import_react_ui_list.List.Root, {
|
|
111
112
|
items: sheet.ranges,
|
|
112
|
-
isItem: import_echo_schema.S.is(
|
|
113
|
+
isItem: import_echo_schema.S.is(import_chunk_4LSYTNS4.Range)
|
|
113
114
|
}, ({ items: ranges }) => ranges.map((range, i) => /* @__PURE__ */ import_react2.default.createElement(import_react_ui_list.List.Item, {
|
|
114
115
|
key: i,
|
|
115
116
|
item: range,
|
|
@@ -120,7 +121,7 @@ var RangeList = ({ sheet }) => {
|
|
|
120
121
|
}, /* @__PURE__ */ import_react2.default.createElement(import_react_ui_list.List.ItemDragHandle, null), /* @__PURE__ */ import_react2.default.createElement(import_react_ui_list.List.ItemTitle, {
|
|
121
122
|
onClick: () => handleSelectRange(range)
|
|
122
123
|
}, t("range title", {
|
|
123
|
-
position: (0, import_compute.rangeToA1Notation)((0,
|
|
124
|
+
position: (0, import_compute.rangeToA1Notation)((0, import_chunk_4LSYTNS4.rangeFromIndex)(sheet, range.range)),
|
|
124
125
|
key: t(`range key ${range.key} label`),
|
|
125
126
|
value: t(`range value ${range.value} label`)
|
|
126
127
|
})), /* @__PURE__ */ import_react2.default.createElement(import_react_ui_list.List.ItemDeleteButton, {
|
|
@@ -150,21 +151,28 @@ var parseThreadAnchorAsCellRange = (cursor) => {
|
|
|
150
151
|
};
|
|
151
152
|
var useUpdateFocusedCellOnThreadSelection = (grid) => {
|
|
152
153
|
const { model, setActiveRefs } = useSheetContext();
|
|
153
|
-
const scrollIntoViewResolver = (0, import_react6.useMemo)(() => (0, import_app_framework2.createResolver)(
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
154
|
+
const scrollIntoViewResolver = (0, import_react6.useMemo)(() => (0, import_app_framework2.createResolver)({
|
|
155
|
+
intent: import_app_framework2.LayoutAction.ScrollIntoView,
|
|
156
|
+
position: "hoist",
|
|
157
|
+
filter: (data) => {
|
|
158
|
+
if (!import_echo_schema2.S.is(import_app_framework2.LayoutAction.ScrollIntoView.fields.input)(data)) {
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
return data.subject === (0, import_echo2.fullyQualifiedId)(model.sheet) && !!data.options?.cursor;
|
|
162
|
+
},
|
|
163
|
+
resolve: ({ options: { cursor, ref } }) => {
|
|
164
|
+
setActiveRefs(ref);
|
|
165
|
+
const range = parseThreadAnchorAsCellRange(cursor);
|
|
166
|
+
range && grid?.setFocus({
|
|
167
|
+
...range.to,
|
|
168
|
+
plane: "grid"
|
|
169
|
+
}, true);
|
|
170
|
+
}
|
|
163
171
|
}), [
|
|
164
172
|
model.sheet,
|
|
165
173
|
setActiveRefs
|
|
166
174
|
]);
|
|
167
|
-
(0, import_app_framework2.useIntentResolver)(
|
|
175
|
+
(0, import_app_framework2.useIntentResolver)(import_chunk_MLU6KRQN.SHEET_PLUGIN, scrollIntoViewResolver);
|
|
168
176
|
};
|
|
169
177
|
var useSelectThreadOnCellFocus = () => {
|
|
170
178
|
const { model, cursor } = useSheetContext();
|
|
@@ -241,7 +249,7 @@ var projectCellProps = (model, col, row) => {
|
|
|
241
249
|
row
|
|
242
250
|
};
|
|
243
251
|
const rawValue = model.getValue(address);
|
|
244
|
-
const ranges = model.sheet.ranges?.filter(({ range }) => (0, import_compute3.inRange)((0,
|
|
252
|
+
const ranges = model.sheet.ranges?.filter(({ range }) => (0, import_compute3.inRange)((0, import_chunk_4LSYTNS4.rangeFromIndex)(model.sheet, range), address));
|
|
245
253
|
const threadRefs = model.sheet.threads?.filter((thread) => {
|
|
246
254
|
const range = thread.target?.anchor && parseThreadAnchorAsCellRange(thread.target.anchor);
|
|
247
255
|
return thread && range ? (0, import_compute3.inRange)(range, address) : false;
|
|
@@ -249,7 +257,7 @@ var projectCellProps = (model, col, row) => {
|
|
|
249
257
|
const description = model.getValueDescription(address);
|
|
250
258
|
const type = description?.type;
|
|
251
259
|
const format = description?.format;
|
|
252
|
-
const classNames = ranges?.map(
|
|
260
|
+
const classNames = ranges?.map(import_chunk_4LSYTNS4.cellClassNameForRange).reverse();
|
|
253
261
|
return {
|
|
254
262
|
value: (0, import_react_ui_form.parseValue)({
|
|
255
263
|
type,
|
|
@@ -282,7 +290,7 @@ var gridCellGetter = (model) => {
|
|
|
282
290
|
};
|
|
283
291
|
var rowLabelCell = (row) => ({
|
|
284
292
|
value: (0, import_react_ui_grid2.rowToA1Notation)(row),
|
|
285
|
-
className: "text-end
|
|
293
|
+
className: "text-end pie-1 text-subdued",
|
|
286
294
|
resizeHandle: "row"
|
|
287
295
|
});
|
|
288
296
|
var colLabelCell = (col) => ({
|
|
@@ -427,7 +435,7 @@ var SheetProviderImpl = ({ model, onInfo, ignoreAttention, children, __gridScope
|
|
|
427
435
|
}, children);
|
|
428
436
|
};
|
|
429
437
|
var SheetProvider = ({ children, graph, sheet, readonly, ignoreAttention, onInfo }) => {
|
|
430
|
-
const model = (0,
|
|
438
|
+
const model = (0, import_chunk_4LSYTNS4.useSheetModel)(graph, sheet, {
|
|
431
439
|
readonly
|
|
432
440
|
});
|
|
433
441
|
return !model ? null : /* @__PURE__ */ import_react7.default.createElement(import_react_ui_grid3.Grid.Root, {
|
|
@@ -483,7 +491,7 @@ var sheetColDefault = {
|
|
|
483
491
|
}
|
|
484
492
|
};
|
|
485
493
|
var GridSheet = () => {
|
|
486
|
-
const { t } = (0, import_react_ui2.useTranslation)(
|
|
494
|
+
const { t } = (0, import_react_ui2.useTranslation)(import_chunk_MLU6KRQN.SHEET_PLUGIN);
|
|
487
495
|
const { id, model, editing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs, ignoreAttention } = useSheetContext();
|
|
488
496
|
const [dxGrid, setDxGrid] = (0, import_react4.useState)(null);
|
|
489
497
|
const [extraplanarFocus, setExtraplanarFocus] = (0, import_react4.useState)(null);
|
|
@@ -686,13 +694,13 @@ var GridSheet = () => {
|
|
|
686
694
|
switch (operation) {
|
|
687
695
|
case "insert-before":
|
|
688
696
|
case "insert-after":
|
|
689
|
-
return dispatch((0, import_app_framework.createIntent)(
|
|
697
|
+
return dispatch((0, import_app_framework.createIntent)(import_chunk_4LSYTNS4.SheetAction.InsertAxis, {
|
|
690
698
|
model,
|
|
691
699
|
axis: contextMenuAxis,
|
|
692
700
|
index: contextMenuOpen[contextMenuAxis] + (operation === "insert-before" ? 0 : 1)
|
|
693
701
|
}));
|
|
694
702
|
case "drop":
|
|
695
|
-
return dispatch((0, import_app_framework.createIntent)(
|
|
703
|
+
return dispatch((0, import_app_framework.createIntent)(import_chunk_4LSYTNS4.SheetAction.DropAxis, {
|
|
696
704
|
model,
|
|
697
705
|
axis: contextMenuAxis,
|
|
698
706
|
axisIndex: model.sheet[contextMenuAxis === "row" ? "rows" : "columns"][contextMenuOpen[contextMenuAxis]]
|
|
@@ -744,8 +752,8 @@ var GridSheet = () => {
|
|
|
744
752
|
onBlur: handleBlur
|
|
745
753
|
}), /* @__PURE__ */ import_react4.default.createElement(import_react_ui_grid.Grid.Content, {
|
|
746
754
|
initialCells,
|
|
747
|
-
limitColumns:
|
|
748
|
-
limitRows:
|
|
755
|
+
limitColumns: import_chunk_4LSYTNS4.DEFAULT_COLS,
|
|
756
|
+
limitRows: import_chunk_4LSYTNS4.DEFAULT_ROWS,
|
|
749
757
|
columns,
|
|
750
758
|
rows,
|
|
751
759
|
onAxisResize: handleAxisResize,
|
|
@@ -792,7 +800,7 @@ var GridSheet = () => {
|
|
|
792
800
|
icon: "ph--backspace--regular"
|
|
793
801
|
}), /* @__PURE__ */ import_react4.default.createElement("span", null, t(`delete ${contextMenuAxis} label`)))), /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.DropdownMenu.Arrow, null))));
|
|
794
802
|
};
|
|
795
|
-
var SheetContainer = (0, import_react3.lazy)(() => import("./SheetContainer-
|
|
803
|
+
var SheetContainer = (0, import_react3.lazy)(() => import("./SheetContainer-NNIZN4AK.cjs"));
|
|
796
804
|
// Annotate the CommonJS export names for ESM import in node:
|
|
797
805
|
0 && (module.exports = {
|
|
798
806
|
ComputeGraphContextProvider,
|
|
@@ -804,4 +812,4 @@ var SheetContainer = (0, import_react3.lazy)(() => import("./SheetContainer-TJ3J
|
|
|
804
812
|
useComputeGraph,
|
|
805
813
|
useSheetContext
|
|
806
814
|
});
|
|
807
|
-
//# sourceMappingURL=chunk-
|
|
815
|
+
//# sourceMappingURL=chunk-2KCZUH72.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/ComputeGraph/ComputeGraphContextProvider.tsx", "../../../src/components/RangeList/RangeList.tsx", "../../../src/components/index.ts", "../../../src/components/GridSheet/GridSheet.tsx", "../../../src/components/GridSheet/util.ts", "../../../src/integrations/thread-ranges.ts", "../../../src/components/SheetContext/SheetContext.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { createContext, type PropsWithChildren, useContext } from 'react';\n\nimport { type ComputeGraph, type ComputeGraphRegistry } from '@dxos/compute';\nimport { raise } from '@dxos/debug';\nimport { type Space } from '@dxos/react-client/echo';\nimport { useAsyncState } from '@dxos/react-hooks';\n\nexport type ComputeGraphContextType = {\n registry: ComputeGraphRegistry;\n};\n\n/**\n * The compute graph context manages a ComputeGraph for each space.\n */\nexport const ComputeGraphContext = createContext<ComputeGraphContextType | undefined>(undefined);\n\nexport const ComputeGraphContextProvider = ({ registry, children }: PropsWithChildren<ComputeGraphContextType>) => {\n return <ComputeGraphContext.Provider value={{ registry }}>{children}</ComputeGraphContext.Provider>;\n};\n\nexport const useComputeGraph = (space?: Space): ComputeGraph | undefined => {\n const { registry } = useContext(ComputeGraphContext) ?? raise(new Error('Missing ComputeGraphContext'));\n const [graph] = useAsyncState(async () => {\n if (space) {\n const graph = registry.getOrCreateGraph(space);\n await graph.open();\n return graph;\n }\n }, [space, registry]);\n\n return graph;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { rangeToA1Notation } from '@dxos/compute';\nimport { S } from '@dxos/echo-schema';\nimport { useTranslation } from '@dxos/react-ui';\nimport { List } from '@dxos/react-ui-list';\nimport { ghostHover } from '@dxos/react-ui-theme';\n\nimport { SHEET_PLUGIN } from '../../meta';\nimport { rangeFromIndex } from '../../types';\nimport { Range, type SheetType } from '../../types';\n\nexport type RangeListProps = {\n sheet: SheetType;\n};\n\nexport const RangeList = ({ sheet }: RangeListProps) => {\n const { t } = useTranslation(SHEET_PLUGIN);\n // TODO(thure): Implement similar to comments, #8121\n const handleSelectRange = (range: Range) => {};\n const handleDeleteRange = useCallback(\n (range: Range) => {\n const index = sheet.ranges.findIndex((sheetRange) => sheetRange === range);\n sheet.ranges.splice(index, 1);\n },\n [sheet],\n );\n return (\n <>\n <h2 className='p-2 text-sm font-semibold'>{t('range list heading')}</h2>\n <List.Root<Range> items={sheet.ranges} isItem={S.is(Range)}>\n {({ items: ranges }) =>\n ranges.map((range, i) => (\n <List.Item key={i} item={range} classNames={['p-2', ghostHover]}>\n <List.ItemDragHandle />\n <List.ItemTitle onClick={() => handleSelectRange(range)}>\n {t('range title', {\n position: rangeToA1Notation(rangeFromIndex(sheet, range.range)),\n key: t(`range key ${range.key} label`),\n value: t(`range value ${range.value} label`),\n })}\n </List.ItemTitle>\n <List.ItemDeleteButton onClick={() => handleDeleteRange(range)} />\n </List.Item>\n ))\n }\n </List.Root>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport * from './ComputeGraph';\nexport * from './GridSheet';\nexport * from './RangeList';\nexport * from './SheetContext';\n\nexport const SheetContainer = lazy(() => import('./SheetContainer'));\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, {\n useCallback,\n useMemo,\n useRef,\n type FocusEvent,\n type KeyboardEvent,\n type WheelEvent,\n type MouseEvent,\n useState,\n} from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { rangeToA1Notation, type CellRange } from '@dxos/compute';\nimport { DropdownMenu, Icon, useTranslation } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport {\n closestCell,\n defaultSizeRow,\n editorKeys,\n Grid,\n GridCellEditor,\n type DxGridElement,\n type DxGridPosition,\n type DxGridCellIndex,\n type EditorKeyHandler,\n type EditorBlurHandler,\n type GridContentProps,\n parseCellIndex,\n} from '@dxos/react-ui-grid';\n\nimport { colLabelCell, rowLabelCell, useSheetModelDxGridProps } from './util';\nimport { rangeExtension, sheetExtension, type RangeController } from '../../extensions';\nimport { useSelectThreadOnCellFocus, useUpdateFocusedCellOnThreadSelection } from '../../integrations';\nimport { SHEET_PLUGIN } from '../../meta';\nimport { DEFAULT_COLS, DEFAULT_ROWS, SheetAction } from '../../types';\nimport { useSheetContext } from '../SheetContext';\n\nconst inertPosition: DxGridPosition = { plane: 'grid', col: 0, row: 0 };\n\nconst initialCells = {\n grid: {},\n frozenColsStart: [...Array(64)].reduce((acc, _, i) => {\n acc[`0,${i}`] = rowLabelCell(i);\n return acc;\n }, {}),\n frozenRowsStart: [...Array(12)].reduce((acc, _, i) => {\n acc[`${i},0`] = colLabelCell(i);\n return acc;\n }, {}),\n};\n\nconst frozen = {\n frozenColsStart: 1,\n frozenRowsStart: 1,\n};\n\nconst sheetRowDefault = {\n frozenRowsStart: { size: defaultSizeRow, readonly: true },\n grid: { size: defaultSizeRow, resizeable: true },\n};\nconst sheetColDefault = { frozenColsStart: { size: 48, readonly: true }, grid: { size: 180, resizeable: true } };\n\nexport const GridSheet = () => {\n const { t } = useTranslation(SHEET_PLUGIN);\n const { id, model, editing, setCursor, setRange, cursor, cursorFallbackRange, activeRefs, ignoreAttention } =\n useSheetContext();\n // NOTE(thure): using `useState` instead of `useRef` works with refs provided by `@lit/react` and gives us\n // a reliable dependency for `useEffect` whereas `useLayoutEffect` does not guarantee the element will be defined.\n const [dxGrid, setDxGrid] = useState<DxGridElement | null>(null);\n const [extraplanarFocus, setExtraplanarFocus] = useState<DxGridPosition | null>(null);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const rangeController = useRef<RangeController>();\n const { hasAttention } = useAttention(id);\n\n const handleFocus = useCallback(\n (event: FocusEvent) => {\n if (!editing) {\n const cell = closestCell(event.target);\n if (cell) {\n if (cell.plane === 'grid') {\n setCursor({ col: cell.col, row: cell.row });\n setExtraplanarFocus(null);\n } else {\n setExtraplanarFocus(cell);\n }\n } else {\n setExtraplanarFocus(null);\n }\n }\n },\n [editing],\n );\n\n // TODO(burdon): Validate formula before closing: hf.validateFormula();\n const handleClose = useCallback<EditorKeyHandler>(\n (_value, event) => {\n if (event) {\n const { key, shift } = event;\n const axis = ['Enter', 'ArrowUp', 'ArrowDown'].includes(key)\n ? 'row'\n : ['Tab', 'ArrowLeft', 'ArrowRight'].includes(key)\n ? 'col'\n : undefined;\n const delta = key.startsWith('Arrow') ? (['ArrowUp', 'ArrowLeft'].includes(key) ? -1 : 1) : shift ? -1 : 1;\n dxGrid?.refocus(axis, delta);\n }\n },\n [model, editing, dxGrid],\n );\n\n const handleBlur = useCallback<EditorBlurHandler>(\n (value) => {\n if (value !== undefined) {\n model.setValue(parseCellIndex(editing!.index), value);\n }\n },\n [model, editing],\n );\n\n const handleAxisResize = useCallback<NonNullable<GridContentProps['onAxisResize']>>(\n ({ axis, size, index: numericIndex }) => {\n if (axis === 'row') {\n const rowId = model.sheet.rows[parseInt(numericIndex)];\n model.sheet.rowMeta[rowId] ??= {};\n model.sheet.rowMeta[rowId].size = size;\n } else {\n const columnId = model.sheet.columns[parseInt(numericIndex)];\n model.sheet.columnMeta[columnId] ??= {};\n model.sheet.columnMeta[columnId].size = size;\n }\n },\n [model],\n );\n\n const handleSelect = useCallback<NonNullable<GridContentProps['onSelect']>>(\n ({ minCol, maxCol, minRow, maxRow }) => {\n const range: CellRange = { from: { col: minCol, row: minRow } };\n if (minCol !== maxCol || minRow !== maxRow) {\n range.to = { col: maxCol, row: maxRow };\n }\n if (editing) {\n // Update range selection in formula.\n rangeController.current?.setRange(rangeToA1Notation(range));\n } else {\n // Setting range while editing causes focus to move to null, avoid doing so.\n setRange(range.to ? range : undefined);\n }\n },\n [editing],\n );\n const handleWheel = useCallback(\n (event: WheelEvent) => {\n if (!ignoreAttention && !hasAttention) {\n event.stopPropagation();\n }\n },\n [hasAttention, ignoreAttention],\n );\n\n const selectEntireAxis = useCallback(\n (pos: DxGridPosition) => {\n switch (pos.plane) {\n case 'frozenRowsStart':\n return dxGrid?.setSelection({\n start: { col: pos.col, row: 0, plane: 'grid' },\n end: { col: pos.col, row: model.sheet.rows.length - 1, plane: 'grid' },\n });\n case 'frozenColsStart':\n return dxGrid?.setSelection({\n start: { row: pos.row, col: 0, plane: 'grid' },\n end: { row: pos.row, col: model.sheet.columns.length - 1, plane: 'grid' },\n });\n }\n },\n [dxGrid, model.sheet],\n );\n\n const handleClick = useCallback(\n (event: MouseEvent) => {\n const cell = closestCell(event.target);\n if (cell) {\n selectEntireAxis(cell);\n }\n },\n [selectEntireAxis],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n switch (event.key) {\n case 'Backspace':\n case 'Delete':\n event.preventDefault();\n return cursorFallbackRange && model.clear(cursorFallbackRange);\n case 'Enter':\n case 'Space':\n if (dxGrid && extraplanarFocus) {\n switch (extraplanarFocus.plane) {\n case 'frozenRowsStart':\n case 'frozenColsStart':\n event.preventDefault();\n return selectEntireAxis(extraplanarFocus);\n }\n }\n }\n if (event.metaKey || event.ctrlKey) {\n switch (event.key) {\n case 'x':\n case 'X':\n event.preventDefault();\n return cursorFallbackRange && model.cut(cursorFallbackRange);\n case 'c':\n case 'C':\n event.preventDefault();\n return cursorFallbackRange && model.copy(cursorFallbackRange);\n case 'v':\n case 'V':\n event.preventDefault();\n return cursor && model.paste(cursor);\n case 'z':\n event.preventDefault();\n return event.shiftKey ? model.redo() : model.undo();\n case 'Z':\n case 'y':\n event.preventDefault();\n return model.redo();\n }\n }\n },\n [cursorFallbackRange, model, cursor, extraplanarFocus, selectEntireAxis],\n );\n\n const contextMenuAnchorRef = useRef<HTMLButtonElement | null>(null);\n const [contextMenuOpen, setContextMenuOpen] = useState<DxGridPosition | null>(null);\n const contextMenuAxis = contextMenuOpen?.plane.startsWith('frozenRows') ? 'col' : 'row';\n\n const handleContextMenu = useCallback((event: MouseEvent) => {\n const cell = closestCell(event.target);\n if (cell && cell.plane.startsWith('frozen')) {\n event.preventDefault();\n contextMenuAnchorRef.current = event.target as HTMLButtonElement;\n setContextMenuOpen(cell);\n }\n }, []);\n\n const handleAxisMenuAction = useCallback(\n (operation: 'insert-before' | 'insert-after' | 'drop') => {\n switch (operation) {\n case 'insert-before':\n case 'insert-after':\n return dispatch(\n createIntent(SheetAction.InsertAxis, {\n model,\n axis: contextMenuAxis,\n index: contextMenuOpen![contextMenuAxis] + (operation === 'insert-before' ? 0 : 1),\n }),\n );\n case 'drop':\n return dispatch(\n createIntent(SheetAction.DropAxis, {\n model,\n axis: contextMenuAxis,\n axisIndex: model.sheet[contextMenuAxis === 'row' ? 'rows' : 'columns'][contextMenuOpen![contextMenuAxis]],\n }),\n );\n }\n },\n [contextMenuAxis, contextMenuOpen, model, dispatch],\n );\n\n const { columns, rows } = useSheetModelDxGridProps(dxGrid, model);\n\n const extension = useMemo(\n () => [\n editorKeys({ onClose: handleClose, ...(editing?.initialContent && { onNav: handleClose }) }),\n sheetExtension({ functions: model.graph.getFunctions() }),\n rangeExtension({\n onInit: (fn) => (rangeController.current = fn),\n onStateChange: (state) => {\n if (dxGrid) {\n // This can’t dispatch a setState in this component, otherwise the cell editor remounts and loses focus.\n dxGrid.mode = typeof state.activeRange === 'undefined' ? 'edit' : 'edit-select';\n }\n },\n }),\n ],\n [model, handleClose, editing],\n );\n\n const getCellContent = useCallback(\n (index: DxGridCellIndex) => {\n return model.getCellText(parseCellIndex(index));\n },\n [model],\n );\n\n useUpdateFocusedCellOnThreadSelection(dxGrid);\n useSelectThreadOnCellFocus();\n\n return (\n <div role='none' className='relative min-bs-0'>\n <GridCellEditor getCellContent={getCellContent} extension={extension} onBlur={handleBlur} />\n <Grid.Content\n initialCells={initialCells}\n limitColumns={DEFAULT_COLS}\n limitRows={DEFAULT_ROWS}\n columns={columns}\n rows={rows}\n onAxisResize={handleAxisResize}\n onSelect={handleSelect}\n rowDefault={sheetRowDefault}\n columnDefault={sheetColDefault}\n frozen={frozen}\n onFocus={handleFocus}\n onWheelCapture={handleWheel}\n onKeyDown={handleKeyDown}\n onContextMenu={handleContextMenu}\n onClick={handleClick}\n overscroll='trap'\n className='[--dx-grid-base:var(--surface-bg)] [&_.dx-grid]:border-bs [&_.dx-grid]:absolute [&_.dx-grid]:inset-0 [&_.dx-grid]:border-separator'\n activeRefs={activeRefs}\n ref={setDxGrid}\n />\n <DropdownMenu.Root\n modal={false}\n open={!!contextMenuOpen}\n onOpenChange={(nextOpen) => setContextMenuOpen(nextOpen ? inertPosition : null)}\n >\n <DropdownMenu.VirtualTrigger virtualRef={contextMenuAnchorRef} />\n <DropdownMenu.Content side={contextMenuAxis === 'col' ? 'bottom' : 'right'} sideOffset={4} collisionPadding={8}>\n <DropdownMenu.Viewport>\n <DropdownMenu.Item\n onClick={() => handleAxisMenuAction('insert-before')}\n data-testid={`grid.${contextMenuAxis}.insert-before`}\n >\n <Icon\n size={5}\n icon={contextMenuAxis === 'col' ? 'ph--columns-plus-left--regular' : 'ph--rows-plus-top--regular'}\n />\n <span>{t(`add ${contextMenuAxis} before label`)}</span>\n </DropdownMenu.Item>\n <DropdownMenu.Item\n onClick={() => handleAxisMenuAction('insert-after')}\n data-testid={`grid.${contextMenuAxis}.insert-after`}\n >\n <Icon\n size={5}\n icon={contextMenuAxis === 'col' ? 'ph--columns-plus-right--regular' : 'ph--rows-plus-bottom--regular'}\n />\n <span>{t(`add ${contextMenuAxis} after label`)}</span>\n </DropdownMenu.Item>\n <DropdownMenu.Item\n onClick={() => handleAxisMenuAction('drop')}\n data-testid={`grid.${contextMenuAxis}.drop`}\n >\n <Icon size={5} icon='ph--backspace--regular' />\n <span>{t(`delete ${contextMenuAxis} label`)}</span>\n </DropdownMenu.Item>\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { inRange } from '@dxos/compute';\nimport { createDocAccessor, fullyQualifiedId } from '@dxos/react-client/echo';\nimport { parseValue, cellClassesForFieldType } from '@dxos/react-ui-form';\nimport {\n type GridContentProps,\n type DxGridElement,\n type DxGridAxisMeta,\n type DxGridPlane,\n type DxGridPlaneRange,\n type DxGridPlaneCells,\n type DxGridCellValue,\n colToA1Notation,\n rowToA1Notation,\n commentedClassName,\n} from '@dxos/react-ui-grid';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { parseThreadAnchorAsCellRange } from '../../integrations';\nimport { type SheetModel } from '../../model';\nimport { cellClassNameForRange, rangeFromIndex } from '../../types';\n\nconst createDxGridColumns = (model: SheetModel): DxGridAxisMeta => {\n return model.sheet.columns.reduce(\n (acc: DxGridAxisMeta, columnId, numericIndex) => {\n if (model.sheet.columnMeta[columnId] && model.sheet.columnMeta[columnId].size) {\n acc.grid[numericIndex] = { size: model.sheet.columnMeta[columnId].size, resizeable: true };\n }\n return acc;\n },\n { grid: {} },\n );\n};\n\nconst createDxGridRows = (model: SheetModel): DxGridAxisMeta => {\n return model.sheet.rows.reduce(\n (acc: DxGridAxisMeta, rowId, numericIndex) => {\n if (model.sheet.rowMeta[rowId] && model.sheet.rowMeta[rowId].size) {\n acc.grid[numericIndex] = { size: model.sheet.rowMeta[rowId].size, resizeable: true };\n }\n return acc;\n },\n { grid: {} },\n );\n};\n\nconst projectCellProps = (model: SheetModel, col: number, row: number): DxGridCellValue => {\n const address = { col, row };\n const rawValue = model.getValue(address);\n const ranges = model.sheet.ranges?.filter(({ range }) => inRange(rangeFromIndex(model.sheet, range), address));\n const threadRefs = model.sheet.threads\n ?.filter((thread) => {\n const range = thread.target?.anchor && parseThreadAnchorAsCellRange(thread.target!.anchor);\n return thread && range ? inRange(range, address) : false;\n })\n .map((thread) => fullyQualifiedId(thread!))\n .join(' ');\n\n const description = model.getValueDescription(address);\n const type = description?.type;\n const format = description?.format;\n const classNames = ranges?.map(cellClassNameForRange).reverse();\n\n return {\n value: parseValue({ type, format, value: rawValue }),\n className: mx(cellClassesForFieldType({ type, format }), threadRefs && commentedClassName, classNames),\n dataRefs: threadRefs,\n };\n};\nconst gridCellGetter = (model: SheetModel) => {\n // TODO(thure): Actually use the cache.\n const cachedGridCells: DxGridPlaneCells = {};\n return (nextBounds: DxGridPlaneRange): DxGridPlaneCells => {\n [...Array(nextBounds.end.col - nextBounds.start.col)].forEach((_, c0) => {\n return [...Array(nextBounds.end.row - nextBounds.start.row)].forEach((_, r0) => {\n const col = nextBounds.start.col + c0;\n const row = nextBounds.start.row + r0;\n cachedGridCells[`${col},${row}`] = projectCellProps(model, col, row);\n });\n });\n return cachedGridCells;\n };\n};\n\nexport const rowLabelCell = (row: number) => ({\n value: rowToA1Notation(row),\n className: 'text-end pie-1 text-subdued',\n resizeHandle: 'row',\n});\n\nexport const colLabelCell = (col: number) => ({\n value: colToA1Notation(col),\n className: 'text-subdued',\n resizeHandle: 'col',\n});\n\nconst cellGetter = (model: SheetModel) => {\n const getGridCells = gridCellGetter(model);\n return (nextBounds: DxGridPlaneRange, plane: DxGridPlane): DxGridPlaneCells => {\n switch (plane) {\n case 'grid':\n return getGridCells(nextBounds);\n case 'frozenColsStart':\n return [...Array(nextBounds.end.row - nextBounds.start.row)].reduce((acc, _, r0) => {\n const r = nextBounds.start.row + r0;\n acc[`0,${r}`] = rowLabelCell(r);\n return acc;\n }, {});\n case 'frozenRowsStart':\n return [...Array(nextBounds.end.col - nextBounds.start.col)].reduce((acc, _, c0) => {\n const c = nextBounds.start.col + c0;\n acc[`${c},0`] = colLabelCell(c);\n return acc;\n }, {});\n default:\n return {};\n }\n };\n};\n\nexport const useSheetModelDxGridProps = (\n dxGrid: DxGridElement | null,\n model: SheetModel,\n): Pick<GridContentProps, 'columns' | 'rows'> => {\n const [columns, setColumns] = useState<DxGridAxisMeta>(createDxGridColumns(model));\n const [rows, setRows] = useState<DxGridAxisMeta>(createDxGridRows(model));\n\n useEffect(() => {\n const cellsAccessor = createDocAccessor(model.sheet, ['cells']);\n if (dxGrid) {\n dxGrid.getCells = cellGetter(model);\n }\n const handleCellsUpdate = () => {\n dxGrid?.requestUpdate('initialCells');\n };\n cellsAccessor.handle.addListener('change', handleCellsUpdate);\n const unsubscribe = model.graph.update.on(handleCellsUpdate);\n return () => {\n cellsAccessor.handle.removeListener('change', handleCellsUpdate);\n unsubscribe();\n };\n }, [model, dxGrid]);\n\n useEffect(() => {\n const columnMetaAccessor = createDocAccessor(model.sheet, ['columnMeta']);\n const rowMetaAccessor = createDocAccessor(model.sheet, ['rowMeta']);\n const handleColumnMetaUpdate = () => {\n setColumns(createDxGridColumns(model));\n };\n const handleRowMetaUpdate = () => {\n setRows(createDxGridRows(model));\n };\n columnMetaAccessor.handle.addListener('change', handleColumnMetaUpdate);\n rowMetaAccessor.handle.addListener('change', handleRowMetaUpdate);\n return () => {\n columnMetaAccessor.handle.removeListener('change', handleColumnMetaUpdate);\n rowMetaAccessor.handle.removeListener('change', handleRowMetaUpdate);\n };\n }, [model, dxGrid]);\n\n return { columns, rows };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback, useEffect, useMemo } from 'react';\n\nimport {\n createIntent,\n createResolver,\n LayoutAction,\n useIntentResolver,\n useIntentDispatcher,\n} from '@dxos/app-framework';\nimport { debounce } from '@dxos/async';\nimport { type CellAddress, type CompleteCellRange, inRange } from '@dxos/compute';\nimport { S } from '@dxos/echo-schema';\nimport { ThreadAction } from '@dxos/plugin-thread/types';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { type DxGridElement, type DxGridPosition, type GridContentProps } from '@dxos/react-ui-grid';\n\nimport { useSheetContext } from '../components';\nimport { SHEET_PLUGIN } from '../meta';\n\nexport const completeCellRangeToThreadCursor = (range: CompleteCellRange): string => {\n return `${range.from.col},${range.from.row},${range.to.col},${range.to.row}`;\n};\n\nexport const parseThreadAnchorAsCellRange = (cursor: string): CompleteCellRange | null => {\n const coords = cursor.split(',');\n if (coords.length !== 4) {\n return null;\n } else {\n const [fromCol, fromRow, toCol, toRow] = coords;\n return {\n from: { col: parseInt(fromCol), row: parseInt(fromRow) },\n to: { col: parseInt(toCol), row: parseInt(toRow) },\n };\n }\n};\n\nexport const useUpdateFocusedCellOnThreadSelection = (grid: DxGridElement | null) => {\n const { model, setActiveRefs } = useSheetContext();\n const scrollIntoViewResolver = useMemo(\n () =>\n createResolver({\n intent: LayoutAction.ScrollIntoView,\n position: 'hoist',\n filter: (\n data,\n ): data is {\n part: 'current';\n subject: string;\n options: { cursor: string; ref: GridContentProps['activeRefs'] };\n } => {\n if (!S.is(LayoutAction.ScrollIntoView.fields.input)(data)) {\n return false;\n }\n\n return data.subject === fullyQualifiedId(model.sheet) && !!data.options?.cursor;\n },\n resolve: ({ options: { cursor, ref } }) => {\n setActiveRefs(ref);\n // TODO(Zan): Everywhere we refer to the cursor in a thread context should change to `anchor`.\n const range = parseThreadAnchorAsCellRange(cursor!);\n range && grid?.setFocus({ ...range.to, plane: 'grid' }, true);\n },\n }),\n [model.sheet, setActiveRefs],\n );\n\n useIntentResolver(SHEET_PLUGIN, scrollIntoViewResolver);\n};\n\nexport const useSelectThreadOnCellFocus = () => {\n const { model, cursor } = useSheetContext();\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const threads = useMemo(\n () => model.sheet.threads?.filter((thread): thread is NonNullable<typeof thread> => !!thread) ?? [],\n [\n // TODO(thure): Surely we can find a better dependency for this…\n JSON.stringify(model.sheet.threads),\n ],\n );\n\n const selectClosestThread = useCallback(\n (cellAddress: CellAddress) => {\n if (!cellAddress || !threads) {\n return;\n }\n\n const closestThread = threads?.find((ref) => {\n if (ref.target?.anchor) {\n const range = parseThreadAnchorAsCellRange(ref.target!.anchor);\n return range ? inRange(range, cellAddress) : false;\n } else {\n return false;\n }\n });\n\n if (closestThread) {\n void dispatch(createIntent(ThreadAction.Select, { current: fullyQualifiedId(closestThread) }));\n }\n },\n [dispatch, threads],\n );\n\n const debounced = useMemo(() => {\n return debounce((cellCoords: DxGridPosition) => requestAnimationFrame(() => selectClosestThread(cellCoords)), 50);\n }, [selectClosestThread]);\n\n useEffect(() => {\n if (!cursor) {\n return;\n }\n debounced(cursor);\n }, [cursor, debounced]);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type PropsWithChildren, createContext, useCallback, useContext, useState } from 'react';\n\nimport { type ComputeGraph, type CellAddress, type CellRange, type CompleteCellRange } from '@dxos/compute';\nimport { invariant } from '@dxos/invariant';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport {\n Grid,\n type GridContentProps,\n type GridEditing,\n type GridScopedProps,\n useGridContext,\n} from '@dxos/react-ui-grid';\n\nimport { type SheetModel, useSheetModel } from '../../model';\nimport { type SheetType } from '../../types';\n\nexport type SheetContextValue = {\n id: string;\n\n model: SheetModel;\n\n // Cursor state.\n // TODO(burdon): Cursor and range should use indices.\n cursor?: CellAddress;\n setCursor: (cell: CellAddress | undefined) => void;\n range?: CellRange;\n setRange: (range: CellRange | undefined) => void;\n cursorFallbackRange?: CompleteCellRange;\n\n // Editing state (undefined if not editing).\n editing: GridEditing;\n setEditing: (editing: GridEditing) => void;\n\n // Active refs\n activeRefs: GridContentProps['activeRefs'];\n setActiveRefs: (activeRefs: GridContentProps['activeRefs']) => void;\n\n // Events.\n // TODO(burdon): Generalize.\n onInfo?: () => void;\n\n // Flags\n ignoreAttention?: boolean;\n};\n\nconst SheetContext = createContext<SheetContextValue | undefined>(undefined);\n\nexport const useSheetContext = (): SheetContextValue => {\n const context = useContext(SheetContext);\n invariant(context);\n return context;\n};\n\nconst SheetProviderImpl = ({\n model,\n onInfo,\n ignoreAttention,\n children,\n __gridScope,\n}: GridScopedProps<PropsWithChildren<Pick<SheetContextValue, 'onInfo' | 'model' | 'ignoreAttention'>>>) => {\n const { id, editing, setEditing } = useGridContext('SheetProvider', __gridScope);\n\n const [cursor, setCursorInternal] = useState<CellAddress>();\n const [range, setRangeInternal] = useState<CellRange>();\n const [cursorFallbackRange, setCursorFallbackRange] = useState<CompleteCellRange>();\n const [activeRefs, setActiveRefs] = useState<GridContentProps['activeRefs']>('');\n\n const setCursor = useCallback(\n (nextCursor?: CellAddress) => {\n setCursorInternal(nextCursor);\n setCursorFallbackRange(\n range?.to ? (range as CompleteCellRange) : nextCursor ? { from: nextCursor!, to: nextCursor! } : undefined,\n );\n },\n [range],\n );\n const setRange = useCallback(\n (nextRange?: CellRange) => {\n setRangeInternal(nextRange);\n setCursorFallbackRange(\n nextRange?.to ? (nextRange as CompleteCellRange) : cursor ? { from: cursor!, to: cursor! } : undefined,\n );\n },\n [cursor],\n );\n\n return (\n <SheetContext.Provider\n value={{\n id,\n model,\n editing,\n setEditing,\n cursor,\n setCursor,\n range,\n setRange,\n cursorFallbackRange,\n activeRefs,\n setActiveRefs,\n // TODO(burdon): Change to event.\n onInfo,\n ignoreAttention,\n }}\n >\n {children}\n </SheetContext.Provider>\n );\n};\n\nexport type SheetProviderProps = {\n graph: ComputeGraph;\n sheet: SheetType;\n readonly?: boolean;\n ignoreAttention?: boolean;\n} & Pick<SheetContextValue, 'onInfo'>;\n\nexport const SheetProvider = ({\n children,\n graph,\n sheet,\n readonly,\n ignoreAttention,\n onInfo,\n}: PropsWithChildren<SheetProviderProps>) => {\n const model = useSheetModel(graph, sheet, { readonly });\n\n return !model ? null : (\n <Grid.Root id={fullyQualifiedId(sheet)}>\n <SheetProviderImpl model={model} onInfo={onInfo} ignoreAttention={ignoreAttention}>\n {children}\n </SheetProviderImpl>\n </Grid.Root>\n );\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mBAAyE;AAGzE,mBAAsB;AAEtB,yBAA8B;ACL9B,IAAAA,gBAAmC;AAEnC,qBAAkC;AAClC,yBAAkB;AAClB,sBAA+B;AAC/B,2BAAqB;AACrB,4BAA2B;ACN3B,IAAAA,gBAAqB;ACArB,IAAAA,gBASO;AAEP,2BAAkD;AAClD,IAAAC,kBAAkD;AAClD,IAAAC,mBAAmD;AACnD,gCAA6B;AAC7B,2BAaO;AC5BP,IAAAF,gBAAoC;AAEpC,IAAAC,kBAAwB;AACxB,kBAAoD;AACpD,2BAAoD;AACpD,IAAAE,wBAWO;AACP,IAAAC,yBAAmB;ACjBnB,IAAAJ,gBAAgD;AAEhD,IAAAK,wBAMO;AACP,mBAAyB;AACzB,IAAAJ,kBAAkE;AAClE,IAAAK,sBAAkB;AAClB,mBAA6B;AAC7B,IAAAC,eAAiC;ACbjC,IAAAP,gBAAgG;AAGhG,uBAA0B;AAC1B,IAAAO,eAAiC;AACjC,IAAAJ,wBAMO;ANGA,IAAMK,sBAAsBC,gDAAmDC,MAAAA;AAE/E,IAAMC,8BAA8B,CAAC,EAAEC,UAAUC,SAAQ,MAA8C;AAC5G,SAAO,6BAAAC,QAAA,cAACN,oBAAoBO,UAAQ;IAACC,OAAO;MAAEJ;IAAS;KAAIC,QAAAA;AAC7D;AAEO,IAAMI,kBAAkB,CAACC,UAAAA;AAC9B,QAAM,EAAEN,SAAQ,QAAKO,yBAAWX,mBAAAA,SAAwBY,oBAAM,IAAIC,MAAM,6BAAA,CAAA;AACxE,QAAM,CAACC,KAAAA,QAASC,kCAAc,YAAA;AAC5B,QAAIL,OAAO;AACT,YAAMI,SAAQV,SAASY,iBAAiBN,KAAAA;AACxC,YAAMI,OAAMG,KAAI;AAChB,aAAOH;IACT;EACF,GAAG;IAACJ;IAAON;GAAS;AAEpB,SAAOU;AACT;ACfO,IAAMI,YAAY,CAAC,EAAEC,MAAK,MAAkB;AACjD,QAAM,EAAEC,EAAC,QAAKC,gCAAeC,kCAAAA;AAE7B,QAAMC,oBAAoB,CAACC,UAAAA;EAAkB;AAC7C,QAAMC,wBAAoBC,2BACxB,CAACF,UAAAA;AACC,UAAMG,QAAQR,MAAMS,OAAOC,UAAU,CAACC,eAAeA,eAAeN,KAAAA;AACpEL,UAAMS,OAAOG,OAAOJ,OAAO,CAAA;EAC7B,GACA;IAACR;GAAM;AAET,SACEb,8BAAAA,QAAA,cAAAA,cAAAA,QAAA,UAAA,MACEA,8BAAAA,QAAA,cAAC0B,MAAAA;IAAGC,WAAU;KAA6Bb,EAAE,oBAAA,CAAA,GAC7Cd,8BAAAA,QAAA,cAAC4B,0BAAKC,MAAI;IAAQC,OAAOjB,MAAMS;IAAQS,QAAQC,qBAAEC,GAAGC,2BAAAA;KACjD,CAAC,EAAEJ,OAAOR,OAAM,MACfA,OAAOa,IAAI,CAACjB,OAAOkB,MACjBpC,8BAAAA,QAAA,cAAC4B,0BAAKS,MAAI;IAACC,KAAKF;IAAGG,MAAMrB;IAAOsB,YAAY;MAAC;MAAOC;;KAClDzC,8BAAAA,QAAA,cAAC4B,0BAAKc,gBAAc,IAAA,GACpB1C,8BAAAA,QAAA,cAAC4B,0BAAKe,WAAS;IAACC,SAAS,MAAM3B,kBAAkBC,KAAAA;KAC9CJ,EAAE,eAAe;IAChB+B,cAAUC,sCAAkBC,sCAAelC,OAAOK,MAAMA,KAAK,CAAA;IAC7DoB,KAAKxB,EAAE,aAAaI,MAAMoB,GAAG,QAAQ;IACrCpC,OAAOY,EAAE,eAAeI,MAAMhB,KAAK,QAAQ;EAC7C,CAAA,CAAA,GAEFF,8BAAAA,QAAA,cAAC4B,0BAAKoB,kBAAgB;IAACJ,SAAS,MAAMzB,kBAAkBD,KAAAA;;AAOtE;AI9BO,IAAM+B,kCAAkC,CAAC/B,UAAAA;AAC9C,SAAO,GAAGA,MAAMgC,KAAKC,GAAG,IAAIjC,MAAMgC,KAAKE,GAAG,IAAIlC,MAAMmC,GAAGF,GAAG,IAAIjC,MAAMmC,GAAGD,GAAG;AAC5E;AAEO,IAAME,+BAA+B,CAACC,WAAAA;AAC3C,QAAMC,SAASD,OAAOE,MAAM,GAAA;AAC5B,MAAID,OAAOE,WAAW,GAAG;AACvB,WAAO;EACT,OAAO;AACL,UAAM,CAACC,SAASC,SAASC,OAAOC,KAAAA,IAASN;AACzC,WAAO;MACLN,MAAM;QAAEC,KAAKY,SAASJ,OAAAA;QAAUP,KAAKW,SAASH,OAAAA;MAAS;MACvDP,IAAI;QAAEF,KAAKY,SAASF,KAAAA;QAAQT,KAAKW,SAASD,KAAAA;MAAO;IACnD;EACF;AACF;AAEO,IAAME,wCAAwC,CAACC,SAAAA;AACpD,QAAM,EAAEC,OAAOC,cAAa,IAAKC,gBAAAA;AACjC,QAAMC,6BAAyBC,uBAC7B,UACEC,sCAAe;IACbC,QAAQC,mCAAaC;IACrB7B,UAAU;IACV8B,QAAQ,CACNC,SAAAA;AAMA,UAAI,CAAC5C,oBAAAA,EAAEC,GAAGwC,mCAAaC,eAAeG,OAAOC,KAAK,EAAEF,IAAAA,GAAO;AACzD,eAAO;MACT;AAEA,aAAOA,KAAKG,gBAAYC,+BAAiBd,MAAMrD,KAAK,KAAK,CAAC,CAAC+D,KAAKK,SAAS1B;IAC3E;IACA2B,SAAS,CAAC,EAAED,SAAS,EAAE1B,QAAQ4B,IAAG,EAAE,MAAE;AACpChB,oBAAcgB,GAAAA;AAEd,YAAMjE,QAAQoC,6BAA6BC,MAAAA;AAC3CrC,eAAS+C,MAAMmB,SAAS;QAAE,GAAGlE,MAAMmC;QAAIgC,OAAO;MAAO,GAAG,IAAA;IAC1D;EACF,CAAA,GACF;IAACnB,MAAMrD;IAAOsD;GAAc;AAG9BmB,+CAAkBtE,oCAAcqD,sBAAAA;AAClC;AAEO,IAAMkB,6BAA6B,MAAA;AACxC,QAAM,EAAErB,OAAOX,OAAM,IAAKa,gBAAAA;AAC1B,QAAM,EAAEoB,iBAAiBC,SAAQ,QAAKC,2CAAAA;AAEtC,QAAMC,cAAUrB,uBACd,MAAMJ,MAAMrD,MAAM8E,SAAShB,OAAO,CAACiB,WAAiD,CAAC,CAACA,MAAAA,KAAW,CAAA,GACjG;;IAEEC,KAAKC,UAAU5B,MAAMrD,MAAM8E,OAAO;GACnC;AAGH,QAAMI,0BAAsB3E,cAAAA,aAC1B,CAAC4E,gBAAAA;AACC,QAAI,CAACA,eAAe,CAACL,SAAS;AAC5B;IACF;AAEA,UAAMM,gBAAgBN,SAASO,KAAK,CAACf,QAAAA;AACnC,UAAIA,IAAIgB,QAAQC,QAAQ;AACtB,cAAMlF,QAAQoC,6BAA6B6B,IAAIgB,OAAQC,MAAM;AAC7D,eAAOlF,YAAQmF,yBAAQnF,OAAO8E,WAAAA,IAAe;MAC/C,OAAO;AACL,eAAO;MACT;IACF,CAAA;AAEA,QAAIC,eAAe;AACjB,WAAKR,aAASa,oCAAaC,0BAAaC,QAAQ;QAAEC,aAASzB,+BAAiBiB,aAAAA;MAAe,CAAA,CAAA;IAC7F;EACF,GACA;IAACR;IAAUE;GAAQ;AAGrB,QAAMe,gBAAYpC,uBAAQ,MAAA;AACxB,eAAOqC,uBAAS,CAACC,eAA+BC,sBAAsB,MAAMd,oBAAoBa,UAAAA,CAAAA,GAAc,EAAA;EAChH,GAAG;IAACb;GAAoB;AAExBe,+BAAU,MAAA;AACR,QAAI,CAACvD,QAAQ;AACX;IACF;AACAmD,cAAUnD,MAAAA;EACZ,GAAG;IAACA;IAAQmD;GAAU;AACxB;AD1FA,IAAMK,sBAAsB,CAAC7C,UAAAA;AAC3B,SAAOA,MAAMrD,MAAMmG,QAAQC,OACzB,CAACC,KAAqBC,UAAUC,iBAAAA;AAC9B,QAAIlD,MAAMrD,MAAMwG,WAAWF,QAAAA,KAAajD,MAAMrD,MAAMwG,WAAWF,QAAAA,EAAUG,MAAM;AAC7EJ,UAAIjD,KAAKmD,YAAAA,IAAgB;QAAEE,MAAMpD,MAAMrD,MAAMwG,WAAWF,QAAAA,EAAUG;QAAMC,YAAY;MAAK;IAC3F;AACA,WAAOL;EACT,GACA;IAAEjD,MAAM,CAAC;EAAE,CAAA;AAEf;AAEA,IAAMuD,mBAAmB,CAACtD,UAAAA;AACxB,SAAOA,MAAMrD,MAAM4G,KAAKR,OACtB,CAACC,KAAqBQ,OAAON,iBAAAA;AAC3B,QAAIlD,MAAMrD,MAAM8G,QAAQD,KAAAA,KAAUxD,MAAMrD,MAAM8G,QAAQD,KAAAA,EAAOJ,MAAM;AACjEJ,UAAIjD,KAAKmD,YAAAA,IAAgB;QAAEE,MAAMpD,MAAMrD,MAAM8G,QAAQD,KAAAA,EAAOJ;QAAMC,YAAY;MAAK;IACrF;AACA,WAAOL;EACT,GACA;IAAEjD,MAAM,CAAC;EAAE,CAAA;AAEf;AAEA,IAAM2D,mBAAmB,CAAC1D,OAAmBf,KAAaC,QAAAA;AACxD,QAAMyE,UAAU;IAAE1E;IAAKC;EAAI;AAC3B,QAAM0E,WAAW5D,MAAM6D,SAASF,OAAAA;AAChC,QAAMvG,SAAS4C,MAAMrD,MAAMS,QAAQqD,OAAO,CAAC,EAAEzD,MAAK,UAAOmF,gBAAAA,aAAQtD,sCAAemB,MAAMrD,OAAOK,KAAAA,GAAQ2G,OAAAA,CAAAA;AACrG,QAAMG,aAAa9D,MAAMrD,MAAM8E,SAC3BhB,OAAO,CAACiB,WAAAA;AACR,UAAM1E,QAAQ0E,OAAOO,QAAQC,UAAU9C,6BAA6BsC,OAAOO,OAAQC,MAAM;AACzF,WAAOR,UAAU1E,YAAQmF,gBAAAA,SAAQnF,OAAO2G,OAAAA,IAAW;EACrD,CAAA,EACC1F,IAAI,CAACyD,eAAWZ,YAAAA,kBAAiBY,MAAAA,CAAAA,EACjCqC,KAAK,GAAA;AAER,QAAMC,cAAchE,MAAMiE,oBAAoBN,OAAAA;AAC9C,QAAMO,OAAOF,aAAaE;AAC1B,QAAMC,SAASH,aAAaG;AAC5B,QAAM7F,aAAalB,QAAQa,IAAImG,2CAAAA,EAAuBC,QAAAA;AAEtD,SAAO;IACLrI,WAAOsI,iCAAW;MAAEJ;MAAMC;MAAQnI,OAAO4H;IAAS,CAAA;IAClDnG,eAAW8G,+BAAGC,8CAAwB;MAAEN;MAAMC;IAAO,CAAA,GAAIL,cAAcW,0CAAoBnG,UAAAA;IAC3FoG,UAAUZ;EACZ;AACF;AACA,IAAMa,iBAAiB,CAAC3E,UAAAA;AAEtB,QAAM4E,kBAAoC,CAAC;AAC3C,SAAO,CAACC,eAAAA;AACN;SAAIC,MAAMD,WAAWE,IAAI9F,MAAM4F,WAAWG,MAAM/F,GAAG;MAAGgG,QAAQ,CAACC,GAAGC,OAAAA;AAChE,aAAO;WAAIL,MAAMD,WAAWE,IAAI7F,MAAM2F,WAAWG,MAAM9F,GAAG;QAAG+F,QAAQ,CAACC,IAAGE,OAAAA;AACvE,cAAMnG,MAAM4F,WAAWG,MAAM/F,MAAMkG;AACnC,cAAMjG,MAAM2F,WAAWG,MAAM9F,MAAMkG;AACnCR,wBAAgB,GAAG3F,GAAAA,IAAOC,GAAAA,EAAK,IAAIwE,iBAAiB1D,OAAOf,KAAKC,GAAAA;MAClE,CAAA;IACF,CAAA;AACA,WAAO0F;EACT;AACF;AAEO,IAAMS,eAAe,CAACnG,SAAiB;EAC5ClD,WAAOsJ,uCAAgBpG,GAAAA;EACvBzB,WAAW;EACX8H,cAAc;AAChB;AAEO,IAAMC,eAAe,CAACvG,SAAiB;EAC5CjD,WAAOyJ,uCAAgBxG,GAAAA;EACvBxB,WAAW;EACX8H,cAAc;AAChB;AAEA,IAAMG,aAAa,CAAC1F,UAAAA;AAClB,QAAM2F,eAAehB,eAAe3E,KAAAA;AACpC,SAAO,CAAC6E,YAA8B1D,UAAAA;AACpC,YAAQA,OAAAA;MACN,KAAK;AACH,eAAOwE,aAAad,UAAAA;MACtB,KAAK;AACH,eAAO;aAAIC,MAAMD,WAAWE,IAAI7F,MAAM2F,WAAWG,MAAM9F,GAAG;UAAG6D,OAAO,CAACC,KAAKkC,GAAGE,OAAAA;AAC3E,gBAAMQ,IAAIf,WAAWG,MAAM9F,MAAMkG;AACjCpC,cAAI,KAAK4C,CAAAA,EAAG,IAAIP,aAAaO,CAAAA;AAC7B,iBAAO5C;QACT,GAAG,CAAC,CAAA;MACN,KAAK;AACH,eAAO;aAAI8B,MAAMD,WAAWE,IAAI9F,MAAM4F,WAAWG,MAAM/F,GAAG;UAAG8D,OAAO,CAACC,KAAKkC,GAAGC,OAAAA;AAC3E,gBAAMU,IAAIhB,WAAWG,MAAM/F,MAAMkG;AACjCnC,cAAI,GAAG6C,CAAAA,IAAK,IAAIL,aAAaK,CAAAA;AAC7B,iBAAO7C;QACT,GAAG,CAAC,CAAA;MACN;AACE,eAAO,CAAC;IACZ;EACF;AACF;AAEO,IAAM8C,2BAA2B,CACtCC,QACA/F,UAAAA;AAEA,QAAM,CAAC8C,SAASkD,UAAAA,QAAcC,wBAAyBpD,oBAAoB7C,KAAAA,CAAAA;AAC3E,QAAM,CAACuD,MAAM2C,OAAAA,QAAWD,wBAAyB3C,iBAAiBtD,KAAAA,CAAAA;AAElE4C,oBAAAA,WAAU,MAAA;AACR,UAAMuD,oBAAgBC,+BAAkBpG,MAAMrD,OAAO;MAAC;KAAQ;AAC9D,QAAIoJ,QAAQ;AACVA,aAAOM,WAAWX,WAAW1F,KAAAA;IAC/B;AACA,UAAMsG,oBAAoB,MAAA;AACxBP,cAAQQ,cAAc,cAAA;IACxB;AACAJ,kBAAcK,OAAOC,YAAY,UAAUH,iBAAAA;AAC3C,UAAMI,cAAc1G,MAAM1D,MAAMqK,OAAOC,GAAGN,iBAAAA;AAC1C,WAAO,MAAA;AACLH,oBAAcK,OAAOK,eAAe,UAAUP,iBAAAA;AAC9CI,kBAAAA;IACF;EACF,GAAG;IAAC1G;IAAO+F;GAAO;AAElBnD,oBAAAA,WAAU,MAAA;AACR,UAAMkE,yBAAqBV,+BAAkBpG,MAAMrD,OAAO;MAAC;KAAa;AACxE,UAAMoK,sBAAkBX,+BAAkBpG,MAAMrD,OAAO;MAAC;KAAU;AAClE,UAAMqK,yBAAyB,MAAA;AAC7BhB,iBAAWnD,oBAAoB7C,KAAAA,CAAAA;IACjC;AACA,UAAMiH,sBAAsB,MAAA;AAC1Bf,cAAQ5C,iBAAiBtD,KAAAA,CAAAA;IAC3B;AACA8G,uBAAmBN,OAAOC,YAAY,UAAUO,sBAAAA;AAChDD,oBAAgBP,OAAOC,YAAY,UAAUQ,mBAAAA;AAC7C,WAAO,MAAA;AACLH,yBAAmBN,OAAOK,eAAe,UAAUG,sBAAAA;AACnDD,sBAAgBP,OAAOK,eAAe,UAAUI,mBAAAA;IAClD;EACF,GAAG;IAACjH;IAAO+F;GAAO;AAElB,SAAO;IAAEjD;IAASS;EAAK;AACzB;;AErHA,IAAM2D,eAAezL,kCAAAA,eAA6CC,MAAAA;AAE3D,IAAMwE,kBAAkB,MAAA;AAC7B,QAAMiH,cAAUhL,cAAAA,YAAW+K,YAAAA;AAC3BE,kCAAUD,SAAAA,QAAAA;;;;;;;;;AACV,SAAOA;AACT;AAEA,IAAME,oBAAoB,CAAC,EACzBrH,OACAsH,QACAC,iBACA1L,UACA2L,YAAW,MACyF;AACpG,QAAM,EAAEC,IAAIC,SAASC,WAAU,QAAKC,sCAAe,iBAAiBJ,WAAAA;AAEpE,QAAM,CAACnI,QAAQwI,iBAAAA,QAAqB5B,cAAAA,UAAAA;AACpC,QAAM,CAACjJ,OAAO8K,gBAAAA,QAAoB7B,cAAAA,UAAAA;AAClC,QAAM,CAAC8B,qBAAqBC,sBAAAA,QAA0B/B,cAAAA,UAAAA;AACtD,QAAM,CAACgC,YAAYhI,aAAAA,QAAiBgG,cAAAA,UAAyC,EAAA;AAE7E,QAAMiC,gBAAYhL,cAAAA,aAChB,CAACiL,eAAAA;AACCN,sBAAkBM,UAAAA;AAClBH,2BACEhL,OAAOmC,KAAMnC,QAA8BmL,aAAa;MAAEnJ,MAAMmJ;MAAahJ,IAAIgJ;IAAY,IAAIzM,MAAAA;EAErG,GACA;IAACsB;GAAM;AAET,QAAMoL,eAAWlL,cAAAA,aACf,CAACmL,cAAAA;AACCP,qBAAiBO,SAAAA;AACjBL,2BACEK,WAAWlJ,KAAMkJ,YAAkChJ,SAAS;MAAEL,MAAMK;MAASF,IAAIE;IAAQ,IAAI3D,MAAAA;EAEjG,GACA;IAAC2D;GAAO;AAGV,SACEvD,8BAAAA,QAAA,cAACoL,aAAanL,UAAQ;IACpBC,OAAO;MACLyL;MACAzH;MACA0H;MACAC;MACAtI;MACA6I;MACAlL;MACAoL;MACAL;MACAE;MACAhI;;MAEAqH;MACAC;IACF;KAEC1L,QAAAA;AAGP;AASO,IAAMyM,gBAAgB,CAAC,EAC5BzM,UACAS,OACAK,OACA4L,UACAhB,iBACAD,OAAM,MACgC;AACtC,QAAMtH,YAAQwI,qCAAclM,OAAOK,OAAO;IAAE4L;EAAS,CAAA;AAErD,SAAO,CAACvI,QAAQ,OACdlE,8BAAAA,QAAA,cAAC2M,2BAAK9K,MAAI;IAAC8J,QAAI3G,aAAAA,kBAAiBnE,KAAAA;KAC9Bb,8BAAAA,QAAA,cAACuL,mBAAAA;IAAkBrH;IAAcsH;IAAgBC;KAC9C1L,QAAAA,CAAAA;AAIT;AHjGA,IAAM6M,gBAAgC;EAAEvH,OAAO;EAAQlC,KAAK;EAAGC,KAAK;AAAE;AAEtE,IAAMyJ,eAAe;EACnB5I,MAAM,CAAC;EACP6I,iBAAiB;OAAI9D,MAAM,EAAA;IAAK/B,OAAO,CAACC,KAAKkC,GAAGhH,MAAAA;AAC9C8E,QAAI,KAAK9E,CAAAA,EAAG,IAAImH,aAAanH,CAAAA;AAC7B,WAAO8E;EACT,GAAG,CAAC,CAAA;EACJ6F,iBAAiB;OAAI/D,MAAM,EAAA;IAAK/B,OAAO,CAACC,KAAKkC,GAAGhH,MAAAA;AAC9C8E,QAAI,GAAG9E,CAAAA,IAAK,IAAIsH,aAAatH,CAAAA;AAC7B,WAAO8E;EACT,GAAG,CAAC,CAAA;AACN;AAEA,IAAM8F,SAAS;EACbF,iBAAiB;EACjBC,iBAAiB;AACnB;AAEA,IAAME,kBAAkB;EACtBF,iBAAiB;IAAEzF,MAAM4F;IAAgBT,UAAU;EAAK;EACxDxI,MAAM;IAAEqD,MAAM4F;IAAgB3F,YAAY;EAAK;AACjD;AACA,IAAM4F,kBAAkB;EAAEL,iBAAiB;IAAExF,MAAM;IAAImF,UAAU;EAAK;EAAGxI,MAAM;IAAEqD,MAAM;IAAKC,YAAY;EAAK;AAAE;AAExG,IAAM6F,YAAY,MAAA;AACvB,QAAM,EAAEtM,EAAC,QAAKC,iBAAAA,gBAAeC,kCAAAA;AAC7B,QAAM,EAAE2K,IAAIzH,OAAO0H,SAASQ,WAAWE,UAAU/I,QAAQ0I,qBAAqBE,YAAYV,gBAAe,IACvGrH,gBAAAA;AAGF,QAAM,CAAC6F,QAAQoD,SAAAA,QAAalD,cAAAA,UAA+B,IAAA;AAC3D,QAAM,CAACmD,kBAAkBC,mBAAAA,QAAuBpD,cAAAA,UAAgC,IAAA;AAChF,QAAM,EAAE3E,iBAAiBC,SAAQ,QAAKC,qBAAAA,qBAAAA;AACtC,QAAM8H,sBAAkBC,sBAAAA;AACxB,QAAM,EAAEC,aAAY,QAAKC,wCAAahC,EAAAA;AAEtC,QAAMiC,kBAAcxM,cAAAA,aAClB,CAACyM,UAAAA;AACC,QAAI,CAACjC,SAAS;AACZ,YAAMkC,WAAOC,kCAAYF,MAAM1H,MAAM;AACrC,UAAI2H,MAAM;AACR,YAAIA,KAAKzI,UAAU,QAAQ;AACzB+G,oBAAU;YAAEjJ,KAAK2K,KAAK3K;YAAKC,KAAK0K,KAAK1K;UAAI,CAAA;AACzCmK,8BAAoB,IAAA;QACtB,OAAO;AACLA,8BAAoBO,IAAAA;QACtB;MACF,OAAO;AACLP,4BAAoB,IAAA;MACtB;IACF;EACF,GACA;IAAC3B;GAAQ;AAIX,QAAMoC,kBAAc5M,cAAAA,aAClB,CAAC6M,QAAQJ,UAAAA;AACP,QAAIA,OAAO;AACT,YAAM,EAAEvL,KAAK4L,MAAK,IAAKL;AACvB,YAAMM,OAAO;QAAC;QAAS;QAAW;QAAaC,SAAS9L,GAAAA,IACpD,QACA;QAAC;QAAO;QAAa;QAAc8L,SAAS9L,GAAAA,IAC1C,QACA1C;AACN,YAAMyO,QAAQ/L,IAAIgM,WAAW,OAAA,IAAY;QAAC;QAAW;QAAaF,SAAS9L,GAAAA,IAAO,KAAK,IAAK4L,QAAQ,KAAK;AACzGjE,cAAQsE,QAAQJ,MAAME,KAAAA;IACxB;EACF,GACA;IAACnK;IAAO0H;IAAS3B;GAAO;AAG1B,QAAMuE,iBAAapN,cAAAA,aACjB,CAAClB,UAAAA;AACC,QAAIA,UAAUN,QAAW;AACvBsE,YAAMuK,aAASC,qCAAe9C,QAASvK,KAAK,GAAGnB,KAAAA;IACjD;EACF,GACA;IAACgE;IAAO0H;GAAQ;AAGlB,QAAM+C,uBAAmBvN,cAAAA,aACvB,CAAC,EAAE+M,MAAM7G,MAAMjG,OAAO+F,aAAY,MAAE;AAClC,QAAI+G,SAAS,OAAO;AAClB,YAAMzG,QAAQxD,MAAMrD,MAAM4G,KAAK1D,SAASqD,YAAAA,CAAAA;AACxClD,YAAMrD,MAAM8G,QAAQD,KAAAA,MAAW,CAAC;AAChCxD,YAAMrD,MAAM8G,QAAQD,KAAAA,EAAOJ,OAAOA;IACpC,OAAO;AACL,YAAMH,WAAWjD,MAAMrD,MAAMmG,QAAQjD,SAASqD,YAAAA,CAAAA;AAC9ClD,YAAMrD,MAAMwG,WAAWF,QAAAA,MAAc,CAAC;AACtCjD,YAAMrD,MAAMwG,WAAWF,QAAAA,EAAUG,OAAOA;IAC1C;EACF,GACA;IAACpD;GAAM;AAGT,QAAM0K,mBAAexN,cAAAA,aACnB,CAAC,EAAEyN,QAAQC,QAAQC,QAAQC,OAAM,MAAE;AACjC,UAAM9N,QAAmB;MAAEgC,MAAM;QAAEC,KAAK0L;QAAQzL,KAAK2L;MAAO;IAAE;AAC9D,QAAIF,WAAWC,UAAUC,WAAWC,QAAQ;AAC1C9N,YAAMmC,KAAK;QAAEF,KAAK2L;QAAQ1L,KAAK4L;MAAO;IACxC;AACA,QAAIpD,SAAS;AAEX4B,sBAAgB/G,SAAS6F,aAASxJ,gBAAAA,mBAAkB5B,KAAAA,CAAAA;IACtD,OAAO;AAELoL,eAASpL,MAAMmC,KAAKnC,QAAQtB,MAAAA;IAC9B;EACF,GACA;IAACgM;GAAQ;AAEX,QAAMqD,kBAAc7N,cAAAA,aAClB,CAACyM,UAAAA;AACC,QAAI,CAACpC,mBAAmB,CAACiC,cAAc;AACrCG,YAAMqB,gBAAe;IACvB;EACF,GACA;IAACxB;IAAcjC;GAAgB;AAGjC,QAAM0D,uBAAmB/N,cAAAA,aACvB,CAACgO,QAAAA;AACC,YAAQA,IAAI/J,OAAK;MACf,KAAK;AACH,eAAO4E,QAAQoF,aAAa;UAC1BnG,OAAO;YAAE/F,KAAKiM,IAAIjM;YAAKC,KAAK;YAAGiC,OAAO;UAAO;UAC7C4D,KAAK;YAAE9F,KAAKiM,IAAIjM;YAAKC,KAAKc,MAAMrD,MAAM4G,KAAK/D,SAAS;YAAG2B,OAAO;UAAO;QACvE,CAAA;MACF,KAAK;AACH,eAAO4E,QAAQoF,aAAa;UAC1BnG,OAAO;YAAE9F,KAAKgM,IAAIhM;YAAKD,KAAK;YAAGkC,OAAO;UAAO;UAC7C4D,KAAK;YAAE7F,KAAKgM,IAAIhM;YAAKD,KAAKe,MAAMrD,MAAMmG,QAAQtD,SAAS;YAAG2B,OAAO;UAAO;QAC1E,CAAA;IACJ;EACF,GACA;IAAC4E;IAAQ/F,MAAMrD;GAAM;AAGvB,QAAMyO,kBAAclO,cAAAA,aAClB,CAACyM,UAAAA;AACC,UAAMC,WAAOC,kCAAYF,MAAM1H,MAAM;AACrC,QAAI2H,MAAM;AACRqB,uBAAiBrB,IAAAA;IACnB;EACF,GACA;IAACqB;GAAiB;AAGpB,QAAMI,oBAAgBnO,cAAAA,aACpB,CAACyM,UAAAA;AACC,YAAQA,MAAMvL,KAAG;MACf,KAAK;MACL,KAAK;AACHuL,cAAM2B,eAAc;AACpB,eAAOvD,uBAAuB/H,MAAMuL,MAAMxD,mBAAAA;MAC5C,KAAK;MACL,KAAK;AACH,YAAIhC,UAAUqD,kBAAkB;AAC9B,kBAAQA,iBAAiBjI,OAAK;YAC5B,KAAK;YACL,KAAK;AACHwI,oBAAM2B,eAAc;AACpB,qBAAOL,iBAAiB7B,gBAAAA;UAC5B;QACF;IACJ;AACA,QAAIO,MAAM6B,WAAW7B,MAAM8B,SAAS;AAClC,cAAQ9B,MAAMvL,KAAG;QACf,KAAK;QACL,KAAK;AACHuL,gBAAM2B,eAAc;AACpB,iBAAOvD,uBAAuB/H,MAAM0L,IAAI3D,mBAAAA;QAC1C,KAAK;QACL,KAAK;AACH4B,gBAAM2B,eAAc;AACpB,iBAAOvD,uBAAuB/H,MAAM2L,KAAK5D,mBAAAA;QAC3C,KAAK;QACL,KAAK;AACH4B,gBAAM2B,eAAc;AACpB,iBAAOjM,UAAUW,MAAM4L,MAAMvM,MAAAA;QAC/B,KAAK;AACHsK,gBAAM2B,eAAc;AACpB,iBAAO3B,MAAMkC,WAAW7L,MAAM8L,KAAI,IAAK9L,MAAM+L,KAAI;QACnD,KAAK;QACL,KAAK;AACHpC,gBAAM2B,eAAc;AACpB,iBAAOtL,MAAM8L,KAAI;MACrB;IACF;EACF,GACA;IAAC/D;IAAqB/H;IAAOX;IAAQ+J;IAAkB6B;GAAiB;AAG1E,QAAMe,2BAAuBzC,sBAAiC,IAAA;AAC9D,QAAM,CAAC0C,iBAAiBC,kBAAAA,QAAsBjG,cAAAA,UAAgC,IAAA;AAC9E,QAAMkG,kBAAkBF,iBAAiB9K,MAAMiJ,WAAW,YAAA,IAAgB,QAAQ;AAElF,QAAMgC,wBAAoBlP,cAAAA,aAAY,CAACyM,UAAAA;AACrC,UAAMC,WAAOC,kCAAYF,MAAM1H,MAAM;AACrC,QAAI2H,QAAQA,KAAKzI,MAAMiJ,WAAW,QAAA,GAAW;AAC3CT,YAAM2B,eAAc;AACpBU,2BAAqBzJ,UAAUoH,MAAM1H;AACrCiK,yBAAmBtC,IAAAA;IACrB;EACF,GAAG,CAAA,CAAE;AAEL,QAAMyC,2BAAuBnP,cAAAA,aAC3B,CAACoP,cAAAA;AACC,YAAQA,WAAAA;MACN,KAAK;MACL,KAAK;AACH,eAAO/K,aACLa,qBAAAA,cAAamK,kCAAYC,YAAY;UACnCxM;UACAiK,MAAMkC;UACNhP,OAAO8O,gBAAiBE,eAAAA,KAAoBG,cAAc,kBAAkB,IAAI;QAClF,CAAA,CAAA;MAEJ,KAAK;AACH,eAAO/K,aACLa,qBAAAA,cAAamK,kCAAYE,UAAU;UACjCzM;UACAiK,MAAMkC;UACNO,WAAW1M,MAAMrD,MAAMwP,oBAAoB,QAAQ,SAAS,SAAA,EAAWF,gBAAiBE,eAAAA,CAAgB;QAC1G,CAAA,CAAA;IAEN;EACF,GACA;IAACA;IAAiBF;IAAiBjM;IAAOuB;GAAS;AAGrD,QAAM,EAAEuB,SAASS,KAAI,IAAKuC,yBAAyBC,QAAQ/F,KAAAA;AAE3D,QAAM2M,gBAAYvM,cAAAA,SAChB,MAAM;QACJwM,iCAAW;MAAEC,SAAS/C;MAAa,GAAIpC,SAASoF,kBAAkB;QAAEC,OAAOjD;MAAY;IAAG,CAAA;QAC1FkD,sCAAe;MAAEC,WAAWjN,MAAM1D,MAAM4Q,aAAY;IAAG,CAAA;QACvDC,sCAAe;MACbC,QAAQ,CAACC,OAAQ/D,gBAAgB/G,UAAU8K;MAC3CC,eAAe,CAACC,UAAAA;AACd,YAAIxH,QAAQ;AAEVA,iBAAOyH,OAAO,OAAOD,MAAME,gBAAgB,cAAc,SAAS;QACpE;MACF;IACF,CAAA;KAEF;IAACzN;IAAO8J;IAAapC;GAAQ;AAG/B,QAAMgG,qBAAiBxQ,cAAAA,aACrB,CAACC,UAAAA;AACC,WAAO6C,MAAM2N,gBAAYnD,qCAAerN,KAAAA,CAAAA;EAC1C,GACA;IAAC6C;GAAM;AAGTF,wCAAsCiG,MAAAA;AACtC1E,6BAAAA;AAEA,SACEvF,8BAAAA,QAAA,cAAC8R,OAAAA;IAAIC,MAAK;IAAOpQ,WAAU;KACzB3B,8BAAAA,QAAA,cAACgS,qCAAAA;IAAeJ;IAAgCf;IAAsBoB,QAAQzD;MAC9ExO,8BAAAA,QAAA,cAAC2M,qBAAAA,KAAKuF,SAAO;IACXrF;IACAsF,cAAcC;IACdC,WAAWC;IACXtL;IACAS;IACA8K,cAAc5D;IACd6D,UAAU5D;IACV6D,YAAYxF;IACZyF,eAAevF;IACfH;IACA2F,SAAS/E;IACTgF,gBAAgB3D;IAChB4D,WAAWtD;IACXuD,eAAexC;IACf1N,SAAS0M;IACTyD,YAAW;IACXpR,WAAU;IACVwK;IACAhH,KAAKkI;MAEPrN,8BAAAA,QAAA,cAACgT,8BAAanR,MAAI;IAChBoR,OAAO;IACPtS,MAAM,CAAC,CAACwP;IACR+C,cAAc,CAACC,aAAa/C,mBAAmB+C,WAAWvG,gBAAgB,IAAA;KAE1E5M,8BAAAA,QAAA,cAACgT,8BAAaI,gBAAc;IAACC,YAAYnD;MACzClQ,8BAAAA,QAAA,cAACgT,8BAAad,SAAO;IAACoB,MAAMjD,oBAAoB,QAAQ,WAAW;IAASkD,YAAY;IAAGC,kBAAkB;KAC3GxT,8BAAAA,QAAA,cAACgT,8BAAaS,UAAQ,MACpBzT,8BAAAA,QAAA,cAACgT,8BAAa3Q,MAAI;IAChBO,SAAS,MAAM2N,qBAAqB,eAAA;IACpCmD,eAAa,QAAQrD,eAAAA;KAErBrQ,8BAAAA,QAAA,cAAC2T,uBAAAA;IACCrM,MAAM;IACNsM,MAAMvD,oBAAoB,QAAQ,mCAAmC;MAEvErQ,8BAAAA,QAAA,cAAC6T,QAAAA,MAAM/S,EAAE,OAAOuP,eAAAA,eAA8B,CAAA,CAAA,GAEhDrQ,8BAAAA,QAAA,cAACgT,8BAAa3Q,MAAI;IAChBO,SAAS,MAAM2N,qBAAqB,cAAA;IACpCmD,eAAa,QAAQrD,eAAAA;KAErBrQ,8BAAAA,QAAA,cAAC2T,uBAAAA;IACCrM,MAAM;IACNsM,MAAMvD,oBAAoB,QAAQ,oCAAoC;MAExErQ,8BAAAA,QAAA,cAAC6T,QAAAA,MAAM/S,EAAE,OAAOuP,eAAAA,cAA6B,CAAA,CAAA,GAE/CrQ,8BAAAA,QAAA,cAACgT,8BAAa3Q,MAAI;IAChBO,SAAS,MAAM2N,qBAAqB,MAAA;IACpCmD,eAAa,QAAQrD,eAAAA;KAErBrQ,8BAAAA,QAAA,cAAC2T,uBAAAA;IAAKrM,MAAM;IAAGsM,MAAK;MACpB5T,8BAAAA,QAAA,cAAC6T,QAAAA,MAAM/S,EAAE,UAAUuP,eAAAA,QAAuB,CAAA,CAAA,CAAA,GAG9CrQ,8BAAAA,QAAA,cAACgT,8BAAac,OAAK,IAAA,CAAA,CAAA,CAAA;AAK7B;ADrWO,IAAMC,qBAAiBC,oBAAK,MAAM,OAAO,+BAAA,CAAA;",
|
|
6
|
+
"names": ["import_react", "import_compute", "import_react_ui", "import_react_ui_grid", "import_react_ui_theme", "import_app_framework", "import_echo_schema", "import_echo", "ComputeGraphContext", "createContext", "undefined", "ComputeGraphContextProvider", "registry", "children", "React", "Provider", "value", "useComputeGraph", "space", "useContext", "raise", "Error", "graph", "useAsyncState", "getOrCreateGraph", "open", "RangeList", "sheet", "t", "useTranslation", "SHEET_PLUGIN", "handleSelectRange", "range", "handleDeleteRange", "useCallback", "index", "ranges", "findIndex", "sheetRange", "splice", "h2", "className", "List", "Root", "items", "isItem", "S", "is", "Range", "map", "i", "Item", "key", "item", "classNames", "ghostHover", "ItemDragHandle", "ItemTitle", "onClick", "position", "rangeToA1Notation", "rangeFromIndex", "ItemDeleteButton", "completeCellRangeToThreadCursor", "from", "col", "row", "to", "parseThreadAnchorAsCellRange", "cursor", "coords", "split", "length", "fromCol", "fromRow", "toCol", "toRow", "parseInt", "useUpdateFocusedCellOnThreadSelection", "grid", "model", "setActiveRefs", "useSheetContext", "scrollIntoViewResolver", "useMemo", "createResolver", "intent", "LayoutAction", "ScrollIntoView", "filter", "data", "fields", "input", "subject", "fullyQualifiedId", "options", "resolve", "ref", "setFocus", "plane", "useIntentResolver", "useSelectThreadOnCellFocus", "dispatchPromise", "dispatch", "useIntentDispatcher", "threads", "thread", "JSON", "stringify", "selectClosestThread", "cellAddress", "closestThread", "find", "target", "anchor", "inRange", "createIntent", "ThreadAction", "Select", "current", "debounced", "debounce", "cellCoords", "requestAnimationFrame", "useEffect", "createDxGridColumns", "columns", "reduce", "acc", "columnId", "numericIndex", "columnMeta", "size", "resizeable", "createDxGridRows", "rows", "rowId", "rowMeta", "projectCellProps", "address", "rawValue", "getValue", "threadRefs", "join", "description", "getValueDescription", "type", "format", "cellClassNameForRange", "reverse", "parseValue", "mx", "cellClassesForFieldType", "commentedClassName", "dataRefs", "gridCellGetter", "cachedGridCells", "nextBounds", "Array", "end", "start", "forEach", "_", "c0", "r0", "rowLabelCell", "rowToA1Notation", "resizeHandle", "colLabelCell", "colToA1Notation", "cellGetter", "getGridCells", "r", "c", "useSheetModelDxGridProps", "dxGrid", "setColumns", "useState", "setRows", "cellsAccessor", "createDocAccessor", "getCells", "handleCellsUpdate", "requestUpdate", "handle", "addListener", "unsubscribe", "update", "on", "removeListener", "columnMetaAccessor", "rowMetaAccessor", "handleColumnMetaUpdate", "handleRowMetaUpdate", "SheetContext", "context", "invariant", "SheetProviderImpl", "onInfo", "ignoreAttention", "__gridScope", "id", "editing", "setEditing", "useGridContext", "setCursorInternal", "setRangeInternal", "cursorFallbackRange", "setCursorFallbackRange", "activeRefs", "setCursor", "nextCursor", "setRange", "nextRange", "SheetProvider", "readonly", "useSheetModel", "Grid", "inertPosition", "initialCells", "frozenColsStart", "frozenRowsStart", "frozen", "sheetRowDefault", "defaultSizeRow", "sheetColDefault", "GridSheet", "setDxGrid", "extraplanarFocus", "setExtraplanarFocus", "rangeController", "useRef", "hasAttention", "useAttention", "handleFocus", "event", "cell", "closestCell", "handleClose", "_value", "shift", "axis", "includes", "delta", "startsWith", "refocus", "handleBlur", "setValue", "parseCellIndex", "handleAxisResize", "handleSelect", "minCol", "maxCol", "minRow", "maxRow", "handleWheel", "stopPropagation", "selectEntireAxis", "pos", "setSelection", "handleClick", "handleKeyDown", "preventDefault", "clear", "metaKey", "ctrlKey", "cut", "copy", "paste", "shiftKey", "redo", "undo", "contextMenuAnchorRef", "contextMenuOpen", "setContextMenuOpen", "contextMenuAxis", "handleContextMenu", "handleAxisMenuAction", "operation", "SheetAction", "InsertAxis", "DropAxis", "axisIndex", "extension", "editorKeys", "onClose", "initialContent", "onNav", "sheetExtension", "functions", "getFunctions", "rangeExtension", "onInit", "fn", "onStateChange", "state", "mode", "activeRange", "getCellContent", "getCellText", "div", "role", "GridCellEditor", "onBlur", "Content", "limitColumns", "DEFAULT_COLS", "limitRows", "DEFAULT_ROWS", "onAxisResize", "onSelect", "rowDefault", "columnDefault", "onFocus", "onWheelCapture", "onKeyDown", "onContextMenu", "overscroll", "DropdownMenu", "modal", "onOpenChange", "nextOpen", "VirtualTrigger", "virtualRef", "side", "sideOffset", "collisionPadding", "Viewport", "data-testid", "Icon", "icon", "span", "Arrow", "SheetContainer", "lazy"]
|
|
7
|
+
}
|
|
@@ -16,8 +16,8 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
19
|
+
var chunk_4LSYTNS4_exports = {};
|
|
20
|
+
__export(chunk_4LSYTNS4_exports, {
|
|
21
21
|
ApiError: () => ApiError,
|
|
22
22
|
CellValue: () => CellValue,
|
|
23
23
|
DEFAULT_COLS: () => DEFAULT_COLS,
|
|
@@ -48,8 +48,8 @@ __export(chunk_E3RXOEL6_exports, {
|
|
|
48
48
|
styleKey: () => styleKey,
|
|
49
49
|
useSheetModel: () => useSheetModel
|
|
50
50
|
});
|
|
51
|
-
module.exports = __toCommonJS(
|
|
52
|
-
var
|
|
51
|
+
module.exports = __toCommonJS(chunk_4LSYTNS4_exports);
|
|
52
|
+
var import_chunk_MLU6KRQN = require("./chunk-MLU6KRQN.cjs");
|
|
53
53
|
var import_echo_schema = require("@dxos/echo-schema");
|
|
54
54
|
var import_types = require("@dxos/plugin-space/types");
|
|
55
55
|
var import_echo_schema2 = require("@dxos/echo-schema");
|
|
@@ -732,7 +732,7 @@ var useSheetModel = (graph, sheet, { readonly } = {}) => {
|
|
|
732
732
|
};
|
|
733
733
|
var SheetAction;
|
|
734
734
|
(function(SheetAction2) {
|
|
735
|
-
const SHEET_ACTION = `${
|
|
735
|
+
const SHEET_ACTION = `${import_chunk_MLU6KRQN.SHEET_PLUGIN}/action`;
|
|
736
736
|
class Create extends import_echo_schema2.S.TaggedClass()(`${SHEET_ACTION}/create`, {
|
|
737
737
|
input: import_echo_schema2.S.Struct({
|
|
738
738
|
name: import_echo_schema2.S.optional(import_echo_schema2.S.String)
|
|
@@ -932,4 +932,4 @@ var mapFormulaIndicesToRefs = (sheet, formula) => {
|
|
|
932
932
|
styleKey,
|
|
933
933
|
useSheetModel
|
|
934
934
|
});
|
|
935
|
-
//# sourceMappingURL=chunk-
|
|
935
|
+
//# sourceMappingURL=chunk-4LSYTNS4.cjs.map
|
|
@@ -16,23 +16,26 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
return to;
|
|
17
17
|
};
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
19
|
+
var chunk_MLU6KRQN_exports = {};
|
|
20
|
+
__export(chunk_MLU6KRQN_exports, {
|
|
21
21
|
SHEET_PLUGIN: () => SHEET_PLUGIN,
|
|
22
22
|
meta: () => meta
|
|
23
23
|
});
|
|
24
|
-
module.exports = __toCommonJS(
|
|
24
|
+
module.exports = __toCommonJS(chunk_MLU6KRQN_exports);
|
|
25
25
|
var SHEET_PLUGIN = "dxos.org/plugin/sheet";
|
|
26
26
|
var meta = {
|
|
27
27
|
id: SHEET_PLUGIN,
|
|
28
28
|
name: "Sheet",
|
|
29
|
-
description: "
|
|
29
|
+
description: "Sheets in Composer are simple spreadsheets which allow you to leverage custom functions inside of cell grids. Leverage more than 400 pre-built formulas like Sum, Average, Count, Max, Min along with many others. You can also deploy your own custom functions using the Scripts plugin. ",
|
|
30
30
|
icon: "ph--grid-nine--regular",
|
|
31
|
-
source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-sheet"
|
|
31
|
+
source: "https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-sheet",
|
|
32
|
+
screenshots: [
|
|
33
|
+
"https://dxos.network/plugin-details-sheet-dark.png"
|
|
34
|
+
]
|
|
32
35
|
};
|
|
33
36
|
// Annotate the CommonJS export names for ESM import in node:
|
|
34
37
|
0 && (module.exports = {
|
|
35
38
|
SHEET_PLUGIN,
|
|
36
39
|
meta
|
|
37
40
|
});
|
|
38
|
-
//# sourceMappingURL=chunk-
|
|
41
|
+
//# sourceMappingURL=chunk-MLU6KRQN.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/meta.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const SHEET_PLUGIN = 'dxos.org/plugin/sheet';\n\nexport const meta = {\n id: SHEET_PLUGIN,\n name: 'Sheet',\n description:\n 'Sheets in Composer are simple spreadsheets which allow you to leverage custom functions inside of cell grids. Leverage more than 400 pre-built formulas like Sum, Average, Count, Max, Min along with many others. You can also deploy your own custom functions using the Scripts plugin. ',\n icon: 'ph--grid-nine--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-sheet',\n screenshots: ['https://dxos.network/plugin-details-sheet-dark.png'],\n} satisfies PluginMeta;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAMO,IAAMA,eAAe;AAErB,IAAMC,OAAO;EAClBC,IAAIF;EACJG,MAAM;EACNC,aACE;EACFC,MAAM;EACNC,QAAQ;EACRC,aAAa;IAAC;;AAChB;",
|
|
6
|
+
"names": ["SHEET_PLUGIN", "meta", "id", "name", "description", "icon", "source", "screenshots"]
|
|
7
|
+
}
|