@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.
Files changed (57) hide show
  1. package/dist/lib/browser/{StackMain-ILYVK656.mjs → StackMain-XRQRNZ4I.mjs} +11 -12
  2. package/dist/lib/browser/StackMain-XRQRNZ4I.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-ONAKM24Z.mjs → chunk-AYDYMPJK.mjs} +6 -3
  4. package/dist/lib/browser/chunk-AYDYMPJK.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-6PHTGCQZ.mjs → chunk-R5KXWF2W.mjs} +3 -9
  6. package/dist/lib/browser/chunk-R5KXWF2W.mjs.map +7 -0
  7. package/dist/lib/browser/index.mjs +9 -9
  8. package/dist/lib/browser/index.mjs.map +3 -3
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/meta.mjs +1 -1
  11. package/dist/lib/browser/types/index.mjs +1 -1
  12. package/dist/lib/node/{StackMain-LAYSQV2S.cjs → StackMain-XJGYFDDN.cjs} +25 -26
  13. package/dist/lib/node/StackMain-XJGYFDDN.cjs.map +7 -0
  14. package/dist/lib/node/{chunk-3D3FPZWK.cjs → chunk-EMD6A66G.cjs} +6 -12
  15. package/dist/lib/node/chunk-EMD6A66G.cjs.map +7 -0
  16. package/dist/lib/node/{chunk-O5SQVKNW.cjs → chunk-I42JKRXR.cjs} +18 -5
  17. package/dist/lib/node/chunk-I42JKRXR.cjs.map +7 -0
  18. package/dist/lib/node/index.cjs +53 -53
  19. package/dist/lib/node/index.cjs.map +3 -3
  20. package/dist/lib/node/meta.cjs +4 -4
  21. package/dist/lib/node/meta.cjs.map +1 -1
  22. package/dist/lib/node/meta.json +1 -1
  23. package/dist/lib/node/types/index.cjs +3 -3
  24. package/dist/lib/node/types/index.cjs.map +1 -1
  25. package/dist/types/src/StackPlugin.d.ts.map +1 -1
  26. package/dist/types/src/components/AddSectionDialog.d.ts.map +1 -1
  27. package/dist/types/src/components/StackMain.d.ts +1 -2
  28. package/dist/types/src/components/StackMain.d.ts.map +1 -1
  29. package/dist/types/src/components/index.d.ts +1 -2
  30. package/dist/types/src/components/index.d.ts.map +1 -1
  31. package/dist/types/src/meta.d.ts +4 -1
  32. package/dist/types/src/meta.d.ts.map +1 -1
  33. package/package.json +29 -34
  34. package/src/StackPlugin.tsx +7 -15
  35. package/src/components/AddSectionDialog.tsx +2 -1
  36. package/src/components/StackMain.tsx +47 -50
  37. package/src/{meta.ts → meta.tsx} +5 -3
  38. package/src/types/stack.ts +3 -3
  39. package/dist/lib/browser/StackMain-ILYVK656.mjs.map +0 -7
  40. package/dist/lib/browser/chunk-6PHTGCQZ.mjs.map +0 -7
  41. package/dist/lib/browser/chunk-ONAKM24Z.mjs.map +0 -7
  42. package/dist/lib/node/StackMain-LAYSQV2S.cjs.map +0 -7
  43. package/dist/lib/node/chunk-3D3FPZWK.cjs.map +0 -7
  44. package/dist/lib/node/chunk-O5SQVKNW.cjs.map +0 -7
  45. package/dist/lib/node-esm/StackMain-KH6IEQQ6.mjs +0 -278
  46. package/dist/lib/node-esm/StackMain-KH6IEQQ6.mjs.map +0 -7
  47. package/dist/lib/node-esm/chunk-HRY4R5UU.mjs +0 -29
  48. package/dist/lib/node-esm/chunk-HRY4R5UU.mjs.map +0 -7
  49. package/dist/lib/node-esm/chunk-J57BXQJY.mjs +0 -18
  50. package/dist/lib/node-esm/chunk-J57BXQJY.mjs.map +0 -7
  51. package/dist/lib/node-esm/index.mjs +0 -286
  52. package/dist/lib/node-esm/index.mjs.map +0 -7
  53. package/dist/lib/node-esm/meta.json +0 -1
  54. package/dist/lib/node-esm/meta.mjs +0 -12
  55. package/dist/lib/node-esm/meta.mjs.map +0 -7
  56. package/dist/lib/node-esm/types/index.mjs +0 -10
  57. 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 StackMain_LAYSQV2S_exports = {};
