@nascentdigital/funnel-editor 4.6.1 → 5.0.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.
Files changed (209) hide show
  1. package/dist/EditorApp.js +1 -1
  2. package/dist/EditorRoutes.js +7 -5
  3. package/dist/changesets/screens/ChangeSetViewer.js +1 -1
  4. package/dist/changesets/screens/ChangeSetsExplorer.js +1 -2
  5. package/dist/collection/hooks/CollectionController.d.ts +5 -16
  6. package/dist/collection/hooks/CollectionController.js +18 -37
  7. package/dist/collection/hooks/ICollectionController.d.ts +24 -0
  8. package/dist/collection/hooks/ICollectionController.js +20 -0
  9. package/dist/collection/hooks/index.d.ts +1 -0
  10. package/dist/collection/hooks/index.js +1 -0
  11. package/dist/collection/hooks/useCollectionController.d.ts +3 -3
  12. package/dist/collection/screens/CollectionEditor.js +2 -2
  13. package/dist/components.d.ts +20 -0
  14. package/dist/components.js +41 -0
  15. package/dist/core/components/feedback/dialog/MinimalDialogLayout.js +1 -1
  16. package/dist/core/components/fields/BooleanField.d.ts +2 -1
  17. package/dist/core/components/fields/BooleanField.js +2 -2
  18. package/dist/core/components/fields/DateField.d.ts +2 -1
  19. package/dist/core/components/fields/DateField.js +2 -2
  20. package/dist/core/components/fields/DynamicPagesEditor.d.ts +2 -1
  21. package/dist/core/components/fields/DynamicPagesEditor.js +1 -1
  22. package/dist/core/components/fields/EnumField.d.ts +2 -1
  23. package/dist/core/components/fields/EnumField.js +2 -2
  24. package/dist/core/components/fields/FieldCard.d.ts +1 -0
  25. package/dist/core/components/fields/FieldCard.js +8 -1
  26. package/dist/core/components/fields/FieldEditor.d.ts +2 -1
  27. package/dist/core/components/fields/FieldEditor.js +11 -11
  28. package/dist/core/components/fields/FieldLayout.d.ts +2 -1
  29. package/dist/core/components/fields/FieldLayout.js +3 -3
  30. package/dist/core/components/fields/ListEditor.d.ts +2 -1
  31. package/dist/core/components/fields/ListEditor.js +5 -6
  32. package/dist/core/components/fields/OptInField.d.ts +2 -1
  33. package/dist/core/components/fields/OptInField.js +2 -2
  34. package/dist/core/components/fields/RichTextEditor.js +1 -1
  35. package/dist/core/components/fields/RichTextField.d.ts +2 -1
  36. package/dist/core/components/fields/RichTextField.js +3 -5
  37. package/dist/core/components/fields/TextField.d.ts +2 -0
  38. package/dist/core/components/fields/TextField.js +2 -2
  39. package/dist/core/components/fields/TimestampField.d.ts +2 -1
  40. package/dist/core/components/fields/TimestampField.js +3 -3
  41. package/dist/core/components/fields/asset/AssetEditor.js +12 -44
  42. package/dist/core/components/fields/asset/AssetPicker.js +6 -6
  43. package/dist/core/components/fields/asset/AssetUploader.js +23 -31
  44. package/dist/core/components/fields/asset/preview/VideoPreview.js +16 -11
  45. package/dist/core/components/fields/asset/useAssetFields.d.ts +2 -17
  46. package/dist/core/components/fields/asset/useAssetFields.js +0 -21
  47. package/dist/core/components/fields/collection/CollectionEditor.js +1 -1
  48. package/dist/core/components/fields/collection/CollectionPicker.d.ts +2 -2
  49. package/dist/core/components/fields/collection/CollectionPicker.js +3 -4
  50. package/dist/core/components/fields/dynamicPages/PagePriorityDialog.js +1 -1
  51. package/dist/core/components/fields/embed/EmbeddedVideoEditor.js +34 -27
  52. package/dist/core/components/fields/factories/FieldValueFactory.js +11 -4
  53. package/dist/core/components/fields/factories/MediaFactory.d.ts +13 -0
  54. package/dist/core/components/fields/factories/MediaFactory.js +256 -0
  55. package/dist/core/components/fields/list/CreateFieldButton.js +1 -1
  56. package/dist/core/components/fields/media/MediaCard.d.ts +7 -0
  57. package/dist/core/components/fields/media/MediaCard.js +92 -0
  58. package/dist/core/components/fields/media/MediaEditor.d.ts +37 -0
  59. package/dist/core/components/fields/media/MediaEditor.js +235 -0
  60. package/dist/core/components/fields/media/MediaPicker.d.ts +15 -0
  61. package/dist/core/components/fields/media/MediaPicker.js +251 -0
  62. package/dist/core/components/fields/media/index.d.ts +3 -0
  63. package/dist/core/components/fields/media/index.js +19 -0
  64. package/dist/core/components/fields/object/ObjectEditor.js +1 -1
  65. package/dist/core/components/fields/page/PagePicker.d.ts +2 -2
  66. package/dist/core/components/fields/page/PagePicker.js +1 -1
  67. package/dist/core/components/interaction/Combobox.js +1 -1
  68. package/dist/core/components/interaction/DateTimePicker.d.ts +0 -1
  69. package/dist/core/components/interaction/DateTimePicker.js +0 -2
  70. package/dist/core/components/interaction/MultiSelectControls.js +2 -5
  71. package/dist/core/components/interaction/Popup.js +1 -0
  72. package/dist/core/components/interaction/QuickEditor.js +1 -1
  73. package/dist/core/components/interaction/QuickPicker.js +1 -1
  74. package/dist/core/components/interaction/SideSheet.js +1 -1
  75. package/dist/core/components/interaction/centersheet/CenterSheet.js +7 -1
  76. package/dist/core/components/interaction/centersheet/CenterSheetContainer.js +3 -1
  77. package/dist/core/components/transitions/FadeIn.js +2 -14
  78. package/dist/core/components/visuals/Icon.d.ts +1 -1
  79. package/dist/core/components/visuals/Icon.js +3 -0
  80. package/dist/core/containers/AssetRepositoryContainer.d.ts +2 -0
  81. package/dist/core/containers/AssetRepositoryContainer.js +18 -0
  82. package/dist/core/containers/CollectionRepositoryContainer.d.ts +2 -0
  83. package/dist/core/containers/CollectionRepositoryContainer.js +18 -0
  84. package/dist/core/containers/PageRepositoryContainer.d.ts +2 -0
  85. package/dist/core/containers/PageRepositoryContainer.js +18 -0
  86. package/dist/core/containers/index.d.ts +3 -0
  87. package/dist/core/containers/index.js +19 -0
  88. package/dist/core/domain/Block.d.ts +1 -0
  89. package/dist/core/domain/Block.js +8 -5
  90. package/dist/core/domain/BlockConfiguration.d.ts +4 -1
  91. package/dist/core/domain/BlockConfiguration.js +64 -3
  92. package/dist/core/domain/Collection.d.ts +10 -28
  93. package/dist/core/domain/Collection.js +2 -16
  94. package/dist/core/domain/CollectionBrowser.d.ts +3 -2
  95. package/dist/core/domain/CollectionBrowser.js +3 -3
  96. package/dist/core/domain/CollectionFieldProxy.d.ts +12 -8
  97. package/dist/core/domain/CollectionFieldProxy.js +14 -8
  98. package/dist/core/domain/CollectionGroup.d.ts +0 -5
  99. package/dist/core/domain/CollectionGroup.js +0 -7
  100. package/dist/core/domain/CollectionSummary.d.ts +2 -2
  101. package/dist/core/domain/Collections.d.ts +3 -3
  102. package/dist/core/domain/Collections.js +4 -4
  103. package/dist/core/domain/ICollection.d.ts +71 -0
  104. package/dist/core/domain/ICollection.js +20 -0
  105. package/dist/core/domain/IPage.d.ts +72 -0
  106. package/dist/core/domain/IPage.js +20 -0
  107. package/dist/core/domain/IPageRefStore.d.ts +3 -3
  108. package/dist/core/domain/ItemBase.d.ts +6 -6
  109. package/dist/core/domain/ItemBase.js +5 -5
  110. package/dist/core/domain/Page.d.ts +9 -22
  111. package/dist/core/domain/Page.js +3 -18
  112. package/dist/core/domain/PageOverview.d.ts +2 -2
  113. package/dist/core/domain/PageRefStoreProxy.d.ts +4 -4
  114. package/dist/core/domain/PageSettings.d.ts +3 -3
  115. package/dist/core/domain/PageSummary.d.ts +2 -2
  116. package/dist/core/domain/Pages.js +4 -6
  117. package/dist/core/domain/SectionBlock.js +2 -1
  118. package/dist/core/domain/Site.d.ts +4 -4
  119. package/dist/core/domain/Site.js +3 -3
  120. package/dist/core/domain/index.d.ts +2 -1
  121. package/dist/core/domain/index.js +2 -1
  122. package/dist/core/hooks/index.d.ts +4 -3
  123. package/dist/core/hooks/index.js +4 -3
  124. package/dist/core/hooks/useAssetRepository.d.ts +3 -0
  125. package/dist/core/hooks/useAssetRepository.js +11 -0
  126. package/dist/core/hooks/useCollection.d.ts +4 -4
  127. package/dist/core/hooks/useCollectionRepository.d.ts +3 -2
  128. package/dist/core/hooks/useCollectionRepository.js +4 -4
  129. package/dist/core/hooks/usePage.d.ts +4 -4
  130. package/dist/core/hooks/usePageRef.d.ts +1 -1
  131. package/dist/core/hooks/usePageRepository.d.ts +3 -2
  132. package/dist/core/hooks/usePageRepository.js +4 -4
  133. package/dist/core/hooks/useTempFields.d.ts +2 -3
  134. package/dist/core/index.d.ts +1 -0
  135. package/dist/core/index.js +1 -0
  136. package/dist/core/repository/AssetRepository.d.ts +10 -0
  137. package/dist/core/repository/AssetRepository.js +22 -0
  138. package/dist/core/repository/CollectionRepository.d.ts +21 -20
  139. package/dist/core/repository/CollectionRepository.js +23 -161
  140. package/dist/core/repository/CollectionSerializer.d.ts +4 -1
  141. package/dist/core/repository/CollectionSerializer.js +3 -3
  142. package/dist/core/repository/IAssetRepository.d.ts +25 -0
  143. package/dist/core/repository/ICollectionRepository.d.ts +62 -0
  144. package/dist/core/repository/ICollectionRepository.js +2 -0
  145. package/dist/core/repository/IPageRepository.d.ts +40 -0
  146. package/dist/core/repository/IPageRepository.js +2 -0
  147. package/dist/core/repository/PageRepository.d.ts +6 -9
  148. package/dist/core/repository/PageRepository.js +7 -280
  149. package/dist/core/repository/PageSerializer.d.ts +34 -1
  150. package/dist/core/repository/PageSerializer.js +4 -0
  151. package/dist/core/repository/SerializeCollectionUpdate.d.ts +8 -0
  152. package/dist/core/repository/SerializeCollectionUpdate.js +168 -0
  153. package/dist/core/repository/SerializePageUpdate.d.ts +11 -0
  154. package/dist/core/repository/SerializePageUpdate.js +292 -0
  155. package/dist/core/repository/index.d.ts +4 -0
  156. package/dist/core/repository/index.js +4 -0
  157. package/dist/dashboard/screens/Dashboard.js +1 -1
  158. package/dist/devtools/screens/Devtools.js +1 -1
  159. package/dist/explore/components/CreatePageDialog.d.ts +2 -2
  160. package/dist/explore/screens/CollectionExplorer.js +1 -1
  161. package/dist/explore/screens/CollectionsExplorer.js +1 -1
  162. package/dist/explore/screens/PageExplorer.js +1 -1
  163. package/dist/explore/screens/SiteExplorer.js +1 -1
  164. package/dist/page/components/BlockEditor.js +1 -1
  165. package/dist/page/components/PageHeader.d.ts +2 -2
  166. package/dist/page/components/PageNotCreated.d.ts +2 -2
  167. package/dist/page/components/PageNotFound.d.ts +2 -2
  168. package/dist/page/components/SettingsEditor.js +0 -7
  169. package/dist/page/components/config/BlockConfigButton.d.ts +2 -1
  170. package/dist/page/components/config/BlockConfigButton.js +84 -24
  171. package/dist/page/components/config/BlockPreview.d.ts +8 -0
  172. package/dist/page/components/config/BlockPreview.js +53 -0
  173. package/dist/page/components/config/index.d.ts +1 -1
  174. package/dist/page/components/config/index.js +1 -1
  175. package/dist/page/components/config/preview/ColumnLayout.d.ts +10 -0
  176. package/dist/page/components/config/preview/ColumnLayout.js +15 -0
  177. package/dist/page/components/config/preview/ItemLayout.d.ts +12 -0
  178. package/dist/page/components/config/preview/ItemLayout.js +45 -0
  179. package/dist/page/components/config/preview/ListPanel.d.ts +12 -0
  180. package/dist/page/components/config/preview/ListPanel.js +14 -0
  181. package/dist/page/components/config/preview/MessagePanel.d.ts +12 -0
  182. package/dist/page/components/config/preview/MessagePanel.js +21 -0
  183. package/dist/page/components/config/preview/Panel.d.ts +15 -0
  184. package/dist/page/components/config/preview/Panel.js +74 -0
  185. package/dist/page/components/config/preview/RowLayout.d.ts +10 -0
  186. package/dist/page/components/config/preview/RowLayout.js +26 -0
  187. package/dist/page/components/config/preview/StackLayout.d.ts +10 -0
  188. package/dist/page/components/config/preview/StackLayout.js +15 -0
  189. package/dist/page/components/config/preview/VisualPanel.d.ts +12 -0
  190. package/dist/page/components/config/preview/VisualPanel.js +27 -0
  191. package/dist/page/components/config/preview/index.d.ts +3 -0
  192. package/dist/page/components/config/preview/index.js +19 -0
  193. package/dist/page/components/panels/BlockConfigPanel.js +4 -4
  194. package/dist/page/hooks/IPageController.d.ts +42 -0
  195. package/dist/page/hooks/IPageController.js +32 -0
  196. package/dist/page/hooks/PageController.d.ts +11 -36
  197. package/dist/page/hooks/PageController.js +7 -33
  198. package/dist/page/hooks/index.d.ts +1 -0
  199. package/dist/page/hooks/index.js +1 -0
  200. package/dist/page/hooks/usePageController.d.ts +3 -3
  201. package/dist/page/screens/PageEditor.js +1 -1
  202. package/dist/styles/index.css +809 -60
  203. package/dist/styles/tailwind.js +1 -0
  204. package/dist/users/screens/UserExplorer.js +1 -1
  205. package/package.json +3 -2
  206. package/dist/core/domain/TranslateSchema.d.ts +0 -7
  207. package/dist/page/components/config/LegacyBlockPreview.d.ts +0 -8
  208. package/dist/page/components/config/LegacyBlockPreview.js +0 -452
  209. /package/dist/core/{domain/TranslateSchema.js → repository/IAssetRepository.js} +0 -0
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.VisualPanel = VisualPanel;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const classnames_1 = __importDefault(require("classnames"));
9
+ const core_1 = require("../../../../core");
10
+ const Panel_1 = require("./Panel");
11
+ // components
12
+ function VisualPanel({ className, parentType, itemOffset, panel, mobile, nested }) {
13
+ // render
14
+ const { aspectRatio: { mobile: aspectRatioMobile, desktop: aspectRatioDesktop } } = panel;
15
+ const aspectRatio = mobile ? aspectRatioMobile : aspectRatioDesktop;
16
+ return ((0, jsx_runtime_1.jsx)(Panel_1.Panel, { className: className, parentType: parentType, itemOffset: itemOffset, panel: panel, mobile: mobile, nested: nested, disableSizing: mobile, children: (0, jsx_runtime_1.jsx)("div", { className: (0, classnames_1.default)('flex justify-center items-center bg-draft/tint3 rounded-xxs overflow-hidden', {
17
+ 'aspect-square': aspectRatio === 'square' || aspectRatio === 'auto',
18
+ 'aspect-phone': aspectRatio === 'phone',
19
+ 'aspects-tv': aspectRatio === 'tv',
20
+ 'aspect-widescreen': aspectRatio === 'widescreen',
21
+ 'aspect-cinema': aspectRatio === 'cinema'
22
+ }), children: (0, jsx_runtime_1.jsx)(core_1.Icon, { className: "text-content-tertiary", variant: "Image", size: {
23
+ size: 20,
24
+ strokeWidth: 1.5,
25
+ absoluteStrokeWidth: false
26
+ } }) }) }));
27
+ }
@@ -0,0 +1,3 @@
1
+ export * from './ColumnLayout';
2
+ export * from './RowLayout';
3
+ export * from './StackLayout';
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./ColumnLayout"), exports);
18
+ __exportStar(require("./RowLayout"), exports);
19
+ __exportStar(require("./StackLayout"), exports);
@@ -2,12 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BlockConfigPanel = BlockConfigPanel;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
- const react_1 = require("motion/react");
5
+ const react_1 = require("react");
6
6
  const core_1 = require("../../../core");
