@plasmicpkgs/plasmic-basic-components 0.0.3 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Data.d.ts +19 -73
- package/dist/Embed.d.ts +0 -2
- package/dist/index.d.ts +0 -2
- package/dist/plasmic-basic-components.cjs.development.js +39 -162
- package/dist/plasmic-basic-components.cjs.development.js.map +1 -1
- package/dist/plasmic-basic-components.cjs.production.min.js +1 -1
- package/dist/plasmic-basic-components.cjs.production.min.js.map +1 -1
- package/dist/plasmic-basic-components.esm.js +37 -153
- package/dist/plasmic-basic-components.esm.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t=require("@plasmicapp/host"),r=e(require("@plasmicapp/host/registerComponent")),o=require("react"),n=e(o);function a(){return(a=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e}).apply(this,arguments)}function i(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)t.indexOf(r=a[o])>=0||(n[r]=e[r]);return n}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,o=new Array(t);r<t;r++)o[r]=e[r];return o}function s(e){if(null==e)throw new Error("Value must not be undefined or null");return e}var c=o.createContext(void 0);function p(e,t){if(t){for(var r,o=e,n=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(r)return(r=r.call(e)).next.bind(r);if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return l(e,void 0);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(e,void 0):void 0}}(e))){r&&(e=r);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(t.split("."));!(r=n()).done;){var a;o=null==(a=o)?void 0:a[r.value]}return o}}function m(e){return p(u(),e)}function d(e){void 0===e&&(e={});var t=u();return Object.fromEntries(Object.entries(e).filter((function(e){return!!e[0]&&!!e[1]})).map((function(e){return function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return t}(e[0],p(t,e[1]))})))}function u(){return o.useContext(c)}function h(e){var t,r,o=e.name,i=e.data,l=e.children,s=null!=(t=u())?t:{};return o?n.createElement(c.Provider,{value:a({},s,(r={},r[o]=i,r))},l):n.createElement(n.Fragment,null,l)}function y(e){var t=e.tag,r=void 0===t?"div":t,n=e.className,l=e.children,s=e.propSelectors,c=i(e,["tag","className","children","propSelectors"]),p=d(s);return o.createElement(r,a({children:l},c,p,{className:n+" "+p.className}))}function f(e){var t=e.selector,r=e.propSelectors,o=i(e,["selector","propSelectors"]);return n.createElement(y,Object.assign({},o,{propSelectors:a({},r,{children:t})}),"(DynamicText requires a selector)")}function v(e){var t=e.selector,r=e.propSelectors,o=i(e,["selector","propSelectors"]);return n.createElement(y,Object.assign({tag:"img",loading:"lazy",style:{objectFit:"cover"}},o,{propSelectors:a({},r,{src:t}),src:"https://studio.plasmic.app/static/img/placeholder.png"}))}function g(e){var r,o=e.selector,a=e.loopItemName,l=e.children,s=e.data,c=e.keySelector,d=i(e,["selector","loopItemName","children","data","keySelector"]),u=null!=(r=null!=s?s:m(o))?r:[1,2,3];return n.createElement(y,Object.assign({},d),null==u||null==u.map?void 0:u.map((function(e,r){var o;return n.createElement(h,{key:null!=(o=p(e,c))?o:r,name:a,data:e},t.repeatedElement(0===r,l))})))}function b(e){var t=e.columns,r=e.columnGap,o=void 0===r?0:r,a=e.rowGap,l=void 0===a?0:a,s=i(e,["columns","columnGap","rowGap"]);return n.createElement(g,Object.assign({},s,{style:{display:"grid",gridTemplateColumns:"repeat("+t+", 1fr)",columnGap:o+"px",rowGap:l+"px"}}))}var x="@plasmicpkgs/plasmic-basic-components",w={name:"hostless-data-provider",displayName:"Data Provider",importName:"DataProvider",importPath:x,props:{name:{type:"string",defaultValue:"celebrities",description:"The name of the variable to store the data in"},data:{type:"object",defaultValue:[{name:"Fill Murray",birthYear:1950,profilePicture:["https://www.fillmurray.com/200/300"]},{name:"Place Cage",birthYear:1950,profilePicture:["https://www.placecage.com/200/300"]}]},children:{type:"slot",defaultValue:[{type:"component",name:"hostless-dynamic-text",props:{selector:"celebrities.0.name"}},{type:"component",name:"hostless-dynamic-image",props:{selector:"celebrities.0.profilePicture"}}]}}},N={propSelectors:{type:"object",description:"An object whose keys are prop names and values are selector expressions. Use this to set any prop to a dynamic value."}},S=a({},N,{tag:{type:"string",description:"The HTML tag to use"}}),C={name:"hostless-dynamic-element",displayName:"Dynamic Element",importName:"DynamicElement",importPath:x,props:a({},S,{children:"slot"})},E={name:"hostless-dynamic-text",importName:"DynamicText",displayName:"Dynamic Text",importPath:x,props:a({},S,{selector:{type:"string",description:"The selector expression to use to get the text, such as: someVariable.0.someField"}})},D={name:"hostless-dynamic-image",displayName:"Dynamic Image",importName:"DynamicImage",importPath:x,props:a({},N,{selector:{type:"string",description:"The selector expression to use to get the image source URL, such as: someVariable.0.someField"}})},P=a({},S,{selector:{type:"string",description:"The selector expression to use to get the array of data to loop over, such as: someVariable.0.someField"},loopItemName:{type:"string",defaultValue:"item",description:"The name of the variable to use to store the current item in the loop"},children:"slot"}),T={name:"hostless-dynamic-collection",displayName:"Dynamic Collection",importName:"DynamicCollection",importPath:x,props:P},I=a({},P,{columns:{type:"number",defaultValue:2,description:"The number of columns to use in the grid"},columnGap:{type:"number",defaultValue:8,description:"The gap between columns"},rowGap:{type:"number",defaultValue:8,description:"The gap between rows"}}),j={name:"hostless-dynamic-collection-grid",displayName:"Dynamic Collection Grid",importName:"DynamicCollectionGrid",importPath:x,props:I};function M(e){var t=e.className,r=e.code,a=e.hideInEditor,i=void 0!==a&&a,l=o.useRef(null);return o.useEffect((function(){i||Array.from(s(l.current).querySelectorAll("script")).forEach((function(e){var t=document.createElement("script");Array.from(e.attributes).forEach((function(e){return t.setAttribute(e.name,e.value)})),t.appendChild(document.createTextNode(e.innerHTML)),s(e.parentNode).replaceChild(t,e)}))}),[r,i]),n.createElement("div",{ref:l,className:t,dangerouslySetInnerHTML:{__html:i?"":r}})}var O={name:"hostless-embed",displayName:"Embed",importName:"Embed",importPath:"@plasmicpkgs/plasmic-basic-components",props:{code:{type:"string",defaultValue:"https://www.example.com"},hideInEditor:{type:"boolean",displayName:"Hide in editor",description:"Disable running the code while editing in Plasmic Studio (may require reload)",editOnly:!0}},defaultStyles:{maxWidth:"100%"}};function V(e){var r=e.preview,a=e.src,i=e.className;return o.useContext(t.PlasmicCanvasContext)&&!r?n.createElement("div",{className:i},n.createElement("div",{style:{position:"absolute",top:0,left:0,right:0,bottom:0,background:"#eee",color:"#888",fontSize:"36px",fontFamily:"sans-serif",fontWeight:"bold",display:"flex",alignItems:"center",justifyContent:"center",overflow:"hidden"}},"Iframe placeholder")):n.createElement("iframe",{src:a,className:i})}var G={name:"hostless-iframe",displayName:"Iframe",importName:"Iframe",importPath:"@plasmicpkgs/plasmic-basic-components",props:{src:{type:"string",defaultValue:"https://www.example.com"},preview:{type:"boolean",description:"Load the iframe while editing in Plasmic Studio"}},defaultStyles:{width:"300px",height:"150px",maxWidth:"100%"}};function A(e){var t=e.ref,r=e.scrollDownThreshold,n=void 0===r?.5:r,a=e.scrollUpThreshold,i=void 0===a?0:a,l=o.useState(!1),s=l[0],c=l[1];return o.useEffect((function(){if(t.current&&"function"==typeof IntersectionObserver){var e=new IntersectionObserver((function(e){e[0].intersectionRatio>=n?c(!0):e[0].intersectionRatio<=i&&c(!1)}),{root:null,rootMargin:"0%",threshold:[i,n]});return e.observe(t.current),function(){c(!1),e.disconnect()}}return function(){}}),[t.current,n,i]),s}function R(e){var t=e.children,r=e.className,a=e.scrollDownThreshold,i=void 0===a?.5:a,l=e.scrollUpThreshold,s=void 0===l?0:l,c=o.useRef(null),p=A({ref:c,scrollUpThreshold:s,scrollDownThreshold:i});return n.createElement("div",{className:r,ref:c},p?t:null)}var k={name:"hostless-scroll-revealer",importName:"ScrollRevealer",displayName:"Scroll Revealer",importPath:"@plasmicpkgs/plasmic-basic-components",props:{children:"slot",scrollDownThreshold:{type:"number",displayName:"Scroll down threshold",description:"How much of the element (as a fraction) must you scroll into view for it to appear (defaults to 0.5)"},scrollUpThreshold:{type:"number",displayName:"Scroll up threshold",description:"While scrolling up, how much of the element (as a fraction) can still be scrolled in view before it disappears (defaults to 0, meaning you must scroll up until it's completely out of view)"}},defaultStyles:{width:"stretch",maxWidth:"100%"}},U=n.forwardRef((function(e,t){return n.createElement("video",Object.assign({ref:t},e))})),W={name:"hostless-html-video",importName:"Video",displayName:"HTML Video",importPath:"@plasmicpkgs/plasmic-basic-components",props:{src:{type:"string",defaultValue:"https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.webm",displayName:"Source URL",description:"URL to a video file."},autoPlay:{type:"boolean",displayName:"Auto Play",description:"Whether the video show automatically start playing when the player loads"},controls:{type:"boolean",displayName:"Show Controls",description:"Whether the video player controls should be displayed"},playsInline:{type:"boolean",displayName:"Plays inline",description:"Usually on mobile, when tilted landscape, videos can play fullscreen. Turn this on to prevent that."},loop:{type:"boolean",displayName:"Loop",description:"Whether the video should be played again after it finishes"},muted:{type:"boolean",displayName:"Muted",description:"Whether audio should be muted"},poster:{type:"imageUrl",displayName:"Poster (placeholder) image",description:"Image to show while video is downloading"},preload:{type:"choice",options:["none","metadata","auto"],displayName:"Preload",description:"Whether to preload nothing, metadata only, or the full video"}},defaultStyles:{height:"hug",width:"640px",maxWidth:"100%"}};exports.DataContext=c,exports.DataProvider=h,exports.DynamicCollection=g,exports.DynamicCollectionGrid=b,exports.DynamicElement=y,exports.DynamicImage=v,exports.DynamicText=f,exports.Embed=M,exports.Iframe=V,exports.ScrollRevealer=R,exports.Video=U,exports.applySelector=p,exports.dataProviderMeta=w,exports.dynamicCollectionGridMeta=j,exports.dynamicCollectionGridProps=I,exports.dynamicCollectionMeta=T,exports.dynamicCollectionProps=P,exports.dynamicElementMeta=C,exports.dynamicImageMeta=D,exports.dynamicTextMeta=E,exports.embedMeta=O,exports.iframeMeta=G,exports.registerDataProvider=function(e,t){e?e.registerComponent(h,null!=t?t:w):r(h,null!=t?t:w)},exports.registerDynamicCollection=function(e,t){e?e.registerComponent(g,null!=t?t:T):r(g,null!=t?t:T)},exports.registerDynamicCollectionGrid=function(e,t){e?e.registerComponent(b,null!=t?t:j):r(b,null!=t?t:j)},exports.registerDynamicElement=function(e,t){e?e.registerComponent(y,null!=t?t:C):r(y,null!=t?t:C)},exports.registerDynamicImage=function(e,t){e?e.registerComponent(v,null!=t?t:D):r(v,null!=t?t:D)},exports.registerDynamicText=function(e,t){e?e.registerComponent(f,null!=t?t:E):r(f,null!=t?t:E)},exports.registerEmbed=function(e,t){e?e.registerComponent(M,null!=t?t:O):r(M,null!=t?t:O)},exports.registerIframe=function(e,t){e?e.registerComponent(V,null!=t?t:G):r(V,null!=t?t:G)},exports.registerScrollRevealer=function(e,t){e?e.registerComponent(R,null!=t?t:k):r(R,null!=t?t:k)},exports.registerVideo=function(e,t){e?e.registerComponent(U,null!=t?t:W):r(U,null!=t?t:W)},exports.scrollRevealerMeta=k,exports.useDataEnv=u,exports.useDirectionalIntersection=A,exports.useSelector=m,exports.useSelectors=d,exports.videoMeta=W;
|
|
1
|
+
"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t=require("@plasmicapp/host"),r=e(require("@plasmicapp/host/registerComponent")),o=require("react"),a=e(o);function n(){return(n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e}).apply(this,arguments)}function i(e,t){if(null==e)return{};var r,o,a={},n=Object.keys(e);for(o=0;o<n.length;o++)t.indexOf(r=n[o])>=0||(a[r]=e[r]);return a}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,o=new Array(t);r<t;r++)o[r]=e[r];return o}var s=o.createContext(void 0),c="@plasmicpkgs/plasmic-basic-components";function p(e,t){if(t){for(var r,o=e,a=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(r)return(r=r.call(e)).next.bind(r);if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return l(e,void 0);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(e,void 0):void 0}}(e))){r&&(e=r);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(t.split("."));!(r=a()).done;){var n;o=null==(n=o)?void 0:n[r.value]}return o}}function m(e){return p(d(),e)}function u(e){void 0===e&&(e={});var t=d();return Object.fromEntries(Object.entries(e).filter((function(e){return!!e[0]&&!!e[1]})).map((function(e){return function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return t}(e[0],p(t,e[1]))})))}function d(){return o.useContext(s)}function h(e){var t,r,o=e.name,i=e.data,l=e.children,c=null!=(t=d())?t:{};return o?a.createElement(s.Provider,{value:n({},c,(r={},r[o]=i,r))},l):a.createElement(a.Fragment,null,l)}function f(e){var t=e.tag,r=void 0===t?"div":t,a=e.className,l=e.children,s=e.propSelectors,c=i(e,["tag","className","children","propSelectors"]),p=u(s);return o.createElement(r,n({children:l},c,p,{className:a+" "+p.className}))}function y(e){var t=e.selector,r=e.propSelectors,o=i(e,["selector","propSelectors"]);return a.createElement(f,Object.assign({},o,{propSelectors:n({},r,{children:t})}),"(DynamicText requires a selector)")}function v(e){var t=e.selector,r=e.propSelectors,o=i(e,["selector","propSelectors"]);return a.createElement(f,Object.assign({tag:"img",loading:"lazy",style:{objectFit:"cover"}},o,{propSelectors:n({},r,{src:t}),src:"https://studio.plasmic.app/static/img/placeholder.png"}))}function g(e){var r,o=e.children,n=e.loopItemName,i=e.keySelector,l=e.data,s=null!=(r=null!=l?l:m(e.selector))?r:[1,2,3];return a.createElement(a.Fragment,null,null==s||null==s.map?void 0:s.map((function(e,r){var l;return a.createElement(h,{key:null!=(l=p(e,i))?l:r,name:n,data:e},t.repeatedElement(0===r,o))})))}var x={selector:{type:"string",description:"The selector expression to use to get the array of data to loop over, such as: someVariable.0.someField"},loopItemName:{type:"string",defaultValue:"item",description:"The name of the variable to use to store the current item in the loop"},children:"slot"},b={name:"hostless-dynamic-repeater",displayName:"Dynamic Repeater",importName:"DynamicRepeater",importPath:c,props:x},w={name:"hostless-data-provider",displayName:"Data Provider",importName:"DataProvider",importPath:c,props:{name:{type:"string",defaultValue:"celebrities",description:"The name of the variable to store the data in"},data:{type:"object",defaultValue:[{name:"Fill Murray",birthYear:1950,profilePicture:["https://www.fillmurray.com/200/300"]},{name:"Place Cage",birthYear:1950,profilePicture:["https://www.placecage.com/200/300"]}]},children:{type:"slot",defaultValue:[{type:"component",name:"hostless-dynamic-text",props:{selector:"celebrities.0.name"}},{type:"component",name:"hostless-dynamic-image",props:{selector:"celebrities.0.profilePicture"}}]}}},N={propSelectors:{type:"object",defaultValueHint:{},description:"An object whose keys are prop names and values are selector expressions. Use this to set any prop to a dynamic value."}},S=n({},N,{tag:{type:"string",defaultValueHint:"div",description:"The HTML tag to use"}}),D={name:"hostless-dynamic-element",displayName:"Dynamic Element",importName:"DynamicElement",importPath:c,props:n({},S,{children:"slot"})},P={name:"hostless-dynamic-text",importName:"DynamicText",displayName:"Dynamic Text",importPath:c,props:n({},S,{selector:{type:"string",description:"The selector expression to use to get the text, such as: someVariable.0.someField"}})},T={name:"hostless-dynamic-image",displayName:"Dynamic Image",importName:"DynamicImage",importPath:c,props:n({},N,{selector:{type:"string",description:"The selector expression to use to get the image source URL, such as: someVariable.0.someField"}})};function E(e){var r=e.preview,n=e.src,i=e.className;return o.useContext(t.PlasmicCanvasContext)&&!r?a.createElement("div",{className:i},a.createElement("div",{style:{position:"absolute",top:0,left:0,right:0,bottom:0,background:"#eee",color:"#888",fontSize:"36px",fontFamily:"sans-serif",fontWeight:"bold",display:"flex",alignItems:"center",justifyContent:"center",overflow:"hidden"}},"Iframe placeholder")):a.createElement("iframe",{src:n,className:i})}var I={name:"hostless-iframe",displayName:"Iframe",importName:"Iframe",importPath:"@plasmicpkgs/plasmic-basic-components",props:{src:{type:"string",defaultValue:"https://www.example.com"},preview:{type:"boolean",description:"Load the iframe while editing in Plasmic Studio"}},defaultStyles:{width:"300px",height:"150px",maxWidth:"100%"}};function C(e){var t=e.ref,r=e.scrollDownThreshold,a=void 0===r?.5:r,n=e.scrollUpThreshold,i=void 0===n?0:n,l=o.useState(!1),s=l[0],c=l[1];return o.useEffect((function(){if(t.current&&"function"==typeof IntersectionObserver){var e=new IntersectionObserver((function(e){e[0].intersectionRatio>=a?c(!0):e[0].intersectionRatio<=i&&c(!1)}),{root:null,rootMargin:"0%",threshold:[i,a]});return e.observe(t.current),function(){c(!1),e.disconnect()}}return function(){}}),[t.current,a,i]),s}function j(e){var t=e.children,r=e.className,n=e.scrollDownThreshold,i=void 0===n?.5:n,l=e.scrollUpThreshold,s=void 0===l?0:l,c=o.useRef(null),p=C({ref:c,scrollUpThreshold:s,scrollDownThreshold:i});return a.createElement("div",{className:r,ref:c},p?t:null)}var R={name:"hostless-scroll-revealer",importName:"ScrollRevealer",displayName:"Scroll Revealer",importPath:"@plasmicpkgs/plasmic-basic-components",props:{children:"slot",scrollDownThreshold:{type:"number",displayName:"Scroll down threshold",defaultValueHint:.5,description:"How much of the element (as a fraction) must you scroll into view for it to appear (defaults to 0.5)"},scrollUpThreshold:{type:"number",displayName:"Scroll up threshold",defaultValueHint:0,description:"While scrolling up, how much of the element (as a fraction) can still be scrolled in view before it disappears (defaults to 0, meaning you must scroll up until it's completely out of view)"}},defaultStyles:{width:"stretch",maxWidth:"100%"}},V=a.forwardRef((function(e,t){return a.createElement("video",Object.assign({ref:t},e))})),M={name:"hostless-html-video",importName:"Video",displayName:"HTML Video",importPath:"@plasmicpkgs/plasmic-basic-components",props:{src:{type:"string",defaultValue:"https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.webm",displayName:"Source URL",description:"URL to a video file."},autoPlay:{type:"boolean",displayName:"Auto Play",description:"Whether the video show automatically start playing when the player loads"},controls:{type:"boolean",displayName:"Show Controls",description:"Whether the video player controls should be displayed"},playsInline:{type:"boolean",displayName:"Plays inline",description:"Usually on mobile, when tilted landscape, videos can play fullscreen. Turn this on to prevent that."},loop:{type:"boolean",displayName:"Loop",description:"Whether the video should be played again after it finishes"},muted:{type:"boolean",displayName:"Muted",description:"Whether audio should be muted"},poster:{type:"imageUrl",displayName:"Poster (placeholder) image",description:"Image to show while video is downloading"},preload:{type:"choice",options:["none","metadata","auto"],displayName:"Preload",description:"Whether to preload nothing, metadata only, or the full video"}},defaultStyles:{height:"hug",width:"640px",maxWidth:"100%"}};exports.DataContext=s,exports.DataProvider=h,exports.DynamicElement=f,exports.DynamicImage=v,exports.DynamicRepeater=g,exports.DynamicText=y,exports.Iframe=E,exports.ScrollRevealer=j,exports.Video=V,exports.applySelector=p,exports.dataProviderMeta=w,exports.dynamicElementMeta=D,exports.dynamicImageMeta=T,exports.dynamicRepeaterMeta=b,exports.dynamicRepeaterProps=x,exports.dynamicTextMeta=P,exports.iframeMeta=I,exports.registerDataProvider=function(e,t){e?e.registerComponent(h,null!=t?t:w):r(h,null!=t?t:w)},exports.registerDynamicElement=function(e,t){e?e.registerComponent(f,null!=t?t:D):r(f,null!=t?t:D)},exports.registerDynamicImage=function(e,t){e?e.registerComponent(v,null!=t?t:T):r(v,null!=t?t:T)},exports.registerDynamicRepeater=function(e,t){e?e.registerComponent(g,null!=t?t:b):r(g,null!=t?t:b)},exports.registerDynamicText=function(e,t){e?e.registerComponent(y,null!=t?t:P):r(y,null!=t?t:P)},exports.registerIframe=function(e,t){e?e.registerComponent(E,null!=t?t:I):r(E,null!=t?t:I)},exports.registerScrollRevealer=function(e,t){e?e.registerComponent(j,null!=t?t:R):r(j,null!=t?t:R)},exports.registerVideo=function(e,t){e?e.registerComponent(V,null!=t?t:M):r(V,null!=t?t:M)},exports.scrollRevealerMeta=R,exports.useDataEnv=d,exports.useDirectionalIntersection=C,exports.useSelector=m,exports.useSelectors=u,exports.videoMeta=M;
|
|
2
2
|
//# sourceMappingURL=plasmic-basic-components.cjs.production.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plasmic-basic-components.cjs.production.min.js","sources":["../src/common.ts","../src/Data.tsx","../src/Embed.tsx","../src/Iframe.tsx","../src/ScrollRevealer.tsx","../src/Video.tsx"],"sourcesContent":["export const tuple = <T extends any[]>(...args: T): T => args;\n\nexport function ensure<T>(x: T | null | undefined): T {\n if (x === null || x === undefined) {\n debugger;\n throw new Error(`Value must not be undefined or null`);\n } else {\n return x;\n }\n}\n","import { ComponentMeta, repeatedElement } from \"@plasmicapp/host\";\nimport registerComponent from \"@plasmicapp/host/registerComponent\";\nimport React, {\n ComponentProps,\n createContext,\n createElement,\n CSSProperties,\n ReactNode,\n useContext,\n} from \"react\";\nimport { tuple } from \"./common\";\n\nexport type DataDict = Record<string, any>;\n\nexport const DataContext = createContext<DataDict | undefined>(undefined);\n\nexport function applySelector(\n rawData: DataDict | undefined,\n selector: string | undefined\n): any {\n if (!selector) {\n return undefined;\n }\n let curData = rawData;\n for (const key of selector.split(\".\")) {\n curData = curData?.[key];\n }\n return curData;\n}\n\nexport type SelectorDict = Record<string, string | undefined>;\n\nexport function useSelector(selector: string | undefined): any {\n const rawData = useDataEnv();\n return applySelector(rawData, selector);\n}\n\nexport function useSelectors(selectors: SelectorDict = {}): any {\n const rawData = useDataEnv();\n return Object.fromEntries(\n Object.entries(selectors)\n .filter(([key, selector]) => !!key && !!selector)\n .map(([key, selector]) => tuple(key, applySelector(rawData, selector)))\n );\n}\n\nexport function useDataEnv() {\n return useContext(DataContext);\n}\n\nexport interface DataProviderProps {\n name?: string;\n data?: any;\n children?: ReactNode;\n}\n\nexport function DataProvider({ name, data, children }: DataProviderProps) {\n const existingEnv = useDataEnv() ?? {};\n if (!name) {\n return <>{children}</>;\n } else {\n return (\n <DataContext.Provider value={{ ...existingEnv, [name]: data }}>\n {children}\n </DataContext.Provider>\n );\n }\n}\n\nexport interface CommonDynamicProps {\n className?: string;\n tag?: string;\n propSelectors?: SelectorDict;\n}\n\nexport function DynamicElement<\n Tag extends keyof JSX.IntrinsicElements = \"div\"\n>({\n tag = \"div\",\n className,\n children,\n propSelectors,\n ...props\n}: CommonDynamicProps & ComponentProps<Tag>) {\n const computed = useSelectors(propSelectors);\n return createElement(tag, {\n children,\n ...props,\n ...computed,\n className: className + \" \" + computed.className,\n });\n}\n\nexport interface DynamicTextProps extends CommonDynamicProps {\n selector?: string;\n}\n\nexport function DynamicText({\n selector,\n propSelectors,\n ...props\n}: DynamicTextProps) {\n return (\n <DynamicElement\n {...props}\n propSelectors={{ ...propSelectors, children: selector }}\n >\n {/*This is the default text*/}\n (DynamicText requires a selector)\n </DynamicElement>\n );\n}\n\nexport interface DynamicImageProps\n extends CommonDynamicProps,\n ComponentProps<\"img\"> {\n selector?: string;\n}\n\nexport function DynamicImage({\n selector,\n propSelectors,\n ...props\n}: DynamicImageProps) {\n return (\n <DynamicElement<\"img\">\n tag={\"img\"}\n loading={\"lazy\"}\n style={{\n objectFit: \"cover\",\n }}\n {...props}\n propSelectors={{ ...propSelectors, src: selector }}\n // Default image placeholder\n src=\"https://studio.plasmic.app/static/img/placeholder.png\"\n />\n );\n}\n\nexport interface DynamicCollectionProps extends CommonDynamicProps {\n children?: ReactNode;\n style?: CSSProperties;\n loopItemName?: string;\n keySelector?: string;\n selector?: string;\n data?: any;\n}\n\nexport function DynamicCollection({\n selector,\n loopItemName,\n children,\n data,\n keySelector,\n ...props\n}: DynamicCollectionProps) {\n // Defaults to an array of three items.\n const finalData = data ?? useSelector(selector) ?? [1, 2, 3];\n return (\n <DynamicElement {...props}>\n {finalData?.map?.((item: any, index: number) => (\n <DataProvider\n key={applySelector(item, keySelector) ?? index}\n name={loopItemName}\n data={item}\n >\n {repeatedElement(index === 0, children)}\n </DataProvider>\n ))}\n </DynamicElement>\n );\n}\n\nexport interface DynamicCollectionGridProps extends DynamicCollectionProps {\n columns?: number;\n columnGap?: number;\n rowGap?: number;\n}\n\nexport function DynamicCollectionGrid({\n columns,\n columnGap = 0,\n rowGap = 0,\n ...props\n}: DynamicCollectionGridProps) {\n return (\n <DynamicCollection\n {...props}\n style={{\n display: \"grid\",\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n columnGap: `${columnGap}px`,\n rowGap: `${rowGap}px`,\n }}\n />\n );\n}\n\nconst thisModule = \"@plasmicpkgs/plasmic-basic-components\";\n\nexport const dataProviderMeta: ComponentMeta<DataProviderProps> = {\n name: \"hostless-data-provider\",\n displayName: \"Data Provider\",\n importName: \"DataProvider\",\n importPath: thisModule,\n // description: \"Makes some specified data available to the subtree in a context\",\n props: {\n name: {\n type: \"string\",\n defaultValue: \"celebrities\",\n description: \"The name of the variable to store the data in\",\n },\n data: {\n type: \"object\",\n defaultValue: [\n {\n name: \"Fill Murray\",\n birthYear: 1950,\n profilePicture: [\"https://www.fillmurray.com/200/300\"],\n },\n {\n name: \"Place Cage\",\n birthYear: 1950,\n profilePicture: [\"https://www.placecage.com/200/300\"],\n },\n ],\n },\n children: {\n type: \"slot\",\n defaultValue: [\n {\n type: \"component\",\n name: \"hostless-dynamic-text\",\n props: {\n selector: \"celebrities.0.name\",\n },\n },\n {\n type: \"component\",\n name: \"hostless-dynamic-image\",\n props: {\n selector: \"celebrities.0.profilePicture\",\n },\n },\n ],\n },\n },\n};\n\nexport function registerDataProvider(\n loader?: { registerComponent: typeof registerComponent },\n customDataProviderMeta?: ComponentMeta<DataProviderProps>\n) {\n if (loader) {\n loader.registerComponent(\n DataProvider,\n customDataProviderMeta ?? dataProviderMeta\n );\n } else {\n registerComponent(DataProvider, customDataProviderMeta ?? dataProviderMeta);\n }\n}\n\nconst dynamicPropsWithoutTag = {\n propSelectors: {\n type: \"object\",\n // defaultValueHint: {},\n description:\n \"An object whose keys are prop names and values are selector expressions. Use this to set any prop to a dynamic value.\",\n },\n} as const;\n\nconst dynamicProps = {\n ...dynamicPropsWithoutTag,\n tag: {\n type: \"string\",\n // defaultValueHint: \"div\",\n description: \"The HTML tag to use\",\n },\n} as const;\n\n// TODO Eventually we'll want to expose all the base HTML properties, but in the nicer way that we do within the studio.\n\nexport const dynamicElementMeta: ComponentMeta<CommonDynamicProps> = {\n name: \"hostless-dynamic-element\",\n displayName: \"Dynamic Element\",\n importName: \"DynamicElement\",\n importPath: thisModule,\n props: { ...dynamicProps, children: \"slot\" },\n};\n\nexport function registerDynamicElement(\n loader?: { registerComponent: typeof registerComponent },\n customDynamicElementMeta?: ComponentMeta<CommonDynamicProps>\n) {\n if (loader) {\n loader.registerComponent(\n DynamicElement,\n customDynamicElementMeta ?? dynamicElementMeta\n );\n } else {\n registerComponent(\n DynamicElement,\n customDynamicElementMeta ?? dynamicElementMeta\n );\n }\n}\n\nexport const dynamicTextMeta: ComponentMeta<DynamicTextProps> = {\n name: \"hostless-dynamic-text\",\n importName: \"DynamicText\",\n displayName: \"Dynamic Text\",\n importPath: thisModule,\n props: {\n ...dynamicProps,\n selector: {\n type: \"string\",\n description:\n \"The selector expression to use to get the text, such as: someVariable.0.someField\",\n },\n },\n};\n\nexport function registerDynamicText(\n loader?: { registerComponent: typeof registerComponent },\n customDynamicTextMeta?: ComponentMeta<DynamicTextProps>\n) {\n if (loader) {\n loader.registerComponent(\n DynamicText,\n customDynamicTextMeta ?? dynamicTextMeta\n );\n } else {\n registerComponent(DynamicText, customDynamicTextMeta ?? dynamicTextMeta);\n }\n}\n\nexport const dynamicImageMeta: ComponentMeta<DynamicImageProps> = {\n name: \"hostless-dynamic-image\",\n displayName: \"Dynamic Image\",\n importName: \"DynamicImage\",\n importPath: thisModule,\n props: {\n ...dynamicPropsWithoutTag,\n selector: {\n type: \"string\",\n description:\n \"The selector expression to use to get the image source URL, such as: someVariable.0.someField\",\n },\n },\n};\n\nexport function registerDynamicImage(\n loader?: { registerComponent: typeof registerComponent },\n customDynamicImageMeta?: ComponentMeta<DynamicImageProps>\n) {\n if (loader) {\n loader.registerComponent(\n DynamicImage,\n customDynamicImageMeta ?? dynamicImageMeta\n );\n } else {\n registerComponent(DynamicImage, customDynamicImageMeta ?? dynamicImageMeta);\n }\n}\n\nexport const dynamicCollectionProps = {\n ...dynamicProps,\n selector: {\n type: \"string\",\n description:\n \"The selector expression to use to get the array of data to loop over, such as: someVariable.0.someField\",\n },\n loopItemName: {\n type: \"string\",\n defaultValue: \"item\",\n description:\n \"The name of the variable to use to store the current item in the loop\",\n },\n children: \"slot\",\n} as const;\n\nexport const dynamicCollectionMeta: ComponentMeta<DynamicCollectionProps> = {\n name: \"hostless-dynamic-collection\",\n displayName: \"Dynamic Collection\",\n importName: \"DynamicCollection\",\n importPath: thisModule,\n props: dynamicCollectionProps,\n};\n\nexport function registerDynamicCollection(\n loader?: { registerComponent: typeof registerComponent },\n customDynamicCollectionMeta?: ComponentMeta<DynamicCollectionProps>\n) {\n if (loader) {\n loader.registerComponent(\n DynamicCollection,\n customDynamicCollectionMeta ?? dynamicCollectionMeta\n );\n } else {\n registerComponent(\n DynamicCollection,\n customDynamicCollectionMeta ?? dynamicCollectionMeta\n );\n }\n}\n\nexport const dynamicCollectionGridProps = {\n ...dynamicCollectionProps,\n columns: {\n type: \"number\",\n defaultValue: 2,\n description: \"The number of columns to use in the grid\",\n },\n columnGap: {\n type: \"number\",\n defaultValue: 8,\n description: \"The gap between columns\",\n },\n rowGap: {\n type: \"number\",\n defaultValue: 8,\n description: \"The gap between rows\",\n },\n} as const;\n\nexport const dynamicCollectionGridMeta: ComponentMeta<DynamicCollectionGridProps> = {\n name: \"hostless-dynamic-collection-grid\",\n displayName: \"Dynamic Collection Grid\",\n importName: \"DynamicCollectionGrid\",\n importPath: thisModule,\n props: dynamicCollectionGridProps,\n};\n\nexport function registerDynamicCollectionGrid(\n loader?: { registerComponent: typeof registerComponent },\n customDynamicCollectionGridMeta?: ComponentMeta<DynamicCollectionGridProps>\n) {\n if (loader) {\n loader.registerComponent(\n DynamicCollectionGrid,\n customDynamicCollectionGridMeta ?? dynamicCollectionGridMeta\n );\n } else {\n registerComponent(\n DynamicCollectionGrid,\n customDynamicCollectionGridMeta ?? dynamicCollectionGridMeta\n );\n }\n}\n","import registerComponent, {\n ComponentMeta,\n} from \"@plasmicapp/host/registerComponent\";\nimport React, { useEffect, useRef } from \"react\";\nimport { ensure } from \"./common\";\n\nexport interface EmbedProps {\n className?: string;\n code: string;\n hideInEditor?: boolean;\n}\n\nexport default function Embed({\n className,\n code,\n hideInEditor = false,\n}: EmbedProps) {\n const rootElt = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (hideInEditor) {\n return;\n }\n Array.from(ensure(rootElt.current).querySelectorAll(\"script\")).forEach(\n (oldScript) => {\n const newScript = document.createElement(\"script\");\n Array.from(oldScript.attributes).forEach((attr) =>\n newScript.setAttribute(attr.name, attr.value)\n );\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n ensure(oldScript.parentNode).replaceChild(newScript, oldScript);\n }\n );\n }, [code, hideInEditor]);\n const effectiveCode = hideInEditor ? \"\" : code;\n return (\n <div\n ref={rootElt}\n className={className}\n dangerouslySetInnerHTML={{ __html: effectiveCode }}\n />\n );\n}\n\nexport const embedMeta: ComponentMeta<EmbedProps> = {\n name: \"hostless-embed\",\n displayName: \"Embed\",\n importName: \"Embed\",\n importPath: \"@plasmicpkgs/plasmic-basic-components\",\n props: {\n code: {\n type: \"string\",\n defaultValue: \"https://www.example.com\",\n },\n hideInEditor: {\n type: \"boolean\",\n displayName: \"Hide in editor\",\n description:\n \"Disable running the code while editing in Plasmic Studio (may require reload)\",\n editOnly: true,\n },\n },\n defaultStyles: {\n maxWidth: \"100%\",\n },\n};\n\nexport function registerEmbed(\n loader?: { registerComponent: typeof registerComponent },\n customEmbedMeta?: ComponentMeta<EmbedProps>\n) {\n if (loader) {\n loader.registerComponent(Embed, customEmbedMeta ?? embedMeta);\n } else {\n registerComponent(Embed, customEmbedMeta ?? embedMeta);\n }\n}\n","import { ComponentMeta, PlasmicCanvasContext } from \"@plasmicapp/host\";\nimport registerComponent from \"@plasmicapp/host/registerComponent\";\nimport React, { useContext } from \"react\";\n\nexport interface IframeProps {\n src: string;\n preview?: boolean;\n className?: string;\n}\n\nexport default function Iframe({ preview, src, className }: IframeProps) {\n const isEditing = useContext(PlasmicCanvasContext);\n if (isEditing && !preview) {\n return (\n <div className={className}>\n <div\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n background: \"#eee\",\n color: \"#888\",\n fontSize: \"36px\",\n fontFamily: \"sans-serif\",\n fontWeight: \"bold\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n }}\n >\n Iframe placeholder\n </div>\n </div>\n );\n }\n return <iframe src={src} className={className} />;\n}\n\nexport const iframeMeta: ComponentMeta<IframeProps> = {\n name: \"hostless-iframe\",\n displayName: \"Iframe\",\n importName: \"Iframe\",\n importPath: \"@plasmicpkgs/plasmic-basic-components\",\n props: {\n src: {\n type: \"string\",\n defaultValue: \"https://www.example.com\",\n },\n preview: {\n type: \"boolean\",\n description: \"Load the iframe while editing in Plasmic Studio\",\n },\n },\n defaultStyles: {\n width: \"300px\",\n height: \"150px\",\n maxWidth: \"100%\",\n },\n};\n\nexport function registerIframe(\n loader?: { registerComponent: typeof registerComponent },\n customIframeMeta?: ComponentMeta<IframeProps>\n) {\n if (loader) {\n loader.registerComponent(Iframe, customIframeMeta ?? iframeMeta);\n } else {\n registerComponent(Iframe, customIframeMeta ?? iframeMeta);\n }\n}\n","import registerComponent, {\n ComponentMeta,\n} from \"@plasmicapp/host/registerComponent\";\nimport React, {\n ReactNode,\n RefObject,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nexport function useDirectionalIntersection({\n ref,\n scrollDownThreshold = 0.5,\n scrollUpThreshold = 0,\n}: {\n ref: RefObject<HTMLElement>;\n scrollDownThreshold?: number;\n scrollUpThreshold?: number;\n}) {\n const [revealed, setRevealed] = useState(false);\n useEffect(() => {\n if (ref.current && typeof IntersectionObserver === \"function\") {\n const handler = (entries: IntersectionObserverEntry[]) => {\n if (entries[0].intersectionRatio >= scrollDownThreshold) {\n setRevealed(true);\n } else if (entries[0].intersectionRatio <= scrollUpThreshold) {\n setRevealed(false);\n }\n };\n\n const observer = new IntersectionObserver(handler, {\n root: null,\n rootMargin: \"0%\",\n threshold: [scrollUpThreshold, scrollDownThreshold],\n });\n observer.observe(ref.current);\n\n return () => {\n setRevealed(false);\n observer.disconnect();\n };\n }\n return () => {};\n }, [ref.current, scrollDownThreshold, scrollUpThreshold]);\n return revealed;\n}\n\nexport interface ScrollRevealerProps {\n children?: ReactNode;\n className?: string;\n scrollUpThreshold?: number;\n scrollDownThreshold?: number;\n}\n\n/**\n * Unlike react-awesome-reveal, ScrollRevealer:\n *\n * - has configurable thresholds\n * - triggers arbitrary render/unrender animations\n *\n * TODO: Merge this inta a general Reveal component, perhaps forking react-awesome-reveal, so that we don't have two different reveal components for users.\n */\nexport default function ScrollRevealer({\n children,\n className,\n scrollDownThreshold = 0.5,\n scrollUpThreshold = 0,\n}: ScrollRevealerProps) {\n const intersectionRef = useRef<HTMLDivElement>(null);\n const revealed = useDirectionalIntersection({\n ref: intersectionRef,\n scrollUpThreshold,\n scrollDownThreshold,\n });\n return (\n <div className={className} ref={intersectionRef}>\n {revealed ? children : null}\n </div>\n );\n}\n\nexport const scrollRevealerMeta: ComponentMeta<ScrollRevealerProps> = {\n name: \"hostless-scroll-revealer\",\n importName: \"ScrollRevealer\",\n displayName: \"Scroll Revealer\",\n importPath: \"@plasmicpkgs/plasmic-basic-components\",\n props: {\n children: \"slot\",\n scrollDownThreshold: {\n type: \"number\",\n displayName: \"Scroll down threshold\",\n // defaultValueHint: 0.5,\n description:\n \"How much of the element (as a fraction) must you scroll into view for it to appear (defaults to 0.5)\",\n },\n scrollUpThreshold: {\n type: \"number\",\n displayName: \"Scroll up threshold\",\n // defaultValueHint: 0,\n description:\n \"While scrolling up, how much of the element (as a fraction) can still be scrolled in view before it disappears (defaults to 0, meaning you must scroll up until it's completely out of view)\",\n },\n },\n defaultStyles: {\n width: \"stretch\",\n maxWidth: \"100%\",\n },\n};\n\nexport function registerScrollRevealer(\n loader?: { registerComponent: typeof registerComponent },\n customScrollRevealerMeta?: ComponentMeta<ScrollRevealerProps>\n) {\n if (loader) {\n loader.registerComponent(\n ScrollRevealer,\n customScrollRevealerMeta ?? scrollRevealerMeta\n );\n } else {\n registerComponent(\n ScrollRevealer,\n customScrollRevealerMeta ?? scrollRevealerMeta\n );\n }\n}\n","import registerComponent, {\n ComponentMeta,\n} from \"@plasmicapp/host/registerComponent\";\nimport React from \"react\";\n\nexport type VideoProps = Pick<\n React.ComponentProps<\"video\">,\n | \"autoPlay\"\n | \"controls\"\n | \"loop\"\n | \"muted\"\n | \"playsInline\"\n | \"poster\"\n | \"preload\"\n | \"src\"\n>;\n\nconst Video = React.forwardRef<HTMLVideoElement, VideoProps>(\n (props: VideoProps, ref) => {\n return <video ref={ref} {...props} />;\n }\n);\n\nexport default Video;\n\nexport const videoMeta: ComponentMeta<VideoProps> = {\n name: \"hostless-html-video\",\n importName: \"Video\",\n displayName: \"HTML Video\",\n importPath: \"@plasmicpkgs/plasmic-basic-components\",\n props: {\n src: {\n type: \"string\",\n defaultValue:\n \"https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.webm\",\n displayName: \"Source URL\",\n description: \"URL to a video file.\",\n },\n autoPlay: {\n type: \"boolean\",\n displayName: \"Auto Play\",\n description:\n \"Whether the video show automatically start playing when the player loads\",\n },\n controls: {\n type: \"boolean\",\n displayName: \"Show Controls\",\n description: \"Whether the video player controls should be displayed\",\n },\n playsInline: {\n type: \"boolean\",\n displayName: \"Plays inline\",\n description:\n \"Usually on mobile, when tilted landscape, videos can play fullscreen. Turn this on to prevent that.\",\n },\n loop: {\n type: \"boolean\",\n displayName: \"Loop\",\n description: \"Whether the video should be played again after it finishes\",\n },\n muted: {\n type: \"boolean\",\n displayName: \"Muted\",\n description: \"Whether audio should be muted\",\n },\n poster: {\n type: \"imageUrl\",\n displayName: \"Poster (placeholder) image\",\n description: \"Image to show while video is downloading\",\n },\n preload: {\n type: \"choice\",\n options: [\"none\", \"metadata\", \"auto\"],\n displayName: \"Preload\",\n description:\n \"Whether to preload nothing, metadata only, or the full video\",\n },\n },\n defaultStyles: {\n height: \"hug\",\n width: \"640px\",\n maxWidth: \"100%\",\n },\n};\n\nexport function registerVideo(\n loader?: { registerComponent: typeof registerComponent },\n customVideoMeta?: ComponentMeta<VideoProps>\n) {\n if (loader) {\n loader.registerComponent(Video, customVideoMeta ?? videoMeta);\n } else {\n registerComponent(Video, customVideoMeta ?? videoMeta);\n }\n}\n"],"names":["ensure","x","Error","DataContext","createContext","undefined","applySelector","rawData","selector","curData","split","_curData","useSelector","useDataEnv","useSelectors","selectors","Object","fromEntries","entries","filter","map","args","tuple","useContext","DataProvider","name","data","children","existingEnv","React","Provider","value","DynamicElement","tag","className","propSelectors","props","computed","createElement","DynamicText","DynamicImage","loading","style","objectFit","src","DynamicCollection","loopItemName","keySelector","finalData","item","index","key","repeatedElement","DynamicCollectionGrid","columns","columnGap","rowGap","display","gridTemplateColumns","thisModule","dataProviderMeta","displayName","importName","importPath","type","defaultValue","description","birthYear","profilePicture","dynamicPropsWithoutTag","dynamicProps","dynamicElementMeta","dynamicTextMeta","dynamicImageMeta","dynamicCollectionProps","dynamicCollectionMeta","dynamicCollectionGridProps","dynamicCollectionGridMeta","Embed","code","hideInEditor","rootElt","useRef","useEffect","Array","from","current","querySelectorAll","forEach","oldScript","newScript","document","attributes","attr","setAttribute","appendChild","createTextNode","innerHTML","parentNode","replaceChild","ref","dangerouslySetInnerHTML","__html","embedMeta","editOnly","defaultStyles","maxWidth","Iframe","preview","PlasmicCanvasContext","position","top","left","right","bottom","background","color","fontSize","fontFamily","fontWeight","alignItems","justifyContent","overflow","iframeMeta","width","height","useDirectionalIntersection","scrollDownThreshold","scrollUpThreshold","useState","revealed","setRevealed","IntersectionObserver","observer","intersectionRatio","root","rootMargin","threshold","observe","disconnect","ScrollRevealer","intersectionRef","scrollRevealerMeta","Video","forwardRef","videoMeta","autoPlay","controls","playsInline","loop","muted","poster","preload","options","loader","customDataProviderMeta","registerComponent","customDynamicCollectionMeta","customDynamicCollectionGridMeta","customDynamicElementMeta","customDynamicImageMeta","customDynamicTextMeta","customEmbedMeta","customIframeMeta","customScrollRevealerMeta","customVideoMeta"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plasmic-basic-components.cjs.production.min.js","sources":["../src/common.ts","../src/Data.tsx","../src/Iframe.tsx","../src/ScrollRevealer.tsx","../src/Video.tsx"],"sourcesContent":["export const tuple = <T extends any[]>(...args: T): T => args;\n\nexport function ensure<T>(x: T | null | undefined): T {\n if (x === null || x === undefined) {\n debugger;\n throw new Error(`Value must not be undefined or null`);\n } else {\n return x;\n }\n}\n","import { ComponentMeta, repeatedElement } from \"@plasmicapp/host\";\nimport registerComponent from \"@plasmicapp/host/registerComponent\";\nimport React, {\n ComponentProps,\n createContext,\n createElement,\n ReactNode,\n useContext,\n} from \"react\";\nimport { tuple } from \"./common\";\n\nexport type DataDict = Record<string, any>;\n\nexport const DataContext = createContext<DataDict | undefined>(undefined);\n\nconst thisModule = \"@plasmicpkgs/plasmic-basic-components\";\n\nexport function applySelector(\n rawData: DataDict | undefined,\n selector: string | undefined\n): any {\n if (!selector) {\n return undefined;\n }\n let curData = rawData;\n for (const key of selector.split(\".\")) {\n curData = curData?.[key];\n }\n return curData;\n}\n\nexport type SelectorDict = Record<string, string | undefined>;\n\nexport function useSelector(selector: string | undefined): any {\n const rawData = useDataEnv();\n return applySelector(rawData, selector);\n}\n\nexport function useSelectors(selectors: SelectorDict = {}): any {\n const rawData = useDataEnv();\n return Object.fromEntries(\n Object.entries(selectors)\n .filter(([key, selector]) => !!key && !!selector)\n .map(([key, selector]) => tuple(key, applySelector(rawData, selector)))\n );\n}\n\nexport function useDataEnv() {\n return useContext(DataContext);\n}\n\nexport interface DataProviderProps {\n name?: string;\n data?: any;\n children?: ReactNode;\n}\n\nexport function DataProvider({ name, data, children }: DataProviderProps) {\n const existingEnv = useDataEnv() ?? {};\n if (!name) {\n return <>{children}</>;\n } else {\n return (\n <DataContext.Provider value={{ ...existingEnv, [name]: data }}>\n {children}\n </DataContext.Provider>\n );\n }\n}\n\nexport interface CommonDynamicProps {\n className?: string;\n tag?: string;\n propSelectors?: SelectorDict;\n}\n\nexport function DynamicElement<\n Tag extends keyof JSX.IntrinsicElements = \"div\"\n>({\n tag = \"div\",\n className,\n children,\n propSelectors,\n ...props\n}: CommonDynamicProps & ComponentProps<Tag>) {\n const computed = useSelectors(propSelectors);\n return createElement(tag, {\n children,\n ...props,\n ...computed,\n className: className + \" \" + computed.className,\n });\n}\n\nexport interface DynamicTextProps extends CommonDynamicProps {\n selector?: string;\n}\n\nexport function DynamicText({\n selector,\n propSelectors,\n ...props\n}: DynamicTextProps) {\n return (\n <DynamicElement\n {...props}\n propSelectors={{ ...propSelectors, children: selector }}\n >\n {/*This is the default text*/}\n (DynamicText requires a selector)\n </DynamicElement>\n );\n}\n\nexport interface DynamicImageProps\n extends CommonDynamicProps,\n ComponentProps<\"img\"> {\n selector?: string;\n}\n\nexport function DynamicImage({\n selector,\n propSelectors,\n ...props\n}: DynamicImageProps) {\n return (\n <DynamicElement<\"img\">\n tag={\"img\"}\n loading={\"lazy\"}\n style={{\n objectFit: \"cover\",\n }}\n {...props}\n propSelectors={{ ...propSelectors, src: selector }}\n // Default image placeholder\n src=\"https://studio.plasmic.app/static/img/placeholder.png\"\n />\n );\n}\n\nexport interface DynamicRepeaterProps {\n children?: ReactNode;\n loopItemName?: string;\n keySelector?: string;\n selector?: string;\n data?: any;\n}\n\nexport function DynamicRepeater({\n children,\n loopItemName,\n keySelector,\n selector,\n data,\n}: DynamicRepeaterProps) {\n // Defaults to an array of three items.\n const finalData = data ?? useSelector(selector) ?? [1, 2, 3];\n return (\n <>\n {finalData?.map?.((item: any, index: number) => (\n <DataProvider\n key={applySelector(item, keySelector) ?? index}\n name={loopItemName}\n data={item}\n >\n {repeatedElement(index === 0, children)}\n </DataProvider>\n ))}\n </>\n );\n}\n\nexport const dynamicRepeaterProps = {\n selector: {\n type: \"string\",\n description:\n \"The selector expression to use to get the array of data to loop over, such as: someVariable.0.someField\",\n },\n loopItemName: {\n type: \"string\",\n defaultValue: \"item\",\n description:\n \"The name of the variable to use to store the current item in the loop\",\n },\n children: \"slot\",\n} as const;\n\nexport const dynamicRepeaterMeta: ComponentMeta<DynamicRepeaterProps> = {\n name: \"hostless-dynamic-repeater\",\n displayName: \"Dynamic Repeater\",\n importName: \"DynamicRepeater\",\n importPath: thisModule,\n props: dynamicRepeaterProps,\n};\n\nexport function registerDynamicRepeater(\n loader?: { registerComponent: typeof registerComponent },\n customDynamicRepeaterMeta?: ComponentMeta<DynamicRepeaterProps>\n) {\n if (loader) {\n loader.registerComponent(\n DynamicRepeater,\n customDynamicRepeaterMeta ?? dynamicRepeaterMeta\n );\n } else {\n registerComponent(\n DynamicRepeater,\n customDynamicRepeaterMeta ?? dynamicRepeaterMeta\n );\n }\n}\n\nexport const dataProviderMeta: ComponentMeta<DataProviderProps> = {\n name: \"hostless-data-provider\",\n displayName: \"Data Provider\",\n importName: \"DataProvider\",\n importPath: thisModule,\n // description: \"Makes some specified data available to the subtree in a context\",\n props: {\n name: {\n type: \"string\",\n defaultValue: \"celebrities\",\n description: \"The name of the variable to store the data in\",\n },\n data: {\n type: \"object\",\n defaultValue: [\n {\n name: \"Fill Murray\",\n birthYear: 1950,\n profilePicture: [\"https://www.fillmurray.com/200/300\"],\n },\n {\n name: \"Place Cage\",\n birthYear: 1950,\n profilePicture: [\"https://www.placecage.com/200/300\"],\n },\n ],\n },\n children: {\n type: \"slot\",\n defaultValue: [\n {\n type: \"component\",\n name: \"hostless-dynamic-text\",\n props: {\n selector: \"celebrities.0.name\",\n },\n },\n {\n type: \"component\",\n name: \"hostless-dynamic-image\",\n props: {\n selector: \"celebrities.0.profilePicture\",\n },\n },\n ],\n },\n },\n};\n\nexport function registerDataProvider(\n loader?: { registerComponent: typeof registerComponent },\n customDataProviderMeta?: ComponentMeta<DataProviderProps>\n) {\n if (loader) {\n loader.registerComponent(\n DataProvider,\n customDataProviderMeta ?? dataProviderMeta\n );\n } else {\n registerComponent(DataProvider, customDataProviderMeta ?? dataProviderMeta);\n }\n}\n\nconst dynamicPropsWithoutTag = {\n propSelectors: {\n type: \"object\",\n defaultValueHint: {},\n description:\n \"An object whose keys are prop names and values are selector expressions. Use this to set any prop to a dynamic value.\",\n },\n} as const;\n\nconst dynamicProps = {\n ...dynamicPropsWithoutTag,\n tag: {\n type: \"string\",\n defaultValueHint: \"div\",\n description: \"The HTML tag to use\",\n },\n} as const;\n\n// TODO Eventually we'll want to expose all the base HTML properties, but in the nicer way that we do within the studio.\n\nexport const dynamicElementMeta: ComponentMeta<CommonDynamicProps> = {\n name: \"hostless-dynamic-element\",\n displayName: \"Dynamic Element\",\n importName: \"DynamicElement\",\n importPath: thisModule,\n props: { ...dynamicProps, children: \"slot\" },\n};\n\nexport function registerDynamicElement(\n loader?: { registerComponent: typeof registerComponent },\n customDynamicElementMeta?: ComponentMeta<CommonDynamicProps>\n) {\n if (loader) {\n loader.registerComponent(\n DynamicElement,\n customDynamicElementMeta ?? dynamicElementMeta\n );\n } else {\n registerComponent(\n DynamicElement,\n customDynamicElementMeta ?? dynamicElementMeta\n );\n }\n}\n\nexport const dynamicTextMeta: ComponentMeta<DynamicTextProps> = {\n name: \"hostless-dynamic-text\",\n importName: \"DynamicText\",\n displayName: \"Dynamic Text\",\n importPath: thisModule,\n props: {\n ...dynamicProps,\n selector: {\n type: \"string\",\n description:\n \"The selector expression to use to get the text, such as: someVariable.0.someField\",\n },\n },\n};\n\nexport function registerDynamicText(\n loader?: { registerComponent: typeof registerComponent },\n customDynamicTextMeta?: ComponentMeta<DynamicTextProps>\n) {\n if (loader) {\n loader.registerComponent(\n DynamicText,\n customDynamicTextMeta ?? dynamicTextMeta\n );\n } else {\n registerComponent(DynamicText, customDynamicTextMeta ?? dynamicTextMeta);\n }\n}\n\nexport const dynamicImageMeta: ComponentMeta<DynamicImageProps> = {\n name: \"hostless-dynamic-image\",\n displayName: \"Dynamic Image\",\n importName: \"DynamicImage\",\n importPath: thisModule,\n props: {\n ...dynamicPropsWithoutTag,\n selector: {\n type: \"string\",\n description:\n \"The selector expression to use to get the image source URL, such as: someVariable.0.someField\",\n },\n },\n};\n\nexport function registerDynamicImage(\n loader?: { registerComponent: typeof registerComponent },\n customDynamicImageMeta?: ComponentMeta<DynamicImageProps>\n) {\n if (loader) {\n loader.registerComponent(\n DynamicImage,\n customDynamicImageMeta ?? dynamicImageMeta\n );\n } else {\n registerComponent(DynamicImage, customDynamicImageMeta ?? dynamicImageMeta);\n }\n}\n","import { ComponentMeta, PlasmicCanvasContext } from \"@plasmicapp/host\";\nimport registerComponent from \"@plasmicapp/host/registerComponent\";\nimport React, { useContext } from \"react\";\n\nexport interface IframeProps {\n src: string;\n preview?: boolean;\n className?: string;\n}\n\nexport default function Iframe({ preview, src, className }: IframeProps) {\n const isEditing = useContext(PlasmicCanvasContext);\n if (isEditing && !preview) {\n return (\n <div className={className}>\n <div\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n background: \"#eee\",\n color: \"#888\",\n fontSize: \"36px\",\n fontFamily: \"sans-serif\",\n fontWeight: \"bold\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n overflow: \"hidden\",\n }}\n >\n Iframe placeholder\n </div>\n </div>\n );\n }\n return <iframe src={src} className={className} />;\n}\n\nexport const iframeMeta: ComponentMeta<IframeProps> = {\n name: \"hostless-iframe\",\n displayName: \"Iframe\",\n importName: \"Iframe\",\n importPath: \"@plasmicpkgs/plasmic-basic-components\",\n props: {\n src: {\n type: \"string\",\n defaultValue: \"https://www.example.com\",\n },\n preview: {\n type: \"boolean\",\n description: \"Load the iframe while editing in Plasmic Studio\",\n },\n },\n defaultStyles: {\n width: \"300px\",\n height: \"150px\",\n maxWidth: \"100%\",\n },\n};\n\nexport function registerIframe(\n loader?: { registerComponent: typeof registerComponent },\n customIframeMeta?: ComponentMeta<IframeProps>\n) {\n if (loader) {\n loader.registerComponent(Iframe, customIframeMeta ?? iframeMeta);\n } else {\n registerComponent(Iframe, customIframeMeta ?? iframeMeta);\n }\n}\n","import registerComponent, {\n ComponentMeta,\n} from \"@plasmicapp/host/registerComponent\";\nimport React, {\n ReactNode,\n RefObject,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nexport function useDirectionalIntersection({\n ref,\n scrollDownThreshold = 0.5,\n scrollUpThreshold = 0,\n}: {\n ref: RefObject<HTMLElement>;\n scrollDownThreshold?: number;\n scrollUpThreshold?: number;\n}) {\n const [revealed, setRevealed] = useState(false);\n useEffect(() => {\n if (ref.current && typeof IntersectionObserver === \"function\") {\n const handler = (entries: IntersectionObserverEntry[]) => {\n if (entries[0].intersectionRatio >= scrollDownThreshold) {\n setRevealed(true);\n } else if (entries[0].intersectionRatio <= scrollUpThreshold) {\n setRevealed(false);\n }\n };\n\n const observer = new IntersectionObserver(handler, {\n root: null,\n rootMargin: \"0%\",\n threshold: [scrollUpThreshold, scrollDownThreshold],\n });\n observer.observe(ref.current);\n\n return () => {\n setRevealed(false);\n observer.disconnect();\n };\n }\n return () => {};\n }, [ref.current, scrollDownThreshold, scrollUpThreshold]);\n return revealed;\n}\n\nexport interface ScrollRevealerProps {\n children?: ReactNode;\n className?: string;\n scrollUpThreshold?: number;\n scrollDownThreshold?: number;\n}\n\n/**\n * Unlike react-awesome-reveal, ScrollRevealer:\n *\n * - has configurable thresholds\n * - triggers arbitrary render/unrender animations\n *\n * TODO: Merge this inta a general Reveal component, perhaps forking react-awesome-reveal, so that we don't have two different reveal components for users.\n */\nexport default function ScrollRevealer({\n children,\n className,\n scrollDownThreshold = 0.5,\n scrollUpThreshold = 0,\n}: ScrollRevealerProps) {\n const intersectionRef = useRef<HTMLDivElement>(null);\n const revealed = useDirectionalIntersection({\n ref: intersectionRef,\n scrollUpThreshold,\n scrollDownThreshold,\n });\n return (\n <div className={className} ref={intersectionRef}>\n {revealed ? children : null}\n </div>\n );\n}\n\nexport const scrollRevealerMeta: ComponentMeta<ScrollRevealerProps> = {\n name: \"hostless-scroll-revealer\",\n importName: \"ScrollRevealer\",\n displayName: \"Scroll Revealer\",\n importPath: \"@plasmicpkgs/plasmic-basic-components\",\n props: {\n children: \"slot\",\n scrollDownThreshold: {\n type: \"number\",\n displayName: \"Scroll down threshold\",\n defaultValueHint: 0.5,\n description:\n \"How much of the element (as a fraction) must you scroll into view for it to appear (defaults to 0.5)\",\n },\n scrollUpThreshold: {\n type: \"number\",\n displayName: \"Scroll up threshold\",\n defaultValueHint: 0,\n description:\n \"While scrolling up, how much of the element (as a fraction) can still be scrolled in view before it disappears (defaults to 0, meaning you must scroll up until it's completely out of view)\",\n },\n },\n defaultStyles: {\n width: \"stretch\",\n maxWidth: \"100%\",\n },\n};\n\nexport function registerScrollRevealer(\n loader?: { registerComponent: typeof registerComponent },\n customScrollRevealerMeta?: ComponentMeta<ScrollRevealerProps>\n) {\n if (loader) {\n loader.registerComponent(\n ScrollRevealer,\n customScrollRevealerMeta ?? scrollRevealerMeta\n );\n } else {\n registerComponent(\n ScrollRevealer,\n customScrollRevealerMeta ?? scrollRevealerMeta\n );\n }\n}\n","import registerComponent, {\n ComponentMeta,\n} from \"@plasmicapp/host/registerComponent\";\nimport React from \"react\";\n\nexport type VideoProps = Pick<\n React.ComponentProps<\"video\">,\n | \"autoPlay\"\n | \"controls\"\n | \"loop\"\n | \"muted\"\n | \"playsInline\"\n | \"poster\"\n | \"preload\"\n | \"src\"\n>;\n\nconst Video = React.forwardRef<HTMLVideoElement, VideoProps>(\n (props: VideoProps, ref) => {\n return <video ref={ref} {...props} />;\n }\n);\n\nexport default Video;\n\nexport const videoMeta: ComponentMeta<VideoProps> = {\n name: \"hostless-html-video\",\n importName: \"Video\",\n displayName: \"HTML Video\",\n importPath: \"@plasmicpkgs/plasmic-basic-components\",\n props: {\n src: {\n type: \"string\",\n defaultValue:\n \"https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.webm\",\n displayName: \"Source URL\",\n description: \"URL to a video file.\",\n },\n autoPlay: {\n type: \"boolean\",\n displayName: \"Auto Play\",\n description:\n \"Whether the video show automatically start playing when the player loads\",\n },\n controls: {\n type: \"boolean\",\n displayName: \"Show Controls\",\n description: \"Whether the video player controls should be displayed\",\n },\n playsInline: {\n type: \"boolean\",\n displayName: \"Plays inline\",\n description:\n \"Usually on mobile, when tilted landscape, videos can play fullscreen. Turn this on to prevent that.\",\n },\n loop: {\n type: \"boolean\",\n displayName: \"Loop\",\n description: \"Whether the video should be played again after it finishes\",\n },\n muted: {\n type: \"boolean\",\n displayName: \"Muted\",\n description: \"Whether audio should be muted\",\n },\n poster: {\n type: \"imageUrl\",\n displayName: \"Poster (placeholder) image\",\n description: \"Image to show while video is downloading\",\n },\n preload: {\n type: \"choice\",\n options: [\"none\", \"metadata\", \"auto\"],\n displayName: \"Preload\",\n description:\n \"Whether to preload nothing, metadata only, or the full video\",\n },\n },\n defaultStyles: {\n height: \"hug\",\n width: \"640px\",\n maxWidth: \"100%\",\n },\n};\n\nexport function registerVideo(\n loader?: { registerComponent: typeof registerComponent },\n customVideoMeta?: ComponentMeta<VideoProps>\n) {\n if (loader) {\n loader.registerComponent(Video, customVideoMeta ?? videoMeta);\n } else {\n registerComponent(Video, customVideoMeta ?? videoMeta);\n }\n}\n"],"names":["DataContext","createContext","undefined","thisModule","applySelector","rawData","selector","curData","split","_curData","useSelector","useDataEnv","useSelectors","selectors","Object","fromEntries","entries","filter","map","args","tuple","useContext","DataProvider","name","data","children","existingEnv","React","Provider","value","DynamicElement","tag","className","propSelectors","props","computed","createElement","DynamicText","DynamicImage","loading","style","objectFit","src","DynamicRepeater","loopItemName","keySelector","finalData","item","index","key","repeatedElement","dynamicRepeaterProps","type","description","defaultValue","dynamicRepeaterMeta","displayName","importName","importPath","dataProviderMeta","birthYear","profilePicture","dynamicPropsWithoutTag","defaultValueHint","dynamicProps","dynamicElementMeta","dynamicTextMeta","dynamicImageMeta","Iframe","preview","PlasmicCanvasContext","position","top","left","right","bottom","background","color","fontSize","fontFamily","fontWeight","display","alignItems","justifyContent","overflow","iframeMeta","defaultStyles","width","height","maxWidth","useDirectionalIntersection","ref","scrollDownThreshold","scrollUpThreshold","useState","revealed","setRevealed","useEffect","current","IntersectionObserver","observer","intersectionRatio","root","rootMargin","threshold","observe","disconnect","ScrollRevealer","intersectionRef","useRef","scrollRevealerMeta","Video","forwardRef","videoMeta","autoPlay","controls","playsInline","loop","muted","poster","preload","options","loader","customDataProviderMeta","registerComponent","customDynamicElementMeta","customDynamicImageMeta","customDynamicRepeaterMeta","customDynamicTextMeta","customIframeMeta","customScrollRevealerMeta","customVideoMeta"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { repeatedElement, PlasmicCanvasContext } from '@plasmicapp/host';
|
|
2
2
|
import registerComponent from '@plasmicapp/host/registerComponent';
|
|
3
|
-
import React, { createContext, useContext, createElement, useRef,
|
|
3
|
+
import React, { createContext, useContext, createElement, useRef, useState, useEffect } from 'react';
|
|
4
4
|
|
|
5
5
|
function _extends() {
|
|
6
6
|
_extends = Object.assign || function (target) {
|
|
@@ -80,16 +80,9 @@ var tuple = function tuple() {
|
|
|
80
80
|
|
|
81
81
|
return args;
|
|
82
82
|
};
|
|
83
|
-
function ensure(x) {
|
|
84
|
-
if (x === null || x === undefined) {
|
|
85
|
-
debugger;
|
|
86
|
-
throw new Error("Value must not be undefined or null");
|
|
87
|
-
} else {
|
|
88
|
-
return x;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
83
|
|
|
92
84
|
var DataContext = /*#__PURE__*/createContext(undefined);
|
|
85
|
+
var thisModule = "@plasmicpkgs/plasmic-basic-components";
|
|
93
86
|
function applySelector(rawData, selector) {
|
|
94
87
|
if (!selector) {
|
|
95
88
|
return undefined;
|
|
@@ -192,19 +185,17 @@ function DynamicImage(_ref6) {
|
|
|
192
185
|
src: "https://studio.plasmic.app/static/img/placeholder.png"
|
|
193
186
|
}));
|
|
194
187
|
}
|
|
195
|
-
function
|
|
188
|
+
function DynamicRepeater(_ref7) {
|
|
196
189
|
var _ref8;
|
|
197
190
|
|
|
198
|
-
var
|
|
191
|
+
var children = _ref7.children,
|
|
199
192
|
loopItemName = _ref7.loopItemName,
|
|
200
|
-
children = _ref7.children,
|
|
201
|
-
data = _ref7.data,
|
|
202
193
|
keySelector = _ref7.keySelector,
|
|
203
|
-
|
|
204
|
-
|
|
194
|
+
selector = _ref7.selector,
|
|
195
|
+
data = _ref7.data;
|
|
205
196
|
// Defaults to an array of three items.
|
|
206
197
|
var finalData = (_ref8 = data != null ? data : useSelector(selector)) != null ? _ref8 : [1, 2, 3];
|
|
207
|
-
return React.createElement(
|
|
198
|
+
return React.createElement(React.Fragment, null, finalData == null ? void 0 : finalData.map == null ? void 0 : finalData.map(function (item, index) {
|
|
208
199
|
var _applySelector;
|
|
209
200
|
|
|
210
201
|
return React.createElement(DataProvider, {
|
|
@@ -214,24 +205,32 @@ function DynamicCollection(_ref7) {
|
|
|
214
205
|
}, repeatedElement(index === 0, children));
|
|
215
206
|
}));
|
|
216
207
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
208
|
+
var dynamicRepeaterProps = {
|
|
209
|
+
selector: {
|
|
210
|
+
type: "string",
|
|
211
|
+
description: "The selector expression to use to get the array of data to loop over, such as: someVariable.0.someField"
|
|
212
|
+
},
|
|
213
|
+
loopItemName: {
|
|
214
|
+
type: "string",
|
|
215
|
+
defaultValue: "item",
|
|
216
|
+
description: "The name of the variable to use to store the current item in the loop"
|
|
217
|
+
},
|
|
218
|
+
children: "slot"
|
|
219
|
+
};
|
|
220
|
+
var dynamicRepeaterMeta = {
|
|
221
|
+
name: "hostless-dynamic-repeater",
|
|
222
|
+
displayName: "Dynamic Repeater",
|
|
223
|
+
importName: "DynamicRepeater",
|
|
224
|
+
importPath: thisModule,
|
|
225
|
+
props: dynamicRepeaterProps
|
|
226
|
+
};
|
|
227
|
+
function registerDynamicRepeater(loader, customDynamicRepeaterMeta) {
|
|
228
|
+
if (loader) {
|
|
229
|
+
loader.registerComponent(DynamicRepeater, customDynamicRepeaterMeta != null ? customDynamicRepeaterMeta : dynamicRepeaterMeta);
|
|
230
|
+
} else {
|
|
231
|
+
registerComponent(DynamicRepeater, customDynamicRepeaterMeta != null ? customDynamicRepeaterMeta : dynamicRepeaterMeta);
|
|
232
|
+
}
|
|
233
233
|
}
|
|
234
|
-
var thisModule = "@plasmicpkgs/plasmic-basic-components";
|
|
235
234
|
var dataProviderMeta = {
|
|
236
235
|
name: "hostless-data-provider",
|
|
237
236
|
displayName: "Data Provider",
|
|
@@ -284,7 +283,7 @@ function registerDataProvider(loader, customDataProviderMeta) {
|
|
|
284
283
|
var dynamicPropsWithoutTag = {
|
|
285
284
|
propSelectors: {
|
|
286
285
|
type: "object",
|
|
287
|
-
|
|
286
|
+
defaultValueHint: {},
|
|
288
287
|
description: "An object whose keys are prop names and values are selector expressions. Use this to set any prop to a dynamic value."
|
|
289
288
|
}
|
|
290
289
|
};
|
|
@@ -292,7 +291,7 @@ var dynamicPropsWithoutTag = {
|
|
|
292
291
|
var dynamicProps = /*#__PURE__*/_extends({}, dynamicPropsWithoutTag, {
|
|
293
292
|
tag: {
|
|
294
293
|
type: "string",
|
|
295
|
-
|
|
294
|
+
defaultValueHint: "div",
|
|
296
295
|
description: "The HTML tag to use"
|
|
297
296
|
}
|
|
298
297
|
}); // TODO Eventually we'll want to expose all the base HTML properties, but in the nicer way that we do within the studio.
|
|
@@ -352,121 +351,6 @@ function registerDynamicImage(loader, customDynamicImageMeta) {
|
|
|
352
351
|
registerComponent(DynamicImage, customDynamicImageMeta != null ? customDynamicImageMeta : dynamicImageMeta);
|
|
353
352
|
}
|
|
354
353
|
}
|
|
355
|
-
var dynamicCollectionProps = /*#__PURE__*/_extends({}, dynamicProps, {
|
|
356
|
-
selector: {
|
|
357
|
-
type: "string",
|
|
358
|
-
description: "The selector expression to use to get the array of data to loop over, such as: someVariable.0.someField"
|
|
359
|
-
},
|
|
360
|
-
loopItemName: {
|
|
361
|
-
type: "string",
|
|
362
|
-
defaultValue: "item",
|
|
363
|
-
description: "The name of the variable to use to store the current item in the loop"
|
|
364
|
-
},
|
|
365
|
-
children: "slot"
|
|
366
|
-
});
|
|
367
|
-
var dynamicCollectionMeta = {
|
|
368
|
-
name: "hostless-dynamic-collection",
|
|
369
|
-
displayName: "Dynamic Collection",
|
|
370
|
-
importName: "DynamicCollection",
|
|
371
|
-
importPath: thisModule,
|
|
372
|
-
props: dynamicCollectionProps
|
|
373
|
-
};
|
|
374
|
-
function registerDynamicCollection(loader, customDynamicCollectionMeta) {
|
|
375
|
-
if (loader) {
|
|
376
|
-
loader.registerComponent(DynamicCollection, customDynamicCollectionMeta != null ? customDynamicCollectionMeta : dynamicCollectionMeta);
|
|
377
|
-
} else {
|
|
378
|
-
registerComponent(DynamicCollection, customDynamicCollectionMeta != null ? customDynamicCollectionMeta : dynamicCollectionMeta);
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
var dynamicCollectionGridProps = /*#__PURE__*/_extends({}, dynamicCollectionProps, {
|
|
382
|
-
columns: {
|
|
383
|
-
type: "number",
|
|
384
|
-
defaultValue: 2,
|
|
385
|
-
description: "The number of columns to use in the grid"
|
|
386
|
-
},
|
|
387
|
-
columnGap: {
|
|
388
|
-
type: "number",
|
|
389
|
-
defaultValue: 8,
|
|
390
|
-
description: "The gap between columns"
|
|
391
|
-
},
|
|
392
|
-
rowGap: {
|
|
393
|
-
type: "number",
|
|
394
|
-
defaultValue: 8,
|
|
395
|
-
description: "The gap between rows"
|
|
396
|
-
}
|
|
397
|
-
});
|
|
398
|
-
var dynamicCollectionGridMeta = {
|
|
399
|
-
name: "hostless-dynamic-collection-grid",
|
|
400
|
-
displayName: "Dynamic Collection Grid",
|
|
401
|
-
importName: "DynamicCollectionGrid",
|
|
402
|
-
importPath: thisModule,
|
|
403
|
-
props: dynamicCollectionGridProps
|
|
404
|
-
};
|
|
405
|
-
function registerDynamicCollectionGrid(loader, customDynamicCollectionGridMeta) {
|
|
406
|
-
if (loader) {
|
|
407
|
-
loader.registerComponent(DynamicCollectionGrid, customDynamicCollectionGridMeta != null ? customDynamicCollectionGridMeta : dynamicCollectionGridMeta);
|
|
408
|
-
} else {
|
|
409
|
-
registerComponent(DynamicCollectionGrid, customDynamicCollectionGridMeta != null ? customDynamicCollectionGridMeta : dynamicCollectionGridMeta);
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
function Embed(_ref) {
|
|
414
|
-
var className = _ref.className,
|
|
415
|
-
code = _ref.code,
|
|
416
|
-
_ref$hideInEditor = _ref.hideInEditor,
|
|
417
|
-
hideInEditor = _ref$hideInEditor === void 0 ? false : _ref$hideInEditor;
|
|
418
|
-
var rootElt = useRef(null);
|
|
419
|
-
useEffect(function () {
|
|
420
|
-
if (hideInEditor) {
|
|
421
|
-
return;
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
Array.from(ensure(rootElt.current).querySelectorAll("script")).forEach(function (oldScript) {
|
|
425
|
-
var newScript = document.createElement("script");
|
|
426
|
-
Array.from(oldScript.attributes).forEach(function (attr) {
|
|
427
|
-
return newScript.setAttribute(attr.name, attr.value);
|
|
428
|
-
});
|
|
429
|
-
newScript.appendChild(document.createTextNode(oldScript.innerHTML));
|
|
430
|
-
ensure(oldScript.parentNode).replaceChild(newScript, oldScript);
|
|
431
|
-
});
|
|
432
|
-
}, [code, hideInEditor]);
|
|
433
|
-
var effectiveCode = hideInEditor ? "" : code;
|
|
434
|
-
return React.createElement("div", {
|
|
435
|
-
ref: rootElt,
|
|
436
|
-
className: className,
|
|
437
|
-
dangerouslySetInnerHTML: {
|
|
438
|
-
__html: effectiveCode
|
|
439
|
-
}
|
|
440
|
-
});
|
|
441
|
-
}
|
|
442
|
-
var embedMeta = {
|
|
443
|
-
name: "hostless-embed",
|
|
444
|
-
displayName: "Embed",
|
|
445
|
-
importName: "Embed",
|
|
446
|
-
importPath: "@plasmicpkgs/plasmic-basic-components",
|
|
447
|
-
props: {
|
|
448
|
-
code: {
|
|
449
|
-
type: "string",
|
|
450
|
-
defaultValue: "https://www.example.com"
|
|
451
|
-
},
|
|
452
|
-
hideInEditor: {
|
|
453
|
-
type: "boolean",
|
|
454
|
-
displayName: "Hide in editor",
|
|
455
|
-
description: "Disable running the code while editing in Plasmic Studio (may require reload)",
|
|
456
|
-
editOnly: true
|
|
457
|
-
}
|
|
458
|
-
},
|
|
459
|
-
defaultStyles: {
|
|
460
|
-
maxWidth: "100%"
|
|
461
|
-
}
|
|
462
|
-
};
|
|
463
|
-
function registerEmbed(loader, customEmbedMeta) {
|
|
464
|
-
if (loader) {
|
|
465
|
-
loader.registerComponent(Embed, customEmbedMeta != null ? customEmbedMeta : embedMeta);
|
|
466
|
-
} else {
|
|
467
|
-
registerComponent(Embed, customEmbedMeta != null ? customEmbedMeta : embedMeta);
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
354
|
|
|
471
355
|
function Iframe(_ref) {
|
|
472
356
|
var preview = _ref.preview,
|
|
@@ -605,13 +489,13 @@ var scrollRevealerMeta = {
|
|
|
605
489
|
scrollDownThreshold: {
|
|
606
490
|
type: "number",
|
|
607
491
|
displayName: "Scroll down threshold",
|
|
608
|
-
|
|
492
|
+
defaultValueHint: 0.5,
|
|
609
493
|
description: "How much of the element (as a fraction) must you scroll into view for it to appear (defaults to 0.5)"
|
|
610
494
|
},
|
|
611
495
|
scrollUpThreshold: {
|
|
612
496
|
type: "number",
|
|
613
497
|
displayName: "Scroll up threshold",
|
|
614
|
-
|
|
498
|
+
defaultValueHint: 0,
|
|
615
499
|
description: "While scrolling up, how much of the element (as a fraction) can still be scrolled in view before it disappears (defaults to 0, meaning you must scroll up until it's completely out of view)"
|
|
616
500
|
}
|
|
617
501
|
},
|
|
@@ -696,5 +580,5 @@ function registerVideo(loader, customVideoMeta) {
|
|
|
696
580
|
}
|
|
697
581
|
}
|
|
698
582
|
|
|
699
|
-
export { DataContext, DataProvider,
|
|
583
|
+
export { DataContext, DataProvider, DynamicElement, DynamicImage, DynamicRepeater, DynamicText, Iframe, ScrollRevealer, Video, applySelector, dataProviderMeta, dynamicElementMeta, dynamicImageMeta, dynamicRepeaterMeta, dynamicRepeaterProps, dynamicTextMeta, iframeMeta, registerDataProvider, registerDynamicElement, registerDynamicImage, registerDynamicRepeater, registerDynamicText, registerIframe, registerScrollRevealer, registerVideo, scrollRevealerMeta, useDataEnv, useDirectionalIntersection, useSelector, useSelectors, videoMeta };
|
|
700
584
|
//# sourceMappingURL=plasmic-basic-components.esm.js.map
|