@dxos/plugin-stack 0.6.13 → 0.6.14-main.1366248
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-XRQRNZ4I.mjs → StackMain-KKC3XIAY.mjs} +12 -11
- package/dist/lib/browser/StackMain-KKC3XIAY.mjs.map +7 -0
- package/dist/lib/browser/{chunk-R5KXWF2W.mjs → chunk-L34RFJ2L.mjs} +9 -3
- package/dist/lib/browser/chunk-L34RFJ2L.mjs.map +7 -0
- package/dist/lib/browser/{chunk-AYDYMPJK.mjs → chunk-ONAKM24Z.mjs} +3 -6
- package/dist/lib/browser/chunk-ONAKM24Z.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +19 -19
- 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-XJGYFDDN.cjs → StackMain-ME6LYFGI.cjs} +26 -25
- package/dist/lib/node/StackMain-ME6LYFGI.cjs.map +7 -0
- package/dist/lib/node/{chunk-EMD6A66G.cjs → chunk-6IPBX635.cjs} +12 -6
- package/dist/lib/node/chunk-6IPBX635.cjs.map +7 -0
- package/dist/lib/node/{chunk-I42JKRXR.cjs → chunk-O5SQVKNW.cjs} +5 -18
- package/dist/lib/node/chunk-O5SQVKNW.cjs.map +7 -0
- package/dist/lib/node/index.cjs +54 -54
- 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/lib/node-esm/StackMain-D3P3PIMI.mjs +278 -0
- package/dist/lib/node-esm/StackMain-D3P3PIMI.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-3ZYHKSIS.mjs +29 -0
- package/dist/lib/node-esm/chunk-3ZYHKSIS.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-J57BXQJY.mjs +18 -0
- package/dist/lib/node-esm/chunk-J57BXQJY.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +286 -0
- package/dist/lib/node-esm/index.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -0
- package/dist/lib/node-esm/meta.mjs +12 -0
- package/dist/lib/node-esm/meta.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +10 -0
- package/dist/lib/node-esm/types/index.mjs.map +7 -0
- 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 +2 -1
- package/dist/types/src/components/StackMain.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +3 -3
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +1 -4
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/types/stack.d.ts.map +1 -1
- package/package.json +35 -38
- package/src/StackPlugin.tsx +15 -7
- package/src/components/AddSectionDialog.tsx +1 -2
- package/src/components/StackMain.tsx +50 -47
- package/src/components/StackSettings.tsx +3 -3
- package/src/components/index.ts +2 -3
- package/src/{meta.tsx → meta.ts} +3 -5
- package/src/types/stack.ts +4 -3
- package/src/types/types.ts +1 -1
- package/dist/lib/browser/StackMain-XRQRNZ4I.mjs.map +0 -7
- package/dist/lib/browser/chunk-AYDYMPJK.mjs.map +0 -7
- package/dist/lib/browser/chunk-R5KXWF2W.mjs.map +0 -7
- package/dist/lib/node/StackMain-XJGYFDDN.cjs.map +0 -7
- package/dist/lib/node/chunk-EMD6A66G.cjs.map +0 -7
- package/dist/lib/node/chunk-I42JKRXR.cjs.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_ME6LYFGI_exports = {};
|
|
30
|
+
__export(StackMain_ME6LYFGI_exports, {
|
|
31
31
|
default: () => StackMain_default
|
|
32
32
|
});
|
|
33
|
-
module.exports = __toCommonJS(
|
|
34
|
-
var
|
|
35
|
-
var
|
|
33
|
+
module.exports = __toCommonJS(StackMain_ME6LYFGI_exports);
|
|
34
|
+
var import_chunk_O5SQVKNW = require("./chunk-O5SQVKNW.cjs");
|
|
35
|
+
var import_chunk_6IPBX635 = require("./chunk-6IPBX635.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 = require("@dxos/client/echo");
|
|
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");
|
|
43
42
|
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_O5SQVKNW.STACK_PLUGIN);
|
|
89
|
+
const stackPlugin = (0, import_app_framework2.usePlugin)(import_chunk_O5SQVKNW.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_6IPBX635.StackViewType.typename];
|
|
97
97
|
if (stack) {
|
|
98
98
|
stack.sections[section.id] = {};
|
|
99
99
|
}
|
|
@@ -129,29 +129,28 @@ var SectionContent = ({ data }) => {
|
|
|
129
129
|
placeholder: /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null)
|
|
130
130
|
});
|
|
131
131
|
};
|
|
132
|
-
var StackMain = ({ collection, separation }) => {
|
|
132
|
+
var StackMain = ({ id, 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_O5SQVKNW.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.create)(import_chunk_6IPBX635.StackViewType, {
|
|
138
138
|
sections: {}
|
|
139
139
|
}), [
|
|
140
140
|
collection
|
|
141
141
|
]);
|
|
142
|
-
const stack = collection.views[
|
|
142
|
+
const stack = collection.views[import_chunk_6IPBX635.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_6IPBX635.StackViewType.typename]) {
|
|
146
|
+
collection.views[import_chunk_6IPBX635.StackViewType.typename] = stack;
|
|
147
147
|
}
|
|
148
148
|
}, [
|
|
149
149
|
collection,
|
|
150
150
|
stack
|
|
151
151
|
]);
|
|
152
|
-
const id = `stack-${collection.id}`;
|
|
153
152
|
const items = collection.objects.filter(import_util.nonNullable).map((object) => {
|
|
154
|
-
const metadata = metadataPlugin?.provides.metadata.resolver((0,
|
|
153
|
+
const metadata = metadataPlugin?.provides.metadata.resolver((0, import_echo.getType)(object)?.objectId ?? "never");
|
|
155
154
|
const view = {
|
|
156
155
|
...stack.sections[object.id],
|
|
157
156
|
collapsed: collapsedSections[(0, import_echo.fullyQualifiedId)(object)],
|
|
@@ -165,7 +164,7 @@ var StackMain = ({ collection, separation }) => {
|
|
|
165
164
|
};
|
|
166
165
|
}) ?? [];
|
|
167
166
|
const handleOver = ({ active, over }) => {
|
|
168
|
-
if (active.type !==
|
|
167
|
+
if (active.type !== import_chunk_O5SQVKNW.SECTION_IDENTIFIER) {
|
|
169
168
|
return "reject";
|
|
170
169
|
}
|
|
171
170
|
if (import_react_ui_mosaic.Path.parent(active.path) === import_react_ui_mosaic.Path.parent(over.path)) {
|
|
@@ -173,7 +172,7 @@ var StackMain = ({ collection, separation }) => {
|
|
|
173
172
|
}
|
|
174
173
|
const parseData = metadataPlugin?.provides.metadata.resolver(active.type)?.parse;
|
|
175
174
|
const data = parseData ? parseData(active.item, "object") : active.item;
|
|
176
|
-
if (!(0,
|
|
175
|
+
if (!(0, import_echo.isReactiveObject)(data)) {
|
|
177
176
|
return "reject";
|
|
178
177
|
}
|
|
179
178
|
const exists = items.findIndex(({ id: id2 }) => id2 === active.item.id) >= 0;
|
|
@@ -237,7 +236,7 @@ var StackMain = ({ collection, separation }) => {
|
|
|
237
236
|
action: import_app_framework.LayoutAction.SET_LAYOUT,
|
|
238
237
|
data: {
|
|
239
238
|
element: "dialog",
|
|
240
|
-
component: `${
|
|
239
|
+
component: `${import_chunk_O5SQVKNW.STACK_PLUGIN}/AddSectionDialog`,
|
|
241
240
|
subject: {
|
|
242
241
|
path,
|
|
243
242
|
position,
|
|
@@ -252,11 +251,13 @@ var StackMain = ({ collection, separation }) => {
|
|
|
252
251
|
[id2]: collapsed
|
|
253
252
|
}));
|
|
254
253
|
};
|
|
255
|
-
return /* @__PURE__ */ import_react2.default.createElement(
|
|
254
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_react_ui_attention.AttentionProvider, {
|
|
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, {
|
|
256
257
|
id,
|
|
257
258
|
"data-testid": "main.stack",
|
|
258
259
|
SectionContent,
|
|
259
|
-
type:
|
|
260
|
+
type: import_chunk_O5SQVKNW.SECTION_IDENTIFIER,
|
|
260
261
|
items,
|
|
261
262
|
separation,
|
|
262
263
|
emptyComponent: /* @__PURE__ */ import_react2.default.createElement("span", {
|
|
@@ -289,7 +290,7 @@ var StackMain = ({ collection, separation }) => {
|
|
|
289
290
|
})
|
|
290
291
|
}, /* @__PURE__ */ import_react2.default.createElement(import_react.Plus, null), /* @__PURE__ */ import_react2.default.createElement("span", {
|
|
291
292
|
className: "sr-only"
|
|
292
|
-
}, t("add section label")))));
|
|
293
|
+
}, t("add section label"))))));
|
|
293
294
|
};
|
|
294
295
|
var StackMain_default = StackMain;
|
|
295
|
-
//# sourceMappingURL=StackMain-
|
|
296
|
+
//# sourceMappingURL=StackMain-ME6LYFGI.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 Surface,\n parseMetadataResolverPlugin,\n useIntentDispatcher,\n useResolvePlugin,\n} from '@dxos/app-framework';\nimport { create, getType, fullyQualifiedId, isReactiveObject } from '@dxos/client/echo';\nimport { useGraph } from '@dxos/plugin-graph';\nimport { SpaceAction } from '@dxos/plugin-space';\nimport { type CollectionType } from '@dxos/plugin-space/types';\nimport { Button, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { AttentionProvider } from '@dxos/react-ui-attention';\nimport { type MosaicDataItem, type MosaicDropEvent, type MosaicMoveEvent, Mosaic, 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 id: string;\n collection: CollectionType;\n separation?: boolean;\n};\n\nconst StackMain = ({ id, 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 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 <AttentionProvider id={id}>\n <Mosaic.Root>\n <Mosaic.DragOverlay />\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 </Mosaic.Root>\n </AttentionProvider>\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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mBAAqB;AACrB,IAAAA,gBAAoD;AAEpD,2BAOO;AACP,kBAAoE;AACpE,0BAAyB;AACzB,0BAA4B;AAE5B,sBAA0D;AAC1D,gCAAkC;AAClC,6BAA8F;AAC9F,4BAMO;AACP,kBAA4B;ACzB5B,2BAAwC;AAExC,IAAAA,gBAAiF;AAEjF,IAAAC,wBAA+C;AAE/C,IAAAC,mBAAkD;AAClD,4BAA4B;AAK5B,IAAMC,cAAc,CAAC,EACnBC,MACAC,OACAC,QACAC,UAAS,MAMV;AACC,QAAMC,cAAUC,2BAAY,CAACC,MAAkCH,UAAAA,GAAa;IAACA;GAAU;AACvF,QAAMI,gBAAYF,2BAChB,CAACG,UAAAA;AACC,QAAIA,MAAMC,QAAQ,WAAWD,MAAMC,QAAQ,KAAK;AAC9CD,YAAME,eAAc;AACpBP,gBAAAA;IACF;EACF,GACA;IAACA;GAAU;AAGb,SACE,8BAAAQ,QAAA,cAACC,OAAAA;IACCC,MAAK;IACLC,cAAYb;IACZc,UAAU;IACVC,eAAWC,0BACT,oDACA,mFAAA;IAEFb;IACAG;IACAW,eAAahB;KAEb,8BAAAS,QAAA,cAACC,OAAAA;IAAII,WAAU;KACb,8BAAAL,QAAA,cAACX,MAAAA;IAAKmB,QAAO;IAAOH,eAAWI,+BAAQ,CAAA;OAEzC,8BAAAT,QAAA,cAACC,OAAAA;IAAII,WAAU;KACb,8BAAAL,QAAA,cAACU,QAAAA;IAAKL,WAAU;KAAcf,KAAAA,CAAAA,CAAAA;AAItC;AAEO,IAAMqB,aAAa,CAAC,EAAEC,WAAU,MAAkC;AACvE,QAAMC,oBAAgBC,8CAAwB;IAAEC,MAAM;EAAO,CAAA;AAC7D,QAAMC,eAAWC,2CAAAA;AACjB,QAAM,EAAEC,EAAC,QAAKC,iCAAeC,kCAAAA;AAE7B,QAAMC,kBAAcC,iCAA+BF,kCAAAA;AACnD,QAAMG,gBAAgBF,aAAaG,UAAUC,MAAMC,YAAY,CAAA;AAE/D,QAAMlC,gBAAYE,2BAChB,OAAOiC,YAAAA;AACL,UAAM,EAAEC,MAAMC,QAAO,IAAM,MAAMb,SAASW,QAAQG,MAAM,KAAM,CAAC;AAC/DlB,eAAWmB,UAAU;MAACF;;AACtB,UAAMJ,QAAQb,WAAWoB,MAAMC,oCAAcC,QAAQ;AACrD,QAAIT,OAAO;AACTA,YAAMU,SAASN,QAAQO,EAAE,IAAI,CAAC;IAChC;EACF,GACA;IAACxB;IAAYI;GAAS;AAGxB,MAAIO,cAAcc,WAAW,GAAG;AAC9B,WAAO;EACT;AAEA,SACE,8BAAArC,QAAA,cAACC,OAAAA;IAAK,GAAGY;IAAeX,MAAK;IAAOG,WAAU;KAC3CkB,cAAce,IAAI,CAACX,YAAAA;AAClB,UAAM,EAAES,IAAIG,MAAMC,MAAMjD,OAAM,IAAKoC;AACnC,WACE,8BAAA3B,QAAA,cAACZ,aAAAA;MACCU,KAAKsC;MACL9C,WAAOmD,oCAAkBF,MAAMrB,CAAAA;MAC/B3B;MACAF,MAAMmD;MACNhD,WAAW,MAAMA,UAAUmC,OAAAA;;EAGjC,CAAA,CAAA;AAGN;ADlEA,IAAMe,iBAA+C,CAAC,EAAEd,KAAI,MAAE;AAE5D,SAAO5B,8BAAAA,QAAA,cAAC2C,8BAAAA;IAAQzC,MAAK;IAAU0B,MAAM;MAAEgB,QAAQhB;IAAK;IAAGiB,OAAO;IAAGC,aAAa9C,8BAAAA,QAAA,cAAAA,cAAAA,QAAA,UAAA,IAAA;;AAChF;AAQA,IAAM+C,YAAY,CAAC,EAAEX,IAAIxB,YAAYoC,WAAU,MAAkB;AAC/D,QAAMhC,eAAWC,qBAAAA,qBAAAA;AACjB,QAAM,EAAEgC,MAAK,QAAKC,8BAAAA;AAClB,QAAM,EAAEhC,EAAC,QAAKC,gBAAAA,gBAAeC,kCAAAA;AAC7B,QAAM+B,qBAAiBC,uCAAiBC,gDAAAA;AACxC,QAAMC,mBAAeC,uBAAQ,UAAMC,oBAAOvB,qCAAe;IAAEE,UAAU,CAAC;EAAE,CAAA,GAAI;IAACvB;GAAW;AACxF,QAAMa,QAASb,WAAWoB,MAAMC,oCAAcC,QAAQ,KAAuBoB;AAC7E,QAAM,CAACG,mBAAmBC,oBAAAA,QAAwBC,wBAA4B,CAAC,CAAA;AAE/EC,+BAAU,MAAA;AACR,QAAI,CAAChD,WAAWoB,MAAMC,oCAAcC,QAAQ,GAAG;AAC7CtB,iBAAWoB,MAAMC,oCAAcC,QAAQ,IAAIT;IAC7C;EACF,GAAG;IAACb;IAAYa;GAAM;AAEtB,QAAMoC,QACJjD,WAAWmB,QAGR+B,OAAOC,uBAAAA,EACPzB,IAAI,CAACM,WAAAA;AACJ,UAAMoB,WAAWb,gBAAgB3B,SAASwC,SAASC,aACjDC,qBAAQtB,MAAAA,GAASuB,YAAY,OAAA;AAE/B,UAAMC,OAAO;MACX,GAAG3C,MAAMU,SAASS,OAAOR,EAAE;MAC3BiC,WAAWZ,sBAAkBa,8BAAiB1B,MAAAA,CAAAA;MAC9C2B,OACG3B,QAAgB2B,aAAS9B,gBAAAA,mBAAkBQ,MAAMuB,aAASF,8BAAiB1B,MAAAA,CAAAA,GAAU6B,WAAWnF,OAAO4B,CAAAA;IAC5G;AACA,WAAO;MAAEkB,QAAIkC,8BAAiB1B,MAAAA;MAASA;MAAQoB;MAAUI;IAAK;EAChE,CAAA,KAAM,CAAA;AAEV,QAAMM,aAAa,CAAC,EAAEC,QAAQC,KAAI,MAA2B;AAE3D,QAAID,OAAOpC,SAASsC,0CAAoB;AACtC,aAAO;IACT;AACA,QAAIC,4BAAKC,OAAOJ,OAAOK,IAAI,MAAMF,4BAAKC,OAAOH,KAAKI,IAAI,GAAG;AACvD,aAAO;IACT;AAEA,UAAMC,YAAY9B,gBAAgB3B,SAASwC,SAASC,SAASU,OAAOpC,IAAI,GAAG2C;AAC3E,UAAMtD,OAAOqD,YAAYA,UAAUN,OAAOQ,MAAM,QAAA,IAAYR,OAAOQ;AAInE,QAAI,KAACC,8BAAiBxD,IAAAA,GAAO;AAC3B,aAAO;IACT;AAEA,UAAMyD,SAASxB,MAAMyB,UAAU,CAAC,EAAElD,IAAAA,IAAE,MAAOA,QAAOuC,OAAOQ,KAAK/C,EAAE,KAAK;AACrE,QAAI,CAACiD,QAAQ;AACX,aAAO;IACT,OAAO;AACL,aAAO;IACT;EACF;AAEA,QAAME,aAAa,CAAC,EAAEC,WAAWb,QAAQC,KAAI,MAA2B;AACtE,SACGD,OAAOK,SAASF,4BAAKtB,OAAOpB,IAAIuC,OAAOQ,KAAK/C,EAAE,KAAKuC,OAAOK,SAAS5C,QACnEoD,cAAc,UAAUZ,KAAKI,SAASF,4BAAKtB,OAAOpB,IAAIwC,KAAKO,KAAK/C,EAAE,KAAKwC,KAAKI,SAAS5C,KACtF;AACAxB,iBAAWmB,QAAQ0D,OAAOd,OAAOe,UAAW,CAAA;AAC5C,aAAOjE,MAAMU,SAASwC,OAAOQ,KAAK/C,EAAE;IACtC;AAEA,UAAM6C,YAAY9B,gBAAgB3B,SAASwC,SAASC,SAASU,OAAOpC,IAAI,GAAG2C;AAC3E,UAAMtC,SAASqC,YAAYN,OAAOQ,MAAM,QAAA;AACxC,QAAIvC,UAAUgC,KAAKI,SAASF,4BAAKtB,OAAOpB,IAAIwC,KAAKO,KAAK/C,EAAE,GAAG;AACzDxB,iBAAWmB,QAAQ0D,OAAOb,KAAKc,UAAW,GAAG9C,MAAAA;IAC/C,WAAWA,UAAUgC,KAAKI,SAAS5C,IAAI;AACrCxB,iBAAWmB,QAAQ4D,KAAK/C,MAAAA;IAC1B;AAEA,QAAI,CAACnB,MAAMU,SAASS,OAAOR,EAAE,GAAG;AAC9BX,YAAMU,SAASS,OAAOR,EAAE,IAAI,CAAC;IAC/B;EACF;AAEA,QAAMwD,eAAe,OAAOZ,SAAAA;AAC1B,UAAMa,QAAQjF,WAAWmB,QACtB+B,OAAOC,uBAAAA,EACPuB,UAAU,CAACzD,gBAAYyC,8BAAiBzC,OAAAA,MAAaiD,4BAAKgB,KAAKd,IAAAA,CAAAA;AAClE,QAAIa,SAAS,GAAG;AACd,YAAM7E,SAAS;QACb+E,QAAQC,gCAAYC;QACpBrE,MAAM;UAAEgB,QAAQhC,WAAWmB,QAAQ8D,KAAAA;UAAQjF;QAAW;MACxD,CAAA;IAIF;EACF;AAIA,QAAMsF,iBAAiB,OAAOtD,WAAAA;AAC5B,UAAMuD,WAAO7B,8BAAiB1B,MAAAA;AAC9B,UAAM5B,SAAS;MACb;QACE+E,QAAQK,sCAAiBC;QACzBzE,MAAM;UAAE0E,aAAa;YAAEC,MAAM;cAACJ;;UAAM;QAAE;MACxC;MACA;QACEJ,QAAQS,kCAAaC;QACrB7E,MAAM;UAAEQ,IAAI+D;QAAK;MACnB;KACD;EACH;AAEA,QAAMO,mBAAmB,CAAC1B,MAAcU,aAAAA;AACtC,SAAK1E,WAAW;MACd+E,QAAQS,kCAAaG;MACrB/E,MAAM;QACJgF,SAAS;QACTC,WAAW,GAAGzF,kCAAAA;QACd0F,SAAS;UAAE9B;UAAMU;UAAU9E;QAAW;MACxC;IACF,CAAA;EACF;AAEA,QAAMmG,wBAAwB,CAAC3E,KAAYiC,cAAAA;AACzCX,yBAAqB,CAACsD,UAAU;MAAE,GAAGA;MAAM,CAAC5E,GAAAA,GAAKiC;IAAU,EAAA;EAC7D;AAEA,SACErE,8BAAAA,QAAA,cAACiH,6CAAAA;IAAkB7E;KACjBpC,8BAAAA,QAAA,cAACkH,8BAAOC,MAAI,MACVnH,8BAAAA,QAAA,cAACkH,8BAAOE,aAAW,IAAA,GACnBpH,8BAAAA,QAAA,cAACqH,6BAAAA;IACCjF;IACA7B,eAAY;IACZmC;IACAH,MAAMsC;IACNhB;IACAb;IACAsE,gBAAgBtH,8BAAAA,QAAA,cAACU,QAAAA;MAAKH,eAAY;;IAClCgH,QAAQhC;IACRiC,QAAQ9C;IACR+C,iBAAiB7B;IACjB8B,qBAAqBxB;IACrByB,cAAcjB;IACdkB,mBAAmBb;MAGpBlD,MAAMxB,WAAW,IAChBrC,8BAAAA,QAAA,cAACW,YAAAA;IAAWC;OAEZZ,8BAAAA,QAAA,cAACC,OAAAA;IAAIC,MAAK;IAAOG,WAAU;KACzBL,8BAAAA,QAAA,cAAC6H,wBAAAA;IACCtH,eAAY;IACZuH,YAAW;IACXrI,SAAS,MACPuB,WAAW;MACT+E,QAAQS,kCAAaG;MACrB/E,MAAM;QACJgF,SAAS;QACTC,WAAW;QACXC,SAAS;UAAEpB,UAAU;UAAY9E;QAAW;MAC9C;IACF,CAAA;KAGFZ,8BAAAA,QAAA,cAAC+H,mBAAAA,IAAAA,GACD/H,8BAAAA,QAAA,cAACU,QAAAA;IAAKL,WAAU;KAAWa,EAAE,mBAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAO3C;AAEA,IAAA,oBAAe6B;",
|
|
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", "AttentionProvider", "Mosaic", "Root", "DragOverlay", "Stack", "emptyComponent", "onDrop", "onOver", "onDeleteSection", "onNavigateToSection", "onAddSection", "onCollapseSection", "Button", "classNames", "Plus"]
|
|
7
|
+
}
|
|
@@ -16,24 +16,30 @@ 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_6IPBX635_exports = {};
|
|
20
|
+
__export(chunk_6IPBX635_exports, {
|
|
21
21
|
SectionSchema: () => SectionSchema,
|
|
22
22
|
StackViewType: () => StackViewType
|
|
23
23
|
});
|
|
24
|
-
module.exports = __toCommonJS(
|
|
24
|
+
module.exports = __toCommonJS(chunk_6IPBX635_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(
|
|
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
|
+
}))
|
|
31
34
|
});
|
|
32
35
|
var StackViewType = class extends (0, import_echo_schema.TypedObject)({
|
|
33
36
|
typename: "dxos.org/type/StackView",
|
|
34
37
|
version: "0.1.0"
|
|
35
38
|
})({
|
|
36
|
-
sections: import_echo_schema.S.mutable(import_echo_schema.S.Record(
|
|
39
|
+
sections: import_echo_schema.S.mutable(import_echo_schema.S.Record({
|
|
40
|
+
key: import_echo_schema.S.String,
|
|
41
|
+
value: SectionSchema
|
|
42
|
+
}))
|
|
37
43
|
}) {
|
|
38
44
|
};
|
|
39
45
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -41,4 +47,4 @@ var StackViewType = class extends (0, import_echo_schema.TypedObject)({
|
|
|
41
47
|
SectionSchema,
|
|
42
48
|
StackViewType
|
|
43
49
|
});
|
|
44
|
-
//# sourceMappingURL=chunk-
|
|
50
|
+
//# sourceMappingURL=chunk-6IPBX635.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 components should clean-up 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({ key: S.String, value: S.Any })),\n});\n\n// TODO(burdon): Should be just type/Stack?\nexport class StackViewType extends TypedObject({ typename: 'dxos.org/type/StackView', version: '0.1.0' })({\n sections: S.mutable(S.Record({ key: S.String, value: SectionSchema })),\n}) {}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAIA,yBAA+B;AAOxB,IAAMA,gBAAgBC,qBAAEC,OAAO;EACpCC,QAAQF,qBAAEG,SAASH,qBAAEI,MAAM;;;EAG3BC,QAAQL,qBAAEG,SAASH,qBAAEM,OAAO;IAAEC,KAAKP,qBAAEQ;IAAQC,OAAOT,qBAAEU;EAAI,CAAA,CAAA;AAC5D,CAAA;AAGO,IAAMC,gBAAN,kBAA4BC,gCAAY;EAAEC,UAAU;EAA2BC,SAAS;AAAQ,CAAA,EAAG;EACxGC,UAAUf,qBAAEgB,QAAQhB,qBAAEM,OAAO;IAAEC,KAAKP,qBAAEQ;IAAQC,OAAOV;EAAc,CAAA,CAAA;AACrE,CAAA,EAAA;AAAI;",
|
|
6
|
+
"names": ["SectionSchema", "S", "Struct", "height", "optional", "Number", "custom", "Record", "key", "String", "value", "Any", "StackViewType", "TypedObject", "typename", "version", "sections", "mutable"]
|
|
7
|
+
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
6
|
var __export = (target, all) => {
|
|
9
7
|
for (var name in all)
|
|
@@ -17,32 +15,21 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
15
|
}
|
|
18
16
|
return to;
|
|
19
17
|
};
|
|
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
|
-
));
|
|
28
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var
|
|
30
|
-
__export(
|
|
19
|
+
var chunk_O5SQVKNW_exports = {};
|
|
20
|
+
__export(chunk_O5SQVKNW_exports, {
|
|
31
21
|
SECTION_IDENTIFIER: () => SECTION_IDENTIFIER,
|
|
32
22
|
STACK_PLUGIN: () => STACK_PLUGIN,
|
|
33
23
|
meta_default: () => meta_default
|
|
34
24
|
});
|
|
35
|
-
module.exports = __toCommonJS(
|
|
36
|
-
var import_react = require("@phosphor-icons/react");
|
|
37
|
-
var import_react2 = __toESM(require("react"));
|
|
25
|
+
module.exports = __toCommonJS(chunk_O5SQVKNW_exports);
|
|
38
26
|
var STACK_PLUGIN = "dxos.org/plugin/stack";
|
|
39
27
|
var SECTION_IDENTIFIER = "dxos.org/type/StackSection";
|
|
40
28
|
var meta_default = {
|
|
41
29
|
id: STACK_PLUGIN,
|
|
42
30
|
// TODO(wittjosiah): Prevents "stacks" language from being exposed to users in settings panel.
|
|
43
31
|
name: "Collections",
|
|
44
|
-
|
|
45
|
-
iconSymbol: "ph--stack-simple--regular"
|
|
32
|
+
icon: "ph--stack-simple--regular"
|
|
46
33
|
};
|
|
47
34
|
// Annotate the CommonJS export names for ESM import in node:
|
|
48
35
|
0 && (module.exports = {
|
|
@@ -50,4 +37,4 @@ var meta_default = {
|
|
|
50
37
|
STACK_PLUGIN,
|
|
51
38
|
meta_default
|
|
52
39
|
});
|
|
53
|
-
//# sourceMappingURL=chunk-
|
|
40
|
+
//# sourceMappingURL=chunk-O5SQVKNW.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 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 icon: 'ph--stack-simple--regular',\n} satisfies PluginMeta;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAMO,IAAMA,eAAe;AACrB,IAAMC,qBAAqB;AAElC,IAAA,eAAe;EACbC,IAAIF;;EAEJG,MAAM;EACNC,MAAM;AACR;",
|
|
6
|
+
"names": ["STACK_PLUGIN", "SECTION_IDENTIFIER", "id", "name", "icon"]
|
|
7
|
+
}
|
package/dist/lib/node/index.cjs
CHANGED
|
@@ -28,31 +28,29 @@ 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_6IPBX635.SectionSchema,
|
|
32
32
|
StackPlugin: () => StackPlugin,
|
|
33
|
-
StackViewType: () =>
|
|
33
|
+
StackViewType: () => import_chunk_6IPBX635.StackViewType,
|
|
34
34
|
default: () => src_default
|
|
35
35
|
});
|
|
36
36
|
module.exports = __toCommonJS(node_exports);
|
|
37
|
-
var
|
|
38
|
-
var
|
|
39
|
-
var import_react = require("
|
|
40
|
-
var
|
|
41
|
-
var import_echo_schema = require("@dxos/echo-schema");
|
|
37
|
+
var import_chunk_O5SQVKNW = require("./chunk-O5SQVKNW.cjs");
|
|
38
|
+
var import_chunk_6IPBX635 = require("./chunk-6IPBX635.cjs");
|
|
39
|
+
var import_react = __toESM(require("react"));
|
|
40
|
+
var import_echo = require("@dxos/client/echo");
|
|
42
41
|
var import_local_storage = require("@dxos/local-storage");
|
|
43
42
|
var import_types = require("@dxos/plugin-space/types");
|
|
44
43
|
var import_react_ui = require("@dxos/react-ui");
|
|
45
44
|
var import_react_ui_theme = require("@dxos/react-ui-theme");
|
|
45
|
+
var import_react2 = require("react");
|
|
46
46
|
var import_react3 = __toESM(require("react"));
|
|
47
|
-
var import_react4 = __toESM(require("react"));
|
|
48
|
-
var import_plugin_settings = require("@dxos/plugin-settings");
|
|
49
47
|
var import_react_ui2 = require("@dxos/react-ui");
|
|
50
|
-
var
|
|
51
|
-
var
|
|
48
|
+
var import_react_ui_data = require("@dxos/react-ui-data");
|
|
49
|
+
var import_react4 = require("@phosphor-icons/react");
|
|
50
|
+
var import_react5 = __toESM(require("react"));
|
|
52
51
|
var import_app_framework = require("@dxos/app-framework");
|
|
53
|
-
var
|
|
52
|
+
var import_echo2 = require("@dxos/client/echo");
|
|
54
53
|
var import_types2 = require("@dxos/plugin-ipfs/types");
|
|
55
|
-
var import_echo = require("@dxos/react-client/echo");
|
|
56
54
|
var import_react_ui3 = require("@dxos/react-ui");
|
|
57
55
|
var import_react_ui_mosaic = require("@dxos/react-ui-mosaic");
|
|
58
56
|
var import_react_ui_searchlist = require("@dxos/react-ui-searchlist");
|
|
@@ -60,10 +58,10 @@ var import_react_ui_theme2 = require("@dxos/react-ui-theme");
|
|
|
60
58
|
var import_util = require("@dxos/util");
|
|
61
59
|
var import_react_ui_stack = require("@dxos/react-ui-stack");
|
|
62
60
|
var StackSettings = ({ settings }) => {
|
|
63
|
-
const { t } = (0, import_react_ui2.useTranslation)(
|
|
64
|
-
return /* @__PURE__ */
|
|
61
|
+
const { t } = (0, import_react_ui2.useTranslation)(import_chunk_O5SQVKNW.STACK_PLUGIN);
|
|
62
|
+
return /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_data.DeprecatedFormInput, {
|
|
65
63
|
label: t("settings separation label")
|
|
66
|
-
}, /* @__PURE__ */
|
|
64
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Input.Switch, {
|
|
67
65
|
checked: settings.separation,
|
|
68
66
|
onCheckedChange: (checked) => settings.separation = !!checked
|
|
69
67
|
})));
|
|
@@ -72,18 +70,18 @@ var dataHasAddSectionDialogProps = (data) => {
|
|
|
72
70
|
return "subject" in data && typeof data.subject === "object" && !!data.subject && "position" in data.subject && typeof data.subject.position === "string" && "collection" in data.subject;
|
|
73
71
|
};
|
|
74
72
|
var AddSectionDialog = ({ path, position, collection }) => {
|
|
75
|
-
const { t } = (0, import_react_ui3.useTranslation)(
|
|
76
|
-
const stackPlugin = (0, import_app_framework.usePlugin)(
|
|
73
|
+
const { t } = (0, import_react_ui3.useTranslation)(import_chunk_O5SQVKNW.STACK_PLUGIN);
|
|
74
|
+
const stackPlugin = (0, import_app_framework.usePlugin)(import_chunk_O5SQVKNW.STACK_PLUGIN);
|
|
77
75
|
const fileManagerPlugin = (0, import_app_framework.useResolvePlugin)(import_app_framework.parseFileManagerPlugin);
|
|
78
|
-
const fileRef = (0,
|
|
76
|
+
const fileRef = (0, import_react5.useRef)(null);
|
|
79
77
|
const { dispatch } = (0, import_app_framework.useIntent)();
|
|
80
|
-
const space = (0,
|
|
81
|
-
const [pending, setPending] = (0,
|
|
82
|
-
const [uploadError, setUploadError] = (0,
|
|
83
|
-
const handleAdd = (0,
|
|
78
|
+
const space = (0, import_echo2.getSpace)(collection);
|
|
79
|
+
const [pending, setPending] = (0, import_react5.useState)(false);
|
|
80
|
+
const [uploadError, setUploadError] = (0, import_react5.useState)();
|
|
81
|
+
const handleAdd = (0, import_react5.useCallback)((sectionObject) => {
|
|
84
82
|
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));
|
|
85
83
|
collection.objects.splice(index + (position === "after" ? 1 : 0), 0, sectionObject);
|
|
86
|
-
const stack = collection.views[
|
|
84
|
+
const stack = collection.views[import_chunk_6IPBX635.StackViewType.typename];
|
|
87
85
|
if (stack) {
|
|
88
86
|
stack.sections[sectionObject.id] = {};
|
|
89
87
|
}
|
|
@@ -106,7 +104,7 @@ var AddSectionDialog = ({ path, position, collection }) => {
|
|
|
106
104
|
try {
|
|
107
105
|
const info = await fileManagerPlugin.provides.file.upload?.(file, space);
|
|
108
106
|
if (info) {
|
|
109
|
-
const obj = (0,
|
|
107
|
+
const obj = (0, import_echo2.create)(import_types2.FileType, {
|
|
110
108
|
type: file.type,
|
|
111
109
|
name: filename,
|
|
112
110
|
filename,
|
|
@@ -118,20 +116,20 @@ var AddSectionDialog = ({ path, position, collection }) => {
|
|
|
118
116
|
setUploadError(err);
|
|
119
117
|
}
|
|
120
118
|
} : void 0;
|
|
121
|
-
return /* @__PURE__ */
|
|
119
|
+
return /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Dialog.Content, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Dialog.Title, null, t(`add section ${position} dialog title`)), /* @__PURE__ */ import_react5.default.createElement(import_react_ui_searchlist.SearchList.Root, {
|
|
122
120
|
label: t("add section input placeholder")
|
|
123
|
-
}, /* @__PURE__ */
|
|
121
|
+
}, /* @__PURE__ */ import_react5.default.createElement(import_react_ui_searchlist.SearchList.Input, {
|
|
124
122
|
placeholder: t("add section input placeholder"),
|
|
125
123
|
classNames: "pli-3",
|
|
126
124
|
disabled: pending
|
|
127
|
-
}), /* @__PURE__ */
|
|
125
|
+
}), /* @__PURE__ */ import_react5.default.createElement(import_react_ui_searchlist.SearchList.Content, {
|
|
128
126
|
classNames: "min-bs-24 bs-fit max-bs-64 overflow-auto",
|
|
129
127
|
...pending && {
|
|
130
128
|
inert: "true"
|
|
131
129
|
}
|
|
132
130
|
}, stackPlugin?.provides?.stack.creators?.map(({ id, icon: Icon, label: propsLabel, testId, intent }) => {
|
|
133
131
|
const label = (0, import_react_ui3.toLocalizedString)(propsLabel, t);
|
|
134
|
-
return /* @__PURE__ */
|
|
132
|
+
return /* @__PURE__ */ import_react5.default.createElement(import_react_ui_searchlist.SearchList.Item, {
|
|
135
133
|
value: label,
|
|
136
134
|
key: id,
|
|
137
135
|
onSelect: async () => {
|
|
@@ -146,31 +144,31 @@ var AddSectionDialog = ({ path, position, collection }) => {
|
|
|
146
144
|
},
|
|
147
145
|
classNames: "flex items-center gap-2 pli-2",
|
|
148
146
|
"data-testid": testId
|
|
149
|
-
}, Icon && /* @__PURE__ */
|
|
147
|
+
}, Icon && /* @__PURE__ */ import_react5.default.createElement(Icon, {
|
|
150
148
|
className: (0, import_react_ui_theme2.mx)((0, import_react_ui_theme2.getSize)(4), "shrink-0")
|
|
151
|
-
}), /* @__PURE__ */
|
|
149
|
+
}), /* @__PURE__ */ import_react5.default.createElement("span", {
|
|
152
150
|
className: "grow truncate"
|
|
153
151
|
}, label));
|
|
154
|
-
}), handleFileUpload && /* @__PURE__ */
|
|
152
|
+
}), handleFileUpload && /* @__PURE__ */ import_react5.default.createElement(import_react_ui_searchlist.SearchList.Item, {
|
|
155
153
|
value: t("upload file label"),
|
|
156
154
|
classNames: "flex items-center gap-2 pli-2",
|
|
157
155
|
onSelect: () => fileRef.current?.click()
|
|
158
|
-
}, /* @__PURE__ */
|
|
156
|
+
}, /* @__PURE__ */ import_react5.default.createElement(import_react4.FilePlus, null), /* @__PURE__ */ import_react5.default.createElement("span", {
|
|
159
157
|
className: "grow truncate"
|
|
160
|
-
}, t("upload file label"))), uploadError && /* @__PURE__ */
|
|
158
|
+
}, t("upload file label"))), uploadError && /* @__PURE__ */ import_react5.default.createElement("div", {
|
|
161
159
|
className: "text-error-500"
|
|
162
|
-
}, uploadError.message))), handleFileUpload && /* @__PURE__ */
|
|
160
|
+
}, uploadError.message))), handleFileUpload && /* @__PURE__ */ import_react5.default.createElement("input", {
|
|
163
161
|
type: "file",
|
|
164
162
|
className: "sr-only",
|
|
165
163
|
ref: fileRef,
|
|
166
164
|
onChange: ({ target: { files } }) => files && handleFileUpload(files[0])
|
|
167
165
|
}));
|
|
168
166
|
};
|
|
169
|
-
var StackMain =
|
|
167
|
+
var StackMain = (0, import_react2.lazy)(() => import("./StackMain-ME6LYFGI.cjs"));
|
|
170
168
|
var translations_default = [
|
|
171
169
|
{
|
|
172
170
|
"en-US": {
|
|
173
|
-
[
|
|
171
|
+
[import_chunk_O5SQVKNW.STACK_PLUGIN]: {
|
|
174
172
|
"plugin name": "Stacks",
|
|
175
173
|
"settings separation label": "Separate sections",
|
|
176
174
|
"add section beforeAll dialog title": "Add a section to the start",
|
|
@@ -186,21 +184,21 @@ var translations_default = [
|
|
|
186
184
|
...import_react_ui_stack.translations
|
|
187
185
|
];
|
|
188
186
|
var StackPlugin = () => {
|
|
189
|
-
const settings = new import_local_storage.LocalStorageStore(
|
|
187
|
+
const settings = new import_local_storage.LocalStorageStore(import_chunk_O5SQVKNW.STACK_PLUGIN, {
|
|
190
188
|
separation: true
|
|
191
189
|
});
|
|
192
|
-
const stackState = (0,
|
|
190
|
+
const stackState = (0, import_echo.create)({
|
|
193
191
|
creators: []
|
|
194
192
|
});
|
|
195
193
|
return {
|
|
196
|
-
meta:
|
|
194
|
+
meta: import_chunk_O5SQVKNW.meta_default,
|
|
197
195
|
ready: async (plugins) => {
|
|
198
196
|
settings.prop({
|
|
199
197
|
key: "separation",
|
|
200
198
|
type: import_local_storage.LocalStorageStore.bool()
|
|
201
199
|
});
|
|
202
200
|
for (const plugin of plugins) {
|
|
203
|
-
if (plugin.meta.id ===
|
|
201
|
+
if (plugin.meta.id === import_chunk_O5SQVKNW.STACK_PLUGIN) {
|
|
204
202
|
continue;
|
|
205
203
|
}
|
|
206
204
|
if (Array.isArray(plugin.provides?.stack?.creators)) {
|
|
@@ -212,17 +210,16 @@ var StackPlugin = () => {
|
|
|
212
210
|
settings: settings.values,
|
|
213
211
|
metadata: {
|
|
214
212
|
records: {
|
|
215
|
-
[
|
|
213
|
+
[import_chunk_6IPBX635.StackViewType.typename]: {
|
|
216
214
|
placeholder: [
|
|
217
215
|
"stack title placeholder",
|
|
218
216
|
{
|
|
219
|
-
ns:
|
|
217
|
+
ns: import_chunk_O5SQVKNW.STACK_PLUGIN
|
|
220
218
|
}
|
|
221
219
|
],
|
|
222
|
-
icon:
|
|
223
|
-
iconSymbol: "ph--stack-simple--regular"
|
|
220
|
+
icon: "ph--stack-simple--regular"
|
|
224
221
|
},
|
|
225
|
-
[
|
|
222
|
+
[import_chunk_O5SQVKNW.SECTION_IDENTIFIER]: {
|
|
226
223
|
parse: (section, type) => {
|
|
227
224
|
switch (type) {
|
|
228
225
|
case "node":
|
|
@@ -243,39 +240,42 @@ var StackPlugin = () => {
|
|
|
243
240
|
translations: translations_default,
|
|
244
241
|
echo: {
|
|
245
242
|
schema: [
|
|
246
|
-
|
|
243
|
+
import_chunk_6IPBX635.StackViewType
|
|
247
244
|
]
|
|
248
245
|
},
|
|
249
246
|
surface: {
|
|
250
247
|
component: ({ data, role }) => {
|
|
251
248
|
switch (data.component) {
|
|
252
|
-
case `${
|
|
253
|
-
return dataHasAddSectionDialogProps(data) ? /* @__PURE__ */
|
|
249
|
+
case `${import_chunk_O5SQVKNW.STACK_PLUGIN}/AddSectionDialog`:
|
|
250
|
+
return dataHasAddSectionDialogProps(data) ? /* @__PURE__ */ import_react.default.createElement(AddSectionDialog, data.subject) : null;
|
|
254
251
|
}
|
|
255
252
|
const primary = data.active ?? data.object;
|
|
253
|
+
const id = typeof data.id === "string" ? data.id : void 0;
|
|
256
254
|
switch (role) {
|
|
257
255
|
case "main":
|
|
258
|
-
return primary instanceof import_types.CollectionType ? /* @__PURE__ */
|
|
256
|
+
return primary instanceof import_types.CollectionType ? /* @__PURE__ */ import_react.default.createElement(import_react_ui.Main.Content, {
|
|
259
257
|
bounce: true,
|
|
260
258
|
classNames: [
|
|
261
259
|
import_react_ui_theme.baseSurface,
|
|
262
260
|
import_react_ui_theme.topbarBlockPaddingStart,
|
|
263
261
|
import_react_ui_theme.bottombarBlockPaddingEnd
|
|
264
262
|
]
|
|
265
|
-
}, /* @__PURE__ */
|
|
263
|
+
}, /* @__PURE__ */ import_react.default.createElement(StackMain, {
|
|
264
|
+
id: id ?? (0, import_echo.fullyQualifiedId)(primary),
|
|
266
265
|
collection: primary,
|
|
267
266
|
separation: settings.values.separation
|
|
268
267
|
})) : null;
|
|
269
268
|
case "article":
|
|
270
|
-
return primary instanceof import_types.CollectionType ? /* @__PURE__ */
|
|
269
|
+
return primary instanceof import_types.CollectionType ? /* @__PURE__ */ import_react.default.createElement("div", {
|
|
271
270
|
role: "none",
|
|
272
271
|
className: "row-span-2 overflow-auto"
|
|
273
|
-
}, /* @__PURE__ */
|
|
272
|
+
}, /* @__PURE__ */ import_react.default.createElement(StackMain, {
|
|
273
|
+
id: id ?? (0, import_echo.fullyQualifiedId)(primary),
|
|
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_O5SQVKNW.meta_default.id ? /* @__PURE__ */ import_react.default.createElement(StackSettings, {
|
|
279
279
|
settings: settings.values
|
|
280
280
|
}) : null;
|
|
281
281
|
}
|