7
7
  const config_1 = require("../config");
8
8
  // panel
9
9
  function BlockConfigPanel() {
10
- // bind state + hooks
10
+ // bind hooks
11
+ const id = (0, react_1.useId)();
11
12
  const configuration = (0, core_1.useBlockConfiguration)();
12
13
  // skip if there's no config (shouldn't happen)
13
14
  if (!configuration || !configuration.hasPanels) {
@@ -15,8 +16,7 @@ function BlockConfigPanel() {
15
16
  }
16
17
  // render
17
18
  const { scope } = configuration;
18
- return ((0, jsx_runtime_1.jsx)(core_1.FadeIn, { layout: true, children: (0, jsx_runtime_1.jsxs)("div", { className: "h-full flex flex-col gap-l6 p-l7 bg-surface1 rounded-xxl", children: [(0, jsx_runtime_1.jsx)(core_1.Tabs, { variant: "highlighted", size: "sm", items: blockScopes, selectedItem: scope, onSelect: scope => configuration.scope = scope }), (0, jsx_runtime_1.jsx)(react_1.motion.section, { className: "p-l6 bg-surface-placeholder-raised rounded-md", layout: true, children: configuration &&
19
- (0, jsx_runtime_1.jsx)(config_1.LegacyBlockPreview, { configuration: configuration }) }), (0, jsx_runtime_1.jsx)(config_1.BlockConfigButton, { target: "block" })] }) }, "block.config"));
19
+ return ((0, jsx_runtime_1.jsx)(core_1.FadeIn, { children: (0, jsx_runtime_1.jsxs)(core_1.Popup.AnchorElement, { tag: "div", anchorId: id, className: "h-full flex flex-col gap-l6 py-l7 bg-surface1 rounded-xxl interpolate-all", children: [(0, jsx_runtime_1.jsx)(core_1.Tabs, { className: "mx-l7", variant: "highlighted", size: "sm", items: blockScopes, selectedItem: scope, onSelect: scope => configuration.scope = scope }), (0, jsx_runtime_1.jsx)(config_1.BlockPreview, { className: "self-center", configuration: configuration }), (0, jsx_runtime_1.jsx)("div", { className: "px-l7", children: (0, jsx_runtime_1.jsx)(config_1.BlockConfigButton, { anchorId: id, target: "block" }) })] }) }, "block.config"));
20
20
  }
21
21
  // helpers
22
22
  const blockScopes = [
@@ -0,0 +1,42 @@
1
+ import { EventBus, Language, Schema } from '@nascentdigital/funnel-core';
2
+ import { Observable } from 'rxjs';
3
+ import { IPage, PageSummary } from '../../core';
4
+ export interface IPageController {
5
+ readonly state: IPageController.State;
6
+ readonly events$: Observable<IPageController.Event | IPage.Event>;
7
+ readonly saved$: Observable<[IPageController.StateChangedEvent, IPageController.StateChangedEvent]>;
8
+ readonly page: IPage | undefined;
9
+ readonly pageSummary: PageSummary | undefined;
10
+ readonly languages: ReadonlyArray<Language>;
11
+ unpublish(): Promise<void>;
12
+ create(target: IPageController.Target): Promise<void>;
13
+ reload(): Promise<void>;
14
+ }
15
+ export declare namespace IPageController {
16
+ type State = 'uninitialized' | 'initializing' | 'loading' | 'ready' | 'saving' | 'unpublishing' | 'error';
17
+ type Target = {
18
+ brand: string;
19
+ templates: Schema.Site.Pages;
20
+ template: Schema.Page;
21
+ region: string;
22
+ slug?: string;
23
+ language: Language;
24
+ };
25
+ interface Event extends EventBus.Event<'PageController', Event.Type> {
26
+ controller: IPageController;
27
+ }
28
+ namespace Event {
29
+ type Type = 'pageSummary.changed' | 'page.changed';
30
+ function filter(event: EventBus.Event): event is Event;
31
+ function create(event: EventBus.Args<Event>): Event;
32
+ }
33
+ interface StateChangedEvent extends EventBus.Event<'PageController', StateChangedEvent.Type> {
34
+ controller: IPageController;
35
+ state: State;
36
+ }
37
+ namespace StateChangedEvent {
38
+ type Type = 'state.changed';
39
+ function filter(event: EventBus.Event): event is StateChangedEvent;
40
+ function create(event: Omit<EventBus.Args<StateChangedEvent>, 'type'>): StateChangedEvent;
41
+ }
42
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IPageController = void 0;
4
+ const funnel_core_1 = require("@nascentdigital/funnel-core");
5
+ // extension
6
+ var IPageController;
7
+ (function (IPageController) {
8
+ let Event;
9
+ (function (Event) {
10
+ // methods
11
+ function filter(event) {
12
+ return event.domain === 'PageController';
13
+ }
14
+ Event.filter = filter;
15
+ function create(event) {
16
+ return funnel_core_1.EventBus.createEvent(Object.assign({ domain: 'PageController' }, event));
17
+ }
18
+ Event.create = create;
19
+ })(Event = IPageController.Event || (IPageController.Event = {}));
20
+ let StateChangedEvent;
21
+ (function (StateChangedEvent) {
22
+ // methods
23
+ function filter(event) {
24
+ return event.domain === 'PageController' && event.type === 'state.changed';
25
+ }
26
+ StateChangedEvent.filter = filter;
27
+ function create(event) {
28
+ return funnel_core_1.EventBus.createEvent(Object.assign({ domain: 'PageController', type: 'state.changed' }, event));
29
+ }
30
+ StateChangedEvent.create = create;
31
+ })(StateChangedEvent = IPageController.StateChangedEvent || (IPageController.StateChangedEvent = {}));
32
+ })(IPageController || (exports.IPageController = IPageController = {}));
@@ -1,6 +1,7 @@
1
- import { EventBus, Language, Schema } from '@nascentdigital/funnel-core';
2
- import { AppState, EditorApiClient, Page, PageRepository, PageSummary } from '../../core';
3
- export declare class PageController {
1
+ import { Schema } from '@nascentdigital/funnel-core';
2
+ import { AppState, EditorApiClient, IPage, Page, PageRepository, PageSummary } from '../../core';
3
+ import { IPageController } from './IPageController';
4
+ export declare class PageController implements IPageController {
4
5
  private readonly _eventBus;
5
6
  readonly appState: AppState;
6
7
  readonly repository: PageRepository;
@@ -11,58 +12,32 @@ export declare class PageController {
11
12
  private _pageSubscription?;
12
13
  private _saveQueuedFor?;
13
14
  constructor({ appState, editorApi }: PageController.ConstructorArgs);
14
- get events$(): import("rxjs").Observable<Page.Event | PageController.Event>;
15
- get saved$(): import("rxjs").Observable<[PageController.StateChangedEvent, PageController.StateChangedEvent]>;
16
- get state(): PageController.State;
15
+ get events$(): import("rxjs").Observable<IPage.Event | IPageController.Event>;
16
+ get saved$(): import("rxjs").Observable<[IPageController.StateChangedEvent, IPageController.StateChangedEvent]>;
17
+ get state(): IPageController.State;
17
18
  private set state(value);
18
19
  get ready(): boolean;
19
- get target(): PageController.Target;
20
+ get target(): IPageController.Target;
20
21
  get region(): string;
21
22
  get language(): "cy" | "fr" | "fy" | "to" | "br" | "hr" | "li" | "th" | "tr" | "id" | "is" | "tw" | "no" | "aa" | "ab" | "ae" | "af" | "ak" | "am" | "an" | "ar" | "as" | "av" | "ay" | "az" | "ba" | "be" | "bg" | "bh" | "bi" | "bm" | "bn" | "bo" | "bs" | "ca" | "ce" | "ch" | "co" | "cr" | "cs" | "cu" | "cv" | "da" | "de" | "dv" | "dz" | "ee" | "el" | "en" | "eo" | "es" | "et" | "eu" | "fa" | "ff" | "fi" | "fj" | "fo" | "ga" | "gd" | "gl" | "gn" | "gu" | "gv" | "ha" | "he" | "hi" | "ho" | "ht" | "hu" | "hy" | "hz" | "ia" | "ie" | "ig" | "ii" | "ik" | "io" | "it" | "iu" | "ja" | "jv" | "ka" | "kg" | "ki" | "kj" | "kk" | "kl" | "km" | "kn" | "ko" | "kr" | "ks" | "ku" | "kv" | "kw" | "ky" | "la" | "lb" | "lg" | "ln" | "lo" | "lt" | "lu" | "lv" | "mg" | "mh" | "mi" | "mk" | "ml" | "mn" | "mr" | "ms" | "mt" | "my" | "na" | "nb" | "nd" | "ne" | "ng" | "nl" | "nn" | "nr" | "nv" | "ny" | "oc" | "oj" | "om" | "or" | "os" | "pa" | "pi" | "pl" | "ps" | "pt" | "qu" | "rm" | "rn" | "ro" | "ru" | "rw" | "sa" | "sc" | "sd" | "se" | "sg" | "si" | "sk" | "sl" | "sm" | "sn" | "so" | "sq" | "sr" | "ss" | "st" | "su" | "sv" | "sw" | "ta" | "te" | "tg" | "ti" | "tk" | "tl" | "tn" | "ts" | "tt" | "ty" | "ug" | "uk" | "ur" | "uz" | "ve" | "vi" | "vo" | "wa" | "wo" | "xh" | "yi" | "yo" | "za" | "zh" | "zu";
22
23
  get languages(): ("cy" | "fr" | "fy" | "to" | "br" | "hr" | "li" | "th" | "tr" | "id" | "is" | "tw" | "no" | "aa" | "ab" | "ae" | "af" | "ak" | "am" | "an" | "ar" | "as" | "av" | "ay" | "az" | "ba" | "be" | "bg" | "bh" | "bi" | "bm" | "bn" | "bo" | "bs" | "ca" | "ce" | "ch" | "co" | "cr" | "cs" | "cu" | "cv" | "da" | "de" | "dv" | "dz" | "ee" | "el" | "en" | "eo" | "es" | "et" | "eu" | "fa" | "ff" | "fi" | "fj" | "fo" | "ga" | "gd" | "gl" | "gn" | "gu" | "gv" | "ha" | "he" | "hi" | "ho" | "ht" | "hu" | "hy" | "hz" | "ia" | "ie" | "ig" | "ii" | "ik" | "io" | "it" | "iu" | "ja" | "jv" | "ka" | "kg" | "ki" | "kj" | "kk" | "kl" | "km" | "kn" | "ko" | "kr" | "ks" | "ku" | "kv" | "kw" | "ky" | "la" | "lb" | "lg" | "ln" | "lo" | "lt" | "lu" | "lv" | "mg" | "mh" | "mi" | "mk" | "ml" | "mn" | "mr" | "ms" | "mt" | "my" | "na" | "nb" | "nd" | "ne" | "ng" | "nl" | "nn" | "nr" | "nv" | "ny" | "oc" | "oj" | "om" | "or" | "os" | "pa" | "pi" | "pl" | "ps" | "pt" | "qu" | "rm" | "rn" | "ro" | "ru" | "rw" | "sa" | "sc" | "sd" | "se" | "sg" | "si" | "sk" | "sl" | "sm" | "sn" | "so" | "sq" | "sr" | "ss" | "st" | "su" | "sv" | "sw" | "ta" | "te" | "tg" | "ti" | "tk" | "tl" | "tn" | "ts" | "tt" | "ty" | "ug" | "uk" | "ur" | "uz" | "ve" | "vi" | "vo" | "wa" | "wo" | "xh" | "yi" | "yo" | "za" | "zh" | "zu")[];
23
24
  get templates(): Schema.Site.Pages;
24
25
  get currentTemplate(): Schema.Page<Schema.Page.Content, string>;
25
- get pageTarget(): PageController.Target | undefined;
26
+ get pageTarget(): IPageController.Target | undefined;
26
27
  get pageSummary(): PageSummary | undefined;
27
28
  private set pageSummary(value);
28
29
  get page(): Page | undefined;
29
30
  private set page(value);
30
- load(target: PageController.Target): Promise<void>;
31
+ load(target: IPageController.Target): Promise<void>;
31
32
  reload(): Promise<void>;
32
- create(target: PageController.Target): Promise<void>;
33
+ create(target: IPageController.Target): Promise<void>;
33
34
  save(): Promise<void>;
34
35
  unpublish(): Promise<void>;
35
36
  private raiseEvent;
36
37
  }
37
38
  export declare namespace PageController {
38
- type State = 'uninitialized' | 'initializing' | 'loading' | 'ready' | 'saving' | 'unpublishing' | 'error';
39
- type Target = {
40
- brand: string;
41
- templates: Schema.Site.Pages;
42
- template: Schema.Page;
43
- region: string;
44
- slug?: string;
45
- language: Language;
46
- };
47
39
  type ConstructorArgs = {
48
40
  appState: AppState;
49
41
  editorApi: EditorApiClient;
50
42
  };
51
- interface Event extends EventBus.Event<'PageController', Event.Type> {
52
- controller: PageController;
53
- }
54
- namespace Event {
55
- type Type = 'pageSummary.changed' | 'page.changed';
56
- function filter(event: EventBus.Event): event is Event;
57
- function create(event: EventBus.Args<Event>): Event;
58
- }
59
- interface StateChangedEvent extends EventBus.Event<'PageController', StateChangedEvent.Type> {
60
- controller: PageController;
61
- state: State;
62
- }
63
- namespace StateChangedEvent {
64
- type Type = 'state.changed';
65
- function filter(event: EventBus.Event): event is StateChangedEvent;
66
- function create(event: Omit<EventBus.Args<StateChangedEvent>, 'type'>): StateChangedEvent;
67
- }
68
43
  }
@@ -4,6 +4,7 @@ exports.PageController = void 0;
4
4
  const funnel_core_1 = require("@nascentdigital/funnel-core");
5
5
  const rxjs_1 = require("rxjs");
6
6
  const core_1 = require("../../core");
7
+ const IPageController_1 = require("./IPageController");
7
8
  // class
8
9
  class PageController {
9
10
  constructor({ appState, editorApi }) {
@@ -15,10 +16,10 @@ class PageController {
15
16
  }
16
17
  get events$() {
17
18
  return this._eventBus.events$
18
- .pipe((0, rxjs_1.filter)(e => PageController.Event.filter(e) || core_1.Page.Event.filter(e)));
19
+ .pipe((0, rxjs_1.filter)(e => IPageController_1.IPageController.Event.filter(e) || core_1.IPage.Event.filter(e)));
19
20
  }
20
21
  get saved$() {
21
- return this._eventBus.events$.pipe((0, rxjs_1.filter)(PageController.StateChangedEvent.filter), (0, rxjs_1.pairwise)(), (0, rxjs_1.filter)(([previous, current]) => previous.state === 'saving' && current.state === 'ready'));
22
+ return this._eventBus.events$.pipe((0, rxjs_1.filter)(IPageController_1.IPageController.StateChangedEvent.filter), (0, rxjs_1.pairwise)(), (0, rxjs_1.filter)(([previous, current]) => previous.state === 'saving' && current.state === 'ready'));
22
23
  }
23
24
  get state() {
24
25
  return this._state;
@@ -31,7 +32,7 @@ class PageController {
31
32
  // or update
32
33
  this._state = value;
33
34
  // raise event
34
- this._eventBus.publish(PageController.StateChangedEvent.create({
35
+ this._eventBus.publish(IPageController_1.IPageController.StateChangedEvent.create({
35
36
  state: value,
36
37
  controller: this
37
38
  }));
@@ -113,7 +114,7 @@ class PageController {
113
114
  this._pageSubscription = page.events$
114
115
  .pipe((0, rxjs_1.filter)(e => {
115
116
  // handle page events
116
- if (core_1.Page.Event.filter(e)) {
117
+ if (core_1.IPage.Event.filter(e)) {
117
118
  return e.type === 'modified';
118
119
  }
119
120
  // or item/object/list events
@@ -128,7 +129,7 @@ class PageController {
128
129
  return funnel_core_1.Field.Event.filter(e) && (e.type === 'changed' || e.type === 'reset');
129
130
  }
130
131
  }), (0, rxjs_1.debounce)(e => {
131
- if ((core_1.Page.Event.filter(e) && e.type === 'modified')
132
+ if ((core_1.IPage.Event.filter(e) && e.type === 'modified')
132
133
  || core_1.Item.Event.filter(e)
133
134
  || funnel_core_1.FieldList.Event.filter(e)
134
135
  || (funnel_core_1.Field.Event.filter(e) && e.field.isComposite)) {
@@ -326,34 +327,7 @@ class PageController {
326
327
  }
327
328
  }
328
329
  raiseEvent(type) {
329
- this._eventBus.publish(PageController.Event.create({ type, controller: this }));
330
+ this._eventBus.publish(IPageController_1.IPageController.Event.create({ type, controller: this }));
330
331
  }
331
332
  }
332
333
  exports.PageController = PageController;
333
- // extensions
334
- (function (PageController) {
335
- let Event;
336
- (function (Event) {
337
- // methods
338
- function filter(event) {
339
- return event.domain === 'PageController';
340
- }
341
- Event.filter = filter;
342
- function create(event) {
343
- return funnel_core_1.EventBus.createEvent(Object.assign({ domain: 'PageController' }, event));
344
- }
345
- Event.create = create;
346
- })(Event = PageController.Event || (PageController.Event = {}));
347
- let StateChangedEvent;
348
- (function (StateChangedEvent) {
349
- // methods
350
- function filter(event) {
351
- return event.domain === 'PageController' && event.type === 'state.changed';
352
- }
353
- StateChangedEvent.filter = filter;
354
- function create(event) {
355
- return funnel_core_1.EventBus.createEvent(Object.assign({ domain: 'PageController', type: 'state.changed' }, event));
356
- }
357
- StateChangedEvent.create = create;
358
- })(StateChangedEvent = PageController.StateChangedEvent || (PageController.StateChangedEvent = {}));
359
- })(PageController || (exports.PageController = PageController = {}));
@@ -1,2 +1,3 @@
1
1
  export * from './PageController';
2
+ export * from './IPageController';
2
3
  export * from './usePageController';
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./PageController"), exports);
18
+ __exportStar(require("./IPageController"), exports);
18
19
  __exportStar(require("./usePageController"), exports);
@@ -1,8 +1,8 @@
1
- import { PageController } from './PageController';
2
- export declare function usePageController(pageController?: PageController): PageController;
1
+ import { IPageController } from './IPageController';
2
+ export declare function usePageController(pageController?: IPageController): IPageController;
3
3
  export declare const PageControllerContext: import("react").Context<PageControllerContext.Type>;
4
4
  export declare namespace PageControllerContext {
5
5
  type Type = {
6
- controller: PageController;
6
+ controller: IPageController;
7
7
  };
8
8
  }
@@ -76,7 +76,7 @@ function PageEditor({ templateId, region, language, slug }) {
76
76
  };
77
77
  const onSelectItem = (item) => setItemId(item.identifier);
78
78
  // render
79
- return ((0, jsx_runtime_1.jsx)(hooks_1.PageControllerContext.Provider, { value: controllerContext, children: (0, jsx_runtime_1.jsx)(core_1.PageContext.Provider, { value: pageContext, children: (0, jsx_runtime_1.jsx)(core_1.AssetStoreContext.Provider, { value: page, children: (0, jsx_runtime_1.jsx)(core_1.CollectionStoreContext.Provider, { value: page, children: (0, jsx_runtime_1.jsx)(core_1.PageRefStoreContext.Provider, { value: pageRefStoreProxy, children: (0, jsx_runtime_1.jsx)(config_1.BlockConfigurationProvider, { item: selectedItem, children: (0, jsx_runtime_1.jsxs)("div", { className: "w-dvw h-dvh flex flex-col bg-background", children: [(0, jsx_runtime_1.jsx)(components_1.PageHeader, { target: target, selectedItem: selectedItem, onBack: onHeaderBack }), (0, jsx_runtime_1.jsx)("div", { className: "relative flex-1", children: (0, jsx_runtime_1.jsxs)("div", { className: "absolute inset-0 flex", children: [(0, jsx_runtime_1.jsx)("section", { className: "w-[220px] lg:w-[240px] xl:w-[280px] shrink-0 overflow-y-scroll scrollbar-thin", children: (0, jsx_runtime_1.jsx)(components_1.PageNav, { selectedItem: selectedItem, onSelectItem: onSelectItem }) }), (0, jsx_runtime_1.jsx)("section", { className: "flex-1 h-full max-h-full max-w-[1000px] mx-auto", children: (0, jsx_runtime_1.jsx)(react_1.AnimatePresence, { mode: "wait", initial: false, children: renderContent({ target, controller, page, selectedItem, onSelectItem }) }) }), (0, jsx_runtime_1.jsxs)(react_1.motion.section, { className: (0, classnames_1.default)('hidden lg:flex lg:w-[320px] shrink-0 overflow-y-scroll scrollbar-thin', 'flex-col gap-l8 pt-l9 px-l8 pb-l8'), layout: true, children: [(0, jsx_runtime_1.jsx)("h2", { className: "label-sm text-content-tertiary uppercase", children: "Inspector" }), (0, jsx_runtime_1.jsxs)(react_1.AnimatePresence, { mode: "popLayout", children: [page && selectedItem && (selectedItem instanceof core_1.Block || selectedItem instanceof core_1.SectionBlock) &&
79
+ return ((0, jsx_runtime_1.jsx)(hooks_1.PageControllerContext.Provider, { value: controllerContext, children: (0, jsx_runtime_1.jsx)(core_1.PageContext.Provider, { value: pageContext, children: (0, jsx_runtime_1.jsx)(core_1.AssetStoreContext.Provider, { value: page, children: (0, jsx_runtime_1.jsx)(core_1.CollectionStoreContext.Provider, { value: page, children: (0, jsx_runtime_1.jsx)(core_1.PageRefStoreContext.Provider, { value: pageRefStoreProxy, children: (0, jsx_runtime_1.jsx)(config_1.BlockConfigurationProvider, { item: selectedItem, children: (0, jsx_runtime_1.jsxs)("div", { className: "w-dvw h-dvh flex flex-col bg-background", children: [(0, jsx_runtime_1.jsx)(components_1.PageHeader, { target: target, selectedItem: selectedItem, onBack: onHeaderBack }), (0, jsx_runtime_1.jsx)("div", { className: "relative flex-1", children: (0, jsx_runtime_1.jsxs)("div", { className: "absolute inset-0 flex z-default", children: [(0, jsx_runtime_1.jsx)("section", { className: "w-[220px] lg:w-[240px] xl:w-[280px] shrink-0 overflow-y-scroll scrollbar-thin", tabIndex: -1, children: (0, jsx_runtime_1.jsx)(components_1.PageNav, { selectedItem: selectedItem, onSelectItem: onSelectItem }) }), (0, jsx_runtime_1.jsx)("section", { className: "flex-1 h-full max-h-full max-w-[1000px] mx-auto", tabIndex: -1, children: (0, jsx_runtime_1.jsx)(react_1.AnimatePresence, { mode: "wait", initial: false, children: renderContent({ target, controller, page, selectedItem, onSelectItem }) }) }), (0, jsx_runtime_1.jsxs)(react_1.motion.section, { className: (0, classnames_1.default)('hidden lg:flex lg:w-[320px] shrink-0 overflow-y-scroll scrollbar-thin', 'flex-col gap-l8 pt-l9 px-l8 pb-l8'), layout: true, tabIndex: -1, children: [(0, jsx_runtime_1.jsx)("h2", { className: "label-sm text-content-tertiary uppercase", children: "Inspector" }), (0, jsx_runtime_1.jsxs)(react_1.AnimatePresence, { mode: "popLayout", children: [page && selectedItem && (selectedItem instanceof core_1.Block || selectedItem instanceof core_1.SectionBlock) &&
80
80
  (0, jsx_runtime_1.jsx)(components_1.BlockConfigPanel, {}, "block.config"), page && selectedItem &&
81
81
  (0, jsx_runtime_1.jsx)(components_1.PageStatus, { page: page, selectedItem: selectedItem, onSelectItem: onSelectItem }, "status")] })] })] }) })] }) }) }) }) }) }) }));
82
82
  }