30
- __export(StackMain_LAYSQV2S_exports, {
29
+ var StackMain_XJGYFDDN_exports = {};
30
+ __export(StackMain_XJGYFDDN_exports, {
31
31
  default: () => StackMain_default
32
32
  });
33
- module.exports = __toCommonJS(StackMain_LAYSQV2S_exports);
34
- var import_chunk_O5SQVKNW = require("./chunk-O5SQVKNW.cjs");
35
- var import_chunk_3D3FPZWK = require("./chunk-3D3FPZWK.cjs");
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 import_echo = require("@dxos/client/echo");
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)(import_chunk_O5SQVKNW.STACK_PLUGIN);
89
- const stackPlugin = (0, import_app_framework2.usePlugin)(import_chunk_O5SQVKNW.STACK_PLUGIN);
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[import_chunk_3D3FPZWK.StackViewType.typename];
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 = ({ id, collection, separation }) => {
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)(import_chunk_O5SQVKNW.STACK_PLUGIN);
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, import_echo.create)(import_chunk_3D3FPZWK.StackViewType, {
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[import_chunk_3D3FPZWK.StackViewType.typename] ?? defaultStack;
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[import_chunk_3D3FPZWK.StackViewType.typename]) {
146
- collection.views[import_chunk_3D3FPZWK.StackViewType.typename] = stack;
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, import_echo.getType)(object)?.objectId ?? "never");
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 !== import_chunk_O5SQVKNW.SECTION_IDENTIFIER) {
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, import_echo.isReactiveObject)(data)) {
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: `${import_chunk_O5SQVKNW.STACK_PLUGIN}/AddSectionDialog`,
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(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, {
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: import_chunk_O5SQVKNW.SECTION_IDENTIFIER,
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-LAYSQV2S.cjs.map
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 chunk_3D3FPZWK_exports = {};
20
- __export(chunk_3D3FPZWK_exports, {
19
+ var chunk_EMD6A66G_exports = {};
20
+ __export(chunk_EMD6A66G_exports, {
21
21
  SectionSchema: () => SectionSchema,
22
22
  StackViewType: () => StackViewType
23
23
  });
24
- module.exports = __toCommonJS(chunk_3D3FPZWK_exports);
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-3D3FPZWK.cjs.map
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 chunk_O5SQVKNW_exports = {};
20
- __export(chunk_O5SQVKNW_exports, {
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(chunk_O5SQVKNW_exports);
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
- icon: "ph--stack-simple--regular"
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-O5SQVKNW.cjs.map
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
+ }
@@ -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: () => import_chunk_3D3FPZWK.SectionSchema,
31
+ SectionSchema: () => import_chunk_EMD6A66G.SectionSchema,
32
32
  StackPlugin: () => StackPlugin,
33
- StackViewType: () => import_chunk_3D3FPZWK.StackViewType,
33
+ StackViewType: () => import_chunk_EMD6A66G.StackViewType,
34
34
  default: () => src_default
35
35
  });
36
36
  module.exports = __toCommonJS(node_exports);
37
- var import_chunk_O5SQVKNW = require("./chunk-O5SQVKNW.cjs");
38
- var import_chunk_3D3FPZWK = require("./chunk-3D3FPZWK.cjs");
39
- var import_react = __toESM(require("react"));
40
- var import_echo = require("@dxos/client/echo");
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 import_react4 = require("@phosphor-icons/react");
50
- var import_react5 = __toESM(require("react"));
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 import_echo2 = require("@dxos/client/echo");
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)(import_chunk_O5SQVKNW.STACK_PLUGIN);
62
- return /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, /* @__PURE__ */ import_react3.default.createElement(import_plugin_settings.SettingsValue, {
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__ */ import_react3.default.createElement(import_react_ui2.Input.Switch, {
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)(import_chunk_O5SQVKNW.STACK_PLUGIN);
74
- const stackPlugin = (0, import_app_framework.usePlugin)(import_chunk_O5SQVKNW.STACK_PLUGIN);
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, import_react5.useRef)(null);
78
+ const fileRef = (0, import_react6.useRef)(null);
77
79
  const { dispatch } = (0, import_app_framework.useIntent)();
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) => {
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[import_chunk_3D3FPZWK.StackViewType.typename];
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, import_echo2.create)(import_types2.FileType, {
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__ */ 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, {
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__ */ import_react5.default.createElement(import_react_ui_searchlist.SearchList.Input, {
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__ */ import_react5.default.createElement(import_react_ui_searchlist.SearchList.Content, {
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__ */ import_react5.default.createElement(import_react_ui_searchlist.SearchList.Item, {
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__ */ import_react5.default.createElement(Icon, {
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__ */ import_react5.default.createElement("span", {
151
+ }), /* @__PURE__ */ import_react6.default.createElement("span", {
150
152
  className: "grow truncate"
151
153
  }, label));
152
- }), handleFileUpload && /* @__PURE__ */ import_react5.default.createElement(import_react_ui_searchlist.SearchList.Item, {
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__ */ import_react5.default.createElement(import_react4.FilePlus, null), /* @__PURE__ */ import_react5.default.createElement("span", {
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__ */ import_react5.default.createElement("div", {
160
+ }, t("upload file label"))), uploadError && /* @__PURE__ */ import_react6.default.createElement("div", {
159
161
  className: "text-error-500"
160
- }, uploadError.message))), handleFileUpload && /* @__PURE__ */ import_react5.default.createElement("input", {
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 = import_react2.default.lazy(() => import("./StackMain-LAYSQV2S.cjs"));
169
+ var StackMain = import_react3.default.lazy(() => import("./StackMain-XJGYFDDN.cjs"));
168
170
  var translations_default = [
169
171
  {
170
172
  "en-US": {
171
- [import_chunk_O5SQVKNW.STACK_PLUGIN]: {
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(import_chunk_O5SQVKNW.STACK_PLUGIN, {
189
+ const settings = new import_local_storage.LocalStorageStore(import_chunk_I42JKRXR.STACK_PLUGIN, {
188
190
  separation: true
189
191
  });
190
- const stackState = (0, import_echo.create)({
192
+ const stackState = (0, import_echo_schema.create)({
191
193
  creators: []
192
194
  });
193
195
  return {
194
- meta: import_chunk_O5SQVKNW.meta_default,
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 === import_chunk_O5SQVKNW.STACK_PLUGIN) {
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
- [import_chunk_3D3FPZWK.StackViewType.typename]: {
215
+ [import_chunk_EMD6A66G.StackViewType.typename]: {
214
216
  placeholder: [
215
217
  "stack title placeholder",
216
218
  {
217
- ns: import_chunk_O5SQVKNW.STACK_PLUGIN
219
+ ns: import_chunk_I42JKRXR.STACK_PLUGIN
218
220
  }
219
221
  ],
220
- icon: "ph--stack-simple--regular"
222
+ icon: (props) => /* @__PURE__ */ import_react2.default.createElement(import_react.StackSimple, props),
223
+ iconSymbol: "ph--stack-simple--regular"
221
224
  },
222
- [import_chunk_O5SQVKNW.SECTION_IDENTIFIER]: {
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
- import_chunk_3D3FPZWK.StackViewType
246
+ import_chunk_EMD6A66G.StackViewType
244
247
  ]
245
248
  },
246
249
  surface: {
247
250
  component: ({ data, role }) => {
248
251
  switch (data.component) {
249
- case `${import_chunk_O5SQVKNW.STACK_PLUGIN}/AddSectionDialog`:
250
- return dataHasAddSectionDialogProps(data) ? /* @__PURE__ */ import_react.default.createElement(AddSectionDialog, data.subject) : null;
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__ */ import_react.default.createElement(import_react_ui.Main.Content, {
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__ */ import_react.default.createElement(StackMain, {
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__ */ import_react.default.createElement("div", {
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__ */ import_react.default.createElement(StackMain, {
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 === import_chunk_O5SQVKNW.meta_default.id ? /* @__PURE__ */ import_react.default.createElement(StackSettings, {
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
  }