@webiny/website-builder-react 6.0.0-alpha.0

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 (117) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/components/ConnectToEditor.d.ts +8 -0
  4. package/components/ConnectToEditor.js +25 -0
  5. package/components/ConnectToEditor.js.map +1 -0
  6. package/components/DocumentFragment.d.ts +6 -0
  7. package/components/DocumentFragment.js +10 -0
  8. package/components/DocumentFragment.js.map +1 -0
  9. package/components/DocumentRenderer.d.ts +9 -0
  10. package/components/DocumentRenderer.js +47 -0
  11. package/components/DocumentRenderer.js.map +1 -0
  12. package/components/DocumentStoreProvider.d.ts +8 -0
  13. package/components/DocumentStoreProvider.js +27 -0
  14. package/components/DocumentStoreProvider.js.map +1 -0
  15. package/components/EditingElementRenderer/EditingElementRenderer.d.ts +9 -0
  16. package/components/EditingElementRenderer/EditingElementRenderer.js +47 -0
  17. package/components/EditingElementRenderer/EditingElementRenderer.js.map +1 -0
  18. package/components/EditingElementRenderer/EditingElementRenderer.presenter.d.ts +14 -0
  19. package/components/EditingElementRenderer/EditingElementRenderer.presenter.js +43 -0
  20. package/components/EditingElementRenderer/EditingElementRenderer.presenter.js.map +1 -0
  21. package/components/EditingElementRenderer/index.d.ts +1 -0
  22. package/components/EditingElementRenderer/index.js +3 -0
  23. package/components/EditingElementRenderer/index.js.map +1 -0
  24. package/components/ElementIndexProvider.d.ts +8 -0
  25. package/components/ElementIndexProvider.js +18 -0
  26. package/components/ElementIndexProvider.js.map +1 -0
  27. package/components/ElementRenderer.d.ts +8 -0
  28. package/components/ElementRenderer.js +27 -0
  29. package/components/ElementRenderer.js.map +1 -0
  30. package/components/ElementSlot.d.ts +7 -0
  31. package/components/ElementSlot.js +16 -0
  32. package/components/ElementSlot.js.map +1 -0
  33. package/components/ElementSlotDepthProvider.d.ts +8 -0
  34. package/components/ElementSlotDepthProvider.js +18 -0
  35. package/components/ElementSlotDepthProvider.js.map +1 -0
  36. package/components/FragmentsProvider.d.ts +9 -0
  37. package/components/FragmentsProvider.js +30 -0
  38. package/components/FragmentsProvider.js.map +1 -0
  39. package/components/LiveElementRenderer.d.ts +10 -0
  40. package/components/LiveElementRenderer.js +78 -0
  41. package/components/LiveElementRenderer.js.map +1 -0
  42. package/components/LiveElementSlot.d.ts +3 -0
  43. package/components/LiveElementSlot.js +21 -0
  44. package/components/LiveElementSlot.js.map +1 -0
  45. package/components/PreviewElementSlot.d.ts +8 -0
  46. package/components/PreviewElementSlot.js +30 -0
  47. package/components/PreviewElementSlot.js.map +1 -0
  48. package/components/index.d.ts +4 -0
  49. package/components/index.js +6 -0
  50. package/components/index.js.map +1 -0
  51. package/components/useBindingsForElement.d.ts +746 -0
  52. package/components/useBindingsForElement.js +19 -0
  53. package/components/useBindingsForElement.js.map +1 -0
  54. package/components/useDocumentState.d.ts +1 -0
  55. package/components/useDocumentState.js +8 -0
  56. package/components/useDocumentState.js.map +1 -0
  57. package/components/useSelectFromState.d.ts +9 -0
  58. package/components/useSelectFromState.js +39 -0
  59. package/components/useSelectFromState.js.map +1 -0
  60. package/components/useViewportInfo.d.ts +1 -0
  61. package/components/useViewportInfo.js +11 -0
  62. package/components/useViewportInfo.js.map +1 -0
  63. package/createComponent.d.ts +2 -0
  64. package/createComponent.js +16 -0
  65. package/createComponent.js.map +1 -0
  66. package/editorComponents/Box.d.ts +3 -0
  67. package/editorComponents/Box.js +8 -0
  68. package/editorComponents/Box.js.map +1 -0
  69. package/editorComponents/Box.manifest.d.ts +1 -0
  70. package/editorComponents/Box.manifest.js +21 -0
  71. package/editorComponents/Box.manifest.js.map +1 -0
  72. package/editorComponents/Fragment.d.ts +7 -0
  73. package/editorComponents/Fragment.js +33 -0
  74. package/editorComponents/Fragment.js.map +1 -0
  75. package/editorComponents/Fragment.manifest.d.ts +1 -0
  76. package/editorComponents/Fragment.manifest.js +19 -0
  77. package/editorComponents/Fragment.manifest.js.map +1 -0
  78. package/editorComponents/Grid.d.ts +18 -0
  79. package/editorComponents/Grid.js +65 -0
  80. package/editorComponents/Grid.js.map +1 -0
  81. package/editorComponents/Grid.manifest.d.ts +5 -0
  82. package/editorComponents/Grid.manifest.js +174 -0
  83. package/editorComponents/Grid.manifest.js.map +1 -0
  84. package/editorComponents/GridColumn.d.ts +5 -0
  85. package/editorComponents/GridColumn.js +8 -0
  86. package/editorComponents/GridColumn.js.map +1 -0
  87. package/editorComponents/GridColumn.manifest.d.ts +1 -0
  88. package/editorComponents/GridColumn.manifest.js +25 -0
  89. package/editorComponents/GridColumn.manifest.js.map +1 -0
  90. package/editorComponents/Image.d.ts +15 -0
  91. package/editorComponents/Image.js +126 -0
  92. package/editorComponents/Image.js.map +1 -0
  93. package/editorComponents/Image.manifest.d.ts +1 -0
  94. package/editorComponents/Image.manifest.js +40 -0
  95. package/editorComponents/Image.manifest.js.map +1 -0
  96. package/editorComponents/Lexical.d.ts +13 -0
  97. package/editorComponents/Lexical.js +30 -0
  98. package/editorComponents/Lexical.js.map +1 -0
  99. package/editorComponents/Lexical.manifest.d.ts +1 -0
  100. package/editorComponents/Lexical.manifest.js +22 -0
  101. package/editorComponents/Lexical.manifest.js.map +1 -0
  102. package/editorComponents/Root.d.ts +3 -0
  103. package/editorComponents/Root.js +8 -0
  104. package/editorComponents/Root.js.map +1 -0
  105. package/editorComponents/Root.manifest.d.ts +1 -0
  106. package/editorComponents/Root.manifest.js +12 -0
  107. package/editorComponents/Root.manifest.js.map +1 -0
  108. package/editorComponents/index.d.ts +1 -0
  109. package/editorComponents/index.js +10 -0
  110. package/editorComponents/index.js.map +1 -0
  111. package/index.d.ts +4 -0
  112. package/index.js +5 -0
  113. package/index.js.map +1 -0
  114. package/package.json +42 -0
  115. package/types.d.ts +11 -0
  116. package/types.js +3 -0
  117. package/types.js.map +1 -0
