@webiny/app-website-builder 6.2.0 → 6.3.0-beta.1

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.
@@ -5,7 +5,7 @@ export declare const Commands: {
5
5
  componentName: string;
6
6
  parentId: string;
7
7
  slot: string;
8
- index: number;
8
+ index?: number;
9
9
  bindings?: ElementFactoryCreateElementParams["bindings"];
10
10
  }>;
11
11
  DeleteElement: import("~/editorSdk/createCommand.js").Command<{
@@ -1 +1 @@
1
- {"version":3,"names":["createCommand","CreateElement","MoveElement","DeleteElement","SelectElement","HighlightElement","SetTheme","DeselectElement","RefreshPreview","PreviewPatchElement","SendPreviewMessage","Commands"],"sources":["commands.ts"],"sourcesContent":["import { createCommand } from \"~/editorSdk/createCommand.js\";\nimport type { ElementFactoryCreateElementParams } from \"@webiny/website-builder-sdk\";\nimport type { WebsiteBuilderTheme } from \"@webiny/website-builder-sdk/types/WebsiteBuilderTheme.js\";\n\nconst CreateElement = createCommand<{\n // Name of the component to use.\n componentName: string;\n // Parent element for the new element.\n parentId: string;\n // Parent element slot (e.g., `children`, `heroBanner`, `tabsList.0.content`).\n slot: string;\n // Index within the slot.\n index: number;\n // Bindings\n bindings?: ElementFactoryCreateElementParams[\"bindings\"];\n}>(\"CREATE_ELEMENT\");\n\nconst MoveElement = createCommand<{\n // ID of the element to move.\n elementId: string;\n // Parent element for the new element.\n parentId: string;\n // Parent element slot (e.g., `children`, `heroBanner`, `tabsList.0.content`).\n slot: string;\n // Index within the slot.\n index: number;\n}>(\"MOVE_ELEMENT\");\n\nconst DeleteElement = createCommand<{\n id: string;\n}>(\"DELETE_ELEMENT\");\n\nconst SelectElement = createCommand<{ id: string }>(\"SELECT_ELEMENT\");\n\nconst HighlightElement = createCommand<{ id: string }>(\"HIGHLIGHT_ELEMENT\");\n\nconst SetTheme = createCommand<{ theme: WebsiteBuilderTheme }>(\"SET_THEME\");\n\nconst DeselectElement = createCommand<never>(\"DESELECT_ELEMENT\");\n\nconst RefreshPreview = createCommand<never>(\"REFRESH_PREVIEW\");\n\nconst PreviewPatchElement = createCommand<{ elementId: string; patch: any[] }>(\n \"PREVIEW_PATCH_ELEMENT\"\n);\n\nconst SendPreviewMessage = createCommand<{ type: string; payload?: any }>(\"SEND_PREVIEW_MESSAGE\");\n\nexport const Commands = {\n CreateElement,\n DeleteElement,\n MoveElement,\n SelectElement,\n DeselectElement,\n HighlightElement,\n RefreshPreview,\n PreviewPatchElement,\n SendPreviewMessage,\n SetTheme\n};\n"],"mappings":"AAAA,SAASA,aAAa;AAItB,MAAMC,aAAa,GAAGD,aAAa,CAWhC,gBAAgB,CAAC;AAEpB,MAAME,WAAW,GAAGF,aAAa,CAS9B,cAAc,CAAC;AAElB,MAAMG,aAAa,GAAGH,aAAa,CAEhC,gBAAgB,CAAC;AAEpB,MAAMI,aAAa,GAAGJ,aAAa,CAAiB,gBAAgB,CAAC;AAErE,MAAMK,gBAAgB,GAAGL,aAAa,CAAiB,mBAAmB,CAAC;AAE3E,MAAMM,QAAQ,GAAGN,aAAa,CAAiC,WAAW,CAAC;AAE3E,MAAMO,eAAe,GAAGP,aAAa,CAAQ,kBAAkB,CAAC;AAEhE,MAAMQ,cAAc,GAAGR,aAAa,CAAQ,iBAAiB,CAAC;AAE9D,MAAMS,mBAAmB,GAAGT,aAAa,CACrC,uBACJ,CAAC;AAED,MAAMU,kBAAkB,GAAGV,aAAa,CAAkC,sBAAsB,CAAC;AAEjG,OAAO,MAAMW,QAAQ,GAAG;EACpBV,aAAa;EACbE,aAAa;EACbD,WAAW;EACXE,aAAa;EACbG,eAAe;EACfF,gBAAgB;EAChBG,cAAc;EACdC,mBAAmB;EACnBC,kBAAkB;EAClBJ;AACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createCommand","CreateElement","MoveElement","DeleteElement","SelectElement","HighlightElement","SetTheme","DeselectElement","RefreshPreview","PreviewPatchElement","SendPreviewMessage","Commands"],"sources":["commands.ts"],"sourcesContent":["import { createCommand } from \"~/editorSdk/createCommand.js\";\nimport type { ElementFactoryCreateElementParams } from \"@webiny/website-builder-sdk\";\nimport type { WebsiteBuilderTheme } from \"@webiny/website-builder-sdk/types/WebsiteBuilderTheme.js\";\n\nconst CreateElement = createCommand<{\n // Name of the component to use.\n componentName: string;\n // Parent element for the new element.\n parentId: string;\n // Parent element slot (e.g., `children`, `heroBanner`, `tabsList.0.content`).\n slot: string;\n // Index within the slot. Omit to append at the end.\n index?: number;\n // Bindings\n bindings?: ElementFactoryCreateElementParams[\"bindings\"];\n}>(\"CREATE_ELEMENT\");\n\nconst MoveElement = createCommand<{\n // ID of the element to move.\n elementId: string;\n // Parent element for the new element.\n parentId: string;\n // Parent element slot (e.g., `children`, `heroBanner`, `tabsList.0.content`).\n slot: string;\n // Index within the slot.\n index: number;\n}>(\"MOVE_ELEMENT\");\n\nconst DeleteElement = createCommand<{\n id: string;\n}>(\"DELETE_ELEMENT\");\n\nconst SelectElement = createCommand<{ id: string }>(\"SELECT_ELEMENT\");\n\nconst HighlightElement = createCommand<{ id: string }>(\"HIGHLIGHT_ELEMENT\");\n\nconst SetTheme = createCommand<{ theme: WebsiteBuilderTheme }>(\"SET_THEME\");\n\nconst DeselectElement = createCommand<never>(\"DESELECT_ELEMENT\");\n\nconst RefreshPreview = createCommand<never>(\"REFRESH_PREVIEW\");\n\nconst PreviewPatchElement = createCommand<{ elementId: string; patch: any[] }>(\n \"PREVIEW_PATCH_ELEMENT\"\n);\n\nconst SendPreviewMessage = createCommand<{ type: string; payload?: any }>(\"SEND_PREVIEW_MESSAGE\");\n\nexport const Commands = {\n CreateElement,\n DeleteElement,\n MoveElement,\n SelectElement,\n DeselectElement,\n HighlightElement,\n RefreshPreview,\n PreviewPatchElement,\n SendPreviewMessage,\n SetTheme\n};\n"],"mappings":"AAAA,SAASA,aAAa;AAItB,MAAMC,aAAa,GAAGD,aAAa,CAWhC,gBAAgB,CAAC;AAEpB,MAAME,WAAW,GAAGF,aAAa,CAS9B,cAAc,CAAC;AAElB,MAAMG,aAAa,GAAGH,aAAa,CAEhC,gBAAgB,CAAC;AAEpB,MAAMI,aAAa,GAAGJ,aAAa,CAAiB,gBAAgB,CAAC;AAErE,MAAMK,gBAAgB,GAAGL,aAAa,CAAiB,mBAAmB,CAAC;AAE3E,MAAMM,QAAQ,GAAGN,aAAa,CAAiC,WAAW,CAAC;AAE3E,MAAMO,eAAe,GAAGP,aAAa,CAAQ,kBAAkB,CAAC;AAEhE,MAAMQ,cAAc,GAAGR,aAAa,CAAQ,iBAAiB,CAAC;AAE9D,MAAMS,mBAAmB,GAAGT,aAAa,CACrC,uBACJ,CAAC;AAED,MAAMU,kBAAkB,GAAGV,aAAa,CAAkC,sBAAsB,CAAC;AAEjG,OAAO,MAAMW,QAAQ,GAAG;EACpBV,aAAa;EACbE,aAAa;EACbD,WAAW;EACXE,aAAa;EACbG,eAAe;EACfF,gBAAgB;EAChBG,cAAc;EACdC,mBAAmB;EACnBC,kBAAkB;EAClBJ;AACJ,CAAC","ignoreList":[]}
@@ -14,6 +14,22 @@ export class PreviewEvents {
14
14
  listeners = [];
15
15
  constructor(editor) {
16
16
  this.editor = editor;
17
+
18
+ // @ts-ignore 123
19
+ window["aiCreateElement"] = input => {
20
+ const elements = Array.isArray(input) ? input : [input];
21
+ elements.forEach(element => {
22
+ $createElement(this.editor, {
23
+ componentName: element.component,
24
+ bindings: {
25
+ inputs: element.inputs
26
+ },
27
+ parentId: "root",
28
+ index: 0,
29
+ slot: "children"
30
+ });
31
+ });
32
+ };
17
33
  }
18
34
  onConnected(messenger) {
19
35
  // Dispose of the old messenger.
@@ -1 +1 @@
1
- {"version":3,"names":["functionConverter","mouseTracker","defaultImage","Commands","$createElement","deserializeHandlers","value","Array","isArray","map","s","deserialize","PreviewEvents","editorEventsRegistered","listeners","constructor","editor","onConnected","messenger","dispose","registerEditorEvents","subscribeToIframe","setTimeout","updateEditor","state","loadingPreview","selectedElement","destroy","forEach","unsubscribe","push","onDocumentStateChange","event","reason","getMessenger","send","diff","registerCommandHandler","PreviewPatchElement","payload","elementId","patch","SendPreviewMessage","type","getDocumentState","toJson","on","theme","executeCommand","SetTheme","fragments","document","read","Object","keys","elements","length","fragment","index","componentName","parentId","slot","bindings","inputs","name","component","boxes","viewport","iframeBox","getIframeBox","top","left","preview","mapCoordinatesToEditorSpace","constraints","c","descendantConstraints","canDelete","onChange","onDescendantChange","e","console","log","message","components","image","tags","group","componentGroups","id","x","y","globalX","globalY","setPosition","previewContainer","getElementById","previewBody","width","height","containerRect","getBoundingClientRect","bodyRect","newBoxes","key","box"],"sources":["PreviewEvents.ts"],"sourcesContent":["import type { Messenger } from \"@webiny/website-builder-sdk\";\nimport {\n type BoxesData,\n type ComponentManifest,\n type EditorViewportInfo,\n functionConverter,\n mouseTracker,\n type PreviewViewportData,\n type SerializedComponentGroup\n} from \"@webiny/website-builder-sdk\";\nimport defaultImage from \"@webiny/icons/extension.svg\";\nimport { Commands } from \"~/BaseEditor/index.js\";\nimport type { Editor } from \"~/editorSdk/Editor.js\";\nimport { $createElement } from \"~/editorSdk/utils/index.js\";\n\ntype FragmentConfig =\n | {\n type: \"fixed\";\n name: string;\n element: React.ReactNode;\n }\n | { type: \"component\"; component: string; inputs: Record<string, any> };\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nfunction deserializeHandlers(value: string | string[]): Function | Function[] {\n if (Array.isArray(value)) {\n return value.map(s => functionConverter.deserialize(s));\n }\n return functionConverter.deserialize(value);\n}\n\nexport class PreviewEvents {\n private editor: Editor;\n private editorEventsRegistered = false;\n private messenger: Messenger | undefined;\n private listeners: Array<() => void> = [];\n\n constructor(editor: Editor) {\n this.editor = editor;\n }\n\n onConnected(messenger: Messenger) {\n // Dispose of the old messenger.\n this.messenger?.dispose();\n\n this.messenger = messenger;\n\n this.registerEditorEvents();\n\n this.subscribeToIframe(messenger);\n\n setTimeout(() => {\n this.editor.updateEditor(state => {\n state.loadingPreview = false;\n state.selectedElement = null;\n });\n }, 100);\n }\n\n destroy() {\n this.listeners.forEach(unsubscribe => {\n unsubscribe();\n });\n }\n\n private registerEditorEvents() {\n if (this.editorEventsRegistered) {\n return;\n }\n\n this.editorEventsRegistered = true;\n\n this.listeners.push(\n // Propagate changes\n this.editor.onDocumentStateChange(event => {\n if (event.reason === \"update\") {\n this.getMessenger().send(\"document.patch\", event.diff);\n } else {\n this.getMessenger().send(\"document.set\", event.state);\n }\n }),\n\n // Element preview\n this.editor.registerCommandHandler(Commands.PreviewPatchElement, payload => {\n this.getMessenger().send(`element.patch.${payload.elementId}`, payload.patch);\n }),\n\n // Forward arbitrary messages to the preview iframe.\n this.editor.registerCommandHandler(Commands.SendPreviewMessage, ({ type, payload }) => {\n this.getMessenger().send(type, payload);\n })\n );\n }\n\n private subscribeToIframe(messenger: Messenger) {\n // When `onConnected` is executed, we need to send new data to the live preview.\n messenger.send(\"document.set\", this.editor.getDocumentState().toJson());\n\n messenger.on(\"preview.theme\", ({ theme }) => {\n this.editor.executeCommand(Commands.SetTheme, { theme });\n });\n\n messenger.on(\"document.fragments\", payload => {\n const fragments: FragmentConfig[] = payload.fragments;\n this.editor.updateEditor(state => {\n state.fragments = fragments;\n });\n\n const document = this.editor.getDocumentState().read();\n\n if (Object.keys(document.elements).length === 1) {\n // We only have the default \"root\" element, create fragment elements.\n fragments.forEach((fragment, index) => {\n if (fragment.type === \"fixed\") {\n $createElement(this.editor, {\n componentName: \"Webiny/Fragment\",\n parentId: \"root\",\n slot: \"children\",\n index,\n bindings: {\n inputs: {\n name: fragment.name\n }\n }\n });\n return;\n }\n\n $createElement(this.editor, {\n componentName: fragment.component,\n parentId: \"root\",\n slot: \"children\",\n index,\n bindings: {\n inputs: fragment.inputs\n }\n });\n });\n }\n });\n\n messenger.on(\"preview.viewport\", ({ boxes, viewport }: PreviewViewportData) => {\n const iframeBox = this.getIframeBox();\n\n this.editor.updateEditor(state => {\n state.viewport = {\n ...state.viewport,\n ...viewport,\n top: iframeBox.top,\n left: iframeBox.left\n };\n\n state.boxes = {\n preview: boxes,\n editor: this.mapCoordinatesToEditorSpace(state.viewport, boxes)\n };\n });\n });\n\n messenger.on(\"preview.component.register\", (component: ComponentManifest) => {\n // Deserialize constraint check functions once on arrival.\n try {\n if (component.constraints) {\n component.constraints = (component.constraints as any[]).map(c =>\n typeof c === \"string\" ? functionConverter.deserialize(c) : c\n );\n }\n if (component.descendantConstraints) {\n component.descendantConstraints = (\n component.descendantConstraints as any[]\n ).map(c => (typeof c === \"string\" ? functionConverter.deserialize(c) : c));\n }\n if (component.canDelete && typeof component.canDelete === \"string\") {\n component.canDelete = functionConverter.deserialize(component.canDelete);\n }\n if (component.onChange) {\n component.onChange = deserializeHandlers(component.onChange as any) as any;\n }\n if (component.onDescendantChange) {\n component.onDescendantChange = deserializeHandlers(\n component.onDescendantChange as any\n ) as any;\n }\n } catch (e) {\n console.log(\n `Couldn't deserialize ${component.name} component callbacks:`,\n e.message\n );\n }\n\n this.editor.updateEditor(state => {\n if (!state.components) {\n state.components = {};\n }\n state.components[component.name] = {\n ...component,\n image: component.image ?? defaultImage,\n tags: component.tags ?? []\n };\n });\n });\n\n messenger.on(\"preview.componentGroup.register\", (group: SerializedComponentGroup) => {\n this.editor.updateEditor(state => {\n if (!state.componentGroups) {\n state.componentGroups = {};\n }\n state.componentGroups[group.name] = group;\n });\n });\n\n messenger.on(\"preview.element.click\", ({ id }) => {\n this.editor.updateEditor(state => {\n state.selectedElement = id;\n });\n });\n\n messenger.on(\"preview.mouse.move\", ({ x, y }) => {\n const iframeBox = this.getIframeBox();\n const globalX = x + iframeBox.left;\n const globalY = y + iframeBox.top;\n\n mouseTracker.setPosition(globalX, globalY);\n });\n }\n\n private getIframeBox() {\n const previewContainer = document.getElementById(\"preview-container\");\n const previewBody = document.getElementById(\"preview-body\");\n\n if (!previewContainer || !previewBody) {\n return {\n top: 0,\n left: 0,\n width: 0,\n height: 0\n };\n }\n\n /**\n * We need to use the `preview-container` to get the exact position from the top (we MUST ignore scroll position).\n * However, for everything else we use the actual `preview-body`,\n */\n const containerRect = previewContainer.getBoundingClientRect();\n const bodyRect = previewBody.getBoundingClientRect();\n\n return {\n top: containerRect.top,\n left: bodyRect.left,\n width: bodyRect.width,\n height: bodyRect.height\n };\n }\n\n private mapCoordinatesToEditorSpace(\n viewport: EditorViewportInfo,\n boxes: PreviewViewportData[\"boxes\"]\n ) {\n const newBoxes: BoxesData = {};\n\n for (const key in boxes) {\n const box = boxes[key];\n newBoxes[key] = {\n ...box,\n top: box.top + viewport.top,\n left: box.left + viewport.left\n };\n }\n\n return newBoxes;\n }\n\n private getMessenger(): Messenger {\n return this.messenger!;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["functionConverter","mouseTracker","defaultImage","Commands","$createElement","deserializeHandlers","value","Array","isArray","map","s","deserialize","PreviewEvents","editorEventsRegistered","listeners","constructor","editor","window","input","elements","forEach","element","componentName","component","bindings","inputs","parentId","index","slot","onConnected","messenger","dispose","registerEditorEvents","subscribeToIframe","setTimeout","updateEditor","state","loadingPreview","selectedElement","destroy","unsubscribe","push","onDocumentStateChange","event","reason","getMessenger","send","diff","registerCommandHandler","PreviewPatchElement","payload","elementId","patch","SendPreviewMessage","type","getDocumentState","toJson","on","theme","executeCommand","SetTheme","fragments","document","read","Object","keys","length","fragment","name","boxes","viewport","iframeBox","getIframeBox","top","left","preview","mapCoordinatesToEditorSpace","constraints","c","descendantConstraints","canDelete","onChange","onDescendantChange","e","console","log","message","components","image","tags","group","componentGroups","id","x","y","globalX","globalY","setPosition","previewContainer","getElementById","previewBody","width","height","containerRect","getBoundingClientRect","bodyRect","newBoxes","key","box"],"sources":["PreviewEvents.ts"],"sourcesContent":["import type { Messenger } from \"@webiny/website-builder-sdk\";\nimport {\n type BoxesData,\n type ComponentManifest,\n type EditorViewportInfo,\n functionConverter,\n mouseTracker,\n type PreviewViewportData,\n type SerializedComponentGroup\n} from \"@webiny/website-builder-sdk\";\nimport defaultImage from \"@webiny/icons/extension.svg\";\nimport { Commands } from \"~/BaseEditor/index.js\";\nimport type { Editor } from \"~/editorSdk/Editor.js\";\nimport { $createElement } from \"~/editorSdk/utils/index.js\";\n\ntype FragmentConfig =\n | {\n type: \"fixed\";\n name: string;\n element: React.ReactNode;\n }\n | { type: \"component\"; component: string; inputs: Record<string, any> };\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nfunction deserializeHandlers(value: string | string[]): Function | Function[] {\n if (Array.isArray(value)) {\n return value.map(s => functionConverter.deserialize(s));\n }\n return functionConverter.deserialize(value);\n}\n\nexport class PreviewEvents {\n private editor: Editor;\n private editorEventsRegistered = false;\n private messenger: Messenger | undefined;\n private listeners: Array<() => void> = [];\n\n constructor(editor: Editor) {\n this.editor = editor;\n\n // @ts-ignore 123\n window[\"aiCreateElement\"] = (input: any) => {\n const elements = Array.isArray(input) ? input : [input];\n elements.forEach(element => {\n $createElement(this.editor, {\n componentName: element.component,\n bindings: { inputs: element.inputs },\n parentId: \"root\",\n index: 0,\n slot: \"children\"\n });\n });\n };\n }\n\n onConnected(messenger: Messenger) {\n // Dispose of the old messenger.\n this.messenger?.dispose();\n\n this.messenger = messenger;\n\n this.registerEditorEvents();\n\n this.subscribeToIframe(messenger);\n\n setTimeout(() => {\n this.editor.updateEditor(state => {\n state.loadingPreview = false;\n state.selectedElement = null;\n });\n }, 100);\n }\n\n destroy() {\n this.listeners.forEach(unsubscribe => {\n unsubscribe();\n });\n }\n\n private registerEditorEvents() {\n if (this.editorEventsRegistered) {\n return;\n }\n\n this.editorEventsRegistered = true;\n\n this.listeners.push(\n // Propagate changes\n this.editor.onDocumentStateChange(event => {\n if (event.reason === \"update\") {\n this.getMessenger().send(\"document.patch\", event.diff);\n } else {\n this.getMessenger().send(\"document.set\", event.state);\n }\n }),\n\n // Element preview\n this.editor.registerCommandHandler(Commands.PreviewPatchElement, payload => {\n this.getMessenger().send(`element.patch.${payload.elementId}`, payload.patch);\n }),\n\n // Forward arbitrary messages to the preview iframe.\n this.editor.registerCommandHandler(Commands.SendPreviewMessage, ({ type, payload }) => {\n this.getMessenger().send(type, payload);\n })\n );\n }\n\n private subscribeToIframe(messenger: Messenger) {\n // When `onConnected` is executed, we need to send new data to the live preview.\n messenger.send(\"document.set\", this.editor.getDocumentState().toJson());\n\n messenger.on(\"preview.theme\", ({ theme }) => {\n this.editor.executeCommand(Commands.SetTheme, { theme });\n });\n\n messenger.on(\"document.fragments\", payload => {\n const fragments: FragmentConfig[] = payload.fragments;\n this.editor.updateEditor(state => {\n state.fragments = fragments;\n });\n\n const document = this.editor.getDocumentState().read();\n\n if (Object.keys(document.elements).length === 1) {\n // We only have the default \"root\" element, create fragment elements.\n fragments.forEach((fragment, index) => {\n if (fragment.type === \"fixed\") {\n $createElement(this.editor, {\n componentName: \"Webiny/Fragment\",\n parentId: \"root\",\n slot: \"children\",\n index,\n bindings: {\n inputs: {\n name: fragment.name\n }\n }\n });\n return;\n }\n\n $createElement(this.editor, {\n componentName: fragment.component,\n parentId: \"root\",\n slot: \"children\",\n index,\n bindings: {\n inputs: fragment.inputs\n }\n });\n });\n }\n });\n\n messenger.on(\"preview.viewport\", ({ boxes, viewport }: PreviewViewportData) => {\n const iframeBox = this.getIframeBox();\n\n this.editor.updateEditor(state => {\n state.viewport = {\n ...state.viewport,\n ...viewport,\n top: iframeBox.top,\n left: iframeBox.left\n };\n\n state.boxes = {\n preview: boxes,\n editor: this.mapCoordinatesToEditorSpace(state.viewport, boxes)\n };\n });\n });\n\n messenger.on(\"preview.component.register\", (component: ComponentManifest) => {\n // Deserialize constraint check functions once on arrival.\n try {\n if (component.constraints) {\n component.constraints = (component.constraints as any[]).map(c =>\n typeof c === \"string\" ? functionConverter.deserialize(c) : c\n );\n }\n if (component.descendantConstraints) {\n component.descendantConstraints = (\n component.descendantConstraints as any[]\n ).map(c => (typeof c === \"string\" ? functionConverter.deserialize(c) : c));\n }\n if (component.canDelete && typeof component.canDelete === \"string\") {\n component.canDelete = functionConverter.deserialize(component.canDelete);\n }\n if (component.onChange) {\n component.onChange = deserializeHandlers(component.onChange as any) as any;\n }\n if (component.onDescendantChange) {\n component.onDescendantChange = deserializeHandlers(\n component.onDescendantChange as any\n ) as any;\n }\n } catch (e) {\n console.log(\n `Couldn't deserialize ${component.name} component callbacks:`,\n e.message\n );\n }\n\n this.editor.updateEditor(state => {\n if (!state.components) {\n state.components = {};\n }\n state.components[component.name] = {\n ...component,\n image: component.image ?? defaultImage,\n tags: component.tags ?? []\n };\n });\n });\n\n messenger.on(\"preview.componentGroup.register\", (group: SerializedComponentGroup) => {\n this.editor.updateEditor(state => {\n if (!state.componentGroups) {\n state.componentGroups = {};\n }\n state.componentGroups[group.name] = group;\n });\n });\n\n messenger.on(\"preview.element.click\", ({ id }) => {\n this.editor.updateEditor(state => {\n state.selectedElement = id;\n });\n });\n\n messenger.on(\"preview.mouse.move\", ({ x, y }) => {\n const iframeBox = this.getIframeBox();\n const globalX = x + iframeBox.left;\n const globalY = y + iframeBox.top;\n\n mouseTracker.setPosition(globalX, globalY);\n });\n }\n\n private getIframeBox() {\n const previewContainer = document.getElementById(\"preview-container\");\n const previewBody = document.getElementById(\"preview-body\");\n\n if (!previewContainer || !previewBody) {\n return {\n top: 0,\n left: 0,\n width: 0,\n height: 0\n };\n }\n\n /**\n * We need to use the `preview-container` to get the exact position from the top (we MUST ignore scroll position).\n * However, for everything else we use the actual `preview-body`,\n */\n const containerRect = previewContainer.getBoundingClientRect();\n const bodyRect = previewBody.getBoundingClientRect();\n\n return {\n top: containerRect.top,\n left: bodyRect.left,\n width: bodyRect.width,\n height: bodyRect.height\n };\n }\n\n private mapCoordinatesToEditorSpace(\n viewport: EditorViewportInfo,\n boxes: PreviewViewportData[\"boxes\"]\n ) {\n const newBoxes: BoxesData = {};\n\n for (const key in boxes) {\n const box = boxes[key];\n newBoxes[key] = {\n ...box,\n top: box.top + viewport.top,\n left: box.left + viewport.left\n };\n }\n\n return newBoxes;\n }\n\n private getMessenger(): Messenger {\n return this.messenger!;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -21,13 +21,13 @@ function BaseDocumentEditor({
21
21
  children
22
22
  }) {
23
23
  const editor = useMemo(() => new Editor(document), [document]);
24
- return /*#__PURE__*/React.createElement(DialogsProvider, null, /*#__PURE__*/React.createElement(DndProvider, {
24
+ return /*#__PURE__*/React.createElement(DndProvider, {
25
25
  backend: HTML5Backend
26
26
  }, /*#__PURE__*/React.createElement(StateInspector, {
27
27
  editor: editor
28
28
  }), /*#__PURE__*/React.createElement(DocumentEditorContext.Provider, {
29
29
  value: editor
30
- }, children ? /*#__PURE__*/React.createElement(React.Fragment, null, children) : null, /*#__PURE__*/React.createElement(CompositionScope, {
30
+ }, /*#__PURE__*/React.createElement(DialogsProvider, null, children ? /*#__PURE__*/React.createElement(React.Fragment, null, children) : null, /*#__PURE__*/React.createElement(CompositionScope, {
31
31
  name: name
32
32
  }, /*#__PURE__*/React.createElement(EditorComponent, null)))));
33
33
  }
@@ -1 +1 @@
1
- {"version":3,"names":["React","useMemo","HTML5Backend","DndProvider","Editor","EditorComponent","observer","StateInspector","CompositionScope","DialogsProvider","DocumentEditorContext","createContext","undefined","useDocumentEditor","context","useContext","Error","BaseDocumentEditor","document","name","children","editor","createElement","backend","Provider","value","Fragment","WithObserver","DocumentEditor"],"sources":["DocumentEditor.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport type { EditorDocument } from \"@webiny/website-builder-sdk\";\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\nimport { DndProvider } from \"react-dnd\";\nimport { Editor as EditorComponent } from \"~/BaseEditor/components/index.js\";\nimport { Editor } from \"~/editorSdk/Editor.js\";\nimport { observer } from \"mobx-react-lite\";\nimport { StateInspector } from \"./StateInspector.js\";\nimport { CompositionScope } from \"@webiny/react-composition\";\nimport { DialogsProvider } from \"@webiny/app-admin\";\n\nexport const DocumentEditorContext = React.createContext<Editor<any> | undefined>(undefined);\n\nexport function useDocumentEditor<TDocument extends EditorDocument>() {\n const context = React.useContext(DocumentEditorContext);\n if (!context) {\n throw new Error(\"useDocumentEditor must be used within a <DocumentEditor /> context!\");\n }\n return context as Editor<TDocument>;\n}\n\ninterface DocumentEditorProps<TDocument> {\n document: TDocument;\n name: string;\n children?: React.ReactNode;\n}\n\nfunction BaseDocumentEditor<TDocument extends EditorDocument>({\n document,\n name,\n children\n}: DocumentEditorProps<TDocument>) {\n const editor = useMemo(() => new Editor<TDocument>(document), [document]);\n\n return (\n <DialogsProvider>\n <DndProvider backend={HTML5Backend}>\n <StateInspector editor={editor} />\n <DocumentEditorContext.Provider value={editor as Editor<TDocument>}>\n {children ? <>{children}</> : null}\n <CompositionScope name={name}>\n <EditorComponent />\n </CompositionScope>\n </DocumentEditorContext.Provider>\n </DndProvider>\n </DialogsProvider>\n );\n}\n\nconst WithObserver = observer(BaseDocumentEditor);\n\nexport const DocumentEditor = WithObserver;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AAEtC,SAASC,YAAY,QAAQ,yBAAyB;AACtD,SAASC,WAAW,QAAQ,WAAW;AACvC,SAASC,MAAM,IAAIC,eAAe;AAClC,SAASD,MAAM;AACf,SAASE,QAAQ,QAAQ,iBAAiB;AAC1C,SAASC,cAAc;AACvB,SAASC,gBAAgB,QAAQ,2BAA2B;AAC5D,SAASC,eAAe,QAAQ,mBAAmB;AAEnD,OAAO,MAAMC,qBAAqB,gBAAGV,KAAK,CAACW,aAAa,CAA0BC,SAAS,CAAC;AAE5F,OAAO,SAASC,iBAAiBA,CAAA,EAAqC;EAClE,MAAMC,OAAO,GAAGd,KAAK,CAACe,UAAU,CAACL,qBAAqB,CAAC;EACvD,IAAI,CAACI,OAAO,EAAE;IACV,MAAM,IAAIE,KAAK,CAAC,qEAAqE,CAAC;EAC1F;EACA,OAAOF,OAAO;AAClB;AAQA,SAASG,kBAAkBA,CAAmC;EAC1DC,QAAQ;EACRC,IAAI;EACJC;AAC4B,CAAC,EAAE;EAC/B,MAAMC,MAAM,GAAGpB,OAAO,CAAC,MAAM,IAAIG,MAAM,CAAYc,QAAQ,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EAEzE,oBACIlB,KAAA,CAAAsB,aAAA,CAACb,eAAe,qBACZT,KAAA,CAAAsB,aAAA,CAACnB,WAAW;IAACoB,OAAO,EAAErB;EAAa,gBAC/BF,KAAA,CAAAsB,aAAA,CAACf,cAAc;IAACc,MAAM,EAAEA;EAAO,CAAE,CAAC,eAClCrB,KAAA,CAAAsB,aAAA,CAACZ,qBAAqB,CAACc,QAAQ;IAACC,KAAK,EAAEJ;EAA4B,GAC9DD,QAAQ,gBAAGpB,KAAA,CAAAsB,aAAA,CAAAtB,KAAA,CAAA0B,QAAA,QAAGN,QAAW,CAAC,GAAG,IAAI,eAClCpB,KAAA,CAAAsB,aAAA,CAACd,gBAAgB;IAACW,IAAI,EAAEA;EAAK,gBACzBnB,KAAA,CAAAsB,aAAA,CAACjB,eAAe,MAAE,CACJ,CACU,CACvB,CACA,CAAC;AAE1B;AAEA,MAAMsB,YAAY,GAAGrB,QAAQ,CAACW,kBAAkB,CAAC;AAEjD,OAAO,MAAMW,cAAc,GAAGD,YAAY","ignoreList":[]}
1
+ {"version":3,"names":["React","useMemo","HTML5Backend","DndProvider","Editor","EditorComponent","observer","StateInspector","CompositionScope","DialogsProvider","DocumentEditorContext","createContext","undefined","useDocumentEditor","context","useContext","Error","BaseDocumentEditor","document","name","children","editor","createElement","backend","Provider","value","Fragment","WithObserver","DocumentEditor"],"sources":["DocumentEditor.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport type { EditorDocument } from \"@webiny/website-builder-sdk\";\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\nimport { DndProvider } from \"react-dnd\";\nimport { Editor as EditorComponent } from \"~/BaseEditor/components/index.js\";\nimport { Editor } from \"~/editorSdk/Editor.js\";\nimport { observer } from \"mobx-react-lite\";\nimport { StateInspector } from \"./StateInspector.js\";\nimport { CompositionScope } from \"@webiny/react-composition\";\nimport { DialogsProvider } from \"@webiny/app-admin\";\n\nexport const DocumentEditorContext = React.createContext<Editor<any> | undefined>(undefined);\n\nexport function useDocumentEditor<TDocument extends EditorDocument>() {\n const context = React.useContext(DocumentEditorContext);\n if (!context) {\n throw new Error(\"useDocumentEditor must be used within a <DocumentEditor /> context!\");\n }\n return context as Editor<TDocument>;\n}\n\ninterface DocumentEditorProps<TDocument> {\n document: TDocument;\n name: string;\n children?: React.ReactNode;\n}\n\nfunction BaseDocumentEditor<TDocument extends EditorDocument>({\n document,\n name,\n children\n}: DocumentEditorProps<TDocument>) {\n const editor = useMemo(() => new Editor<TDocument>(document), [document]);\n\n return (\n <DndProvider backend={HTML5Backend}>\n <StateInspector editor={editor} />\n <DocumentEditorContext.Provider value={editor as Editor<TDocument>}>\n <DialogsProvider>\n {children ? <>{children}</> : null}\n <CompositionScope name={name}>\n <EditorComponent />\n </CompositionScope>\n </DialogsProvider>\n </DocumentEditorContext.Provider>\n </DndProvider>\n );\n}\n\nconst WithObserver = observer(BaseDocumentEditor);\n\nexport const DocumentEditor = WithObserver;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AAEtC,SAASC,YAAY,QAAQ,yBAAyB;AACtD,SAASC,WAAW,QAAQ,WAAW;AACvC,SAASC,MAAM,IAAIC,eAAe;AAClC,SAASD,MAAM;AACf,SAASE,QAAQ,QAAQ,iBAAiB;AAC1C,SAASC,cAAc;AACvB,SAASC,gBAAgB,QAAQ,2BAA2B;AAC5D,SAASC,eAAe,QAAQ,mBAAmB;AAEnD,OAAO,MAAMC,qBAAqB,gBAAGV,KAAK,CAACW,aAAa,CAA0BC,SAAS,CAAC;AAE5F,OAAO,SAASC,iBAAiBA,CAAA,EAAqC;EAClE,MAAMC,OAAO,GAAGd,KAAK,CAACe,UAAU,CAACL,qBAAqB,CAAC;EACvD,IAAI,CAACI,OAAO,EAAE;IACV,MAAM,IAAIE,KAAK,CAAC,qEAAqE,CAAC;EAC1F;EACA,OAAOF,OAAO;AAClB;AAQA,SAASG,kBAAkBA,CAAmC;EAC1DC,QAAQ;EACRC,IAAI;EACJC;AAC4B,CAAC,EAAE;EAC/B,MAAMC,MAAM,GAAGpB,OAAO,CAAC,MAAM,IAAIG,MAAM,CAAYc,QAAQ,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EAEzE,oBACIlB,KAAA,CAAAsB,aAAA,CAACnB,WAAW;IAACoB,OAAO,EAAErB;EAAa,gBAC/BF,KAAA,CAAAsB,aAAA,CAACf,cAAc;IAACc,MAAM,EAAEA;EAAO,CAAE,CAAC,eAClCrB,KAAA,CAAAsB,aAAA,CAACZ,qBAAqB,CAACc,QAAQ;IAACC,KAAK,EAAEJ;EAA4B,gBAC/DrB,KAAA,CAAAsB,aAAA,CAACb,eAAe,QACXW,QAAQ,gBAAGpB,KAAA,CAAAsB,aAAA,CAAAtB,KAAA,CAAA0B,QAAA,QAAGN,QAAW,CAAC,GAAG,IAAI,eAClCpB,KAAA,CAAAsB,aAAA,CAACd,gBAAgB;IAACW,IAAI,EAAEA;EAAK,gBACzBnB,KAAA,CAAAsB,aAAA,CAACjB,eAAe,MAAE,CACJ,CACL,CACW,CACvB,CAAC;AAEtB;AAEA,MAAMsB,YAAY,GAAGrB,QAAQ,CAACW,kBAAkB,CAAC;AAEjD,OAAO,MAAMW,cAAc,GAAGD,YAAY","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["createRestorePageMutation","TrashBinRestorePageGraphQLGateway","constructor","params","client","fields","execute","id","data","response","mutate","mutation","variables","Error","error","websiteBuilder","restorePage","message"],"sources":["TrashBinRestorePageGraphQLGateway.ts"],"sourcesContent":["import type { ApolloClient } from \"apollo-client\";\nimport type { ITrashBinRestoreItemGateway } from \"@webiny/app-trash-bin\";\nimport type {\n ITrashPageRestoreMutationResponse,\n ITrashPageRestoreMutationVariables\n} from \"./graphql/restoreMutation.js\";\nimport { createRestorePageMutation } from \"./graphql/restoreMutation.js\";\nimport type { PageGatewayDto } from \"~/features/pages/getPage/PageGatewayDto.js\";\n\ninterface ITrashBinRestorePageGraphQLGatewayParams {\n client: ApolloClient<object>;\n fields: string[];\n}\n\nexport class TrashBinRestorePageGraphQLGateway\n implements ITrashBinRestoreItemGateway<PageGatewayDto>\n{\n private readonly client: ApolloClient<object>;\n private readonly fields: string[];\n\n public constructor(params: ITrashBinRestorePageGraphQLGatewayParams) {\n this.client = params.client;\n this.fields = params.fields;\n }\n\n public async execute(id: string): Promise<PageGatewayDto> {\n const { data: response } = await this.client.mutate<\n ITrashPageRestoreMutationResponse,\n ITrashPageRestoreMutationVariables\n >({\n mutation: createRestorePageMutation(this.fields),\n variables: {\n id\n }\n });\n\n if (!response) {\n throw new Error(\"Network error while restoring entry from trash bin.\");\n }\n\n const { data, error } = response.websiteBuilder.restorePage;\n\n if (!data) {\n throw new Error(error?.message || \"Could not fetch the restored entry.\");\n }\n\n return data;\n }\n}\n"],"mappings":"AAMA,SAASA,yBAAyB;AAQlC,OAAO,MAAMC,iCAAiC,CAE9C;EAIWC,WAAWA,CAACC,MAAgD,EAAE;IACjE,IAAI,CAACC,MAAM,GAAGD,MAAM,CAACC,MAAM;IAC3B,IAAI,CAACC,MAAM,GAAGF,MAAM,CAACE,MAAM;EAC/B;EAEA,MAAaC,OAAOA,CAACC,EAAU,EAA2B;IACtD,MAAM;MAAEC,IAAI,EAAEC;IAAS,CAAC,GAAG,MAAM,IAAI,CAACL,MAAM,CAACM,MAAM,CAGjD;MACEC,QAAQ,EAAEX,yBAAyB,CAAC,IAAI,CAACK,MAAM,CAAC;MAChDO,SAAS,EAAE;QACPL;MACJ;IACJ,CAAC,CAAC;IAEF,IAAI,CAACE,QAAQ,EAAE;MACX,MAAM,IAAII,KAAK,CAAC,qDAAqD,CAAC;IAC1E;IAEA,MAAM;MAAEL,IAAI;MAAEM;IAAM,CAAC,GAAGL,QAAQ,CAACM,cAAc,CAACC,WAAW;IAE3D,IAAI,CAACR,IAAI,EAAE;MACP,MAAM,IAAIK,KAAK,CAACC,KAAK,EAAEG,OAAO,IAAI,qCAAqC,CAAC;IAC5E;IAEA,OAAOT,IAAI;EACf;AACJ","ignoreList":[]}
1
+ {"version":3,"names":["createRestorePageMutation","TrashBinRestorePageGraphQLGateway","constructor","params","client","fields","execute","id","data","response","mutate","mutation","variables","Error","error","websiteBuilder","restorePage","message"],"sources":["TrashBinRestorePageGraphQLGateway.ts"],"sourcesContent":["import type { ApolloClient } from \"apollo-client\";\nimport type { ITrashBinRestoreItemGateway } from \"@webiny/app-trash-bin\";\nimport type {\n ITrashPageRestoreMutationResponse,\n ITrashPageRestoreMutationVariables\n} from \"./graphql/restoreMutation.js\";\nimport { createRestorePageMutation } from \"./graphql/restoreMutation.js\";\nimport type { PageGatewayDto } from \"~/features/pages/getPage/PageGatewayDto.js\";\n\ninterface ITrashBinRestorePageGraphQLGatewayParams {\n client: ApolloClient<object>;\n fields: string[];\n}\n\nexport class TrashBinRestorePageGraphQLGateway implements ITrashBinRestoreItemGateway<PageGatewayDto> {\n private readonly client: ApolloClient<object>;\n private readonly fields: string[];\n\n public constructor(params: ITrashBinRestorePageGraphQLGatewayParams) {\n this.client = params.client;\n this.fields = params.fields;\n }\n\n public async execute(id: string): Promise<PageGatewayDto> {\n const { data: response } = await this.client.mutate<\n ITrashPageRestoreMutationResponse,\n ITrashPageRestoreMutationVariables\n >({\n mutation: createRestorePageMutation(this.fields),\n variables: {\n id\n }\n });\n\n if (!response) {\n throw new Error(\"Network error while restoring entry from trash bin.\");\n }\n\n const { data, error } = response.websiteBuilder.restorePage;\n\n if (!data) {\n throw new Error(error?.message || \"Could not fetch the restored entry.\");\n }\n\n return data;\n }\n}\n"],"mappings":"AAMA,SAASA,yBAAyB;AAQlC,OAAO,MAAMC,iCAAiC,CAAwD;EAI3FC,WAAWA,CAACC,MAAgD,EAAE;IACjE,IAAI,CAACC,MAAM,GAAGD,MAAM,CAACC,MAAM;IAC3B,IAAI,CAACC,MAAM,GAAGF,MAAM,CAACE,MAAM;EAC/B;EAEA,MAAaC,OAAOA,CAACC,EAAU,EAA2B;IACtD,MAAM;MAAEC,IAAI,EAAEC;IAAS,CAAC,GAAG,MAAM,IAAI,CAACL,MAAM,CAACM,MAAM,CAGjD;MACEC,QAAQ,EAAEX,yBAAyB,CAAC,IAAI,CAACK,MAAM,CAAC;MAChDO,SAAS,EAAE;QACPL;MACJ;IACJ,CAAC,CAAC;IAEF,IAAI,CAACE,QAAQ,EAAE;MACX,MAAM,IAAII,KAAK,CAAC,qDAAqD,CAAC;IAC1E;IAEA,MAAM;MAAEL,IAAI;MAAEM;IAAM,CAAC,GAAGL,QAAQ,CAACM,cAAc,CAACC,WAAW;IAE3D,IAAI,CAACR,IAAI,EAAE;MACP,MAAM,IAAIK,KAAK,CAACC,KAAK,EAAEG,OAAO,IAAI,qCAAqC,CAAC;IAC5E;IAEA,OAAOT,IAAI;EACf;AACJ","ignoreList":[]}
@@ -7,6 +7,7 @@ export declare const IconContainer: import("@emotion/styled").StyledComponent<{
7
7
  as?: React.ElementType;
8
8
  }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
9
9
  export declare const Icon: import("@emotion/styled").StyledComponent<import("react").SVGProps<SVGSVGElement> & {
10
+ title?: string;
10
11
  alt?: string;
11
12
  } & {
12
13
  theme?: import("@emotion/react").Theme;
@@ -4,13 +4,25 @@ import type { IPageType } from "../../presentation/pages/CreatePage/abstractions
4
4
  import type { CreatePageParams } from "../../features/pages/createPage/abstractions.js";
5
5
  import type { IEcommerceApiProvider } from "../../features/index.js";
6
6
  import type { Resource } from "../types.js";
7
+ declare module "@webiny/app-admin/features/formModel/abstractions.js" {
8
+ interface IFieldRendererRegistry {
9
+ "resource-picker": {
10
+ fieldType: "text";
11
+ settings?: {
12
+ rows?: number;
13
+ };
14
+ };
15
+ }
16
+ }
7
17
  interface ResourcePickerRendererConfig {
8
18
  pluginName: string;
9
19
  resourceType: string;
10
20
  }
11
- export declare function createResourcePickerRenderer(config: ResourcePickerRendererConfig): React.FunctionComponent<{
21
+ export declare function createResourcePickerRenderer(config: ResourcePickerRendererConfig): (({ field }: {
12
22
  field: IFieldVM;
13
- }>;
23
+ }) => React.JSX.Element) & {
24
+ displayName: string;
25
+ };
14
26
  export interface EcommerceResourcePageTypeConfig {
15
27
  name: string;
16
28
  label: string;
@@ -1 +1 @@
1
- {"version":3,"names":["React","observer","Skeleton","ResourcesPickerButton","toTitleCaseLabel","useEcommerceApi","createResourcePickerRenderer","config","ResourcePickerField","field","api","pluginName","createElement","className","resourceName","resourceType","value","onChange","EcommerceResourcePageType","constructor","provider","name","label","modifyForm","form","fields","resourceId","text","required","renderer","afterChange","f","onResourceSelected","String","setDisabled","layout","row","before","mapFromForm","data","input","metadata","getApi","apiName","resource","findById","setValue","title","previewPath"],"sources":["ResourcePage.tsx"],"sourcesContent":["import React from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { Skeleton } from \"@webiny/admin-ui\";\nimport type { IFormModel, IFieldVM } from \"@webiny/app-admin\";\nimport type { IPageType } from \"~/presentation/pages/CreatePage/abstractions.js\";\nimport type { CreatePageParams } from \"~/features/pages/createPage/abstractions.js\";\nimport type { IEcommerceApiProvider } from \"~/features/index.js\";\nimport type { Resource } from \"../types.js\";\nimport { ResourcesPickerButton } from \"./ResourcesPicker.js\";\nimport { toTitleCaseLabel } from \"./toTitleCaseLabel.js\";\nimport { useEcommerceApi } from \"~/features/index.js\";\n\n// ---------------------------------------------------------------------------\n// ResourcePicker field renderer\n// ---------------------------------------------------------------------------\n\ninterface ResourcePickerRendererConfig {\n pluginName: string;\n resourceType: string;\n}\n\nexport function createResourcePickerRenderer(config: ResourcePickerRendererConfig) {\n return observer(function ResourcePickerField({ field }: { field: IFieldVM }) {\n const { api } = useEcommerceApi(config.pluginName);\n\n if (!api) {\n return <Skeleton />;\n }\n\n return (\n <div className={\"border-sm rounded-md border-neutral-muted p-sm\"}>\n <ResourcesPickerButton\n api={api}\n resourceName={config.resourceType}\n pluginName={config.pluginName}\n value={field.value as string}\n onChange={value => field.onChange(value)}\n />\n </div>\n );\n });\n}\n\n// ---------------------------------------------------------------------------\n// EcommerceResourcePageType — IPageType implementation\n// ---------------------------------------------------------------------------\n\nexport interface EcommerceResourcePageTypeConfig {\n name: string;\n label: string;\n resourceType: string;\n previewPath: (resource: Resource) => string;\n apiName: string;\n}\n\nexport class EcommerceResourcePageType implements IPageType {\n readonly name: string;\n readonly label: string;\n\n constructor(\n private config: EcommerceResourcePageTypeConfig,\n private provider: IEcommerceApiProvider\n ) {\n this.name = config.name;\n this.label = config.label;\n }\n\n modifyForm(form: IFormModel): void {\n form.fields(fields => ({\n resourceId: fields\n .text()\n .label(toTitleCaseLabel(this.config.resourceType))\n .required()\n .renderer(\"resource-picker\")\n .afterChange((value, f) => {\n if (!value) {\n return;\n }\n void this.onResourceSelected(String(value), f);\n })\n }));\n\n form.field(\"title\").setDisabled(true);\n form.field(\"path\").setDisabled(true);\n\n form.layout(layout => [layout.row(\"resourceId\").before(\"title\")]);\n }\n\n mapFromForm(data: Record<string, unknown>, input: CreatePageParams): void {\n input.metadata = input.metadata ?? {};\n input.metadata.resourceId = data.resourceId;\n }\n\n private async onResourceSelected(resourceId: string, form: IFormModel): Promise<void> {\n const api = await this.provider.getApi(this.config.apiName);\n if (!api) {\n return;\n }\n\n const resource = await api[this.config.resourceType].findById(resourceId);\n form.field(\"title\").setValue(resource.title);\n form.field(\"title\").setDisabled(false);\n form.field(\"path\").setValue(this.config.previewPath(resource));\n form.field(\"path\").setDisabled(false);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","observer","Skeleton","ResourcesPickerButton","toTitleCaseLabel","useEcommerceApi","createResourcePickerRenderer","config","ResourcePickerField","field","api","pluginName","createElement","className","resourceName","resourceType","value","onChange","EcommerceResourcePageType","constructor","provider","name","label","modifyForm","form","fields","resourceId","text","required","renderer","afterChange","f","onResourceSelected","String","setDisabled","layout","row","before","mapFromForm","data","input","metadata","getApi","apiName","resource","findById","setValue","title","previewPath"],"sources":["ResourcePage.tsx"],"sourcesContent":["import React from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { Skeleton } from \"@webiny/admin-ui\";\nimport type { IFormModel, IFieldVM } from \"@webiny/app-admin\";\nimport type { IPageType } from \"~/presentation/pages/CreatePage/abstractions.js\";\nimport type { CreatePageParams } from \"~/features/pages/createPage/abstractions.js\";\nimport type { IEcommerceApiProvider } from \"~/features/index.js\";\nimport type { Resource } from \"../types.js\";\nimport { ResourcesPickerButton } from \"./ResourcesPicker.js\";\nimport { toTitleCaseLabel } from \"./toTitleCaseLabel.js\";\nimport { useEcommerceApi } from \"~/features/index.js\";\n\n// ---------------------------------------------------------------------------\n// ResourcePicker field renderer\n// ---------------------------------------------------------------------------\n\ndeclare module \"@webiny/app-admin/features/formModel/abstractions.js\" {\n interface IFieldRendererRegistry {\n \"resource-picker\": { fieldType: \"text\"; settings?: { rows?: number } };\n }\n}\n\ninterface ResourcePickerRendererConfig {\n pluginName: string;\n resourceType: string;\n}\n\nexport function createResourcePickerRenderer(config: ResourcePickerRendererConfig) {\n return observer(function ResourcePickerField({ field }: { field: IFieldVM }) {\n const { api } = useEcommerceApi(config.pluginName);\n\n if (!api) {\n return <Skeleton />;\n }\n\n return (\n <div className={\"border-sm rounded-md border-neutral-muted p-sm\"}>\n <ResourcesPickerButton\n api={api}\n resourceName={config.resourceType}\n pluginName={config.pluginName}\n value={field.value as string}\n onChange={value => field.onChange(value)}\n />\n </div>\n );\n });\n}\n\n// ---------------------------------------------------------------------------\n// EcommerceResourcePageType — IPageType implementation\n// ---------------------------------------------------------------------------\n\nexport interface EcommerceResourcePageTypeConfig {\n name: string;\n label: string;\n resourceType: string;\n previewPath: (resource: Resource) => string;\n apiName: string;\n}\n\nexport class EcommerceResourcePageType implements IPageType {\n readonly name: string;\n readonly label: string;\n\n constructor(\n private config: EcommerceResourcePageTypeConfig,\n private provider: IEcommerceApiProvider\n ) {\n this.name = config.name;\n this.label = config.label;\n }\n\n modifyForm(form: IFormModel): void {\n form.fields(fields => ({\n resourceId: fields\n .text()\n .label(toTitleCaseLabel(this.config.resourceType))\n .required()\n .renderer(\"resource-picker\")\n .afterChange((value, f) => {\n if (!value) {\n return;\n }\n void this.onResourceSelected(String(value), f);\n })\n }));\n\n form.field(\"title\").setDisabled(true);\n form.field(\"path\").setDisabled(true);\n\n form.layout(layout => [layout.row(\"resourceId\").before(\"title\")]);\n }\n\n mapFromForm(data: Record<string, unknown>, input: CreatePageParams): void {\n input.metadata = input.metadata ?? {};\n input.metadata.resourceId = data.resourceId;\n }\n\n private async onResourceSelected(resourceId: string, form: IFormModel): Promise<void> {\n const api = await this.provider.getApi(this.config.apiName);\n if (!api) {\n return;\n }\n\n const resource = await api[this.config.resourceType].findById(resourceId);\n form.field(\"title\").setValue(resource.title);\n form.field(\"title\").setDisabled(false);\n form.field(\"path\").setValue(this.config.previewPath(resource));\n form.field(\"path\").setDisabled(false);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["makeObservable","autorun","observable","EditorHistory","State","jsonPatch","StateWithHistory","stateListeners","timeTravel","constructor","initialState","history","snapshots","observeKeys","state","handleStateUpdate","newState","previousState","diff","compare","undefined","trackState","length","executeStateListeners","reason","toJson","read","setState","setter","update","cb","structuredClone","getHistory","undo","snapshot","goToOlderSnapshot","Object","assign","getState","redo","goToNewerSnapshot","onStateChange","listener","push","filter","l","event","forEach"],"sources":["StateWithHistory.ts"],"sourcesContent":["import { makeObservable, autorun, observable } from \"mobx\";\nimport type { GenericRecord } from \"@webiny/app/types.js\";\nimport { EditorHistory } from \"./EditorHistory.js\";\nimport { type IState, type MutableState, State } from \"./State.js\";\nimport { jsonPatch, type JsonPatchOperation } from \"@webiny/website-builder-sdk\";\n\nexport type StateChangeEvent<TState> = {\n reason: \"undo\" | \"redo\" | \"update\";\n diff: JsonPatchOperation[];\n state: TState;\n};\n\nexport type StateChangeListener<T> = (event: StateChangeEvent<T>) => void;\n\nexport class StateWithHistory<TState extends GenericRecord = GenericRecord>\n implements IState<TState>\n{\n private readonly history: EditorHistory;\n private state: State<TState>;\n private previousState: TState | undefined;\n private stateListeners: Array<(event: StateChangeEvent<TState>) => void> = [];\n private timeTravel = true;\n\n constructor(initialState: TState) {\n this.history = new EditorHistory({\n snapshots: [initialState],\n observeKeys: [\"elements\", \"bindings\"]\n });\n\n this.state = new State<TState>(initialState);\n\n makeObservable<StateWithHistory, \"state\">(this, {\n state: observable\n });\n\n const handleStateUpdate = (newState: any) => {\n if (!this.timeTravel) {\n return;\n }\n\n const previousState = this.previousState ?? {};\n const diff = jsonPatch.compare(previousState, newState);\n this.previousState = undefined;\n\n this.history.trackState(newState);\n\n if (diff.length) {\n this.executeStateListeners({\n reason: \"update\",\n diff,\n state: newState\n });\n }\n };\n\n autorun(() => {\n const newState = this.state.toJson();\n handleStateUpdate(newState);\n });\n }\n\n read(): TState {\n return this.state.read();\n }\n\n toJson() {\n return this.state.toJson();\n }\n\n setState(setter: (state: MutableState<TState>) => TState) {\n this.state.setState(setter);\n }\n\n update(cb: (state: MutableState<TState>) => void): void {\n // This is necessary to calculate a diff between two states later on.\n if (!this.previousState) {\n this.previousState = structuredClone(this.state.toJson());\n }\n this.state.update(cb);\n }\n\n getHistory() {\n return this.history;\n }\n\n undo() {\n this.timeTravel = false;\n const snapshot = this.history.goToOlderSnapshot();\n\n this.state.setState(state => {\n return Object.assign({}, state, snapshot.getState());\n });\n\n this.executeStateListeners({\n reason: \"undo\",\n diff: [],\n state: this.state.toJson()\n });\n this.timeTravel = true;\n }\n\n redo() {\n this.timeTravel = false;\n const snapshot = this.history.goToNewerSnapshot();\n this.state.setState(state => {\n return Object.assign({}, state, snapshot.getState());\n });\n\n this.executeStateListeners({\n reason: \"redo\",\n diff: [],\n state: this.state.toJson()\n });\n this.timeTravel = true;\n }\n\n onStateChange(listener: StateChangeListener<TState>): () => void {\n this.stateListeners.push(listener);\n return () => {\n this.stateListeners = this.stateListeners.filter(l => l !== listener);\n };\n }\n\n private executeStateListeners(event: StateChangeEvent<TState>) {\n this.stateListeners.forEach(listener => {\n listener(event);\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["makeObservable","autorun","observable","EditorHistory","State","jsonPatch","StateWithHistory","stateListeners","timeTravel","constructor","initialState","history","snapshots","observeKeys","state","handleStateUpdate","newState","previousState","diff","compare","undefined","trackState","length","executeStateListeners","reason","toJson","read","setState","setter","update","cb","structuredClone","getHistory","undo","snapshot","goToOlderSnapshot","Object","assign","getState","redo","goToNewerSnapshot","onStateChange","listener","push","filter","l","event","forEach"],"sources":["StateWithHistory.ts"],"sourcesContent":["import { makeObservable, autorun, observable } from \"mobx\";\nimport type { GenericRecord } from \"@webiny/app/types.js\";\nimport { EditorHistory } from \"./EditorHistory.js\";\nimport { type IState, type MutableState, State } from \"./State.js\";\nimport { jsonPatch, type JsonPatchOperation } from \"@webiny/website-builder-sdk\";\n\nexport type StateChangeEvent<TState> = {\n reason: \"undo\" | \"redo\" | \"update\";\n diff: JsonPatchOperation[];\n state: TState;\n};\n\nexport type StateChangeListener<T> = (event: StateChangeEvent<T>) => void;\n\nexport class StateWithHistory<\n TState extends GenericRecord = GenericRecord\n> implements IState<TState> {\n private readonly history: EditorHistory;\n private state: State<TState>;\n private previousState: TState | undefined;\n private stateListeners: Array<(event: StateChangeEvent<TState>) => void> = [];\n private timeTravel = true;\n\n constructor(initialState: TState) {\n this.history = new EditorHistory({\n snapshots: [initialState],\n observeKeys: [\"elements\", \"bindings\"]\n });\n\n this.state = new State<TState>(initialState);\n\n makeObservable<StateWithHistory, \"state\">(this, {\n state: observable\n });\n\n const handleStateUpdate = (newState: any) => {\n if (!this.timeTravel) {\n return;\n }\n\n const previousState = this.previousState ?? {};\n const diff = jsonPatch.compare(previousState, newState);\n this.previousState = undefined;\n\n this.history.trackState(newState);\n\n if (diff.length) {\n this.executeStateListeners({\n reason: \"update\",\n diff,\n state: newState\n });\n }\n };\n\n autorun(() => {\n const newState = this.state.toJson();\n handleStateUpdate(newState);\n });\n }\n\n read(): TState {\n return this.state.read();\n }\n\n toJson() {\n return this.state.toJson();\n }\n\n setState(setter: (state: MutableState<TState>) => TState) {\n this.state.setState(setter);\n }\n\n update(cb: (state: MutableState<TState>) => void): void {\n // This is necessary to calculate a diff between two states later on.\n if (!this.previousState) {\n this.previousState = structuredClone(this.state.toJson());\n }\n this.state.update(cb);\n }\n\n getHistory() {\n return this.history;\n }\n\n undo() {\n this.timeTravel = false;\n const snapshot = this.history.goToOlderSnapshot();\n\n this.state.setState(state => {\n return Object.assign({}, state, snapshot.getState());\n });\n\n this.executeStateListeners({\n reason: \"undo\",\n diff: [],\n state: this.state.toJson()\n });\n this.timeTravel = true;\n }\n\n redo() {\n this.timeTravel = false;\n const snapshot = this.history.goToNewerSnapshot();\n this.state.setState(state => {\n return Object.assign({}, state, snapshot.getState());\n });\n\n this.executeStateListeners({\n reason: \"redo\",\n diff: [],\n state: this.state.toJson()\n });\n this.timeTravel = true;\n }\n\n onStateChange(listener: StateChangeListener<TState>): () => void {\n this.stateListeners.push(listener);\n return () => {\n this.stateListeners = this.stateListeners.filter(l => l !== listener);\n };\n }\n\n private executeStateListeners(event: StateChangeEvent<TState>) {\n this.stateListeners.forEach(listener => {\n listener(event);\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,264 +1,264 @@
1
1
  .wb-static-toolbar {
2
- display: flex;
3
- position: relative;
4
- padding: 4px;
5
- vertical-align: middle;
6
- border: 1px solid #eee;
7
- will-change: transform;
8
- background: #fff;
9
- flex-wrap: wrap;
10
- z-index: 1;
2
+ display: flex;
3
+ position: relative;
4
+ padding: 4px;
5
+ vertical-align: middle;
6
+ border: 1px solid #eee;
7
+ will-change: transform;
8
+ background: #fff;
9
+ flex-wrap: wrap;
10
+ z-index: 1;
11
11
  }
12
12
 
13
13
  .wb-static-toolbar button.popup-item {
14
- border: 0;
15
- display: flex;
16
- background: #fff;
17
- border-radius: 10px;
18
- padding: 8px;
19
- cursor: pointer;
20
- vertical-align: middle;
14
+ border: 0;
15
+ display: flex;
16
+ background: #fff;
17
+ border-radius: 10px;
18
+ padding: 8px;
19
+ cursor: pointer;
20
+ vertical-align: middle;
21
21
  }
22
22
 
23
23
  .wb-static-toolbar button.popup-item:disabled {
24
- cursor: not-allowed;
24
+ cursor: not-allowed;
25
25
  }
26
26
 
27
27
  .wb-static-toolbar button.popup-item.spaced {
28
- margin-right: 2px;
28
+ margin-right: 2px;
29
29
  }
30
30
 
31
31
  .wb-static-toolbar button.popup-item i.format {
32
- background-size: contain;
33
- display: inline-block;
34
- height: 18px;
35
- width: 18px;
36
- margin-top: 2px;
37
- vertical-align: -0.25em;
38
- display: flex;
32
+ background-size: contain;
33
+ display: inline-block;
34
+ height: 18px;
35
+ width: 18px;
36
+ margin-top: 2px;
37
+ vertical-align: -0.25em;
38
+ display: flex;
39
39
  }
40
40
 
41
41
  .wb-static-toolbar button.popup-item:disabled i.format {
42
- opacity: 0.2;
42
+ opacity: 0.2;
43
43
  }
44
44
 
45
45
  .wb-static-toolbar button.popup-item.active {
46
- background-color: rgba(223, 232, 250, 0.3);
46
+ background-color: rgba(223, 232, 250, 0.3);
47
47
  }
48
48
 
49
49
  .wb-static-toolbar button.popup-item.active i {
50
- opacity: 1;
50
+ opacity: 1;
51
51
  }
52
52
 
53
53
  .wb-static-toolbar .popup-item:hover:not([disabled]) {
54
- background-color: #eee;
54
+ background-color: #eee;
55
55
  }
56
56
 
57
57
  .wb-static-toolbar select.popup-item {
58
- border: 0;
59
- display: flex;
60
- border-radius: 10px;
61
- padding: 8px;
62
- vertical-align: middle;
63
- -webkit-appearance: none;
64
- -moz-appearance: none;
65
- width: 70px;
66
- font-size: 14px;
67
- color: #777;
68
- text-overflow: ellipsis;
58
+ border: 0;
59
+ display: flex;
60
+ border-radius: 10px;
61
+ padding: 8px;
62
+ vertical-align: middle;
63
+ -webkit-appearance: none;
64
+ -moz-appearance: none;
65
+ width: 70px;
66
+ font-size: 14px;
67
+ color: #777;
68
+ text-overflow: ellipsis;
69
69
  }
70
70
 
71
71
  .wb-static-toolbar select.code-language {
72
- text-transform: capitalize;
73
- width: 130px;
72
+ text-transform: capitalize;
73
+ width: 130px;
74
74
  }
75
75
 
76
76
  .wb-static-toolbar .popup-item .text {
77
- display: flex;
78
- line-height: 20px;
79
- width: 200px;
80
- vertical-align: middle;
81
- font-size: 14px;
82
- color: #777;
83
- text-overflow: ellipsis;
84
- width: 70px;
85
- overflow: hidden;
86
- height: 20px;
87
- text-align: left;
77
+ display: flex;
78
+ line-height: 20px;
79
+ width: 200px;
80
+ vertical-align: middle;
81
+ font-size: 14px;
82
+ color: #777;
83
+ text-overflow: ellipsis;
84
+ width: 70px;
85
+ overflow: hidden;
86
+ height: 20px;
87
+ text-align: left;
88
88
  }
89
89
 
90
90
  .wb-static-toolbar .popup-item .icon {
91
- display: flex;
92
- width: 20px;
93
- height: 20px;
94
- user-select: none;
95
- line-height: 16px;
96
- background-size: contain;
91
+ display: flex;
92
+ width: 20px;
93
+ height: 20px;
94
+ user-select: none;
95
+ line-height: 16px;
96
+ background-size: contain;
97
97
  }
98
98
 
99
99
  .wb-static-toolbar i.chevron-down {
100
- margin-top: 3px;
101
- width: 16px;
102
- height: 16px;
103
- display: flex;
104
- user-select: none;
100
+ margin-top: 3px;
101
+ width: 16px;
102
+ height: 16px;
103
+ display: flex;
104
+ user-select: none;
105
105
  }
106
106
 
107
107
  .wb-static-toolbar i.chevron-down.inside {
108
- width: 16px;
109
- height: 16px;
110
- display: flex;
111
- margin-left: -25px;
112
- margin-top: 11px;
113
- margin-right: 10px;
114
- pointer-events: none;
108
+ width: 16px;
109
+ height: 16px;
110
+ display: flex;
111
+ margin-left: -25px;
112
+ margin-top: 11px;
113
+ margin-right: 10px;
114
+ pointer-events: none;
115
115
  }
116
116
 
117
117
  .wb-static-toolbar .divider {
118
- width: 1px;
119
- background-color: #eee;
120
- margin: 0 4px;
118
+ width: 1px;
119
+ background-color: #eee;
120
+ margin: 0 4px;
121
121
  }
122
122
 
123
123
  .wb-static-toolbar .icon.bullet-list,
124
124
  .wb-static-toolbar .icon.bullet {
125
- background-image: url("./icons/list-ul.svg");
125
+ background-image: url("./icons/list-ul.svg");
126
126
  }
127
127
 
128
128
  .wb-static-toolbar .icon.numbered-list,
129
129
  .wb-static-toolbar .icon.number {
130
- background-image: url("./icons/list-ol.svg");
130
+ background-image: url("./icons/list-ol.svg");
131
131
  }
132
132
 
133
133
  .wb-static-toolbar .link-editor .button.active,
134
134
  .wb-static-toolbar .button.active {
135
- background-color: rgb(223, 232, 250);
135
+ background-color: rgb(223, 232, 250);
136
136
  }
137
137
 
138
138
  .wb-static-toolbar button.toolbar-item {
139
- border: 0;
140
- display: flex;
141
- background: none;
142
- border-radius: 10px;
143
- padding: 8px;
144
- cursor: pointer;
145
- vertical-align: middle;
146
- flex-shrink: 0;
147
- align-items: center;
148
- justify-content: space-between;
139
+ border: 0;
140
+ display: flex;
141
+ background: none;
142
+ border-radius: 10px;
143
+ padding: 8px;
144
+ cursor: pointer;
145
+ vertical-align: middle;
146
+ flex-shrink: 0;
147
+ align-items: center;
148
+ justify-content: space-between;
149
149
  }
150
150
 
151
151
  .wb-static-toolbar button.toolbar-item:disabled {
152
- cursor: not-allowed;
152
+ cursor: not-allowed;
153
153
  }
154
154
 
155
155
  .wb-static-toolbar button.toolbar-item.spaced {
156
- margin-right: 2px;
156
+ margin-right: 2px;
157
157
  }
158
158
 
159
159
  .wb-static-toolbar button.toolbar-item i.format {
160
- background-size: contain;
161
- display: inline-block;
162
- height: 18px;
163
- width: 18px;
164
- vertical-align: -0.25em;
165
- display: flex;
166
- opacity: 0.6;
160
+ background-size: contain;
161
+ display: inline-block;
162
+ height: 18px;
163
+ width: 18px;
164
+ vertical-align: -0.25em;
165
+ display: flex;
166
+ opacity: 0.6;
167
167
  }
168
168
 
169
169
  .wb-static-toolbar button.toolbar-item:disabled .icon,
170
170
  .wb-static-toolbar button.toolbar-item:disabled .text,
171
171
  .wb-static-toolbar button.toolbar-item:disabled i.format,
172
172
  .wb-static-toolbar button.toolbar-item:disabled .chevron-down {
173
- opacity: 0.2;
173
+ opacity: 0.2;
174
174
  }
175
175
 
176
176
  .wb-static-toolbar button.toolbar-item.active {
177
- background-color: rgba(223, 232, 250, 0.3);
177
+ background-color: rgba(223, 232, 250, 0.3);
178
178
  }
179
179
 
180
180
  .wb-static-toolbar button.toolbar-item.active i {
181
- opacity: 1;
181
+ opacity: 1;
182
182
  }
183
183
 
184
184
  .wb-static-toolbar .toolbar-item:hover:not([disabled]) {
185
- background-color: #eee;
185
+ background-color: #eee;
186
186
  }
187
187
 
188
188
  .wb-static-toolbar .toolbar-item.font-family .text {
189
- display: block;
190
- max-width: 40px;
189
+ display: block;
190
+ max-width: 40px;
191
191
  }
192
192
 
193
193
  .wb-static-toolbar .code-language {
194
- width: 150px;
194
+ width: 150px;
195
195
  }
196
196
 
197
197
  .wb-static-toolbar .toolbar-item .text {
198
- display: flex;
199
- line-height: 20px;
200
- vertical-align: middle;
201
- font-size: 14px;
202
- color: #777;
203
- text-overflow: ellipsis;
204
- overflow: hidden;
205
- height: 20px;
206
- text-align: left;
207
- padding-right: 10px;
198
+ display: flex;
199
+ line-height: 20px;
200
+ vertical-align: middle;
201
+ font-size: 14px;
202
+ color: #777;
203
+ text-overflow: ellipsis;
204
+ overflow: hidden;
205
+ height: 20px;
206
+ text-align: left;
207
+ padding-right: 10px;
208
208
  }
209
209
 
210
210
  .wb-static-toolbar .toolbar-item .icon {
211
- display: flex;
212
- width: 20px;
213
- height: 20px;
214
- user-select: none;
215
- margin-right: 8px;
216
- line-height: 16px;
217
- background-size: contain;
211
+ display: flex;
212
+ width: 20px;
213
+ height: 20px;
214
+ user-select: none;
215
+ margin-right: 8px;
216
+ line-height: 16px;
217
+ background-size: contain;
218
218
  }
219
219
 
220
220
  .wb-static-toolbar i.chevron-down {
221
- margin-top: 3px;
222
- width: 16px;
223
- height: 16px;
224
- display: flex;
225
- user-select: none;
221
+ margin-top: 3px;
222
+ width: 16px;
223
+ height: 16px;
224
+ display: flex;
225
+ user-select: none;
226
226
  }
227
227
 
228
228
  .wb-static-toolbar i.chevron-down.inside {
229
- width: 16px;
230
- height: 16px;
231
- display: flex;
232
- margin-left: -25px;
233
- margin-top: 11px;
234
- margin-right: 10px;
235
- pointer-events: none;
229
+ width: 16px;
230
+ height: 16px;
231
+ display: flex;
232
+ margin-left: -25px;
233
+ margin-top: 11px;
234
+ margin-right: 10px;
235
+ pointer-events: none;
236
236
  }
237
237
 
238
238
  .wb-static-toolbar .divider {
239
- width: 1px;
240
- background-color: #eee;
241
- margin: 0 4px;
239
+ width: 1px;
240
+ background-color: #eee;
241
+ margin: 0 4px;
242
242
  }
243
243
 
244
244
  .lexical-dropdown-container {
245
- position: absolute;
246
- bottom: -5px;
247
- left: 0;
245
+ position: absolute;
246
+ bottom: -5px;
247
+ left: 0;
248
248
  }
249
249
 
250
250
  .wb-static-toolbar button.item i {
251
- opacity: 0.6;
251
+ opacity: 0.6;
252
252
  }
253
253
 
254
254
  .wb-static-toolbar button.item.dropdown-item-active {
255
- background-color: rgba(223, 232, 250, 0.3);
255
+ background-color: rgba(223, 232, 250, 0.3);
256
256
  }
257
257
 
258
258
  .wb-static-toolbar button.item.dropdown-item-active i {
259
- opacity: 1;
259
+ opacity: 1;
260
260
  }
261
261
 
262
262
  .wb-static-toolbar i.expand {
263
- background-image: url("./icons/fullscreen.svg");
263
+ background-image: url("./icons/fullscreen.svg");
264
264
  }
@@ -25,7 +25,7 @@ export declare const BaseBulkAction: (({ name, after, before, remove, element }:
25
25
  originalName: string;
26
26
  displayName: string;
27
27
  } & {
28
- createDecorator: (decorator: import("@webiny/app-admin").ComponentDecorator<(({ name, after, before, remove, element }: BulkActionProps) => React.JSX.Element) & {
28
+ createDecorator: (decorator: import("@webiny/react-composition").ComponentDecorator<(({ name, after, before, remove, element }: BulkActionProps) => React.JSX.Element) & {
29
29
  original: ({ name, after, before, remove, element }: BulkActionProps) => React.JSX.Element;
30
30
  originalName: string;
31
31
  displayName: string;
@@ -44,7 +44,7 @@ export declare const BulkAction: (({ name, after, before, remove, element }: Bul
44
44
  originalName: string;
45
45
  displayName: string;
46
46
  } & {
47
- createDecorator: (decorator: import("@webiny/app-admin").ComponentDecorator<(({ name, after, before, remove, element }: BulkActionProps) => React.JSX.Element) & {
47
+ createDecorator: (decorator: import("@webiny/react-composition").ComponentDecorator<(({ name, after, before, remove, element }: BulkActionProps) => React.JSX.Element) & {
48
48
  original: ({ name, after, before, remove, element }: BulkActionProps) => React.JSX.Element;
49
49
  originalName: string;
50
50
  displayName: string;
@@ -1 +1 @@
1
- {"version":3,"names":["folderCacheFactory","makeAutoObservable","orderBy","loadingActions","ROOT_FOLDER","WB_REDIRECTS_APP","loadingRepositoryFactory","metaRepositoryFactory","SortingMapper","sortRepositoryFactory","redirectListCache","TableRowMapper","searchRepositoryFactory","selectedItemsRepositoryFactory","filterRepositoryFactory","DocumentListPresenter","folderId","filtersVisible","constructor","foldersCache","getCache","foldersLoadingRepository","getRepository","documentsCache","documentsLoadingRepository","searchRepository","metaRepository","sortingRepository","filterRepository","selectedRepository","init","params","vm","title","getVmTitle","data","getData","selected","getSelected","meta","totalCount","get","currentCount","count","sorting","getSorting","searchQuery","searchLabel","getSearchLabel","isSearch","getIsSearch","isEmpty","getIsEmpty","isRoot","getIsRoot","isLoading","getIsLoading","isLoadingMore","getIsLoadingMore","isFilterVisible","showFilters","show","getItem","f","id","undefined","getVmDocuments","getItems","map","d","fromRedirect","getVmFolders","folders","filter","parentId","fromFolder","sortItems","documents","getSelectedItems","items","sorts","length","iteratees","sort","field","orders","order","Boolean","hasFilters","currentFolder","list","listMore","fromDTOtoColumn"],"sources":["DocumentListPresenter.ts"],"sourcesContent":["import type { Folder } from \"@webiny/app-aco/domain/folder/Folder.js\";\nimport { folderCacheFactory } from \"@webiny/app-aco/features/folders/cache/index.js\";\nimport { makeAutoObservable } from \"mobx\";\nimport orderBy from \"lodash/orderBy.js\";\nimport { loadingActions, ROOT_FOLDER, WB_REDIRECTS_APP } from \"~/constants.js\";\nimport type { ISortingRepository } from \"@webiny/app-utils\";\nimport {\n type ILoadingRepository,\n type IMetaRepository,\n loadingRepositoryFactory,\n metaRepositoryFactory,\n SortingMapper,\n sortRepositoryFactory\n} from \"@webiny/app-utils\";\nimport { type IListCache, redirectListCache } from \"~/domain/Redirect/index.js\";\nimport { TableRowMapper } from \"~/modules/redirects/RedirectsList/presenters/TableRowMapper.js\";\nimport { type ISearchRepository, searchRepositoryFactory } from \"~/domain/Search/index.js\";\nimport {\n type ISelectedItemsRepository,\n selectedItemsRepositoryFactory\n} from \"~/domain/SelectedItem/index.js\";\nimport { filterRepositoryFactory, type IFilterRepository } from \"~/domain/Filter/index.js\";\nimport type { Redirect } from \"~/domain/Redirect/index.js\";\n\ninterface DocumentListPresenterParams {\n folderId: string;\n}\n\nclass DocumentListPresenter {\n private folderId: string = ROOT_FOLDER;\n private foldersCache: IListCache<Folder>;\n private foldersLoadingRepository: ILoadingRepository;\n private documentsCache: IListCache<Redirect>;\n private documentsLoadingRepository: ILoadingRepository;\n private searchRepository: ISearchRepository;\n private metaRepository: IMetaRepository;\n private sortingRepository: ISortingRepository;\n private filterRepository: IFilterRepository;\n private selectedRepository: ISelectedItemsRepository;\n private filtersVisible: boolean = false;\n\n constructor() {\n this.foldersCache = folderCacheFactory.getCache(WB_REDIRECTS_APP);\n this.foldersLoadingRepository = loadingRepositoryFactory.getRepository(WB_REDIRECTS_APP);\n this.documentsCache = redirectListCache;\n this.documentsLoadingRepository = loadingRepositoryFactory.getRepository(\"WbRedirect\");\n this.searchRepository = searchRepositoryFactory.getRepository(\"WbRedirect\");\n this.metaRepository = metaRepositoryFactory.getRepository(\"WbRedirect\");\n this.sortingRepository = sortRepositoryFactory.getRepository(\"WbRedirect\");\n this.filterRepository = filterRepositoryFactory.getRepository(\"WbRedirect\");\n this.selectedRepository = selectedItemsRepositoryFactory.getRepository(\"WbRedirect\");\n makeAutoObservable(this);\n }\n\n public init(params: DocumentListPresenterParams) {\n this.folderId = params.folderId;\n }\n\n public get vm() {\n return {\n folderId: this.folderId,\n title: this.getVmTitle(),\n data: this.getData(),\n selected: this.getSelected(),\n meta: {\n totalCount: this.metaRepository.get().totalCount ?? 0,\n currentCount: this.documentsCache.count() ?? 0\n },\n sorting: this.getSorting(),\n searchQuery: this.searchRepository.get() || \"\",\n searchLabel: this.getSearchLabel(),\n isSearch: this.getIsSearch(),\n isEmpty: this.getIsEmpty(),\n isRoot: this.getIsRoot(),\n isLoading: this.getIsLoading(),\n isLoadingMore: this.getIsLoadingMore(),\n isFilterVisible: this.filtersVisible\n };\n }\n\n public showFilters = (show: boolean) => {\n this.filtersVisible = show;\n };\n\n private getIsRoot = () => {\n return this.folderId === ROOT_FOLDER;\n };\n\n private getVmTitle = () => {\n return !this.getIsLoading()\n ? this.foldersCache.getItem(f => f.id === this.folderId)?.title\n : undefined;\n };\n\n private getVmDocuments = () => {\n return this.documentsCache.getItems().map(d => TableRowMapper.fromRedirect(d));\n };\n\n private getVmFolders = () => {\n const folders = this.foldersCache.getItems().filter(f => {\n if (this.folderId === ROOT_FOLDER) {\n return f.parentId === null;\n } else {\n return f.parentId === this.folderId;\n }\n });\n\n return folders.map(f => TableRowMapper.fromFolder(f));\n };\n\n private getData = () => {\n if (this.getIsSearch()) {\n // Only documents, sorted if needed\n return this.sortItems(this.getVmDocuments());\n }\n\n // Not in search: folders first, then documents, both sorted if needed\n const folders = this.sortItems(this.getVmFolders());\n const documents = this.sortItems(this.getVmDocuments());\n return [...folders, ...documents];\n };\n\n private getSelected = () => {\n return this.selectedRepository.getSelectedItems();\n };\n\n private sortItems<T>(items: T[]): T[] {\n const sorts = this.sortingRepository.get();\n if (sorts.length === 0) {\n return items;\n }\n const iteratees = sorts.map(sort => sort.field);\n const orders = sorts.map(sort => sort.order);\n return orderBy(items, iteratees, orders);\n }\n\n private getIsSearch = () => {\n return Boolean(this.searchRepository.get() || this.filterRepository.hasFilters());\n };\n\n private getSearchLabel = () => {\n const currentFolder = this.foldersCache.getItem(f => f.id === this.folderId);\n\n if (this.folderId === ROOT_FOLDER || !currentFolder) {\n return \"Search...\";\n }\n\n return `Search in \"${currentFolder.title}\"...`;\n };\n\n private getIsLoading = () => {\n return Boolean(\n this.documentsLoadingRepository.isLoading(loadingActions.init) ||\n this.documentsLoadingRepository.isLoading(loadingActions.list) ||\n this.foldersLoadingRepository.isLoading(this.folderId)\n );\n };\n\n private getIsLoadingMore = () => {\n return Boolean(this.documentsLoadingRepository.isLoading(loadingActions.listMore));\n };\n\n private getIsEmpty() {\n return !this.getIsLoading() && !this.getData().length;\n }\n\n private getSorting = () => {\n return this.sortingRepository.get().map(sort => {\n return SortingMapper.fromDTOtoColumn(sort);\n });\n };\n}\n\nexport { DocumentListPresenter, type DocumentListPresenterParams };\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["folderCacheFactory","makeAutoObservable","orderBy","loadingActions","ROOT_FOLDER","WB_REDIRECTS_APP","loadingRepositoryFactory","metaRepositoryFactory","SortingMapper","sortRepositoryFactory","redirectListCache","TableRowMapper","searchRepositoryFactory","selectedItemsRepositoryFactory","filterRepositoryFactory","DocumentListPresenter","folderId","filtersVisible","constructor","foldersCache","getCache","foldersLoadingRepository","getRepository","documentsCache","documentsLoadingRepository","searchRepository","metaRepository","sortingRepository","filterRepository","selectedRepository","init","params","vm","title","getVmTitle","data","getData","selected","getSelected","meta","totalCount","get","currentCount","count","sorting","getSorting","searchQuery","searchLabel","getSearchLabel","isSearch","getIsSearch","isEmpty","getIsEmpty","isRoot","getIsRoot","isLoading","getIsLoading","isLoadingMore","getIsLoadingMore","isFilterVisible","showFilters","show","getItem","f","id","undefined","getVmDocuments","getItems","map","d","fromRedirect","getVmFolders","folders","filter","parentId","fromFolder","sortItems","documents","getSelectedItems","items","sorts","length","iteratees","sort","field","orders","order","Boolean","hasFilters","currentFolder","list","listMore","fromDTOtoColumn"],"sources":["DocumentListPresenter.ts"],"sourcesContent":["import type { Folder } from \"@webiny/app-aco/domain/folder/Folder.js\";\nimport { folderCacheFactory } from \"@webiny/app-aco/features/folders/cache/index.js\";\nimport { makeAutoObservable } from \"mobx\";\nimport orderBy from \"lodash/orderBy.js\";\nimport { loadingActions, ROOT_FOLDER, WB_REDIRECTS_APP } from \"~/constants.js\";\nimport type { ISortingRepository } from \"@webiny/app-utils\";\nimport {\n type ILoadingRepository,\n type IMetaRepository,\n loadingRepositoryFactory,\n metaRepositoryFactory,\n SortingMapper,\n sortRepositoryFactory\n} from \"@webiny/app-utils\";\nimport { type IListCache, redirectListCache } from \"~/domain/Redirect/index.js\";\nimport { TableRowMapper } from \"~/modules/redirects/RedirectsList/presenters/TableRowMapper.js\";\nimport { type ISearchRepository, searchRepositoryFactory } from \"~/domain/Search/index.js\";\nimport {\n type ISelectedItemsRepository,\n selectedItemsRepositoryFactory\n} from \"~/domain/SelectedItem/index.js\";\nimport { filterRepositoryFactory, type IFilterRepository } from \"~/domain/Filter/index.js\";\nimport type { Redirect } from \"~/domain/Redirect/index.js\";\n\ninterface DocumentListPresenterParams {\n folderId: string;\n}\n\nclass DocumentListPresenter {\n private folderId: string = ROOT_FOLDER;\n private foldersCache: IListCache<Folder>;\n private foldersLoadingRepository: ILoadingRepository;\n private documentsCache: IListCache<Redirect>;\n private documentsLoadingRepository: ILoadingRepository;\n private searchRepository: ISearchRepository;\n private metaRepository: IMetaRepository;\n private sortingRepository: ISortingRepository;\n private filterRepository: IFilterRepository;\n private selectedRepository: ISelectedItemsRepository;\n private filtersVisible: boolean = false;\n\n constructor() {\n this.foldersCache = folderCacheFactory.getCache(WB_REDIRECTS_APP);\n this.foldersLoadingRepository = loadingRepositoryFactory.getRepository(WB_REDIRECTS_APP);\n this.documentsCache = redirectListCache;\n this.documentsLoadingRepository = loadingRepositoryFactory.getRepository(\"WbRedirect\");\n this.searchRepository = searchRepositoryFactory.getRepository(\"WbRedirect\");\n this.metaRepository = metaRepositoryFactory.getRepository(\"WbRedirect\");\n this.sortingRepository = sortRepositoryFactory.getRepository(\"WbRedirect\");\n this.filterRepository = filterRepositoryFactory.getRepository(\"WbRedirect\");\n this.selectedRepository = selectedItemsRepositoryFactory.getRepository(\"WbRedirect\");\n makeAutoObservable(this);\n }\n\n public init(params: DocumentListPresenterParams) {\n this.folderId = params.folderId;\n }\n\n public get vm() {\n return {\n folderId: this.folderId,\n title: this.getVmTitle(),\n data: this.getData(),\n selected: this.getSelected(),\n meta: {\n totalCount: this.metaRepository.get().totalCount ?? 0,\n currentCount: this.documentsCache.count() ?? 0\n },\n sorting: this.getSorting(),\n searchQuery: this.searchRepository.get() || \"\",\n searchLabel: this.getSearchLabel(),\n isSearch: this.getIsSearch(),\n isEmpty: this.getIsEmpty(),\n isRoot: this.getIsRoot(),\n isLoading: this.getIsLoading(),\n isLoadingMore: this.getIsLoadingMore(),\n isFilterVisible: this.filtersVisible\n };\n }\n\n public showFilters = (show: boolean) => {\n this.filtersVisible = show;\n };\n\n private getIsRoot = () => {\n return this.folderId === ROOT_FOLDER;\n };\n\n private getVmTitle = () => {\n return !this.getIsLoading()\n ? this.foldersCache.getItem(f => f.id === this.folderId)?.title\n : undefined;\n };\n\n private getVmDocuments = () => {\n return this.documentsCache.getItems().map(d => TableRowMapper.fromRedirect(d));\n };\n\n private getVmFolders = () => {\n const folders = this.foldersCache.getItems().filter(f => {\n if (this.folderId === ROOT_FOLDER) {\n return f.parentId === null;\n } else {\n return f.parentId === this.folderId;\n }\n });\n\n return folders.map(f => TableRowMapper.fromFolder(f));\n };\n\n private getData = () => {\n if (this.getIsSearch()) {\n // Only documents, sorted if needed\n return this.sortItems(this.getVmDocuments());\n }\n\n // Not in search: folders first, then documents, both sorted if needed\n const folders = this.sortItems(this.getVmFolders());\n const documents = this.sortItems(this.getVmDocuments());\n return [...folders, ...documents];\n };\n\n private getSelected = () => {\n return this.selectedRepository.getSelectedItems();\n };\n\n private sortItems<T>(items: T[]): T[] {\n const sorts = this.sortingRepository.get();\n if (sorts.length === 0) {\n return items;\n }\n const iteratees = sorts.map(sort => sort.field);\n const orders = sorts.map(sort => sort.order);\n return orderBy(items, iteratees, orders);\n }\n\n private getIsSearch = () => {\n return Boolean(this.searchRepository.get() || this.filterRepository.hasFilters());\n };\n\n private getSearchLabel = () => {\n const currentFolder = this.foldersCache.getItem(f => f.id === this.folderId);\n\n if (this.folderId === ROOT_FOLDER || !currentFolder) {\n return \"Search...\";\n }\n\n return `Search in \"${currentFolder.title}\"...`;\n };\n\n private getIsLoading = () => {\n return Boolean(\n this.documentsLoadingRepository.isLoading(loadingActions.init) ||\n this.documentsLoadingRepository.isLoading(loadingActions.list) ||\n this.foldersLoadingRepository.isLoading(this.folderId)\n );\n };\n\n private getIsLoadingMore = () => {\n return Boolean(this.documentsLoadingRepository.isLoading(loadingActions.listMore));\n };\n\n private getIsEmpty() {\n return !this.getIsLoading() && !this.getData().length;\n }\n\n private getSorting = () => {\n return this.sortingRepository.get().map(sort => {\n return SortingMapper.fromDTOtoColumn(sort);\n });\n };\n}\n\nexport { DocumentListPresenter, type DocumentListPresenterParams };\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/app-website-builder",
3
- "version": "6.2.0",
3
+ "version": "6.3.0-beta.1",
4
4
  "type": "module",
5
5
  "main": "index.js",
6
6
  "repository": {
@@ -18,29 +18,29 @@
18
18
  "@monaco-editor/react": "4.7.0",
19
19
  "@svgr/webpack": "8.1.0",
20
20
  "@types/react": "18.3.28",
21
- "@webiny/admin-ui": "6.2.0",
22
- "@webiny/app": "6.2.0",
23
- "@webiny/app-aco": "6.2.0",
24
- "@webiny/app-admin": "6.2.0",
25
- "@webiny/app-headless-cms-common": "6.2.0",
26
- "@webiny/app-trash-bin": "6.2.0",
27
- "@webiny/app-utils": "6.2.0",
21
+ "@webiny/admin-ui": "6.3.0-beta.1",
22
+ "@webiny/app": "6.3.0-beta.1",
23
+ "@webiny/app-aco": "6.3.0-beta.1",
24
+ "@webiny/app-admin": "6.3.0-beta.1",
25
+ "@webiny/app-headless-cms-common": "6.3.0-beta.1",
26
+ "@webiny/app-trash-bin": "6.3.0-beta.1",
27
+ "@webiny/app-utils": "6.3.0-beta.1",
28
28
  "@webiny/di": "0.2.3",
29
- "@webiny/error": "6.2.0",
30
- "@webiny/feature": "6.2.0",
31
- "@webiny/form": "6.2.0",
32
- "@webiny/icons": "6.2.0",
33
- "@webiny/languages": "6.2.0",
34
- "@webiny/lexical-converter": "6.2.0",
35
- "@webiny/lexical-editor": "6.2.0",
36
- "@webiny/lexical-nodes": "6.2.0",
37
- "@webiny/lexical-theme": "6.2.0",
38
- "@webiny/react-composition": "6.2.0",
39
- "@webiny/react-properties": "6.2.0",
40
- "@webiny/ui": "6.2.0",
41
- "@webiny/utils": "6.2.0",
42
- "@webiny/validation": "6.2.0",
43
- "@webiny/website-builder-sdk": "6.2.0",
29
+ "@webiny/error": "6.3.0-beta.1",
30
+ "@webiny/feature": "6.3.0-beta.1",
31
+ "@webiny/form": "6.3.0-beta.1",
32
+ "@webiny/icons": "6.3.0-beta.1",
33
+ "@webiny/languages": "6.3.0-beta.1",
34
+ "@webiny/lexical-converter": "6.3.0-beta.1",
35
+ "@webiny/lexical-editor": "6.3.0-beta.1",
36
+ "@webiny/lexical-nodes": "6.3.0-beta.1",
37
+ "@webiny/lexical-theme": "6.3.0-beta.1",
38
+ "@webiny/react-composition": "6.3.0-beta.1",
39
+ "@webiny/react-properties": "6.3.0-beta.1",
40
+ "@webiny/ui": "6.3.0-beta.1",
41
+ "@webiny/utils": "6.3.0-beta.1",
42
+ "@webiny/validation": "6.3.0-beta.1",
43
+ "@webiny/website-builder-sdk": "6.3.0-beta.1",
44
44
  "apollo-cache": "1.3.5",
45
45
  "apollo-client": "2.6.10",
46
46
  "apollo-link": "1.2.14",
@@ -51,7 +51,7 @@
51
51
  "graphql-tag": "2.12.6",
52
52
  "is-hotkey": "0.2.0",
53
53
  "lodash": "4.18.1",
54
- "markdown-to-jsx": "9.7.15",
54
+ "markdown-to-jsx": "9.7.16",
55
55
  "matcher": "6.0.0",
56
56
  "mobx": "6.15.0",
57
57
  "mobx-react-lite": "4.1.1",
@@ -67,10 +67,10 @@
67
67
  "@emotion/babel-plugin": "11.13.5",
68
68
  "@types/deep-equal": "1.0.4",
69
69
  "@types/is-hotkey": "0.1.10",
70
- "@webiny/build-tools": "6.2.0",
70
+ "@webiny/build-tools": "6.3.0-beta.1",
71
71
  "execa": "5.1.1",
72
72
  "rimraf": "6.1.3",
73
- "typescript": "5.9.3",
73
+ "typescript": "6.0.3",
74
74
  "vitest": "4.1.4"
75
75
  },
76
76
  "publishConfig": {
@@ -89,5 +89,5 @@
89
89
  ]
90
90
  }
91
91
  },
92
- "gitHead": "3d3148358b6febbc857371930871743bec3b3939"
92
+ "gitHead": "664b273a9f0a971f9ca7e6ffe920db77fefdced1"
93
93
  }
@@ -1,6 +1,5 @@
1
1
  import React, { useEffect } from "react";
2
2
  import { observer } from "mobx-react-lite";
3
- // @ts-expect-error Remove this one moduleResolution is set to `bundler`
4
3
  import { compiler } from "markdown-to-jsx/react";
5
4
  import { Dialog, OverlayLoader } from "@webiny/admin-ui";
6
5
  import { useFeature } from "@webiny/app";
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","observer","compiler","Dialog","OverlayLoader","useFeature","NextjsConfigFeature","markdownComponents","NexjsConfigDialog","props","open","onClose","presenter","init","vm","loading","createElement","size","onOpenChange","title","actions","CancelAction","text","showCloseButton","dismissible","className","style","height","Fragment","config","overrides"],"sources":["NextjsConfigDialog.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\nimport { observer } from \"mobx-react-lite\";\n// @ts-expect-error Remove this one moduleResolution is set to `bundler`\nimport { compiler } from \"markdown-to-jsx/react\";\nimport { Dialog, OverlayLoader } from \"@webiny/admin-ui\";\nimport { useFeature } from \"@webiny/app\";\nimport { NextjsConfigFeature } from \"~/presentation/navigation/NextjsConfig/feature.js\";\nimport { markdownComponents } from \"~/presentation/navigation/NextjsConfig/markdownComponents.js\";\n\ninterface IStartDialogProps {\n open: boolean;\n onClose: () => void;\n}\n\nexport const NexjsConfigDialog = observer((props: IStartDialogProps) => {\n const { open, onClose } = props;\n\n const { presenter } = useFeature(NextjsConfigFeature);\n\n useEffect(() => {\n if (open) {\n presenter.init();\n }\n }, [open]);\n\n const vm = presenter.vm;\n const loading = vm.loading;\n\n return (\n <Dialog\n open={open}\n size={loading ? \"md\" : \"xl\"}\n onOpenChange={onClose}\n title={\"Configure Next.js\"}\n actions={<Dialog.CancelAction text={\"Close\"} />}\n showCloseButton={true}\n dismissible={true}\n >\n {loading ? (\n <div className={\"relative\"} style={{ height: 80 }}>\n <OverlayLoader text={\"Loading config...\"} />\n </div>\n ) : null}\n {loading ? null : <>{compiler(vm.config, { overrides: markdownComponents })}</>}\n </Dialog>\n );\n});\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,SAASC,QAAQ,QAAQ,iBAAiB;AAC1C;AACA,SAASC,QAAQ,QAAQ,uBAAuB;AAChD,SAASC,MAAM,EAAEC,aAAa,QAAQ,kBAAkB;AACxD,SAASC,UAAU,QAAQ,aAAa;AACxC,SAASC,mBAAmB;AAC5B,SAASC,kBAAkB;AAO3B,OAAO,MAAMC,iBAAiB,GAAGP,QAAQ,CAAEQ,KAAwB,IAAK;EACpE,MAAM;IAAEC,IAAI;IAAEC;EAAQ,CAAC,GAAGF,KAAK;EAE/B,MAAM;IAAEG;EAAU,CAAC,GAAGP,UAAU,CAACC,mBAAmB,CAAC;EAErDN,SAAS,CAAC,MAAM;IACZ,IAAIU,IAAI,EAAE;MACNE,SAAS,CAACC,IAAI,CAAC,CAAC;IACpB;EACJ,CAAC,EAAE,CAACH,IAAI,CAAC,CAAC;EAEV,MAAMI,EAAE,GAAGF,SAAS,CAACE,EAAE;EACvB,MAAMC,OAAO,GAAGD,EAAE,CAACC,OAAO;EAE1B,oBACIhB,KAAA,CAAAiB,aAAA,CAACb,MAAM;IACHO,IAAI,EAAEA,IAAK;IACXO,IAAI,EAAEF,OAAO,GAAG,IAAI,GAAG,IAAK;IAC5BG,YAAY,EAAEP,OAAQ;IACtBQ,KAAK,EAAE,mBAAoB;IAC3BC,OAAO,eAAErB,KAAA,CAAAiB,aAAA,CAACb,MAAM,CAACkB,YAAY;MAACC,IAAI,EAAE;IAAQ,CAAE,CAAE;IAChDC,eAAe,EAAE,IAAK;IACtBC,WAAW,EAAE;EAAK,GAEjBT,OAAO,gBACJhB,KAAA,CAAAiB,aAAA;IAAKS,SAAS,EAAE,UAAW;IAACC,KAAK,EAAE;MAAEC,MAAM,EAAE;IAAG;EAAE,gBAC9C5B,KAAA,CAAAiB,aAAA,CAACZ,aAAa;IAACkB,IAAI,EAAE;EAAoB,CAAE,CAC1C,CAAC,GACN,IAAI,EACPP,OAAO,GAAG,IAAI,gBAAGhB,KAAA,CAAAiB,aAAA,CAAAjB,KAAA,CAAA6B,QAAA,QAAG1B,QAAQ,CAACY,EAAE,CAACe,MAAM,EAAE;IAAEC,SAAS,EAAEvB;EAAmB,CAAC,CAAI,CAC1E,CAAC;AAEjB,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","useEffect","observer","compiler","Dialog","OverlayLoader","useFeature","NextjsConfigFeature","markdownComponents","NexjsConfigDialog","props","open","onClose","presenter","init","vm","loading","createElement","size","onOpenChange","title","actions","CancelAction","text","showCloseButton","dismissible","className","style","height","Fragment","config","overrides"],"sources":["NextjsConfigDialog.tsx"],"sourcesContent":["import React, { useEffect } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { compiler } from \"markdown-to-jsx/react\";\nimport { Dialog, OverlayLoader } from \"@webiny/admin-ui\";\nimport { useFeature } from \"@webiny/app\";\nimport { NextjsConfigFeature } from \"~/presentation/navigation/NextjsConfig/feature.js\";\nimport { markdownComponents } from \"~/presentation/navigation/NextjsConfig/markdownComponents.js\";\n\ninterface IStartDialogProps {\n open: boolean;\n onClose: () => void;\n}\n\nexport const NexjsConfigDialog = observer((props: IStartDialogProps) => {\n const { open, onClose } = props;\n\n const { presenter } = useFeature(NextjsConfigFeature);\n\n useEffect(() => {\n if (open) {\n presenter.init();\n }\n }, [open]);\n\n const vm = presenter.vm;\n const loading = vm.loading;\n\n return (\n <Dialog\n open={open}\n size={loading ? \"md\" : \"xl\"}\n onOpenChange={onClose}\n title={\"Configure Next.js\"}\n actions={<Dialog.CancelAction text={\"Close\"} />}\n showCloseButton={true}\n dismissible={true}\n >\n {loading ? (\n <div className={\"relative\"} style={{ height: 80 }}>\n <OverlayLoader text={\"Loading config...\"} />\n </div>\n ) : null}\n {loading ? null : <>{compiler(vm.config, { overrides: markdownComponents })}</>}\n </Dialog>\n );\n});\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,SAASC,QAAQ,QAAQ,iBAAiB;AAC1C,SAASC,QAAQ,QAAQ,uBAAuB;AAChD,SAASC,MAAM,EAAEC,aAAa,QAAQ,kBAAkB;AACxD,SAASC,UAAU,QAAQ,aAAa;AACxC,SAASC,mBAAmB;AAC5B,SAASC,kBAAkB;AAO3B,OAAO,MAAMC,iBAAiB,GAAGP,QAAQ,CAAEQ,KAAwB,IAAK;EACpE,MAAM;IAAEC,IAAI;IAAEC;EAAQ,CAAC,GAAGF,KAAK;EAE/B,MAAM;IAAEG;EAAU,CAAC,GAAGP,UAAU,CAACC,mBAAmB,CAAC;EAErDN,SAAS,CAAC,MAAM;IACZ,IAAIU,IAAI,EAAE;MACNE,SAAS,CAACC,IAAI,CAAC,CAAC;IACpB;EACJ,CAAC,EAAE,CAACH,IAAI,CAAC,CAAC;EAEV,MAAMI,EAAE,GAAGF,SAAS,CAACE,EAAE;EACvB,MAAMC,OAAO,GAAGD,EAAE,CAACC,OAAO;EAE1B,oBACIhB,KAAA,CAAAiB,aAAA,CAACb,MAAM;IACHO,IAAI,EAAEA,IAAK;IACXO,IAAI,EAAEF,OAAO,GAAG,IAAI,GAAG,IAAK;IAC5BG,YAAY,EAAEP,OAAQ;IACtBQ,KAAK,EAAE,mBAAoB;IAC3BC,OAAO,eAAErB,KAAA,CAAAiB,aAAA,CAACb,MAAM,CAACkB,YAAY;MAACC,IAAI,EAAE;IAAQ,CAAE,CAAE;IAChDC,eAAe,EAAE,IAAK;IACtBC,WAAW,EAAE;EAAK,GAEjBT,OAAO,gBACJhB,KAAA,CAAAiB,aAAA;IAAKS,SAAS,EAAE,UAAW;IAACC,KAAK,EAAE;MAAEC,MAAM,EAAE;IAAG;EAAE,gBAC9C5B,KAAA,CAAAiB,aAAA,CAACZ,aAAa;IAACkB,IAAI,EAAE;EAAoB,CAAE,CAC1C,CAAC,GACN,IAAI,EACPP,OAAO,GAAG,IAAI,gBAAGhB,KAAA,CAAAiB,aAAA,CAAAjB,KAAA,CAAA6B,QAAA,QAAG1B,QAAQ,CAACY,EAAE,CAACe,MAAM,EAAE;IAAEC,SAAS,EAAEvB;EAAmB,CAAC,CAAI,CAC1E,CAAC;AAEjB,CAAC,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["FolderDtoMapper","folderCacheFactory","makeAutoObservable","orderBy","loadingActions","ROOT_FOLDER","WB_PAGE_APP","loadingRepositoryFactory","metaRepositoryFactory","SortingMapper","sortRepositoryFactory","PageDtoMapper","pageListCache","searchRepositoryFactory","selectedItemsRepositoryFactory","filterRepositoryFactory","DocumentListPresenter","folderId","filtersVisible","constructor","foldersCache","getCache","documentsCache","foldersLoadingRepository","getRepository","documentsLoadingRepository","searchRepository","metaRepository","sortingRepository","filterRepository","selectedRepository","init","params","vm","data","getVmDocuments","folders","getVmFolders","isEmpty","getIsLoading","length","title","getVmTitle","selected","getSelected","meta","totalCount","get","currentCount","count","sorting","getSorting","searchQuery","searchLabel","getSearchLabel","isSearch","getIsSearch","isRoot","getIsRoot","isLoading","isLoadingMore","getIsLoadingMore","isFilterVisible","showFilters","show","getItem","f","id","undefined","documents","getItems","map","d","toDTO","sortItems","filter","parentId","folder","getSelectedItems","items","sorts","iteratees","sort","field","orders","order","Boolean","hasFilters","currentFolder","list","listMore","fromDTOtoColumn"],"sources":["DocumentListPresenter.ts"],"sourcesContent":["import type { Folder } from \"@webiny/app-aco/domain/folder/Folder.js\";\nimport { FolderDtoMapper } from \"@webiny/app-aco/domain/folder/FolderDtoMapper.js\";\nimport { folderCacheFactory } from \"@webiny/app-aco/features/folders/cache/index.js\";\nimport { makeAutoObservable } from \"mobx\";\nimport orderBy from \"lodash/orderBy.js\";\nimport { loadingActions, ROOT_FOLDER, WB_PAGE_APP } from \"~/constants.js\";\nimport type { ISortingRepository } from \"@webiny/app-utils\";\nimport {\n type ILoadingRepository,\n type IMetaRepository,\n loadingRepositoryFactory,\n metaRepositoryFactory,\n SortingMapper,\n sortRepositoryFactory\n} from \"@webiny/app-utils\";\nimport { type IListCache, type Page, PageDtoMapper, pageListCache } from \"~/domain/Page/index.js\";\nimport { type ISearchRepository, searchRepositoryFactory } from \"~/domain/Search/index.js\";\nimport {\n type ISelectedItemsRepository,\n selectedItemsRepositoryFactory\n} from \"~/domain/SelectedItem/index.js\";\nimport { filterRepositoryFactory, type IFilterRepository } from \"~/domain/Filter/index.js\";\nimport { PageListPresenter } from \"./abstractions.js\";\n\nclass DocumentListPresenter implements PageListPresenter.Interface {\n private folderId: string = ROOT_FOLDER;\n private foldersCache: IListCache<Folder>;\n private documentsCache: IListCache<Page>;\n private foldersLoadingRepository: ILoadingRepository;\n private documentsLoadingRepository: ILoadingRepository;\n private searchRepository: ISearchRepository;\n private metaRepository: IMetaRepository;\n private sortingRepository: ISortingRepository;\n private filterRepository: IFilterRepository;\n private selectedRepository: ISelectedItemsRepository;\n private filtersVisible: boolean = false;\n\n constructor() {\n this.foldersCache = folderCacheFactory.getCache(WB_PAGE_APP);\n this.documentsCache = pageListCache;\n this.foldersLoadingRepository = loadingRepositoryFactory.getRepository(WB_PAGE_APP);\n this.documentsLoadingRepository = loadingRepositoryFactory.getRepository(\"WbPage\");\n this.searchRepository = searchRepositoryFactory.getRepository(\"WbPage\");\n this.metaRepository = metaRepositoryFactory.getRepository(\"WbPage\");\n this.sortingRepository = sortRepositoryFactory.getRepository(\"WbPage\");\n this.filterRepository = filterRepositoryFactory.getRepository(\"WbPage\");\n this.selectedRepository = selectedItemsRepositoryFactory.getRepository(\"WbPage\");\n makeAutoObservable(this);\n }\n\n public init(params: PageListPresenter.Init) {\n this.folderId = params.folderId;\n }\n\n public get vm(): PageListPresenter.ViewModel {\n const data = this.getVmDocuments();\n const folders = this.getVmFolders();\n const isEmpty = !this.getIsLoading() && data.length === 0 && folders.length === 0;\n\n return {\n folderId: this.folderId,\n title: this.getVmTitle(),\n data,\n folders,\n selected: this.getSelected(),\n meta: {\n totalCount: this.metaRepository.get().totalCount ?? 0,\n currentCount: this.documentsCache.count() ?? 0\n },\n sorting: this.getSorting(),\n searchQuery: this.searchRepository.get() || \"\",\n searchLabel: this.getSearchLabel(),\n isSearch: this.getIsSearch(),\n isEmpty,\n isRoot: this.getIsRoot(),\n isLoading: this.getIsLoading(),\n isLoadingMore: this.getIsLoadingMore(),\n isFilterVisible: this.filtersVisible\n };\n }\n\n public showFilters = (show: boolean) => {\n this.filtersVisible = show;\n };\n\n private getIsRoot = () => {\n return this.folderId === ROOT_FOLDER;\n };\n\n private getVmTitle = () => {\n return !this.getIsLoading()\n ? this.foldersCache.getItem(f => f.id === this.folderId)?.title\n : undefined;\n };\n\n private getVmDocuments = () => {\n const documents = this.documentsCache.getItems().map(d => PageDtoMapper.toDTO(d));\n return this.sortItems(documents);\n };\n\n private getVmFolders = () => {\n if (this.getIsSearch()) {\n return [];\n }\n\n const folders = this.foldersCache.getItems().filter(f => {\n if (this.folderId === ROOT_FOLDER) {\n return f.parentId === null;\n } else {\n return f.parentId === this.folderId;\n }\n });\n\n return this.sortItems(folders).map(folder => FolderDtoMapper.toDTO(folder));\n };\n\n private getSelected = () => {\n return this.selectedRepository.getSelectedItems();\n };\n\n private sortItems<T>(items: T[]): T[] {\n const sorts = this.sortingRepository.get();\n if (sorts.length === 0) {\n return items;\n }\n const iteratees = sorts.map(sort => sort.field);\n const orders = sorts.map(sort => sort.order);\n return orderBy(items, iteratees, orders);\n }\n\n private getIsSearch = () => {\n return Boolean(this.searchRepository.get() || this.filterRepository.hasFilters());\n };\n\n private getSearchLabel = () => {\n const currentFolder = this.foldersCache.getItem(f => f.id === this.folderId);\n\n if (this.folderId === ROOT_FOLDER || !currentFolder) {\n return \"Search...\";\n }\n\n return `Search in \"${currentFolder.title}\"...`;\n };\n\n private getIsLoading = () => {\n return Boolean(\n this.documentsLoadingRepository.isLoading(loadingActions.init) ||\n this.documentsLoadingRepository.isLoading(loadingActions.list) ||\n this.foldersLoadingRepository.isLoading(this.folderId)\n );\n };\n\n private getIsLoadingMore = () => {\n return Boolean(this.documentsLoadingRepository.isLoading(loadingActions.listMore));\n };\n\n private getSorting = () => {\n return this.sortingRepository.get().map(sort => {\n return SortingMapper.fromDTOtoColumn(sort);\n });\n };\n}\n\nexport { DocumentListPresenter };\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["FolderDtoMapper","folderCacheFactory","makeAutoObservable","orderBy","loadingActions","ROOT_FOLDER","WB_PAGE_APP","loadingRepositoryFactory","metaRepositoryFactory","SortingMapper","sortRepositoryFactory","PageDtoMapper","pageListCache","searchRepositoryFactory","selectedItemsRepositoryFactory","filterRepositoryFactory","DocumentListPresenter","folderId","filtersVisible","constructor","foldersCache","getCache","documentsCache","foldersLoadingRepository","getRepository","documentsLoadingRepository","searchRepository","metaRepository","sortingRepository","filterRepository","selectedRepository","init","params","vm","data","getVmDocuments","folders","getVmFolders","isEmpty","getIsLoading","length","title","getVmTitle","selected","getSelected","meta","totalCount","get","currentCount","count","sorting","getSorting","searchQuery","searchLabel","getSearchLabel","isSearch","getIsSearch","isRoot","getIsRoot","isLoading","isLoadingMore","getIsLoadingMore","isFilterVisible","showFilters","show","getItem","f","id","undefined","documents","getItems","map","d","toDTO","sortItems","filter","parentId","folder","getSelectedItems","items","sorts","iteratees","sort","field","orders","order","Boolean","hasFilters","currentFolder","list","listMore","fromDTOtoColumn"],"sources":["DocumentListPresenter.ts"],"sourcesContent":["import type { Folder } from \"@webiny/app-aco/domain/folder/Folder.js\";\nimport { FolderDtoMapper } from \"@webiny/app-aco/domain/folder/FolderDtoMapper.js\";\nimport { folderCacheFactory } from \"@webiny/app-aco/features/folders/cache/index.js\";\nimport { makeAutoObservable } from \"mobx\";\nimport orderBy from \"lodash/orderBy.js\";\nimport { loadingActions, ROOT_FOLDER, WB_PAGE_APP } from \"~/constants.js\";\nimport type { ISortingRepository } from \"@webiny/app-utils\";\nimport {\n type ILoadingRepository,\n type IMetaRepository,\n loadingRepositoryFactory,\n metaRepositoryFactory,\n SortingMapper,\n sortRepositoryFactory\n} from \"@webiny/app-utils\";\nimport { type IListCache, type Page, PageDtoMapper, pageListCache } from \"~/domain/Page/index.js\";\nimport { type ISearchRepository, searchRepositoryFactory } from \"~/domain/Search/index.js\";\nimport {\n type ISelectedItemsRepository,\n selectedItemsRepositoryFactory\n} from \"~/domain/SelectedItem/index.js\";\nimport { filterRepositoryFactory, type IFilterRepository } from \"~/domain/Filter/index.js\";\nimport { PageListPresenter } from \"./abstractions.js\";\n\nclass DocumentListPresenter implements PageListPresenter.Interface {\n private folderId: string = ROOT_FOLDER;\n private foldersCache: IListCache<Folder>;\n private documentsCache: IListCache<Page>;\n private foldersLoadingRepository: ILoadingRepository;\n private documentsLoadingRepository: ILoadingRepository;\n private searchRepository: ISearchRepository;\n private metaRepository: IMetaRepository;\n private sortingRepository: ISortingRepository;\n private filterRepository: IFilterRepository;\n private selectedRepository: ISelectedItemsRepository;\n private filtersVisible: boolean = false;\n\n constructor() {\n this.foldersCache = folderCacheFactory.getCache(WB_PAGE_APP);\n this.documentsCache = pageListCache;\n this.foldersLoadingRepository = loadingRepositoryFactory.getRepository(WB_PAGE_APP);\n this.documentsLoadingRepository = loadingRepositoryFactory.getRepository(\"WbPage\");\n this.searchRepository = searchRepositoryFactory.getRepository(\"WbPage\");\n this.metaRepository = metaRepositoryFactory.getRepository(\"WbPage\");\n this.sortingRepository = sortRepositoryFactory.getRepository(\"WbPage\");\n this.filterRepository = filterRepositoryFactory.getRepository(\"WbPage\");\n this.selectedRepository = selectedItemsRepositoryFactory.getRepository(\"WbPage\");\n makeAutoObservable(this);\n }\n\n public init(params: PageListPresenter.Init) {\n this.folderId = params.folderId;\n }\n\n public get vm(): PageListPresenter.ViewModel {\n const data = this.getVmDocuments();\n const folders = this.getVmFolders();\n const isEmpty = !this.getIsLoading() && data.length === 0 && folders.length === 0;\n\n return {\n folderId: this.folderId,\n title: this.getVmTitle(),\n data,\n folders,\n selected: this.getSelected(),\n meta: {\n totalCount: this.metaRepository.get().totalCount ?? 0,\n currentCount: this.documentsCache.count() ?? 0\n },\n sorting: this.getSorting(),\n searchQuery: this.searchRepository.get() || \"\",\n searchLabel: this.getSearchLabel(),\n isSearch: this.getIsSearch(),\n isEmpty,\n isRoot: this.getIsRoot(),\n isLoading: this.getIsLoading(),\n isLoadingMore: this.getIsLoadingMore(),\n isFilterVisible: this.filtersVisible\n };\n }\n\n public showFilters = (show: boolean) => {\n this.filtersVisible = show;\n };\n\n private getIsRoot = () => {\n return this.folderId === ROOT_FOLDER;\n };\n\n private getVmTitle = () => {\n return !this.getIsLoading()\n ? this.foldersCache.getItem(f => f.id === this.folderId)?.title\n : undefined;\n };\n\n private getVmDocuments = () => {\n const documents = this.documentsCache.getItems().map(d => PageDtoMapper.toDTO(d));\n return this.sortItems(documents);\n };\n\n private getVmFolders = () => {\n if (this.getIsSearch()) {\n return [];\n }\n\n const folders = this.foldersCache.getItems().filter(f => {\n if (this.folderId === ROOT_FOLDER) {\n return f.parentId === null;\n } else {\n return f.parentId === this.folderId;\n }\n });\n\n return this.sortItems(folders).map(folder => FolderDtoMapper.toDTO(folder));\n };\n\n private getSelected = () => {\n return this.selectedRepository.getSelectedItems();\n };\n\n private sortItems<T>(items: T[]): T[] {\n const sorts = this.sortingRepository.get();\n if (sorts.length === 0) {\n return items;\n }\n const iteratees = sorts.map(sort => sort.field);\n const orders = sorts.map(sort => sort.order);\n return orderBy(items, iteratees, orders);\n }\n\n private getIsSearch = () => {\n return Boolean(this.searchRepository.get() || this.filterRepository.hasFilters());\n };\n\n private getSearchLabel = () => {\n const currentFolder = this.foldersCache.getItem(f => f.id === this.folderId);\n\n if (this.folderId === ROOT_FOLDER || !currentFolder) {\n return \"Search...\";\n }\n\n return `Search in \"${currentFolder.title}\"...`;\n };\n\n private getIsLoading = () => {\n return Boolean(\n this.documentsLoadingRepository.isLoading(loadingActions.init) ||\n this.documentsLoadingRepository.isLoading(loadingActions.list) ||\n this.foldersLoadingRepository.isLoading(this.folderId)\n );\n };\n\n private getIsLoadingMore = () => {\n return Boolean(this.documentsLoadingRepository.isLoading(loadingActions.listMore));\n };\n\n private getSorting = () => {\n return this.sortingRepository.get().map(sort => {\n return SortingMapper.fromDTOtoColumn(sort);\n });\n };\n}\n\nexport { DocumentListPresenter };\n"],"mappings":"AACA,SAASA,eAAe,QAAQ,kDAAkD;AAClF,SAASC,kBAAkB,QAAQ,iDAAiD;AACpF,SAASC,kBAAkB,QAAQ,MAAM;AACzC,OAAOC,OAAO,MAAM,mBAAmB;AACvC,SAASC,cAAc,EAAEC,WAAW,EAAEC,WAAW;AAEjD,SAGIC,wBAAwB,EACxBC,qBAAqB,EACrBC,aAAa,EACbC,qBAAqB,QAClB,mBAAmB;AAC1B,SAAqCC,aAAa,EAAEC,aAAa;AACjE,SAAiCC,uBAAuB;AACxD,SAEIC,8BAA8B;AAElC,SAASC,uBAAuB;AAGhC,MAAMC,qBAAqB,CAAwC;EACvDC,QAAQ,GAAWZ,WAAW;EAU9Ba,cAAc,GAAY,KAAK;EAEvCC,WAAWA,CAAA,EAAG;IACV,IAAI,CAACC,YAAY,GAAGnB,kBAAkB,CAACoB,QAAQ,CAACf,WAAW,CAAC;IAC5D,IAAI,CAACgB,cAAc,GAAGV,aAAa;IACnC,IAAI,CAACW,wBAAwB,GAAGhB,wBAAwB,CAACiB,aAAa,CAAClB,WAAW,CAAC;IACnF,IAAI,CAACmB,0BAA0B,GAAGlB,wBAAwB,CAACiB,aAAa,CAAC,QAAQ,CAAC;IAClF,IAAI,CAACE,gBAAgB,GAAGb,uBAAuB,CAACW,aAAa,CAAC,QAAQ,CAAC;IACvE,IAAI,CAACG,cAAc,GAAGnB,qBAAqB,CAACgB,aAAa,CAAC,QAAQ,CAAC;IACnE,IAAI,CAACI,iBAAiB,GAAGlB,qBAAqB,CAACc,aAAa,CAAC,QAAQ,CAAC;IACtE,IAAI,CAACK,gBAAgB,GAAGd,uBAAuB,CAACS,aAAa,CAAC,QAAQ,CAAC;IACvE,IAAI,CAACM,kBAAkB,GAAGhB,8BAA8B,CAACU,aAAa,CAAC,QAAQ,CAAC;IAChFtB,kBAAkB,CAAC,IAAI,CAAC;EAC5B;EAEO6B,IAAIA,CAACC,MAA8B,EAAE;IACxC,IAAI,CAACf,QAAQ,GAAGe,MAAM,CAACf,QAAQ;EACnC;EAEA,IAAWgB,EAAEA,CAAA,EAAgC;IACzC,MAAMC,IAAI,GAAG,IAAI,CAACC,cAAc,CAAC,CAAC;IAClC,MAAMC,OAAO,GAAG,IAAI,CAACC,YAAY,CAAC,CAAC;IACnC,MAAMC,OAAO,GAAG,CAAC,IAAI,CAACC,YAAY,CAAC,CAAC,IAAIL,IAAI,CAACM,MAAM,KAAK,CAAC,IAAIJ,OAAO,CAACI,MAAM,KAAK,CAAC;IAEjF,OAAO;MACHvB,QAAQ,EAAE,IAAI,CAACA,QAAQ;MACvBwB,KAAK,EAAE,IAAI,CAACC,UAAU,CAAC,CAAC;MACxBR,IAAI;MACJE,OAAO;MACPO,QAAQ,EAAE,IAAI,CAACC,WAAW,CAAC,CAAC;MAC5BC,IAAI,EAAE;QACFC,UAAU,EAAE,IAAI,CAACnB,cAAc,CAACoB,GAAG,CAAC,CAAC,CAACD,UAAU,IAAI,CAAC;QACrDE,YAAY,EAAE,IAAI,CAAC1B,cAAc,CAAC2B,KAAK,CAAC,CAAC,IAAI;MACjD,CAAC;MACDC,OAAO,EAAE,IAAI,CAACC,UAAU,CAAC,CAAC;MAC1BC,WAAW,EAAE,IAAI,CAAC1B,gBAAgB,CAACqB,GAAG,CAAC,CAAC,IAAI,EAAE;MAC9CM,WAAW,EAAE,IAAI,CAACC,cAAc,CAAC,CAAC;MAClCC,QAAQ,EAAE,IAAI,CAACC,WAAW,CAAC,CAAC;MAC5BlB,OAAO;MACPmB,MAAM,EAAE,IAAI,CAACC,SAAS,CAAC,CAAC;MACxBC,SAAS,EAAE,IAAI,CAACpB,YAAY,CAAC,CAAC;MAC9BqB,aAAa,EAAE,IAAI,CAACC,gBAAgB,CAAC,CAAC;MACtCC,eAAe,EAAE,IAAI,CAAC5C;IAC1B,CAAC;EACL;EAEO6C,WAAW,GAAIC,IAAa,IAAK;IACpC,IAAI,CAAC9C,cAAc,GAAG8C,IAAI;EAC9B,CAAC;EAEON,SAAS,GAAGA,CAAA,KAAM;IACtB,OAAO,IAAI,CAACzC,QAAQ,KAAKZ,WAAW;EACxC,CAAC;EAEOqC,UAAU,GAAGA,CAAA,KAAM;IACvB,OAAO,CAAC,IAAI,CAACH,YAAY,CAAC,CAAC,GACrB,IAAI,CAACnB,YAAY,CAAC6C,OAAO,CAACC,CAAC,IAAIA,CAAC,CAACC,EAAE,KAAK,IAAI,CAAClD,QAAQ,CAAC,EAAEwB,KAAK,GAC7D2B,SAAS;EACnB,CAAC;EAEOjC,cAAc,GAAGA,CAAA,KAAM;IAC3B,MAAMkC,SAAS,GAAG,IAAI,CAAC/C,cAAc,CAACgD,QAAQ,CAAC,CAAC,CAACC,GAAG,CAACC,CAAC,IAAI7D,aAAa,CAAC8D,KAAK,CAACD,CAAC,CAAC,CAAC;IACjF,OAAO,IAAI,CAACE,SAAS,CAACL,SAAS,CAAC;EACpC,CAAC;EAEOhC,YAAY,GAAGA,CAAA,KAAM;IACzB,IAAI,IAAI,CAACmB,WAAW,CAAC,CAAC,EAAE;MACpB,OAAO,EAAE;IACb;IAEA,MAAMpB,OAAO,GAAG,IAAI,CAAChB,YAAY,CAACkD,QAAQ,CAAC,CAAC,CAACK,MAAM,CAACT,CAAC,IAAI;MACrD,IAAI,IAAI,CAACjD,QAAQ,KAAKZ,WAAW,EAAE;QAC/B,OAAO6D,CAAC,CAACU,QAAQ,KAAK,IAAI;MAC9B,CAAC,MAAM;QACH,OAAOV,CAAC,CAACU,QAAQ,KAAK,IAAI,CAAC3D,QAAQ;MACvC;IACJ,CAAC,CAAC;IAEF,OAAO,IAAI,CAACyD,SAAS,CAACtC,OAAO,CAAC,CAACmC,GAAG,CAACM,MAAM,IAAI7E,eAAe,CAACyE,KAAK,CAACI,MAAM,CAAC,CAAC;EAC/E,CAAC;EAEOjC,WAAW,GAAGA,CAAA,KAAM;IACxB,OAAO,IAAI,CAACd,kBAAkB,CAACgD,gBAAgB,CAAC,CAAC;EACrD,CAAC;EAEOJ,SAASA,CAAIK,KAAU,EAAO;IAClC,MAAMC,KAAK,GAAG,IAAI,CAACpD,iBAAiB,CAACmB,GAAG,CAAC,CAAC;IAC1C,IAAIiC,KAAK,CAACxC,MAAM,KAAK,CAAC,EAAE;MACpB,OAAOuC,KAAK;IAChB;IACA,MAAME,SAAS,GAAGD,KAAK,CAACT,GAAG,CAACW,IAAI,IAAIA,IAAI,CAACC,KAAK,CAAC;IAC/C,MAAMC,MAAM,GAAGJ,KAAK,CAACT,GAAG,CAACW,IAAI,IAAIA,IAAI,CAACG,KAAK,CAAC;IAC5C,OAAOlF,OAAO,CAAC4E,KAAK,EAAEE,SAAS,EAAEG,MAAM,CAAC;EAC5C;EAEQ5B,WAAW,GAAGA,CAAA,KAAM;IACxB,OAAO8B,OAAO,CAAC,IAAI,CAAC5D,gBAAgB,CAACqB,GAAG,CAAC,CAAC,IAAI,IAAI,CAAClB,gBAAgB,CAAC0D,UAAU,CAAC,CAAC,CAAC;EACrF,CAAC;EAEOjC,cAAc,GAAGA,CAAA,KAAM;IAC3B,MAAMkC,aAAa,GAAG,IAAI,CAACpE,YAAY,CAAC6C,OAAO,CAACC,CAAC,IAAIA,CAAC,CAACC,EAAE,KAAK,IAAI,CAAClD,QAAQ,CAAC;IAE5E,IAAI,IAAI,CAACA,QAAQ,KAAKZ,WAAW,IAAI,CAACmF,aAAa,EAAE;MACjD,OAAO,WAAW;IACtB;IAEA,OAAO,cAAcA,aAAa,CAAC/C,KAAK,MAAM;EAClD,CAAC;EAEOF,YAAY,GAAGA,CAAA,KAAM;IACzB,OAAO+C,OAAO,CACV,IAAI,CAAC7D,0BAA0B,CAACkC,SAAS,CAACvD,cAAc,CAAC2B,IAAI,CAAC,IAC9D,IAAI,CAACN,0BAA0B,CAACkC,SAAS,CAACvD,cAAc,CAACqF,IAAI,CAAC,IAC9D,IAAI,CAAClE,wBAAwB,CAACoC,SAAS,CAAC,IAAI,CAAC1C,QAAQ,CACzD,CAAC;EACL,CAAC;EAEO4C,gBAAgB,GAAGA,CAAA,KAAM;IAC7B,OAAOyB,OAAO,CAAC,IAAI,CAAC7D,0BAA0B,CAACkC,SAAS,CAACvD,cAAc,CAACsF,QAAQ,CAAC,CAAC;EACtF,CAAC;EAEOvC,UAAU,GAAGA,CAAA,KAAM;IACvB,OAAO,IAAI,CAACvB,iBAAiB,CAACmB,GAAG,CAAC,CAAC,CAACwB,GAAG,CAACW,IAAI,IAAI;MAC5C,OAAOzE,aAAa,CAACkF,eAAe,CAACT,IAAI,CAAC;IAC9C,CAAC,CAAC;EACN,CAAC;AACL;AAEA,SAASlE,qBAAqB","ignoreList":[]}