@dxos/plugin-stack 0.6.13-main.ed424a1 → 0.6.13
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/{StackMain-ILYVK656.mjs → StackMain-XRQRNZ4I.mjs} +11 -12
- package/dist/lib/browser/StackMain-XRQRNZ4I.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ONAKM24Z.mjs → chunk-AYDYMPJK.mjs} +6 -3
- package/dist/lib/browser/chunk-AYDYMPJK.mjs.map +7 -0
- package/dist/lib/browser/{chunk-6PHTGCQZ.mjs → chunk-R5KXWF2W.mjs} +3 -9
- package/dist/lib/browser/chunk-R5KXWF2W.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +9 -9
- 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/index.mjs +1 -1
- package/dist/lib/node/{StackMain-LAYSQV2S.cjs → StackMain-XJGYFDDN.cjs} +25 -26
- package/dist/lib/node/StackMain-XJGYFDDN.cjs.map +7 -0
- package/dist/lib/node/{chunk-3D3FPZWK.cjs → chunk-EMD6A66G.cjs} +6 -12
- package/dist/lib/node/chunk-EMD6A66G.cjs.map +7 -0
- package/dist/lib/node/{chunk-O5SQVKNW.cjs → chunk-I42JKRXR.cjs} +18 -5
- package/dist/lib/node/chunk-I42JKRXR.cjs.map +7 -0
- package/dist/lib/node/index.cjs +53 -53
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.cjs +4 -4
- package/dist/lib/node/meta.cjs.map +1 -1
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/types/index.cjs +3 -3
- package/dist/lib/node/types/index.cjs.map +1 -1
- package/dist/types/src/StackPlugin.d.ts.map +1 -1
- package/dist/types/src/components/AddSectionDialog.d.ts.map +1 -1
- package/dist/types/src/components/StackMain.d.ts +1 -2
- package/dist/types/src/components/StackMain.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -2
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +4 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/package.json +29 -34
- package/src/StackPlugin.tsx +7 -15
- package/src/components/AddSectionDialog.tsx +2 -1
- package/src/components/StackMain.tsx +47 -50
- package/src/{meta.ts → meta.tsx} +5 -3
- package/src/types/stack.ts +3 -3
- package/dist/lib/browser/StackMain-ILYVK656.mjs.map +0 -7
- package/dist/lib/browser/chunk-6PHTGCQZ.mjs.map +0 -7
- package/dist/lib/browser/chunk-ONAKM24Z.mjs.map +0 -7
- package/dist/lib/node/StackMain-LAYSQV2S.cjs.map +0 -7
- package/dist/lib/node/chunk-3D3FPZWK.cjs.map +0 -7
- package/dist/lib/node/chunk-O5SQVKNW.cjs.map +0 -7
- package/dist/lib/node-esm/StackMain-KH6IEQQ6.mjs +0 -278
- package/dist/lib/node-esm/StackMain-KH6IEQQ6.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HRY4R5UU.mjs +0 -29
- package/dist/lib/node-esm/chunk-HRY4R5UU.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-J57BXQJY.mjs +0 -18
- package/dist/lib/node-esm/chunk-J57BXQJY.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -286
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/meta.mjs +0 -12
- package/dist/lib/node-esm/meta.mjs.map +0 -7
- package/dist/lib/node-esm/types/index.mjs +0 -10
- package/dist/lib/node-esm/types/index.mjs.map +0 -7
|
@@ -26,21 +26,21 @@ 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 StackMain_XJGYFDDN_exports = {};
|
|
30
|
+
__export(StackMain_XJGYFDDN_exports, {
|
|
31
31
|
default: () => StackMain_default
|
|
32
32
|
});
|
|
33
|
-
module.exports = __toCommonJS(
|
|
34
|
-
var
|
|
35
|
-
var
|
|
33
|
+
module.exports = __toCommonJS(StackMain_XJGYFDDN_exports);
|
|
34
|
+
var import_chunk_I42JKRXR = require("./chunk-I42JKRXR.cjs");
|
|
35
|
+
var import_chunk_EMD6A66G = require("./chunk-EMD6A66G.cjs");
|
|
36
36
|
var import_react = require("@phosphor-icons/react");
|
|
37
37
|
var import_react2 = __toESM(require("react"));
|
|
38
38
|
var import_app_framework = require("@dxos/app-framework");
|
|
39
|
-
var
|
|
39
|
+
var import_echo_schema = require("@dxos/echo-schema");
|
|
40
40
|
var import_plugin_graph = require("@dxos/plugin-graph");
|
|
41
41
|
var import_plugin_space = require("@dxos/plugin-space");
|
|
42
|
+
var import_echo = require("@dxos/react-client/echo");
|
|
42
43
|
var import_react_ui = require("@dxos/react-ui");
|
|
43
|
-
var import_react_ui_attention = require("@dxos/react-ui-attention");
|
|
44
44
|
var import_react_ui_mosaic = require("@dxos/react-ui-mosaic");
|
|
45
45
|
var import_react_ui_stack = require("@dxos/react-ui-stack");
|
|
46
46
|
var import_util = require("@dxos/util");
|
|
@@ -85,15 +85,15 @@ var AddSection = ({ collection }) => {
|
|
|
85
85
|
axis: "grid"
|
|
86
86
|
});
|
|
87
87
|
const dispatch = (0, import_app_framework2.useIntentDispatcher)();
|
|
88
|
-
const { t } = (0, import_react_ui2.useTranslation)(
|
|
89
|
-
const stackPlugin = (0, import_app_framework2.usePlugin)(
|
|
88
|
+
const { t } = (0, import_react_ui2.useTranslation)(import_chunk_I42JKRXR.STACK_PLUGIN);
|
|
89
|
+
const stackPlugin = (0, import_app_framework2.usePlugin)(import_chunk_I42JKRXR.STACK_PLUGIN);
|
|
90
90
|
const stackCreators = stackPlugin?.provides?.stack.creators ?? [];
|
|
91
91
|
const handleAdd = (0, import_react3.useCallback)(async (creator) => {
|
|
92
92
|
const { data: section } = await dispatch(creator.intent) ?? {};
|
|
93
93
|
collection.objects = [
|
|
94
94
|
section
|
|
95
95
|
];
|
|
96
|
-
const stack = collection.views[
|
|
96
|
+
const stack = collection.views[import_chunk_EMD6A66G.StackViewType.typename];
|
|
97
97
|
if (stack) {
|
|
98
98
|
stack.sections[section.id] = {};
|
|
99
99
|
}
|
|
@@ -129,28 +129,29 @@ var SectionContent = ({ data }) => {
|
|
|
129
129
|
placeholder: /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null)
|
|
130
130
|
});
|
|
131
131
|
};
|
|
132
|
-
var StackMain = ({
|
|
132
|
+
var StackMain = ({ collection, separation }) => {
|
|
133
133
|
const dispatch = (0, import_app_framework.useIntentDispatcher)();
|
|
134
134
|
const { graph } = (0, import_plugin_graph.useGraph)();
|
|
135
|
-
const { t } = (0, import_react_ui.useTranslation)(
|
|
135
|
+
const { t } = (0, import_react_ui.useTranslation)(import_chunk_I42JKRXR.STACK_PLUGIN);
|
|
136
136
|
const metadataPlugin = (0, import_app_framework.useResolvePlugin)(import_app_framework.parseMetadataResolverPlugin);
|
|
137
|
-
const defaultStack = (0, import_react2.useMemo)(() => (0,
|
|
137
|
+
const defaultStack = (0, import_react2.useMemo)(() => (0, import_echo_schema.create)(import_chunk_EMD6A66G.StackViewType, {
|
|
138
138
|
sections: {}
|
|
139
139
|
}), [
|
|
140
140
|
collection
|
|
141
141
|
]);
|
|
142
|
-
const stack = collection.views[
|
|
142
|
+
const stack = collection.views[import_chunk_EMD6A66G.StackViewType.typename] ?? defaultStack;
|
|
143
143
|
const [collapsedSections, setCollapsedSections] = (0, import_react2.useState)({});
|
|
144
144
|
(0, import_react2.useEffect)(() => {
|
|
145
|
-
if (!collection.views[
|
|
146
|
-
collection.views[
|
|
145
|
+
if (!collection.views[import_chunk_EMD6A66G.StackViewType.typename]) {
|
|
146
|
+
collection.views[import_chunk_EMD6A66G.StackViewType.typename] = stack;
|
|
147
147
|
}
|
|
148
148
|
}, [
|
|
149
149
|
collection,
|
|
150
150
|
stack
|
|
151
151
|
]);
|
|
152
|
+
const id = `stack-${collection.id}`;
|
|
152
153
|
const items = collection.objects.filter(import_util.nonNullable).map((object) => {
|
|
153
|
-
const metadata = metadataPlugin?.provides.metadata.resolver((0,
|
|
154
|
+
const metadata = metadataPlugin?.provides.metadata.resolver((0, import_echo_schema.getType)(object)?.objectId ?? "never");
|
|
154
155
|
const view = {
|
|
155
156
|
...stack.sections[object.id],
|
|
156
157
|
collapsed: collapsedSections[(0, import_echo.fullyQualifiedId)(object)],
|
|
@@ -164,7 +165,7 @@ var StackMain = ({ id, collection, separation }) => {
|
|
|
164
165
|
};
|
|
165
166
|
}) ?? [];
|
|
166
167
|
const handleOver = ({ active, over }) => {
|
|
167
|
-
if (active.type !==
|
|
168
|
+
if (active.type !== import_chunk_I42JKRXR.SECTION_IDENTIFIER) {
|
|
168
169
|
return "reject";
|
|
169
170
|
}
|
|
170
171
|
if (import_react_ui_mosaic.Path.parent(active.path) === import_react_ui_mosaic.Path.parent(over.path)) {
|
|
@@ -172,7 +173,7 @@ var StackMain = ({ id, collection, separation }) => {
|
|
|
172
173
|
}
|
|
173
174
|
const parseData = metadataPlugin?.provides.metadata.resolver(active.type)?.parse;
|
|
174
175
|
const data = parseData ? parseData(active.item, "object") : active.item;
|
|
175
|
-
if (!(0,
|
|
176
|
+
if (!(0, import_echo_schema.isReactiveObject)(data)) {
|
|
176
177
|
return "reject";
|
|
177
178
|
}
|
|
178
179
|
const exists = items.findIndex(({ id: id2 }) => id2 === active.item.id) >= 0;
|
|
@@ -236,7 +237,7 @@ var StackMain = ({ id, collection, separation }) => {
|
|
|
236
237
|
action: import_app_framework.LayoutAction.SET_LAYOUT,
|
|
237
238
|
data: {
|
|
238
239
|
element: "dialog",
|
|
239
|
-
component: `${
|
|
240
|
+
component: `${import_chunk_I42JKRXR.STACK_PLUGIN}/AddSectionDialog`,
|
|
240
241
|
subject: {
|
|
241
242
|
path,
|
|
242
243
|
position,
|
|
@@ -251,13 +252,11 @@ var StackMain = ({ id, collection, separation }) => {
|
|
|
251
252
|
[id2]: collapsed
|
|
252
253
|
}));
|
|
253
254
|
};
|
|
254
|
-
return /* @__PURE__ */ import_react2.default.createElement(
|
|
255
|
-
id
|
|
256
|
-
}, /* @__PURE__ */ import_react2.default.createElement(import_react_ui_mosaic.Mosaic.Root, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui_mosaic.Mosaic.DragOverlay, null), /* @__PURE__ */ import_react2.default.createElement(import_react_ui_stack.Stack, {
|
|
255
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui_stack.Stack, {
|
|
257
256
|
id,
|
|
258
257
|
"data-testid": "main.stack",
|
|
259
258
|
SectionContent,
|
|
260
|
-
type:
|
|
259
|
+
type: import_chunk_I42JKRXR.SECTION_IDENTIFIER,
|
|
261
260
|
items,
|
|
262
261
|
separation,
|
|
263
262
|
emptyComponent: /* @__PURE__ */ import_react2.default.createElement("span", {
|
|
@@ -290,7 +289,7 @@ var StackMain = ({ id, collection, separation }) => {
|
|
|
290
289
|
})
|
|
291
290
|
}, /* @__PURE__ */ import_react2.default.createElement(import_react.Plus, null), /* @__PURE__ */ import_react2.default.createElement("span", {
|
|
292
291
|
className: "sr-only"
|
|
293
|
-
}, t("add section label")))))
|
|
292
|
+
}, t("add section label")))));
|
|
294
293
|
};
|
|
295
294
|
var StackMain_default = StackMain;
|
|
296
|
-
//# sourceMappingURL=StackMain-
|
|
295
|
+
//# sourceMappingURL=StackMain-XJGYFDDN.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/StackMain.tsx", "../../../src/components/AddSection.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plus } from '@phosphor-icons/react';\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport {\n LayoutAction,\n NavigationAction,\n parseMetadataResolverPlugin,\n Surface,\n useIntentDispatcher,\n useResolvePlugin,\n} from '@dxos/app-framework';\nimport { create, getType, isReactiveObject } from '@dxos/echo-schema';\nimport { useGraph } from '@dxos/plugin-graph';\nimport { SpaceAction } from '@dxos/plugin-space';\nimport { type CollectionType } from '@dxos/plugin-space/types';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { Button, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { type MosaicDataItem, type MosaicDropEvent, type MosaicMoveEvent, Path } from '@dxos/react-ui-mosaic';\nimport {\n type AddSectionPosition,\n type CollapsedSections,\n Stack,\n type StackProps,\n type StackSectionItem,\n} from '@dxos/react-ui-stack';\nimport { nonNullable } from '@dxos/util';\n\nimport { AddSection } from './AddSection';\nimport { SECTION_IDENTIFIER, STACK_PLUGIN } from '../meta';\nimport { StackViewType } from '../types';\n\nconst SectionContent: StackProps['SectionContent'] = ({ data }) => {\n // TODO(wittjosiah): Better section placeholder.\n return <Surface role='section' data={{ object: data }} limit={1} placeholder={<></>} />;\n};\n\ntype StackMainProps = {\n collection: CollectionType;\n separation?: boolean;\n};\n\nconst StackMain = ({ collection, separation }: StackMainProps) => {\n const dispatch = useIntentDispatcher();\n const { graph } = useGraph();\n const { t } = useTranslation(STACK_PLUGIN);\n const metadataPlugin = useResolvePlugin(parseMetadataResolverPlugin);\n const defaultStack = useMemo(() => create(StackViewType, { sections: {} }), [collection]);\n const stack = (collection.views[StackViewType.typename] as StackViewType) ?? defaultStack;\n const [collapsedSections, setCollapsedSections] = useState<CollapsedSections>({});\n\n useEffect(() => {\n if (!collection.views[StackViewType.typename]) {\n collection.views[StackViewType.typename] = stack;\n }\n }, [collection, stack]);\n\n const id = `stack-${collection.id}`;\n const items =\n collection.objects\n // TODO(wittjosiah): Should the database handle this differently?\n // TODO(wittjosiah): Render placeholders for missing objects so they can be removed from the stack?\n .filter(nonNullable)\n .map((object) => {\n const metadata = metadataPlugin?.provides.metadata.resolver(\n getType(object)?.objectId ?? 'never',\n ) as StackSectionItem['metadata'];\n const view = {\n ...stack.sections[object.id],\n collapsed: collapsedSections[fullyQualifiedId(object)],\n title:\n (object as any)?.title ?? toLocalizedString(graph.findNode(fullyQualifiedId(object))?.properties.label, t),\n } as StackSectionItem['view'];\n return { id: fullyQualifiedId(object), object, metadata, view };\n }) ?? [];\n\n const handleOver = ({ active, over }: MosaicMoveEvent<number>) => {\n // TODO(thure): Eventually Stack should handle foreign draggables.\n if (active.type !== SECTION_IDENTIFIER) {\n return 'reject';\n }\n if (Path.parent(active.path) === Path.parent(over.path)) {\n return 'rearrange';\n }\n\n const parseData = metadataPlugin?.provides.metadata.resolver(active.type)?.parse;\n const data = parseData ? parseData(active.item, 'object') : active.item;\n\n // TODO(wittjosiah): Prevent dropping items which don't have a section renderer?\n // Perhaps stack plugin should just provide a fallback section renderer.\n if (!isReactiveObject(data)) {\n return 'reject';\n }\n\n const exists = items.findIndex(({ id }) => id === active.item.id) >= 0;\n if (!exists) {\n return 'transfer';\n } else {\n return 'reject';\n }\n };\n\n const handleDrop = ({ operation, active, over }: MosaicDropEvent<number>) => {\n if (\n (active.path === Path.create(id, active.item.id) || active.path === id) &&\n (operation !== 'copy' || over.path === Path.create(id, over.item.id) || over.path === id)\n ) {\n collection.objects.splice(active.position!, 1);\n delete stack.sections[active.item.id];\n }\n\n const parseData = metadataPlugin?.provides.metadata.resolver(active.type)?.parse;\n const object = parseData?.(active.item, 'object');\n if (object && over.path === Path.create(id, over.item.id)) {\n collection.objects.splice(over.position!, 0, object);\n } else if (object && over.path === id) {\n collection.objects.push(object);\n }\n\n if (!stack.sections[object.id]) {\n stack.sections[object.id] = {};\n }\n };\n\n const handleDelete = async (path: string) => {\n const index = collection.objects\n .filter(nonNullable)\n .findIndex((section) => fullyQualifiedId(section) === Path.last(path));\n if (index >= 0) {\n await dispatch({\n action: SpaceAction.REMOVE_OBJECT,\n data: { object: collection.objects[index], collection },\n });\n\n // TODO(wittjosiah): The section should also be removed, but needs to be restored if the action is undone.\n // delete stack.sections[Path.last(path)];\n }\n };\n\n // TODO(wittjosiah): Factor out.\n\n const handleNavigate = async (object: MosaicDataItem) => {\n const toId = fullyQualifiedId(object);\n await dispatch([\n {\n action: NavigationAction.OPEN,\n data: { activeParts: { main: [toId] } },\n },\n {\n action: LayoutAction.SCROLL_INTO_VIEW,\n data: { id: toId },\n },\n ]);\n };\n\n const handleAddSection = (path: string, position: AddSectionPosition) => {\n void dispatch?.({\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: `${STACK_PLUGIN}/AddSectionDialog`,\n subject: { path, position, collection },\n },\n });\n };\n\n const handleCollapseSection = (id: string, collapsed: boolean) => {\n setCollapsedSections((prev) => ({ ...prev, [id]: collapsed }));\n };\n\n return (\n <>\n <Stack\n id={id}\n data-testid='main.stack'\n SectionContent={SectionContent}\n type={SECTION_IDENTIFIER}\n items={items}\n separation={separation}\n emptyComponent={<span data-testid='stack.empty'></span>}\n onDrop={handleDrop}\n onOver={handleOver}\n onDeleteSection={handleDelete}\n onNavigateToSection={handleNavigate}\n onAddSection={handleAddSection}\n onCollapseSection={handleCollapseSection}\n />\n\n {items.length === 0 ? (\n <AddSection collection={collection} />\n ) : (\n <div role='none' className='flex mlb-2 pli-2 justify-center'>\n <Button\n data-testid='stack.createSection'\n classNames='gap-2'\n onClick={() =>\n dispatch?.({\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: 'dxos.org/plugin/stack/AddSectionDialog',\n subject: { position: 'afterAll', collection },\n },\n })\n }\n >\n <Plus />\n <span className='sr-only'>{t('add section label')}</span>\n </Button>\n </div>\n )}\n </>\n );\n};\n\nexport default StackMain;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { type IconProps } from '@phosphor-icons/react';\nimport React, { type FC, type KeyboardEvent, type MouseEvent, useCallback } from 'react';\n\nimport { usePlugin, useIntentDispatcher } from '@dxos/app-framework';\nimport { type CollectionType } from '@dxos/plugin-space/types';\nimport { toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { STACK_PLUGIN } from '../meta';\nimport { StackViewType, type StackSectionCreator, type StackPluginProvides } from '../types';\n\nconst CreatorTile = ({\n Icon,\n label,\n testId,\n handleAdd,\n}: {\n Icon: FC<IconProps>;\n testId: string;\n label: string;\n handleAdd: () => void;\n}) => {\n const onClick = useCallback((_: MouseEvent<HTMLDivElement>) => handleAdd(), [handleAdd]);\n const onKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n handleAdd();\n }\n },\n [handleAdd],\n );\n\n return (\n <div\n role='button'\n aria-label={label}\n tabIndex={0}\n className={mx(\n 'flex items-center w-[10rem] h-16 overflow-hidden',\n 'border rounded-md border-separator shadow-sm hover:bg-hoverSurface cursor-pointer',\n )}\n onClick={onClick}\n onKeyDown={onKeyDown}\n data-testid={testId}\n >\n <div className='flex h-full w-12 items-center justify-center bg-scrim shrink-0 border-r border-separator'>\n <Icon weight='thin' className={getSize(6)} />\n </div>\n <div className='overflow-hidden items-center p-2 px-3'>\n <span className='capitalize'>{label}</span>\n </div>\n </div>\n );\n};\n\nexport const AddSection = ({ collection }: { collection: CollectionType }) => {\n const domAttributes = useArrowNavigationGroup({ axis: 'grid' });\n const dispatch = useIntentDispatcher();\n const { t } = useTranslation(STACK_PLUGIN);\n\n const stackPlugin = usePlugin<StackPluginProvides>(STACK_PLUGIN);\n const stackCreators = stackPlugin?.provides?.stack.creators ?? [];\n\n const handleAdd = useCallback(\n async (creator: StackSectionCreator) => {\n const { data: section } = (await dispatch(creator.intent)) ?? {};\n collection.objects = [section];\n const stack = collection.views[StackViewType.typename];\n if (stack) {\n stack.sections[section.id] = {};\n }\n },\n [collection, dispatch],\n );\n\n if (stackCreators.length === 0) {\n return null;\n }\n\n return (\n <div {...domAttributes} role='none' className='flex flex-wrap items-center p-8 gap-4'>\n {stackCreators.map((creator) => {\n const { id, type, icon, testId } = creator;\n return (\n <CreatorTile\n key={id}\n label={toLocalizedString(type, t)}\n testId={testId}\n Icon={icon}\n handleAdd={() => handleAdd(creator)}\n />\n );\n })}\n </div>\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_react", "import_app_framework", "import_react_ui", "CreatorTile", "Icon", "label", "testId", "handleAdd", "onClick", "useCallback", "_", "onKeyDown", "event", "key", "preventDefault", "React", "div", "role", "aria-label", "tabIndex", "className", "mx", "data-testid", "weight", "getSize", "span", "AddSection", "collection", "domAttributes", "useArrowNavigationGroup", "axis", "dispatch", "useIntentDispatcher", "t", "useTranslation", "STACK_PLUGIN", "stackPlugin", "usePlugin", "stackCreators", "provides", "stack", "creators", "creator", "data", "section", "intent", "objects", "views", "StackViewType", "typename", "sections", "id", "length", "map", "type", "icon", "toLocalizedString", "SectionContent", "Surface", "object", "limit", "placeholder", "StackMain", "separation", "graph", "useGraph", "metadataPlugin", "useResolvePlugin", "parseMetadataResolverPlugin", "defaultStack", "useMemo", "create", "collapsedSections", "setCollapsedSections", "useState", "useEffect", "items", "filter", "nonNullable", "metadata", "resolver", "getType", "objectId", "view", "collapsed", "fullyQualifiedId", "title", "findNode", "properties", "handleOver", "active", "over", "SECTION_IDENTIFIER", "Path", "parent", "path", "parseData", "parse", "item", "isReactiveObject", "exists", "findIndex", "handleDrop", "operation", "splice", "position", "push", "handleDelete", "index", "last", "action", "SpaceAction", "REMOVE_OBJECT", "handleNavigate", "toId", "NavigationAction", "OPEN", "activeParts", "main", "LayoutAction", "SCROLL_INTO_VIEW", "handleAddSection", "SET_LAYOUT", "element", "component", "subject", "handleCollapseSection", "prev", "Stack", "emptyComponent", "onDrop", "onOver", "onDeleteSection", "onNavigateToSection", "onAddSection", "onCollapseSection", "Button", "classNames", "Plus"]
|
|
7
|
+
}
|
|
@@ -16,30 +16,24 @@ 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_EMD6A66G_exports = {};
|
|
20
|
+
__export(chunk_EMD6A66G_exports, {
|
|
21
21
|
SectionSchema: () => SectionSchema,
|
|
22
22
|
StackViewType: () => StackViewType
|
|
23
23
|
});
|
|
24
|
-
module.exports = __toCommonJS(
|
|
24
|
+
module.exports = __toCommonJS(chunk_EMD6A66G_exports);
|
|
25
25
|
var import_echo_schema = require("@dxos/echo-schema");
|
|
26
26
|
var SectionSchema = import_echo_schema.S.Struct({
|
|
27
27
|
height: import_echo_schema.S.optional(import_echo_schema.S.Number),
|
|
28
28
|
// Space for data that isn't stack-specific but is specific to this view instance.
|
|
29
29
|
// e.g. cover/fill for an image
|
|
30
|
-
custom: import_echo_schema.S.optional(import_echo_schema.S.Record(
|
|
31
|
-
key: import_echo_schema.S.String,
|
|
32
|
-
value: import_echo_schema.S.Any
|
|
33
|
-
}))
|
|
30
|
+
custom: import_echo_schema.S.optional(import_echo_schema.S.Record(import_echo_schema.S.String, import_echo_schema.S.Any))
|
|
34
31
|
});
|
|
35
32
|
var StackViewType = class extends (0, import_echo_schema.TypedObject)({
|
|
36
33
|
typename: "dxos.org/type/StackView",
|
|
37
34
|
version: "0.1.0"
|
|
38
35
|
})({
|
|
39
|
-
sections: import_echo_schema.S.mutable(import_echo_schema.S.Record(
|
|
40
|
-
key: import_echo_schema.S.String,
|
|
41
|
-
value: SectionSchema
|
|
42
|
-
}))
|
|
36
|
+
sections: import_echo_schema.S.mutable(import_echo_schema.S.Record(import_echo_schema.S.String, SectionSchema))
|
|
43
37
|
}) {
|
|
44
38
|
};
|
|
45
39
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -47,4 +41,4 @@ var StackViewType = class extends (0, import_echo_schema.TypedObject)({
|
|
|
47
41
|
SectionSchema,
|
|
48
42
|
StackViewType
|
|
49
43
|
});
|
|
50
|
-
//# sourceMappingURL=chunk-
|
|
44
|
+
//# sourceMappingURL=chunk-EMD6A66G.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/types/stack.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { S, TypedObject } from '@dxos/echo-schema';\n\n// All section metadata needs to be optional/have defaults.\n// Any objects added to the collection will start with the section defaults.\n// If an object is removed from the collection without removing the section metadata this is fine.\n// Stack component should cleanup the superfluous data on future edits.\n\nexport const SectionSchema = S.Struct({\n height: S.optional(S.Number),\n // Space for data that isn't stack-specific but is specific to this view instance.\n // e.g. cover/fill for an image\n custom: S.optional(S.Record(S.String, S.Any)),\n});\n\nexport class StackViewType extends TypedObject({ typename: 'dxos.org/type/StackView', version: '0.1.0' })({\n sections: S.mutable(S.Record(S.String, SectionSchema)),\n}) {}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAIA,yBAA+B;AAOxB,IAAMA,gBAAgBC,qBAAEC,OAAO;EACpCC,QAAQF,qBAAEG,SAASH,qBAAEI,MAAM;;;EAG3BC,QAAQL,qBAAEG,SAASH,qBAAEM,OAAON,qBAAEO,QAAQP,qBAAEQ,GAAG,CAAA;AAC7C,CAAA;AAEO,IAAMC,gBAAN,kBAA4BC,gCAAY;EAAEC,UAAU;EAA2BC,SAAS;AAAQ,CAAA,EAAG;EACxGC,UAAUb,qBAAEc,QAAQd,qBAAEM,OAAON,qBAAEO,QAAQR,aAAAA,CAAAA;AACzC,CAAA,EAAA;AAAI;",
|
|
6
|
+
"names": ["SectionSchema", "S", "Struct", "height", "optional", "Number", "custom", "Record", "String", "Any", "StackViewType", "TypedObject", "typename", "version", "sections", "mutable"]
|
|
7
|
+
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
5
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
8
|
var __export = (target, all) => {
|
|
7
9
|
for (var name in all)
|
|
@@ -15,21 +17,32 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
17
|
}
|
|
16
18
|
return to;
|
|
17
19
|
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
18
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
var
|
|
20
|
-
__export(
|
|
29
|
+
var chunk_I42JKRXR_exports = {};
|
|
30
|
+
__export(chunk_I42JKRXR_exports, {
|
|
21
31
|
SECTION_IDENTIFIER: () => SECTION_IDENTIFIER,
|
|
22
32
|
STACK_PLUGIN: () => STACK_PLUGIN,
|
|
23
33
|
meta_default: () => meta_default
|
|
24
34
|
});
|
|
25
|
-
module.exports = __toCommonJS(
|
|
35
|
+
module.exports = __toCommonJS(chunk_I42JKRXR_exports);
|
|
36
|
+
var import_react = require("@phosphor-icons/react");
|
|
37
|
+
var import_react2 = __toESM(require("react"));
|
|
26
38
|
var STACK_PLUGIN = "dxos.org/plugin/stack";
|
|
27
39
|
var SECTION_IDENTIFIER = "dxos.org/type/StackSection";
|
|
28
40
|
var meta_default = {
|
|
29
41
|
id: STACK_PLUGIN,
|
|
30
42
|
// TODO(wittjosiah): Prevents "stacks" language from being exposed to users in settings panel.
|
|
31
43
|
name: "Collections",
|
|
32
|
-
|
|
44
|
+
iconComponent: (props) => /* @__PURE__ */ import_react2.default.createElement(import_react.StackSimple, props),
|
|
45
|
+
iconSymbol: "ph--stack-simple--regular"
|
|
33
46
|
};
|
|
34
47
|
// Annotate the CommonJS export names for ESM import in node:
|
|
35
48
|
0 && (module.exports = {
|
|
@@ -37,4 +50,4 @@ var meta_default = {
|
|
|
37
50
|
STACK_PLUGIN,
|
|
38
51
|
meta_default
|
|
39
52
|
});
|
|
40
|
-
//# sourceMappingURL=chunk-
|
|
53
|
+
//# sourceMappingURL=chunk-I42JKRXR.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/meta.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type IconProps, StackSimple } from '@phosphor-icons/react';\nimport React from 'react';\n\nexport const STACK_PLUGIN = 'dxos.org/plugin/stack';\nexport const SECTION_IDENTIFIER = 'dxos.org/type/StackSection';\n\nexport default {\n id: STACK_PLUGIN,\n // TODO(wittjosiah): Prevents \"stacks\" language from being exposed to users in settings panel.\n name: 'Collections',\n iconComponent: (props: IconProps) => <StackSimple {...props} />,\n iconSymbol: 'ph--stack-simple--regular',\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mBAA4C;AAC5C,IAAAA,gBAAkB;AAEX,IAAMC,eAAe;AACrB,IAAMC,qBAAqB;AAElC,IAAA,eAAe;EACbC,IAAIF;;EAEJG,MAAM;EACNC,eAAe,CAACC,UAAqB,8BAAAC,QAAA,cAACC,0BAAgBF,KAAAA;EACtDG,YAAY;AACd;",
|
|
6
|
+
"names": ["import_react", "STACK_PLUGIN", "SECTION_IDENTIFIER", "id", "name", "iconComponent", "props", "React", "StackSimple", "iconSymbol"]
|
|
7
|
+
}
|
package/dist/lib/node/index.cjs
CHANGED
|
@@ -28,29 +28,31 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
29
|
var node_exports = {};
|
|
30
30
|
__export(node_exports, {
|
|
31
|
-
SectionSchema: () =>
|
|
31
|
+
SectionSchema: () => import_chunk_EMD6A66G.SectionSchema,
|
|
32
32
|
StackPlugin: () => StackPlugin,
|
|
33
|
-
StackViewType: () =>
|
|
33
|
+
StackViewType: () => import_chunk_EMD6A66G.StackViewType,
|
|
34
34
|
default: () => src_default
|
|
35
35
|
});
|
|
36
36
|
module.exports = __toCommonJS(node_exports);
|
|
37
|
-
var
|
|
38
|
-
var
|
|
39
|
-
var import_react =
|
|
40
|
-
var
|
|
37
|
+
var import_chunk_I42JKRXR = require("./chunk-I42JKRXR.cjs");
|
|
38
|
+
var import_chunk_EMD6A66G = require("./chunk-EMD6A66G.cjs");
|
|
39
|
+
var import_react = require("@phosphor-icons/react");
|
|
40
|
+
var import_react2 = __toESM(require("react"));
|
|
41
|
+
var import_echo_schema = require("@dxos/echo-schema");
|
|
41
42
|
var import_local_storage = require("@dxos/local-storage");
|
|
42
43
|
var import_types = require("@dxos/plugin-space/types");
|
|
43
44
|
var import_react_ui = require("@dxos/react-ui");
|
|
44
45
|
var import_react_ui_theme = require("@dxos/react-ui-theme");
|
|
45
|
-
var import_react2 = __toESM(require("react"));
|
|
46
46
|
var import_react3 = __toESM(require("react"));
|
|
47
|
+
var import_react4 = __toESM(require("react"));
|
|
47
48
|
var import_plugin_settings = require("@dxos/plugin-settings");
|
|
48
49
|
var import_react_ui2 = require("@dxos/react-ui");
|
|
49
|
-
var
|
|
50
|
-
var
|
|
50
|
+
var import_react5 = require("@phosphor-icons/react");
|
|
51
|
+
var import_react6 = __toESM(require("react"));
|
|
51
52
|
var import_app_framework = require("@dxos/app-framework");
|
|
52
|
-
var
|
|
53
|
+
var import_echo_schema2 = require("@dxos/echo-schema");
|
|
53
54
|
var import_types2 = require("@dxos/plugin-ipfs/types");
|
|
55
|
+
var import_echo = require("@dxos/react-client/echo");
|
|
54
56
|
var import_react_ui3 = require("@dxos/react-ui");
|
|
55
57
|
var import_react_ui_mosaic = require("@dxos/react-ui-mosaic");
|
|
56
58
|
var import_react_ui_searchlist = require("@dxos/react-ui-searchlist");
|
|
@@ -58,10 +60,10 @@ var import_react_ui_theme2 = require("@dxos/react-ui-theme");
|
|
|
58
60
|
var import_util = require("@dxos/util");
|
|
59
61
|
var import_react_ui_stack = require("@dxos/react-ui-stack");
|
|
60
62
|
var StackSettings = ({ settings }) => {
|
|
61
|
-
const { t } = (0, import_react_ui2.useTranslation)(
|
|
62
|
-
return /* @__PURE__ */
|
|
63
|
+
const { t } = (0, import_react_ui2.useTranslation)(import_chunk_I42JKRXR.STACK_PLUGIN);
|
|
64
|
+
return /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, /* @__PURE__ */ import_react4.default.createElement(import_plugin_settings.SettingsValue, {
|
|
63
65
|
label: t("settings separation label")
|
|
64
|
-
}, /* @__PURE__ */
|
|
66
|
+
}, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Input.Switch, {
|
|
65
67
|
checked: settings.separation,
|
|
66
68
|
onCheckedChange: (checked) => settings.separation = !!checked
|
|
67
69
|
})));
|
|
@@ -70,18 +72,18 @@ var dataHasAddSectionDialogProps = (data) => {
|
|
|
70
72
|
return "subject" in data && typeof data.subject === "object" && !!data.subject && "position" in data.subject && typeof data.subject.position === "string" && "collection" in data.subject;
|
|
71
73
|
};
|
|
72
74
|
var AddSectionDialog = ({ path, position, collection }) => {
|
|
73
|
-
const { t } = (0, import_react_ui3.useTranslation)(
|
|
74
|
-
const stackPlugin = (0, import_app_framework.usePlugin)(
|
|
75
|
+
const { t } = (0, import_react_ui3.useTranslation)(import_chunk_I42JKRXR.STACK_PLUGIN);
|
|
76
|
+
const stackPlugin = (0, import_app_framework.usePlugin)(import_chunk_I42JKRXR.STACK_PLUGIN);
|
|
75
77
|
const fileManagerPlugin = (0, import_app_framework.useResolvePlugin)(import_app_framework.parseFileManagerPlugin);
|
|
76
|
-
const fileRef = (0,
|
|
78
|
+
const fileRef = (0, import_react6.useRef)(null);
|
|
77
79
|
const { dispatch } = (0, import_app_framework.useIntent)();
|
|
78
|
-
const space = (0,
|
|
79
|
-
const [pending, setPending] = (0,
|
|
80
|
-
const [uploadError, setUploadError] = (0,
|
|
81
|
-
const handleAdd = (0,
|
|
80
|
+
const space = (0, import_echo.getSpace)(collection);
|
|
81
|
+
const [pending, setPending] = (0, import_react6.useState)(false);
|
|
82
|
+
const [uploadError, setUploadError] = (0, import_react6.useState)();
|
|
83
|
+
const handleAdd = (0, import_react6.useCallback)((sectionObject) => {
|
|
82
84
|
const index = position === "beforeAll" ? 0 : position === "afterAll" ? collection.objects.length : collection.objects.filter(import_util.nonNullable).findIndex((section) => section.id === import_react_ui_mosaic.Path.last(path));
|
|
83
85
|
collection.objects.splice(index + (position === "after" ? 1 : 0), 0, sectionObject);
|
|
84
|
-
const stack = collection.views[
|
|
86
|
+
const stack = collection.views[import_chunk_EMD6A66G.StackViewType.typename];
|
|
85
87
|
if (stack) {
|
|
86
88
|
stack.sections[sectionObject.id] = {};
|
|
87
89
|
}
|
|
@@ -104,7 +106,7 @@ var AddSectionDialog = ({ path, position, collection }) => {
|
|
|
104
106
|
try {
|
|
105
107
|
const info = await fileManagerPlugin.provides.file.upload?.(file, space);
|
|
106
108
|
if (info) {
|
|
107
|
-
const obj = (0,
|
|
109
|
+
const obj = (0, import_echo_schema2.create)(import_types2.FileType, {
|
|
108
110
|
type: file.type,
|
|
109
111
|
name: filename,
|
|
110
112
|
filename,
|
|
@@ -116,20 +118,20 @@ var AddSectionDialog = ({ path, position, collection }) => {
|
|
|
116
118
|
setUploadError(err);
|
|
117
119
|
}
|
|
118
120
|
} : void 0;
|
|
119
|
-
return /* @__PURE__ */
|
|
121
|
+
return /* @__PURE__ */ import_react6.default.createElement(import_react_ui3.Dialog.Content, null, /* @__PURE__ */ import_react6.default.createElement(import_react_ui3.Dialog.Title, null, t(`add section ${position} dialog title`)), /* @__PURE__ */ import_react6.default.createElement(import_react_ui_searchlist.SearchList.Root, {
|
|
120
122
|
label: t("add section input placeholder")
|
|
121
|
-
}, /* @__PURE__ */
|
|
123
|
+
}, /* @__PURE__ */ import_react6.default.createElement(import_react_ui_searchlist.SearchList.Input, {
|
|
122
124
|
placeholder: t("add section input placeholder"),
|
|
123
125
|
classNames: "pli-3",
|
|
124
126
|
disabled: pending
|
|
125
|
-
}), /* @__PURE__ */
|
|
127
|
+
}), /* @__PURE__ */ import_react6.default.createElement(import_react_ui_searchlist.SearchList.Content, {
|
|
126
128
|
classNames: "min-bs-24 bs-fit max-bs-64 overflow-auto",
|
|
127
129
|
...pending && {
|
|
128
130
|
inert: "true"
|
|
129
131
|
}
|
|
130
132
|
}, stackPlugin?.provides?.stack.creators?.map(({ id, icon: Icon, label: propsLabel, testId, intent }) => {
|
|
131
133
|
const label = (0, import_react_ui3.toLocalizedString)(propsLabel, t);
|
|
132
|
-
return /* @__PURE__ */
|
|
134
|
+
return /* @__PURE__ */ import_react6.default.createElement(import_react_ui_searchlist.SearchList.Item, {
|
|
133
135
|
value: label,
|
|
134
136
|
key: id,
|
|
135
137
|
onSelect: async () => {
|
|
@@ -144,31 +146,31 @@ var AddSectionDialog = ({ path, position, collection }) => {
|
|
|
144
146
|
},
|
|
145
147
|
classNames: "flex items-center gap-2 pli-2",
|
|
146
148
|
"data-testid": testId
|
|
147
|
-
}, Icon && /* @__PURE__ */
|
|
149
|
+
}, Icon && /* @__PURE__ */ import_react6.default.createElement(Icon, {
|
|
148
150
|
className: (0, import_react_ui_theme2.mx)((0, import_react_ui_theme2.getSize)(4), "shrink-0")
|
|
149
|
-
}), /* @__PURE__ */
|
|
151
|
+
}), /* @__PURE__ */ import_react6.default.createElement("span", {
|
|
150
152
|
className: "grow truncate"
|
|
151
153
|
}, label));
|
|
152
|
-
}), handleFileUpload && /* @__PURE__ */
|
|
154
|
+
}), handleFileUpload && /* @__PURE__ */ import_react6.default.createElement(import_react_ui_searchlist.SearchList.Item, {
|
|
153
155
|
value: t("upload file label"),
|
|
154
156
|
classNames: "flex items-center gap-2 pli-2",
|
|
155
157
|
onSelect: () => fileRef.current?.click()
|
|
156
|
-
}, /* @__PURE__ */
|
|
158
|
+
}, /* @__PURE__ */ import_react6.default.createElement(import_react5.FilePlus, null), /* @__PURE__ */ import_react6.default.createElement("span", {
|
|
157
159
|
className: "grow truncate"
|
|
158
|
-
}, t("upload file label"))), uploadError && /* @__PURE__ */
|
|
160
|
+
}, t("upload file label"))), uploadError && /* @__PURE__ */ import_react6.default.createElement("div", {
|
|
159
161
|
className: "text-error-500"
|
|
160
|
-
}, uploadError.message))), handleFileUpload && /* @__PURE__ */
|
|
162
|
+
}, uploadError.message))), handleFileUpload && /* @__PURE__ */ import_react6.default.createElement("input", {
|
|
161
163
|
type: "file",
|
|
162
164
|
className: "sr-only",
|
|
163
165
|
ref: fileRef,
|
|
164
166
|
onChange: ({ target: { files } }) => files && handleFileUpload(files[0])
|
|
165
167
|
}));
|
|
166
168
|
};
|
|
167
|
-
var StackMain =
|
|
169
|
+
var StackMain = import_react3.default.lazy(() => import("./StackMain-XJGYFDDN.cjs"));
|
|
168
170
|
var translations_default = [
|
|
169
171
|
{
|
|
170
172
|
"en-US": {
|
|
171
|
-
[
|
|
173
|
+
[import_chunk_I42JKRXR.STACK_PLUGIN]: {
|
|
172
174
|
"plugin name": "Stacks",
|
|
173
175
|
"settings separation label": "Separate sections",
|
|
174
176
|
"add section beforeAll dialog title": "Add a section to the start",
|
|
@@ -184,21 +186,21 @@ var translations_default = [
|
|
|
184
186
|
...import_react_ui_stack.translations
|
|
185
187
|
];
|
|
186
188
|
var StackPlugin = () => {
|
|
187
|
-
const settings = new import_local_storage.LocalStorageStore(
|
|
189
|
+
const settings = new import_local_storage.LocalStorageStore(import_chunk_I42JKRXR.STACK_PLUGIN, {
|
|
188
190
|
separation: true
|
|
189
191
|
});
|
|
190
|
-
const stackState = (0,
|
|
192
|
+
const stackState = (0, import_echo_schema.create)({
|
|
191
193
|
creators: []
|
|
192
194
|
});
|
|
193
195
|
return {
|
|
194
|
-
meta:
|
|
196
|
+
meta: import_chunk_I42JKRXR.meta_default,
|
|
195
197
|
ready: async (plugins) => {
|
|
196
198
|
settings.prop({
|
|
197
199
|
key: "separation",
|
|
198
200
|
type: import_local_storage.LocalStorageStore.bool()
|
|
199
201
|
});
|
|
200
202
|
for (const plugin of plugins) {
|
|
201
|
-
if (plugin.meta.id ===
|
|
203
|
+
if (plugin.meta.id === import_chunk_I42JKRXR.STACK_PLUGIN) {
|
|
202
204
|
continue;
|
|
203
205
|
}
|
|
204
206
|
if (Array.isArray(plugin.provides?.stack?.creators)) {
|
|
@@ -210,16 +212,17 @@ var StackPlugin = () => {
|
|
|
210
212
|
settings: settings.values,
|
|
211
213
|
metadata: {
|
|
212
214
|
records: {
|
|
213
|
-
[
|
|
215
|
+
[import_chunk_EMD6A66G.StackViewType.typename]: {
|
|
214
216
|
placeholder: [
|
|
215
217
|
"stack title placeholder",
|
|
216
218
|
{
|
|
217
|
-
ns:
|
|
219
|
+
ns: import_chunk_I42JKRXR.STACK_PLUGIN
|
|
218
220
|
}
|
|
219
221
|
],
|
|
220
|
-
icon:
|
|
222
|
+
icon: (props) => /* @__PURE__ */ import_react2.default.createElement(import_react.StackSimple, props),
|
|
223
|
+
iconSymbol: "ph--stack-simple--regular"
|
|
221
224
|
},
|
|
222
|
-
[
|
|
225
|
+
[import_chunk_I42JKRXR.SECTION_IDENTIFIER]: {
|
|
223
226
|
parse: (section, type) => {
|
|
224
227
|
switch (type) {
|
|
225
228
|
case "node":
|
|
@@ -240,42 +243,39 @@ var StackPlugin = () => {
|
|
|
240
243
|
translations: translations_default,
|
|
241
244
|
echo: {
|
|
242
245
|
schema: [
|
|
243
|
-
|
|
246
|
+
import_chunk_EMD6A66G.StackViewType
|
|
244
247
|
]
|
|
245
248
|
},
|
|
246
249
|
surface: {
|
|
247
250
|
component: ({ data, role }) => {
|
|
248
251
|
switch (data.component) {
|
|
249
|
-
case `${
|
|
250
|
-
return dataHasAddSectionDialogProps(data) ? /* @__PURE__ */
|
|
252
|
+
case `${import_chunk_I42JKRXR.STACK_PLUGIN}/AddSectionDialog`:
|
|
253
|
+
return dataHasAddSectionDialogProps(data) ? /* @__PURE__ */ import_react2.default.createElement(AddSectionDialog, data.subject) : null;
|
|
251
254
|
}
|
|
252
255
|
const primary = data.active ?? data.object;
|
|
253
|
-
const id = typeof data.id === "string" ? data.id : void 0;
|
|
254
256
|
switch (role) {
|
|
255
257
|
case "main":
|
|
256
|
-
return primary instanceof import_types.CollectionType ? /* @__PURE__ */
|
|
258
|
+
return primary instanceof import_types.CollectionType ? /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Main.Content, {
|
|
257
259
|
bounce: true,
|
|
258
260
|
classNames: [
|
|
259
261
|
import_react_ui_theme.baseSurface,
|
|
260
262
|
import_react_ui_theme.topbarBlockPaddingStart,
|
|
261
263
|
import_react_ui_theme.bottombarBlockPaddingEnd
|
|
262
264
|
]
|
|
263
|
-
}, /* @__PURE__ */
|
|
264
|
-
id: id ?? (0, import_echo.fullyQualifiedId)(primary),
|
|
265
|
+
}, /* @__PURE__ */ import_react2.default.createElement(StackMain, {
|
|
265
266
|
collection: primary,
|
|
266
267
|
separation: settings.values.separation
|
|
267
268
|
})) : null;
|
|
268
269
|
case "article":
|
|
269
|
-
return primary instanceof import_types.CollectionType ? /* @__PURE__ */
|
|
270
|
+
return primary instanceof import_types.CollectionType ? /* @__PURE__ */ import_react2.default.createElement("div", {
|
|
270
271
|
role: "none",
|
|
271
272
|
className: "row-span-2 overflow-auto"
|
|
272
|
-
}, /* @__PURE__ */
|
|
273
|
-
id: id ?? (0, import_echo.fullyQualifiedId)(primary),
|
|
273
|
+
}, /* @__PURE__ */ import_react2.default.createElement(StackMain, {
|
|
274
274
|
collection: primary,
|
|
275
275
|
separation: settings.values.separation
|
|
276
276
|
})) : null;
|
|
277
277
|
case "settings": {
|
|
278
|
-
return data.plugin ===
|
|
278
|
+
return data.plugin === import_chunk_I42JKRXR.meta_default.id ? /* @__PURE__ */ import_react2.default.createElement(StackSettings, {
|
|
279
279
|
settings: settings.values
|
|
280
280
|
}) : null;
|
|
281
281
|
}
|