@@ -0,0 +1,19 @@
1
+ import { toJS } from "mobx";
2
+ import { BindingsProcessor } from "@webiny/app-website-builder/sdk";
3
+ import { useViewport } from "./useViewportInfo";
4
+ import { useDocumentStore } from "./DocumentStoreProvider";
5
+ import { useSelectFromState } from "./useSelectFromState";
6
+ export const useBindingsForElement = (elementId, breakpoint) => {
7
+ const documentStore = useDocumentStore();
8
+ const viewport = useViewport();
9
+ return useSelectFromState(() => documentStore.getDocument(), document => {
10
+ const bindings = toJS(document.bindings[elementId]) ?? {};
11
+ const breakpoints = viewport.breakpoints.map(bp => bp.name);
12
+
13
+ // Merge element bindings.
14
+ const bindingsProcessor = new BindingsProcessor(breakpoints);
15
+ return bindingsProcessor.getBindings(bindings, breakpoint);
16
+ }, [elementId, breakpoint]);
17
+ };
18
+
19
+ //# sourceMappingURL=useBindingsForElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["toJS","BindingsProcessor","useViewport","useDocumentStore","useSelectFromState","useBindingsForElement","elementId","breakpoint","documentStore","viewport","getDocument","document","bindings","breakpoints","map","bp","name","bindingsProcessor","getBindings"],"sources":["useBindingsForElement.ts"],"sourcesContent":["import { toJS } from \"mobx\";\nimport { BindingsProcessor } from \"@webiny/app-website-builder/sdk\";\nimport { useViewport } from \"./useViewportInfo\";\nimport { useDocumentStore } from \"./DocumentStoreProvider\";\nimport { useSelectFromState } from \"./useSelectFromState\";\n\nexport const useBindingsForElement = (elementId: string, breakpoint: string) => {\n const documentStore = useDocumentStore();\n const viewport = useViewport();\n\n return useSelectFromState(\n () => documentStore.getDocument()!,\n document => {\n const bindings = toJS(document.bindings[elementId]) ?? {};\n const breakpoints = viewport.breakpoints.map(bp => bp.name);\n\n // Merge element bindings.\n const bindingsProcessor = new BindingsProcessor(breakpoints);\n\n return bindingsProcessor.getBindings(bindings, breakpoint);\n },\n [elementId, breakpoint]\n );\n};\n"],"mappings":"AAAA,SAASA,IAAI,QAAQ,MAAM;AAC3B,SAASC,iBAAiB,QAAQ,iCAAiC;AACnE,SAASC,WAAW;AACpB,SAASC,gBAAgB;AACzB,SAASC,kBAAkB;AAE3B,OAAO,MAAMC,qBAAqB,GAAGA,CAACC,SAAiB,EAAEC,UAAkB,KAAK;EAC5E,MAAMC,aAAa,GAAGL,gBAAgB,CAAC,CAAC;EACxC,MAAMM,QAAQ,GAAGP,WAAW,CAAC,CAAC;EAE9B,OAAOE,kBAAkB,CACrB,MAAMI,aAAa,CAACE,WAAW,CAAC,CAAE,EAClCC,QAAQ,IAAI;IACR,MAAMC,QAAQ,GAAGZ,IAAI,CAACW,QAAQ,CAACC,QAAQ,CAACN,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC;IACzD,MAAMO,WAAW,GAAGJ,QAAQ,CAACI,WAAW,CAACC,GAAG,CAACC,EAAE,IAAIA,EAAE,CAACC,IAAI,CAAC;;IAE3D;IACA,MAAMC,iBAAiB,GAAG,IAAIhB,iBAAiB,CAACY,WAAW,CAAC;IAE5D,OAAOI,iBAAiB,CAACC,WAAW,CAACN,QAAQ,EAAEL,UAAU,CAAC;EAC9D,CAAC,EACD,CAACD,SAAS,EAAEC,UAAU,CAC1B,CAAC;AACL,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare const useDocumentState: () => import("@webiny/app-website-builder/sdk").DocumentState;
@@ -0,0 +1,8 @@
1
+ import { useDocumentStore } from "./DocumentStoreProvider";
2
+ import { useSelectFromState } from "./useSelectFromState";
3
+ export const useDocumentState = () => {
4
+ const documentStore = useDocumentStore();
5
+ return useSelectFromState(() => documentStore.getDocument(), document => document.state ?? {});
6
+ };
7
+
8
+ //# sourceMappingURL=useDocumentState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useDocumentStore","useSelectFromState","useDocumentState","documentStore","getDocument","document","state"],"sources":["useDocumentState.ts"],"sourcesContent":["import { useDocumentStore } from \"./DocumentStoreProvider\";\nimport { useSelectFromState } from \"./useSelectFromState\";\n\nexport const useDocumentState = () => {\n const documentStore = useDocumentStore();\n return useSelectFromState(\n () => documentStore.getDocument()!,\n document => document.state ?? {}\n );\n};\n"],"mappings":"AAAA,SAASA,gBAAgB;AACzB,SAASC,kBAAkB;AAE3B,OAAO,MAAMC,gBAAgB,GAAGA,CAAA,KAAM;EAClC,MAAMC,aAAa,GAAGH,gBAAgB,CAAC,CAAC;EACxC,OAAOC,kBAAkB,CACrB,MAAME,aAAa,CAACC,WAAW,CAAC,CAAE,EAClCC,QAAQ,IAAIA,QAAQ,CAACC,KAAK,IAAI,CAAC,CACnC,CAAC;AACL,CAAC","ignoreList":[]}
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ type Equals<T> = (a: T, b: T) => boolean;
3
+ /**
4
+ * Subscribe to part of the document state.
5
+ * @param selector Pick the slice of state you care about.
6
+ * @param equals (optional) comparator, defaults to Object.is
7
+ */
8
+ export declare function useSelectFromState<TState, T>(getState: () => TState, selector: (doc: TState) => T, deps?: React.DependencyList, equals?: Equals<T>): T;
9
+ export {};
@@ -0,0 +1,39 @@
1
+ import deepEqual from "deep-equal";
2
+ import { useState, useEffect, useMemo } from "react";
3
+ import { reaction } from "mobx";
4
+ /**
5
+ * Subscribe to part of the document state.
6
+ * @param selector Pick the slice of state you care about.
7
+ * @param equals (optional) comparator, defaults to Object.is
8
+ */
9
+ export function useSelectFromState(getState, selector, deps = [], equals = deepEqual) {
10
+ // Pull the initial slice synchronously
11
+ const initialValue = useMemo(() => selector(getState()), deps);
12
+ const [value, setValue] = useState(initialValue);
13
+ useEffect(() => {
14
+ setValue(selector(getState())); // reset state on dep change
15
+ }, deps);
16
+ useEffect(() => {
17
+ // reaction tracks selector(doc) and only fires when newVal !== oldVal
18
+ const disposer = reaction(() => {
19
+ const state = getState();
20
+ return selector(state);
21
+ }, (newValue, oldValue) => {
22
+ if (!equals(oldValue, newValue)) {
23
+ setValue(newValue);
24
+ }
25
+ }, {
26
+ // use your comparator to decide if newValue “really” changed
27
+ equals,
28
+ // we already set initial via useState
29
+ fireImmediately: false
30
+ });
31
+ return () => {
32
+ // clean up when the component unmounts
33
+ disposer();
34
+ };
35
+ }, [getState, selector, equals, ...deps]);
36
+ return value;
37
+ }
38
+
39
+ //# sourceMappingURL=useSelectFromState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["deepEqual","useState","useEffect","useMemo","reaction","useSelectFromState","getState","selector","deps","equals","initialValue","value","setValue","disposer","state","newValue","oldValue","fireImmediately"],"sources":["useSelectFromState.ts"],"sourcesContent":["import deepEqual from \"deep-equal\";\nimport { useState, useEffect, useMemo } from \"react\";\nimport { reaction, IReactionDisposer } from \"mobx\";\n\ntype Equals<T> = (a: T, b: T) => boolean;\n\n/**\n * Subscribe to part of the document state.\n * @param selector Pick the slice of state you care about.\n * @param equals (optional) comparator, defaults to Object.is\n */\nexport function useSelectFromState<TState, T>(\n getState: () => TState,\n selector: (doc: TState) => T,\n deps: React.DependencyList = [],\n equals: Equals<T> = deepEqual\n): T {\n // Pull the initial slice synchronously\n const initialValue = useMemo(() => selector(getState()), deps);\n const [value, setValue] = useState<T>(initialValue);\n\n useEffect(() => {\n setValue(selector(getState())); // reset state on dep change\n }, deps);\n\n useEffect(() => {\n // reaction tracks selector(doc) and only fires when newVal !== oldVal\n const disposer: IReactionDisposer = reaction(\n () => {\n const state = getState();\n\n return selector(state);\n },\n (newValue, oldValue) => {\n if (!equals(oldValue, newValue)) {\n setValue(newValue);\n }\n },\n {\n // use your comparator to decide if newValue “really” changed\n equals,\n // we already set initial via useState\n fireImmediately: false\n }\n );\n\n return () => {\n // clean up when the component unmounts\n disposer();\n };\n }, [getState, selector, equals, ...deps]);\n\n return value;\n}\n"],"mappings":"AAAA,OAAOA,SAAS,MAAM,YAAY;AAClC,SAASC,QAAQ,EAAEC,SAAS,EAAEC,OAAO,QAAQ,OAAO;AACpD,SAASC,QAAQ,QAA2B,MAAM;AAIlD;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAC9BC,QAAsB,EACtBC,QAA4B,EAC5BC,IAA0B,GAAG,EAAE,EAC/BC,MAAiB,GAAGT,SAAS,EAC5B;EACD;EACA,MAAMU,YAAY,GAAGP,OAAO,CAAC,MAAMI,QAAQ,CAACD,QAAQ,CAAC,CAAC,CAAC,EAAEE,IAAI,CAAC;EAC9D,MAAM,CAACG,KAAK,EAAEC,QAAQ,CAAC,GAAGX,QAAQ,CAAIS,YAAY,CAAC;EAEnDR,SAAS,CAAC,MAAM;IACZU,QAAQ,CAACL,QAAQ,CAACD,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACpC,CAAC,EAAEE,IAAI,CAAC;EAERN,SAAS,CAAC,MAAM;IACZ;IACA,MAAMW,QAA2B,GAAGT,QAAQ,CACxC,MAAM;MACF,MAAMU,KAAK,GAAGR,QAAQ,CAAC,CAAC;MAExB,OAAOC,QAAQ,CAACO,KAAK,CAAC;IAC1B,CAAC,EACD,CAACC,QAAQ,EAAEC,QAAQ,KAAK;MACpB,IAAI,CAACP,MAAM,CAACO,QAAQ,EAAED,QAAQ,CAAC,EAAE;QAC7BH,QAAQ,CAACG,QAAQ,CAAC;MACtB;IACJ,CAAC,EACD;MACI;MACAN,MAAM;MACN;MACAQ,eAAe,EAAE;IACrB,CACJ,CAAC;IAED,OAAO,MAAM;MACT;MACAJ,QAAQ,CAAC,CAAC;IACd,CAAC;EACL,CAAC,EAAE,CAACP,QAAQ,EAAEC,QAAQ,EAAEE,MAAM,EAAE,GAAGD,IAAI,CAAC,CAAC;EAEzC,OAAOG,KAAK;AAChB","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare const useViewport: () => import("@webiny/app-website-builder/sdk").ViewportInfo;
@@ -0,0 +1,11 @@
1
+ import { useEffect, useState } from "react";
2
+ import { viewportManager } from "@webiny/app-website-builder/sdk";
3
+ export const useViewport = () => {
4
+ const [viewport, setViewport] = useState(viewportManager.getViewport());
5
+ useEffect(() => {
6
+ return viewportManager.onViewportChangeEnd(setViewport);
7
+ }, []);
8
+ return viewport;
9
+ };
10
+
11
+ //# sourceMappingURL=useViewportInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useState","viewportManager","useViewport","viewport","setViewport","getViewport","onViewportChangeEnd"],"sources":["useViewportInfo.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport { viewportManager } from \"@webiny/app-website-builder/sdk\";\n\nexport const useViewport = () => {\n const [viewport, setViewport] = useState(viewportManager.getViewport());\n\n useEffect(() => {\n return viewportManager.onViewportChangeEnd(setViewport);\n }, []);\n\n return viewport;\n};\n"],"mappings":"AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SAASC,eAAe,QAAQ,iCAAiC;AAEjE,OAAO,MAAMC,WAAW,GAAGA,CAAA,KAAM;EAC7B,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAGJ,QAAQ,CAACC,eAAe,CAACI,WAAW,CAAC,CAAC,CAAC;EAEvEN,SAAS,CAAC,MAAM;IACZ,OAAOE,eAAe,CAACK,mBAAmB,CAACF,WAAW,CAAC;EAC3D,CAAC,EAAE,EAAE,CAAC;EAEN,OAAOD,QAAQ;AACnB,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import type { Component, ComponentManifest } from "@webiny/app-website-builder/sdk";
2
+ export declare const createComponent: (component: React.ComponentType<any>, manifest: ComponentManifest) => Component;
@@ -0,0 +1,16 @@
1
+ import { createSlotInput } from "@webiny/app-website-builder/sdk";
2
+ export const createComponent = (component, manifest) => {
3
+ const acceptsChildren = manifest.acceptsChildren;
4
+ if (acceptsChildren) {
5
+ manifest.inputs = [...(manifest.inputs ?? []), createSlotInput({
6
+ name: "children",
7
+ defaultValue: []
8
+ })];
9
+ }
10
+ return {
11
+ component,
12
+ manifest
13
+ };
14
+ };
15
+
16
+ //# sourceMappingURL=createComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createSlotInput","createComponent","component","manifest","acceptsChildren","inputs","name","defaultValue"],"sources":["createComponent.ts"],"sourcesContent":["import type { Component, ComponentManifest } from \"@webiny/app-website-builder/sdk\";\nimport { createSlotInput } from \"@webiny/app-website-builder/sdk\";\n\nexport const createComponent = (\n component: React.ComponentType<any>,\n manifest: ComponentManifest\n): Component => {\n const acceptsChildren = manifest.acceptsChildren;\n if (acceptsChildren) {\n manifest.inputs = [\n ...(manifest.inputs ?? []),\n createSlotInput({\n name: \"children\",\n defaultValue: []\n })\n ];\n }\n\n return {\n component,\n manifest\n };\n};\n"],"mappings":"AACA,SAASA,eAAe,QAAQ,iCAAiC;AAEjE,OAAO,MAAMC,eAAe,GAAGA,CAC3BC,SAAmC,EACnCC,QAA2B,KACf;EACZ,MAAMC,eAAe,GAAGD,QAAQ,CAACC,eAAe;EAChD,IAAIA,eAAe,EAAE;IACjBD,QAAQ,CAACE,MAAM,GAAG,CACd,IAAIF,QAAQ,CAACE,MAAM,IAAI,EAAE,CAAC,EAC1BL,eAAe,CAAC;MACZM,IAAI,EAAE,UAAU;MAChBC,YAAY,EAAE;IAClB,CAAC,CAAC,CACL;EACL;EAEA,OAAO;IACHL,SAAS;IACTC;EACJ,CAAC;AACL,CAAC","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ import type { ComponentPropsWithChildren } from "../types";
3
+ export declare const BoxComponent: ({ inputs }: ComponentPropsWithChildren) => React.JSX.Element;
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ export const BoxComponent = ({
3
+ inputs
4
+ }) => {
5
+ return /*#__PURE__*/React.createElement(React.Fragment, null, inputs.children);
6
+ };
7
+
8
+ //# sourceMappingURL=Box.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","BoxComponent","inputs","createElement","Fragment","children"],"sources":["Box.tsx"],"sourcesContent":["import React from \"react\";\nimport type { ComponentPropsWithChildren } from \"~/types\";\n\nexport const BoxComponent = ({ inputs }: ComponentPropsWithChildren) => {\n return <>{inputs.children}</>;\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAGzB,OAAO,MAAMC,YAAY,GAAGA,CAAC;EAAEC;AAAmC,CAAC,KAAK;EACpE,oBAAOF,KAAA,CAAAG,aAAA,CAAAH,KAAA,CAAAI,QAAA,QAAGF,MAAM,CAACG,QAAW,CAAC;AACjC,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare const Box: import("@webiny/app-website-builder/sdk").Component;
@@ -0,0 +1,21 @@
1
+ "use client";
2
+
3
+ import { createComponent } from "../createComponent";
4
+ import { BoxComponent } from "./Box";
5
+ export const Box = createComponent(BoxComponent, {
6
+ name: "Webiny/Box",
7
+ label: "Box",
8
+ group: "basic",
9
+ image: `<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"><path d="M120-120v-720h720v720H120Zm80-80h560v-560H200v560Zm0 0v-560 560Z"/></svg>`,
10
+ acceptsChildren: true,
11
+ defaults: {
12
+ styles: {
13
+ paddingTop: "5px",
14
+ paddingRight: "5px",
15
+ paddingBottom: "5px",
16
+ paddingLeft: "5px"
17
+ }
18
+ }
19
+ });
20
+
21
+ //# sourceMappingURL=Box.manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createComponent","BoxComponent","Box","name","label","group","image","acceptsChildren","defaults","styles","paddingTop","paddingRight","paddingBottom","paddingLeft"],"sources":["Box.manifest.ts"],"sourcesContent":["\"use client\";\nimport { createComponent } from \"~/createComponent\";\nimport { BoxComponent } from \"./Box\";\n\nexport const Box = createComponent(BoxComponent, {\n name: \"Webiny/Box\",\n label: \"Box\",\n group: \"basic\",\n image: `<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"M120-120v-720h720v720H120Zm80-80h560v-560H200v560Zm0 0v-560 560Z\"/></svg>`,\n acceptsChildren: true,\n defaults: {\n styles: {\n paddingTop: \"5px\",\n paddingRight: \"5px\",\n paddingBottom: \"5px\",\n paddingLeft: \"5px\"\n }\n }\n});\n"],"mappings":"AAAA,YAAY;;AACZ,SAASA,eAAe;AACxB,SAASC,YAAY;AAErB,OAAO,MAAMC,GAAG,GAAGF,eAAe,CAACC,YAAY,EAAE;EAC7CE,IAAI,EAAE,YAAY;EAClBC,KAAK,EAAE,KAAK;EACZC,KAAK,EAAE,OAAO;EACdC,KAAK,EAAE,+LAA+L;EACtMC,eAAe,EAAE,IAAI;EACrBC,QAAQ,EAAE;IACNC,MAAM,EAAE;MACJC,UAAU,EAAE,KAAK;MACjBC,YAAY,EAAE,KAAK;MACnBC,aAAa,EAAE,KAAK;MACpBC,WAAW,EAAE;IACjB;EACJ;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ import type { ComponentProps } from "../types";
3
+ type FragmentComponentProps = ComponentProps<{
4
+ name: string;
5
+ }>;
6
+ export declare const FragmentComponent: ({ inputs }: FragmentComponentProps) => React.JSX.Element;
7
+ export {};
@@ -0,0 +1,33 @@
1
+ import React from "react";
2
+ import { useDocumentFragments } from "../components/FragmentsProvider";
3
+ import { contentSdk } from "@webiny/app-website-builder/sdk";
4
+ export const FragmentComponent = ({
5
+ inputs
6
+ }) => {
7
+ const isEditing = contentSdk.isEditing();
8
+ const fragments = useDocumentFragments();
9
+ const element = fragments[inputs.name] ?? null;
10
+ if (!element && isEditing) {
11
+ return /*#__PURE__*/React.createElement(FragmentPlaceholder, {
12
+ name: inputs.name
13
+ });
14
+ }
15
+ return /*#__PURE__*/React.createElement(React.Fragment, null, element);
16
+ };
17
+ const FragmentPlaceholder = ({
18
+ name
19
+ }) => {
20
+ const fragmentName = name ? /*#__PURE__*/React.createElement(React.Fragment, null, "\xA0", /*#__PURE__*/React.createElement("strong", null, name), "\xA0") : /*#__PURE__*/React.createElement(React.Fragment, null, "\xA0");
21
+ return /*#__PURE__*/React.createElement("div", {
22
+ style: {
23
+ display: "flex",
24
+ height: "100px",
25
+ backgroundColor: "#f4f4f4",
26
+ justifyContent: "center",
27
+ alignItems: "center",
28
+ fill: "#ffffff"
29
+ }
30
+ }, "This is a placeholder for", fragmentName, "content coming from your frontend app.");
31
+ };
32
+
33
+ //# sourceMappingURL=Fragment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useDocumentFragments","contentSdk","FragmentComponent","inputs","isEditing","fragments","element","name","createElement","FragmentPlaceholder","Fragment","fragmentName","style","display","height","backgroundColor","justifyContent","alignItems","fill"],"sources":["Fragment.tsx"],"sourcesContent":["import React from \"react\";\nimport { useDocumentFragments } from \"~/components/FragmentsProvider\";\nimport type { ComponentProps } from \"~/types\";\nimport { contentSdk } from \"@webiny/app-website-builder/sdk\";\n\ntype FragmentComponentProps = ComponentProps<{\n name: string;\n}>;\n\nexport const FragmentComponent = ({ inputs }: FragmentComponentProps) => {\n const isEditing = contentSdk.isEditing();\n const fragments = useDocumentFragments();\n const element = fragments[inputs.name] ?? null;\n if (!element && isEditing) {\n return <FragmentPlaceholder name={inputs.name} />;\n }\n return <>{element}</>;\n};\n\nconst FragmentPlaceholder = ({ name }: { name: string }) => {\n const fragmentName = name ? (\n <>\n &nbsp;<strong>{name}</strong>&nbsp;\n </>\n ) : (\n <>&nbsp;</>\n );\n return (\n <div\n style={{\n display: \"flex\",\n height: \"100px\",\n backgroundColor: \"#f4f4f4\",\n justifyContent: \"center\",\n alignItems: \"center\",\n fill: \"#ffffff\"\n }}\n >\n This is a placeholder for{fragmentName}content coming from your frontend app.\n </div>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,oBAAoB;AAE7B,SAASC,UAAU,QAAQ,iCAAiC;AAM5D,OAAO,MAAMC,iBAAiB,GAAGA,CAAC;EAAEC;AAA+B,CAAC,KAAK;EACrE,MAAMC,SAAS,GAAGH,UAAU,CAACG,SAAS,CAAC,CAAC;EACxC,MAAMC,SAAS,GAAGL,oBAAoB,CAAC,CAAC;EACxC,MAAMM,OAAO,GAAGD,SAAS,CAACF,MAAM,CAACI,IAAI,CAAC,IAAI,IAAI;EAC9C,IAAI,CAACD,OAAO,IAAIF,SAAS,EAAE;IACvB,oBAAOL,KAAA,CAAAS,aAAA,CAACC,mBAAmB;MAACF,IAAI,EAAEJ,MAAM,CAACI;IAAK,CAAE,CAAC;EACrD;EACA,oBAAOR,KAAA,CAAAS,aAAA,CAAAT,KAAA,CAAAW,QAAA,QAAGJ,OAAU,CAAC;AACzB,CAAC;AAED,MAAMG,mBAAmB,GAAGA,CAAC;EAAEF;AAAuB,CAAC,KAAK;EACxD,MAAMI,YAAY,GAAGJ,IAAI,gBACrBR,KAAA,CAAAS,aAAA,CAAAT,KAAA,CAAAW,QAAA,QAAE,MACQ,eAAAX,KAAA,CAAAS,aAAA,iBAASD,IAAa,CAAC,QAC/B,CAAC,gBAEHR,KAAA,CAAAS,aAAA,CAAAT,KAAA,CAAAW,QAAA,QAAE,MAAQ,CACb;EACD,oBACIX,KAAA,CAAAS,aAAA;IACII,KAAK,EAAE;MACHC,OAAO,EAAE,MAAM;MACfC,MAAM,EAAE,OAAO;MACfC,eAAe,EAAE,SAAS;MAC1BC,cAAc,EAAE,QAAQ;MACxBC,UAAU,EAAE,QAAQ;MACpBC,IAAI,EAAE;IACV;EAAE,GACL,2BAC4B,EAACP,YAAY,EAAC,wCACtC,CAAC;AAEd,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare const Fragment: import("@webiny/app-website-builder/sdk").Component;
@@ -0,0 +1,19 @@
1
+ "use client";
2
+
3
+ import { createComponent } from "../createComponent";
4
+ import { FragmentComponent } from "./Fragment";
5
+ import { createTextInput } from "@webiny/app-website-builder/sdk";
6
+ export const Fragment = createComponent(FragmentComponent, {
7
+ name: "Webiny/Fragment",
8
+ label: "Fragment",
9
+ group: "basic",
10
+ image: `<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"><path d="M120-120v-720h720v720H120Zm80-80h560v-560H200v560Zm0 0v-560 560Z"/></svg>`,
11
+ inputs: [createTextInput({
12
+ name: "name",
13
+ label: "Fragment",
14
+ description: "Select fragment to display.",
15
+ renderer: "Webiny/FragmentSelector"
16
+ })]
17
+ });
18
+
19
+ //# sourceMappingURL=Fragment.manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createComponent","FragmentComponent","createTextInput","Fragment","name","label","group","image","inputs","description","renderer"],"sources":["Fragment.manifest.ts"],"sourcesContent":["\"use client\";\nimport { createComponent } from \"~/createComponent\";\nimport { FragmentComponent } from \"./Fragment\";\nimport { createTextInput } from \"@webiny/app-website-builder/sdk\";\n\nexport const Fragment = createComponent(FragmentComponent, {\n name: \"Webiny/Fragment\",\n label: \"Fragment\",\n group: \"basic\",\n image: `<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"M120-120v-720h720v720H120Zm80-80h560v-560H200v560Zm0 0v-560 560Z\"/></svg>`,\n inputs: [\n createTextInput({\n name: \"name\",\n label: \"Fragment\",\n description: \"Select fragment to display.\",\n renderer: \"Webiny/FragmentSelector\"\n })\n ]\n});\n"],"mappings":"AAAA,YAAY;;AACZ,SAASA,eAAe;AACxB,SAASC,iBAAiB;AAC1B,SAASC,eAAe,QAAQ,iCAAiC;AAEjE,OAAO,MAAMC,QAAQ,GAAGH,eAAe,CAACC,iBAAiB,EAAE;EACvDG,IAAI,EAAE,iBAAiB;EACvBC,KAAK,EAAE,UAAU;EACjBC,KAAK,EAAE,OAAO;EACdC,KAAK,EAAE,+LAA+L;EACtMC,MAAM,EAAE,CACJN,eAAe,CAAC;IACZE,IAAI,EAAE,MAAM;IACZC,KAAK,EAAE,UAAU;IACjBI,WAAW,EAAE,6BAA6B;IAC1CC,QAAQ,EAAE;EACd,CAAC,CAAC;AAEV,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,18 @@
1
+ import React from "react";
2
+ import type { ComponentProps, ComponentPropsWithChildren } from "../types";
3
+ export declare const GridColumnComponent: ({ inputs }: {
4
+ inputs: ComponentPropsWithChildren["inputs"];
5
+ }) => React.JSX.Element;
6
+ export interface Column {
7
+ children: React.ReactNode;
8
+ }
9
+ type GridProps = ComponentProps<{
10
+ gridLayout: string;
11
+ rowCount: number;
12
+ columnGap: number;
13
+ columns: Column[];
14
+ stackAtBreakpoint?: string;
15
+ reverseWhenStacked?: boolean;
16
+ }>;
17
+ export declare const GridComponent: ({ inputs, styles, breakpoint }: GridProps) => React.JSX.Element;
18
+ export {};
@@ -0,0 +1,65 @@
1
+ import React from "react";
2
+ export const GridColumnComponent = ({
3
+ inputs
4
+ }) => {
5
+ return /*#__PURE__*/React.createElement(React.Fragment, null, inputs.children);
6
+ };
7
+ export const GridComponent = ({
8
+ inputs,
9
+ styles,
10
+ breakpoint
11
+ }) => {
12
+ const {
13
+ gridLayout = "12",
14
+ columns,
15
+ columnGap,
16
+ stackAtBreakpoint,
17
+ reverseWhenStacked
18
+ } = inputs;
19
+ const rowConfig = gridLayout.split("-").map(size => parseInt(size));
20
+ const rows = [];
21
+
22
+ // Chunk columns into rows
23
+ for (let i = 0; i < columns.length; i += rowConfig.length) {
24
+ rows.push(columns.slice(i, i + rowConfig.length));
25
+ }
26
+
27
+ // Number of pixels we need to subtract from each cell to ensure they fit in the grid with column gap
28
+ const cellWidthReduction = columnGap ? columnGap - columnGap / rowConfig.length : 0;
29
+ const stackColumns = breakpoint === stackAtBreakpoint;
30
+ if (stackColumns) {
31
+ styles.flexDirection = reverseWhenStacked ? "column-reverse" : "column";
32
+ }
33
+ return /*#__PURE__*/React.createElement("div", {
34
+ style: styles
35
+ }, rows.map(columns => {
36
+ return columns.map((column, i) => /*#__PURE__*/React.createElement(Span, {
37
+ key: i,
38
+ stackColumns: stackColumns,
39
+ size: rowConfig[i],
40
+ reductionInPx: cellWidthReduction
41
+ }, /*#__PURE__*/React.createElement(GridColumnComponent, {
42
+ key: i,
43
+ inputs: {
44
+ children: column.children
45
+ }
46
+ })));
47
+ }));
48
+ };
49
+ const Span = ({
50
+ size,
51
+ children,
52
+ reductionInPx,
53
+ stackColumns
54
+ }) => {
55
+ const width = stackColumns ? "100%" : `calc(${size / 12 * 100}% - ${reductionInPx}px)`;
56
+ return /*#__PURE__*/React.createElement("div", {
57
+ style: {
58
+ flex: `0 0 ${width}`,
59
+ maxWidth: width,
60
+ boxSizing: "border-box"
61
+ }
62
+ }, children);
63
+ };
64
+
65
+ //# sourceMappingURL=Grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","GridColumnComponent","inputs","createElement","Fragment","children","GridComponent","styles","breakpoint","gridLayout","columns","columnGap","stackAtBreakpoint","reverseWhenStacked","rowConfig","split","map","size","parseInt","rows","i","length","push","slice","cellWidthReduction","stackColumns","flexDirection","style","column","Span","key","reductionInPx","width","flex","maxWidth","boxSizing"],"sources":["Grid.tsx"],"sourcesContent":["import React from \"react\";\nimport type { ComponentProps, ComponentPropsWithChildren } from \"~/types\";\n\nexport const GridColumnComponent = ({ inputs }: { inputs: ComponentPropsWithChildren[\"inputs\"] }) => {\n return <>{inputs.children}</>;\n};\n\nexport interface Column {\n children: React.ReactNode;\n}\n\ntype GridProps = ComponentProps<{\n gridLayout: string;\n rowCount: number;\n columnGap: number;\n columns: Column[];\n stackAtBreakpoint?: string;\n reverseWhenStacked?: boolean;\n}>;\n\nexport const GridComponent = ({ inputs, styles, breakpoint }: GridProps) => {\n const { gridLayout = \"12\", columns, columnGap, stackAtBreakpoint, reverseWhenStacked } = inputs;\n const rowConfig = gridLayout.split(\"-\").map(size => parseInt(size));\n const rows: Column[][] = [];\n\n // Chunk columns into rows\n for (let i = 0; i < columns.length; i += rowConfig.length) {\n rows.push(columns.slice(i, i + rowConfig.length));\n }\n\n // Number of pixels we need to subtract from each cell to ensure they fit in the grid with column gap\n const cellWidthReduction = columnGap ? columnGap - columnGap / rowConfig.length : 0;\n\n const stackColumns = breakpoint === stackAtBreakpoint;\n\n if (stackColumns) {\n styles.flexDirection = reverseWhenStacked ? \"column-reverse\" : \"column\";\n }\n\n return (\n <div style={styles}>\n {rows.map(columns => {\n return columns.map((column, i) => (\n <Span\n key={i}\n stackColumns={stackColumns}\n size={rowConfig[i]}\n reductionInPx={cellWidthReduction}\n >\n <GridColumnComponent key={i} inputs={{ children: column.children }} />\n </Span>\n ));\n })}\n </div>\n );\n};\n\ninterface SpanProps {\n size: number;\n reductionInPx: number;\n stackColumns: boolean;\n children: React.ReactNode;\n}\n\nconst Span = ({ size, children, reductionInPx, stackColumns }: SpanProps) => {\n const width = stackColumns ? \"100%\" : `calc(${(size / 12) * 100}% - ${reductionInPx}px)`;\n\n return (\n <div\n style={{\n flex: `0 0 ${width}`,\n maxWidth: width,\n boxSizing: \"border-box\"\n }}\n >\n {children}\n </div>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAGzB,OAAO,MAAMC,mBAAmB,GAAGA,CAAC;EAAEC;AAAyD,CAAC,KAAK;EACjG,oBAAOF,KAAA,CAAAG,aAAA,CAAAH,KAAA,CAAAI,QAAA,QAAGF,MAAM,CAACG,QAAW,CAAC;AACjC,CAAC;AAeD,OAAO,MAAMC,aAAa,GAAGA,CAAC;EAAEJ,MAAM;EAAEK,MAAM;EAAEC;AAAsB,CAAC,KAAK;EACxE,MAAM;IAAEC,UAAU,GAAG,IAAI;IAAEC,OAAO;IAAEC,SAAS;IAAEC,iBAAiB;IAAEC;EAAmB,CAAC,GAAGX,MAAM;EAC/F,MAAMY,SAAS,GAAGL,UAAU,CAACM,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,CAACC,IAAI,IAAIC,QAAQ,CAACD,IAAI,CAAC,CAAC;EACnE,MAAME,IAAgB,GAAG,EAAE;;EAE3B;EACA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGV,OAAO,CAACW,MAAM,EAAED,CAAC,IAAIN,SAAS,CAACO,MAAM,EAAE;IACvDF,IAAI,CAACG,IAAI,CAACZ,OAAO,CAACa,KAAK,CAACH,CAAC,EAAEA,CAAC,GAAGN,SAAS,CAACO,MAAM,CAAC,CAAC;EACrD;;EAEA;EACA,MAAMG,kBAAkB,GAAGb,SAAS,GAAGA,SAAS,GAAGA,SAAS,GAAGG,SAAS,CAACO,MAAM,GAAG,CAAC;EAEnF,MAAMI,YAAY,GAAGjB,UAAU,KAAKI,iBAAiB;EAErD,IAAIa,YAAY,EAAE;IACdlB,MAAM,CAACmB,aAAa,GAAGb,kBAAkB,GAAG,gBAAgB,GAAG,QAAQ;EAC3E;EAEA,oBACIb,KAAA,CAAAG,aAAA;IAAKwB,KAAK,EAAEpB;EAAO,GACdY,IAAI,CAACH,GAAG,CAACN,OAAO,IAAI;IACjB,OAAOA,OAAO,CAACM,GAAG,CAAC,CAACY,MAAM,EAAER,CAAC,kBACzBpB,KAAA,CAAAG,aAAA,CAAC0B,IAAI;MACDC,GAAG,EAAEV,CAAE;MACPK,YAAY,EAAEA,YAAa;MAC3BR,IAAI,EAAEH,SAAS,CAACM,CAAC,CAAE;MACnBW,aAAa,EAAEP;IAAmB,gBAElCxB,KAAA,CAAAG,aAAA,CAACF,mBAAmB;MAAC6B,GAAG,EAAEV,CAAE;MAAClB,MAAM,EAAE;QAAEG,QAAQ,EAAEuB,MAAM,CAACvB;MAAS;IAAE,CAAE,CACnE,CACT,CAAC;EACN,CAAC,CACA,CAAC;AAEd,CAAC;AASD,MAAMwB,IAAI,GAAGA,CAAC;EAAEZ,IAAI;EAAEZ,QAAQ;EAAE0B,aAAa;EAAEN;AAAwB,CAAC,KAAK;EACzE,MAAMO,KAAK,GAAGP,YAAY,GAAG,MAAM,GAAG,QAASR,IAAI,GAAG,EAAE,GAAI,GAAG,OAAOc,aAAa,KAAK;EAExF,oBACI/B,KAAA,CAAAG,aAAA;IACIwB,KAAK,EAAE;MACHM,IAAI,EAAE,OAAOD,KAAK,EAAE;MACpBE,QAAQ,EAAEF,KAAK;MACfG,SAAS,EAAE;IACf;EAAE,GAED9B,QACA,CAAC;AAEd,CAAC","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ export interface Column {
3
+ children: React.ReactNode;
4
+ }
5
+ export declare const Grid: import("@webiny/app-website-builder/sdk").Component;
@@ -0,0 +1,174 @@
1
+ "use client";
2
+
3
+ import { createBooleanInput, createElement, createNumberInput, createObjectInput, createSelectInput, createSlotInput, createTextInput } from "@webiny/app-website-builder/sdk";
4
+ import { createComponent } from "../createComponent";
5
+ import { GridComponent } from "./Grid";
6
+ export const Grid = createComponent(GridComponent, {
7
+ name: "Webiny/Grid",
8
+ label: "Grid",
9
+ image: `<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"><path d="M120-520v-320h320v320H120Zm0 400v-320h320v320H120Zm400-400v-320h320v320H520Zm0 400v-320h320v320H520ZM200-600h160v-160H200v160Zm400 0h160v-160H600v160Zm0 400h160v-160H600v160Zm-400 0h160v-160H200v160Zm400-400Zm0 240Zm-240 0Zm0-240Z"/></svg>`,
10
+ group: "basic",
11
+ autoApplyStyles: false,
12
+ inputs: [createTextInput({
13
+ name: "gridLayout",
14
+ label: "Grid Layout",
15
+ renderer: "Webiny/GridLayout",
16
+ onChange: ({
17
+ inputs,
18
+ createElement
19
+ }) => {
20
+ const rowColumnCount = inputs.gridLayout.split("-").length;
21
+ const columns = inputs.columns.length;
22
+ const remainder = columns % rowColumnCount;
23
+ if (remainder !== 0) {
24
+ const fullColumnCount = rowColumnCount * inputs.rowCount;
25
+ const toCreate = columns > fullColumnCount ? remainder : rowColumnCount - remainder;
26
+ Array.from({
27
+ length: toCreate
28
+ }).forEach(() => {
29
+ inputs.columns.push({
30
+ children: createElement({
31
+ component: "Webiny/GridColumn"
32
+ })
33
+ });
34
+ });
35
+ }
36
+ inputs.rowCount = inputs.columns.length / rowColumnCount;
37
+ }
38
+ }), createNumberInput({
39
+ name: "rowCount",
40
+ label: "Row Count",
41
+ defaultValue: 1,
42
+ minValue: 1,
43
+ onChange: ({
44
+ inputs,
45
+ createElement
46
+ }) => {
47
+ const gridLayout = inputs.gridLayout;
48
+ const columnCount = gridLayout.split("-").length;
49
+ const rowCount = Math.max(1, inputs.rowCount);
50
+ const columns = inputs.columns;
51
+ const rows = [];
52
+
53
+ // Chunk columns into rows
54
+ for (let i = 0; i < columns.length; i += columnCount) {
55
+ rows.push(columns.slice(i, i + columnCount));
56
+ }
57
+ if (rows.length > rowCount) {
58
+ inputs.columns = columns.slice(0, columnCount * rowCount);
59
+ return;
60
+ }
61
+ const createRows = Math.max(0, rowCount - rows.length);
62
+ if (createRows <= 0) {
63
+ return;
64
+ }
65
+ const newRows = Array.from({
66
+ length: createRows * columnCount
67
+ }).map(() => {
68
+ return {
69
+ children: createElement({
70
+ component: "Webiny/GridColumn"
71
+ })
72
+ };
73
+ });
74
+ inputs.columns.push(...newRows);
75
+ }
76
+ }), createNumberInput({
77
+ name: "rowGap",
78
+ label: "Row Gap",
79
+ defaultValue: 0,
80
+ responsive: true,
81
+ onChange: ({
82
+ inputs,
83
+ styles
84
+ }) => {
85
+ const rowGap = parseInt(inputs.rowGap);
86
+ if (isNaN(rowGap)) {
87
+ delete styles.rowGap;
88
+ } else {
89
+ styles.rowGap = `${inputs.rowGap}px`;
90
+ }
91
+ }
92
+ }), createNumberInput({
93
+ name: "columnGap",
94
+ label: "Column Gap",
95
+ defaultValue: 0,
96
+ responsive: true,
97
+ onChange: ({
98
+ inputs,
99
+ styles
100
+ }) => {
101
+ const columnGap = parseInt(inputs.columnGap);
102
+ if (isNaN(columnGap)) {
103
+ delete styles.columnGap;
104
+ } else {
105
+ styles.columnGap = `${inputs.columnGap}px`;
106
+ }
107
+ }
108
+ }), createSelectInput({
109
+ name: "stackAtBreakpoint",
110
+ label: "Stack at breakpoint",
111
+ options: [{
112
+ label: "Tablet",
113
+ value: "tablet"
114
+ }, {
115
+ label: "Mobile",
116
+ value: "mobile"
117
+ }]
118
+ }), createBooleanInput({
119
+ name: "reverseWhenStacked",
120
+ label: "Reverse columns when stacked"
121
+ }), createObjectInput({
122
+ name: "columns",
123
+ list: true,
124
+ hideFromUi: true,
125
+ fields: [createSlotInput({
126
+ name: "children",
127
+ list: false,
128
+ components: ["Webiny/GridColumn"]
129
+ })]
130
+ })],
131
+ defaults: {
132
+ inputs: {
133
+ gridLayout: "6-6",
134
+ columns: [{
135
+ children: createElement({
136
+ component: "Webiny/GridColumn",
137
+ inputs: {
138
+ children: [createElement({
139
+ component: "Webiny/Lexical"
140
+ })]
141
+ }
142
+ })
143
+ }, {
144
+ children: createElement({
145
+ component: "Webiny/GridColumn",
146
+ inputs: {
147
+ children: [createElement({
148
+ component: "Webiny/Lexical"
149
+ })]
150
+ }
151
+ })
152
+ }]
153
+ },
154
+ styles: {
155
+ boxSizing: "border-box",
156
+ display: "flex",
157
+ flexDirection: "row",
158
+ flexWrap: "wrap",
159
+ justifyContent: "flex-start",
160
+ alignItems: "stretch",
161
+ width: "100%",
162
+ marginTop: "0px",
163
+ marginBottom: "0px",
164
+ marginLeft: "0px",
165
+ marginRight: "0px",
166
+ paddingTop: "5px",
167
+ paddingRight: "5px",
168
+ paddingBottom: "5px",
169
+ paddingLeft: "5px"
170
+ }
171
+ }
172
+ });
173
+
174
+ //# sourceMappingURL=Grid.manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createBooleanInput","createElement","createNumberInput","createObjectInput","createSelectInput","createSlotInput","createTextInput","createComponent","GridComponent","Grid","name","label","image","group","autoApplyStyles","inputs","renderer","onChange","rowColumnCount","gridLayout","split","length","columns","remainder","fullColumnCount","rowCount","toCreate","Array","from","forEach","push","children","component","defaultValue","minValue","columnCount","Math","max","rows","i","slice","createRows","newRows","map","responsive","styles","rowGap","parseInt","isNaN","columnGap","options","value","list","hideFromUi","fields","components","defaults","boxSizing","display","flexDirection","flexWrap","justifyContent","alignItems","width","marginTop","marginBottom","marginLeft","marginRight","paddingTop","paddingRight","paddingBottom","paddingLeft"],"sources":["Grid.manifest.ts"],"sourcesContent":["\"use client\";\nimport {\n createBooleanInput,\n createElement,\n createNumberInput,\n createObjectInput,\n createSelectInput,\n createSlotInput,\n createTextInput\n} from \"@webiny/app-website-builder/sdk\";\nimport { createComponent } from \"~/createComponent\";\nimport { GridComponent } from \"./Grid\";\n\nexport interface Column {\n children: React.ReactNode;\n}\n\nexport const Grid = createComponent(GridComponent, {\n name: \"Webiny/Grid\",\n label: \"Grid\",\n image: `<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"#e8eaed\"><path d=\"M120-520v-320h320v320H120Zm0 400v-320h320v320H120Zm400-400v-320h320v320H520Zm0 400v-320h320v320H520ZM200-600h160v-160H200v160Zm400 0h160v-160H600v160Zm0 400h160v-160H600v160Zm-400 0h160v-160H200v160Zm400-400Zm0 240Zm-240 0Zm0-240Z\"/></svg>`,\n group: \"basic\",\n autoApplyStyles: false,\n inputs: [\n createTextInput({\n name: \"gridLayout\",\n label: \"Grid Layout\",\n renderer: \"Webiny/GridLayout\",\n onChange: ({ inputs, createElement }) => {\n const rowColumnCount = inputs.gridLayout.split(\"-\").length;\n const columns = inputs.columns.length;\n\n const remainder = columns % rowColumnCount;\n\n if (remainder !== 0) {\n const fullColumnCount = rowColumnCount * inputs.rowCount;\n const toCreate =\n columns > fullColumnCount ? remainder : rowColumnCount - remainder;\n\n Array.from({ length: toCreate }).forEach(() => {\n inputs.columns.push({\n children: createElement({\n component: \"Webiny/GridColumn\"\n })\n });\n });\n }\n\n inputs.rowCount = inputs.columns.length / rowColumnCount;\n }\n }),\n createNumberInput({\n name: \"rowCount\",\n label: \"Row Count\",\n defaultValue: 1,\n minValue: 1,\n onChange: ({ inputs, createElement }) => {\n const gridLayout = inputs.gridLayout;\n const columnCount = gridLayout.split(\"-\").length;\n const rowCount = Math.max(1, inputs.rowCount);\n const columns = inputs.columns;\n const rows: Column[][] = [];\n\n // Chunk columns into rows\n for (let i = 0; i < columns.length; i += columnCount) {\n rows.push(columns.slice(i, i + columnCount));\n }\n\n if (rows.length > rowCount) {\n inputs.columns = columns.slice(0, columnCount * rowCount);\n return;\n }\n\n const createRows = Math.max(0, rowCount - rows.length);\n\n if (createRows <= 0) {\n return;\n }\n\n const newRows = Array.from({ length: createRows * columnCount }).map(() => {\n return {\n children: createElement({\n component: \"Webiny/GridColumn\"\n })\n };\n });\n\n inputs.columns.push(...newRows);\n }\n }),\n createNumberInput({\n name: \"rowGap\",\n label: \"Row Gap\",\n defaultValue: 0,\n responsive: true,\n onChange: ({ inputs, styles }) => {\n const rowGap = parseInt(inputs.rowGap);\n if (isNaN(rowGap)) {\n delete styles.rowGap;\n } else {\n styles.rowGap = `${inputs.rowGap}px`;\n }\n }\n }),\n createNumberInput({\n name: \"columnGap\",\n label: \"Column Gap\",\n defaultValue: 0,\n responsive: true,\n onChange: ({ inputs, styles }) => {\n const columnGap = parseInt(inputs.columnGap);\n if (isNaN(columnGap)) {\n delete styles.columnGap;\n } else {\n styles.columnGap = `${inputs.columnGap}px`;\n }\n }\n }),\n createSelectInput({\n name: \"stackAtBreakpoint\",\n label: \"Stack at breakpoint\",\n options: [\n { label: \"Tablet\", value: \"tablet\" },\n { label: \"Mobile\", value: \"mobile\" }\n ]\n }),\n createBooleanInput({\n name: \"reverseWhenStacked\",\n label: \"Reverse columns when stacked\"\n }),\n createObjectInput({\n name: \"columns\",\n list: true,\n hideFromUi: true,\n fields: [\n createSlotInput({\n name: \"children\",\n list: false,\n components: [\"Webiny/GridColumn\"]\n })\n ]\n })\n ],\n defaults: {\n inputs: {\n gridLayout: \"6-6\",\n columns: [\n {\n children: createElement({\n component: \"Webiny/GridColumn\",\n inputs: {\n children: [\n createElement({\n component: \"Webiny/Lexical\"\n })\n ]\n }\n })\n },\n {\n children: createElement({\n component: \"Webiny/GridColumn\",\n inputs: {\n children: [\n createElement({\n component: \"Webiny/Lexical\"\n })\n ]\n }\n })\n }\n ]\n },\n styles: {\n boxSizing: \"border-box\",\n display: \"flex\",\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n justifyContent: \"flex-start\",\n alignItems: \"stretch\",\n width: \"100%\",\n marginTop: \"0px\",\n marginBottom: \"0px\",\n marginLeft: \"0px\",\n marginRight: \"0px\",\n paddingTop: \"5px\",\n paddingRight: \"5px\",\n paddingBottom: \"5px\",\n paddingLeft: \"5px\"\n }\n }\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import React from "react";
2
+ import type { ComponentPropsWithChildren } from "../types";
3
+ export declare const GridColumnComponent: ({ inputs }: {
4
+ inputs: ComponentPropsWithChildren["inputs"];
5
+ }) => React.JSX.Element;
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ export const GridColumnComponent = ({
3
+ inputs
4
+ }) => {
5
+ return /*#__PURE__*/React.createElement(React.Fragment, null, inputs.children);
6
+ };
7
+
8
+ //# sourceMappingURL=GridColumn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","GridColumnComponent","inputs","createElement","Fragment","children"],"sources":["GridColumn.tsx"],"sourcesContent":["import React from \"react\";\nimport type { ComponentPropsWithChildren } from \"~/types\";\n\nexport const GridColumnComponent = ({\n inputs\n}: {\n inputs: ComponentPropsWithChildren[\"inputs\"];\n}) => {\n return <>{inputs.children}</>;\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAGzB,OAAO,MAAMC,mBAAmB,GAAGA,CAAC;EAChCC;AAGJ,CAAC,KAAK;EACF,oBAAOF,KAAA,CAAAG,aAAA,CAAAH,KAAA,CAAAI,QAAA,QAAGF,MAAM,CAACG,QAAW,CAAC;AACjC,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare const GridColumn: import("@webiny/app-website-builder/sdk").Component;