@planningcenter/wrapped 1.0.1-rc.0 → 1.0.1-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/pco_wrapped_banner.d.ts.map +1 -1
- package/dist/components/share_modal.d.ts.map +1 -1
- package/dist/wrapped.js +1 -1
- package/dist/wrapped.js.map +1 -1
- package/dist/wrapped.modern.js +1 -1
- package/dist/wrapped.modern.js.map +1 -1
- package/dist/wrapped.module.js +1 -1
- package/dist/wrapped.module.js.map +1 -1
- package/dist/wrapped.umd.js +1 -1
- package/dist/wrapped.umd.js.map +1 -1
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pco_wrapped_banner.d.ts","sourceRoot":"","sources":["../../components/pco_wrapped_banner.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAmB,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"pco_wrapped_banner.d.ts","sourceRoot":"","sources":["../../components/pco_wrapped_banner.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAmB,MAAM,OAAO,CAAA;AASvC,MAAM,CAAC,OAAO,UAAU,gBAAgB,6BAyGvC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"share_modal.d.ts","sourceRoot":"","sources":["../../components/share_modal.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAmB,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"share_modal.d.ts","sourceRoot":"","sources":["../../components/share_modal.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAGvC,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EACjC,OAAO,EACP,gBAAgB,EAChB,aAAa,GACd,EAAE;IACD,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,gBAAgB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;IAC3C,aAAa,EAAE,OAAO,CAAA;CACvB,qBAuGA"}
|
package/dist/wrapped.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=require("@planningcenter/tapestry-react"),t=require("react"),n=require("react-dom/server"),a=require("react-dom"),
|
|
1
|
+
var e=require("@planningcenter/tapestry-react"),t=require("react"),r=require("@planningcenter/url"),n=require("react-dom/server"),a=require("react-dom"),l=require("@planningcenter/tapestry");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=/*#__PURE__*/i(t),c=/*#__PURE__*/i(n);function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},d.apply(null,arguments)}var u=["children","onClose","size"],s={sm:400,md:600,lg:800,xl:1e3},f=function(e,t){switch(e){case"sm":return"calc(100% - 96px)";case"md":return"lg"===t||"xl"===t?"calc(100% - 96px)":s[t]+"px";case"lg":return s[t]+"px";default:return s.md+"px"}},m=function(t){var r=t.children,n=t.onClose,a=t.size,l=void 0===a?"md":a,i=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(t,u);/*#__PURE__*/return o.default.createElement(e.Modal,d({},i,{onRequestClose:n,radius:"8px",padding:"0",maxWidth:"90%",marginHorizontal:0,mediaQueries:{sm:{maxWidth:f("sm",l),position:"relative",right:"24px"},md:{maxWidth:f("md",l)},lg:{maxWidth:f("lg",l)}}}),r)},p=function(e){var t=e.children,r=document.querySelector('[data-tapestry-react-theme-provider-home="true"]');return a.createPortal(t,r)},g=function(t){var r=t.children;/*#__PURE__*/return o.default.createElement(e.Heading,{level:1,margin:0,css:{color:l.token("--t-text-color-default-headline"),fontWeight:"500",lineHeight:"2rem",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},r)},h=function(t){var r=t.children;/*#__PURE__*/return o.default.createElement(e.Text,{fontSize:3,css:{color:l.token("--t-text-color-default-secondary"),fontWeight:500,lineHeight:1.5}},r)},v=function(t){var r=t.onClose,n=t.subTitle,a=t.children;/*#__PURE__*/return o.default.createElement(e.Box,{paddingHorizontal:4,paddingTop:4},/*#__PURE__*/o.default.createElement(e.StackView,{axis:"horizontal",alignment:"center",distribution:"space-between",spacing:1},/*#__PURE__*/o.default.createElement(g,null,t.title),r&&/*#__PURE__*/o.default.createElement(e.Button,{theme:"default",variant:"naked",icon:{name:"general.x",size:"md"},title:"Close modal",marginRight:-1,onClick:r})),/*#__PURE__*/o.default.createElement(e.Box,{paddingTop:n||a?.5:0},n&&/*#__PURE__*/o.default.createElement(h,null,n),a))},x=function(t){var r=t.children;/*#__PURE__*/return o.default.createElement(e.Box,{backgroundColor:l.token("--t-surface-color-card"),padding:4,"data-modal-body":!0},r)},w=function(t){var r=t.children;/*#__PURE__*/return o.default.createElement(e.Box,{paddingHorizontal:4,paddingTop:3,backgroundColor:l.token("--t-surface-color-card"),css:{borderTop:"solid 1px "+l.token("--t-border-color-default-base")}},r)};function E(n){var a=n.onClose,l=n.setShareOrgStats,i=n.shareOrgStats,c=t.useState(!1),d=c[0],u=c[1],s=r.pcoUrl("home")+"/wrapped";function f(e){var t,r;fetch("/wrapped",{method:"PATCH",headers:{"Content-Type":"application/json","X-CSRF-Token":null!=(t=null==(r=document.querySelector('meta[name="csrf-token"]'))?void 0:r.getAttribute("content"))?t:""},body:JSON.stringify({shared:e})}).then(function(t){if(!t.ok)throw new Error("Failed to share. Please try again later.");return l(e)}).catch(function(e){return console.error(e)})}/*#__PURE__*/return o.default.createElement(p,null,/*#__PURE__*/o.default.createElement(m,{onClose:a,open:!0,"data-testid":"pco-wrapped-modal"},/*#__PURE__*/o.default.createElement(v,{onClose:a,title:"Share",subTitle:'Who should be able to view your church\'s "Year in Planning Center"'}),/*#__PURE__*/o.default.createElement(x,null,/*#__PURE__*/o.default.createElement(e.StackView,{spacing:3},/*#__PURE__*/o.default.createElement(e.StackView,{spacing:1},/*#__PURE__*/o.default.createElement(e.Heading,{level:3},"Access"),/*#__PURE__*/o.default.createElement(e.Radio,{checked:!i,label:"Organization Admins",name:"radio",onChange:function(){return f(!1)},size:"md",value:"false"}),/*#__PURE__*/o.default.createElement(e.Radio,{checked:i,label:"Any logged in user",name:"radio",onChange:function(){return f(!0)},size:"md",value:"true"})),/*#__PURE__*/o.default.createElement(e.StackView,{spacing:1},/*#__PURE__*/o.default.createElement(e.Heading,{level:3},"Link"),/*#__PURE__*/o.default.createElement(e.StackView,{axis:"vertical",spacing:1,mediaQueries:{sm:{alignment:"center",axis:"horizontal"}},overflowWrap:"break-word"},/*#__PURE__*/o.default.createElement(e.Link,{external:!0,to:"/wrapped"},s),navigator.clipboard&&/*#__PURE__*/o.default.createElement(e.Button,{disabled:d,onClick:function(){navigator.clipboard.writeText(s).then(function(){return u(!0)}).catch(function(e){return console.error(e)})},theme:"primary",variant:"outline"},d?"Copied!":"Copy"))))),/*#__PURE__*/o.default.createElement(w,null,/*#__PURE__*/o.default.createElement(e.StackView,{padding:0,axis:"horizontal",alignment:"end",distribution:"end",spacing:2},/*#__PURE__*/o.default.createElement(e.Button,{onClick:a,title:"Done",theme:"primary"})))))}function k(){/*#__PURE__*/return o.default.createElement("svg",{width:"1724",height:"1080",viewBox:"0 0 1724 1080",fill:"none",xmlns:"http://www.w3.org/2000/svg"},/*#__PURE__*/o.default.createElement("g",{filter:"url(#filter0_f_154_9174)"},/*#__PURE__*/o.default.createElement("rect",{x:"606.744",y:"1062.82",width:"649.488",height:"964.695",rx:"324.744",transform:"rotate(-120 606.744 1062.82)",fill:"url(#paint0_linear_154_9174)",fillOpacity:"0.5"})),/*#__PURE__*/o.default.createElement("circle",{cx:"1200.5",cy:"195.5",r:"45.5",fill:"white",fillOpacity:"0.3"}),/*#__PURE__*/o.default.createElement("circle",{cx:"613.5",cy:"206.5",r:"22.5",fill:"white",fillOpacity:"0.4"}),/*#__PURE__*/o.default.createElement("circle",{cx:"1340",cy:"384",r:"21",fill:"white",fillOpacity:"0.5"}),/*#__PURE__*/o.default.createElement("defs",null,/*#__PURE__*/o.default.createElement("filter",{id:"filter0_f_154_9174",x:"0.810547",y:"-263.19",width:"1722.57",height:"1607.2",filterUnits:"userSpaceOnUse",colorInterpolationFilters:"sRGB"},/*#__PURE__*/o.default.createElement("feFlood",{floodOpacity:"0",result:"BackgroundImageFix"}),/*#__PURE__*/o.default.createElement("feBlend",{mode:"normal",in:"SourceGraphic",in2:"BackgroundImageFix",result:"shape"}),/*#__PURE__*/o.default.createElement("feGaussianBlur",{stdDeviation:"200",result:"effect1_foregroundBlur_154_9174"})),/*#__PURE__*/o.default.createElement("linearGradient",{id:"paint0_linear_154_9174",x1:"1040.11",y1:"1031.29",x2:"1407.11",y2:"1806.85",gradientUnits:"userSpaceOnUse"},/*#__PURE__*/o.default.createElement("stop",{offset:"0.21875",stopColor:"#FFD748"}),/*#__PURE__*/o.default.createElement("stop",{offset:"0.541667",stopColor:"#FF4242"}),/*#__PURE__*/o.default.createElement("stop",{offset:"0.84375",stopColor:"#657CF1"}))))}exports.PcoWrappedBanner=function(){var n=function(e,r,n){void 0===n&&(n=!1);var a=t.useState(function(){if(n)return r;try{var t=window.localStorage.getItem(e);return t?JSON.parse(t):r}catch(e){return r}}),l=a[0],i=a[1],o=JSON.stringify(l);return t.useEffect(function(){window.localStorage.setItem(e,o)},[e,o]),[l,i,function(){return window.localStorage.removeItem(e)}]}("pco-wrapped-dismissed",!1),a=n[0],i=n[1],d=window.pco.wrapped,u=d.enabled,s=d.shared,f=d.siteAdmin,m=t.useState(!1),p=m[0],g=m[1],h=t.useState(s),v=h[0],x=h[1],w=c.default.renderToStaticMarkup(/*#__PURE__*/o.default.createElement(k,null)),S="data:image/svg+xml,"+encodeURIComponent(w),b=window.location.host.includes("home"),y=r.pcoUrl("home")+"/wrapped";return a||!u?null:/*#__PURE__*/o.default.createElement(e.ThemeProvider,{theme:{button:{themes:{wrapped:{fill:{backgroundColor:"var(--t-fill-color-button-neutral-solid-default)"},naked:{},outline:{}}}}}},/*#__PURE__*/o.default.createElement(e.StackView,{axis:"horizontal",alignment:"center",backgroundColor:"var(--t-surface-color-card)",backgroundImage:"url('"+S+"')",backgroundPosition:"center center",backgroundRepeat:"no-repeat",backgroundSize:"auto",distribution:"space-between",padding:2},/*#__PURE__*/o.default.createElement(e.StackView,{axis:"vertical",spacing:2,mediaQueries:{sm:{alignment:"center",axis:"horizontal"}}},/*#__PURE__*/o.default.createElement(e.Heading,{level:4,fontWeight:800},"Your year in Planning Center is here!"," "),/*#__PURE__*/o.default.createElement(e.GridView,{columns:"repeat(2, 1fr)",spacing:1,mediaQueries:{sm:{columns:"repeat(2, max-content)"}}},/*#__PURE__*/o.default.createElement(e.Button,{css:{"&:visited":{color:"var(--t-text-color-default-inverted)"},"&:hover":{color:"var(--t-text-color-default-inverted)"}},flex:1,external:!0,to:y,theme:"primary",mediaQueries:{sm:{flex:"initial"}}},"See it now"),b&&f&&/*#__PURE__*/o.default.createElement(e.Button,{flex:1,onClick:function(){return g(!0)},theme:"wrapped",mediaQueries:{sm:{flex:"initial"}}},"Share"))),/*#__PURE__*/o.default.createElement(e.Button,{variant:"naked",icon:{name:"general.x",size:"md",color:l.token("--t-fill-color-neutral-020")},title:"Dismiss",onClick:function(){return i(!0)}})),p&&/*#__PURE__*/o.default.createElement(E,{onClose:function(){return g(!1)},shareOrgStats:v,setShareOrgStats:x}))};
|
|
2
2
|
//# sourceMappingURL=wrapped.js.map
|
package/dist/wrapped.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapped.js","sources":["../modal.tsx","../components/share_modal.tsx","../components/welcome_background.tsx","../components/pco_wrapped_banner.tsx","../hooks/use_local_storage.ts"],"sourcesContent":["import {\n Box,\n Button,\n Heading,\n ModalProps,\n StackView,\n Modal as TRModal,\n Text,\n} from \"@planningcenter/tapestry-react\"\n\nimport React from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { token } from \"@planningcenter/tapestry\"\n\nconst MODAL_SIZES = {\n sm: 400,\n md: 600,\n lg: 800,\n xl: 1000,\n} as const\n\nconst TOOLBAR_WIDTH = 48\n\nconst getModalWidth = (\n mediaQuery: \"sm\" | \"md\" | \"lg\",\n modalSize: keyof typeof MODAL_SIZES,\n) => {\n switch (mediaQuery) {\n case \"sm\":\n return `calc(100% - ${TOOLBAR_WIDTH * 2}px)`\n case \"md\":\n return modalSize === \"lg\" || modalSize === \"xl\"\n ? `calc(100% - ${TOOLBAR_WIDTH * 2}px)`\n : `${MODAL_SIZES[modalSize]}px`\n case \"lg\":\n return `${MODAL_SIZES[modalSize]}px`\n default:\n return `${MODAL_SIZES.md}px`\n }\n}\n\nexport const Modal = ({\n children,\n onClose,\n size = \"md\",\n ...modalProps\n}: {\n children: React.ReactElement | React.ReactElement[]\n onClose: () => void\n size?: keyof typeof MODAL_SIZES\n} & ModalProps) => {\n return (\n <TRModal\n {...modalProps}\n onRequestClose={onClose}\n radius=\"8px\"\n padding=\"0\"\n maxWidth=\"90%\"\n marginHorizontal={0}\n mediaQueries={{\n sm: {\n maxWidth: getModalWidth(\"sm\", size),\n position: \"relative\",\n right: `${TOOLBAR_WIDTH / 2}px`,\n },\n md: {\n maxWidth: getModalWidth(\"md\", size),\n },\n lg: {\n maxWidth: getModalWidth(\"lg\", size),\n },\n }}\n >\n {children}\n </TRModal>\n )\n}\n\nexport const ModalPortal = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => {\n const node = document.querySelector(\n `[data-tapestry-react-theme-provider-home=\"true\"]`,\n ) as HTMLElement\n\n return createPortal(children, node)\n}\n\nconst ModalTitle = ({ children }: { children: string }) => {\n return (\n <Heading\n level={1}\n margin={0}\n css={{\n color: token(\"--t-text-color-default-headline\"),\n fontWeight: \"500\",\n lineHeight: \"2rem\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {children}\n </Heading>\n )\n}\n\nexport const ModalSubTitle = ({ children }: { children: string }) => {\n return (\n <Text\n fontSize={3}\n css={{\n color: token(\"--t-text-color-default-secondary\"),\n fontWeight: 500,\n lineHeight: 1.5,\n }}\n >\n {children}\n </Text>\n )\n}\n\ntype BaseModalHeaderProps = {\n onClose?: () => void\n title: string\n}\n\ntype ModalHeaderProps =\n | (BaseModalHeaderProps & { subTitle: string; children?: never })\n | (BaseModalHeaderProps & {\n subTitle?: never\n children: React.ReactElement | React.ReactElement[]\n })\n\nexport const ModalHeader = ({\n onClose,\n title,\n subTitle,\n children,\n}: ModalHeaderProps) => (\n <Box paddingHorizontal={4} paddingTop={4}>\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n distribution=\"space-between\"\n spacing={1}\n >\n <ModalTitle>{title}</ModalTitle>\n {onClose && (\n <Button\n theme=\"default\"\n variant=\"naked\"\n icon={{\n name: \"general.x\",\n size: \"md\",\n }}\n title=\"Close modal\"\n marginRight={-1}\n onClick={onClose}\n />\n )}\n </StackView>\n <Box paddingTop={subTitle || children ? 0.5 : 0}>\n {subTitle && <ModalSubTitle>{subTitle}</ModalSubTitle>}\n {children}\n </Box>\n </Box>\n)\n\nexport const ModalBody = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <Box\n backgroundColor={token(\"--t-surface-color-card\")}\n padding={4}\n data-modal-body\n >\n {children}\n </Box>\n)\n\nexport const ModalFooter = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <Box\n paddingHorizontal={4}\n paddingTop={3}\n backgroundColor={token(\"--t-surface-color-card\")}\n css={{\n borderTop: `solid 1px ${token(\"--t-border-color-default-base\")}`,\n }}\n >\n {children}\n </Box>\n)\n","import {\n Button,\n Heading,\n Link,\n Radio,\n StackView,\n} from \"@planningcenter/tapestry-react\"\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalPortal,\n} from \"../modal\"\nimport React, { useState } from \"react\"\n\nexport default function ShareModal({\n onClose,\n setShareOrgStats,\n shareOrgStats,\n}: {\n onClose: () => void\n setShareOrgStats: (shared: boolean) => void\n shareOrgStats: boolean\n}) {\n const [copied, setCopied] = useState(false)\n const [_, domain, suffix] = window.location.host.split(\".\")\n const wrappedURL = `${window.location.protocol}//home.${domain}.${suffix}/wrapped`\n\n function copyToClipboard() {\n navigator.clipboard\n .writeText(wrappedURL)\n .then(() => setCopied(true))\n .catch((error) => console.error(error))\n }\n\n function updatePcoWrappedShared(newShared: boolean) {\n fetch(\"/wrapped\", {\n method: \"PATCH\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-CSRF-Token\":\n document\n .querySelector('meta[name=\"csrf-token\"]')\n ?.getAttribute(\"content\") ?? \"\",\n },\n body: JSON.stringify({ shared: newShared }),\n })\n .then((response) => {\n if (!response.ok)\n throw new Error(\"Failed to share. Please try again later.\")\n\n return setShareOrgStats(newShared)\n })\n .catch((error) => console.error(error))\n }\n\n return (\n <ModalPortal>\n <Modal onClose={onClose} open data-testid=\"pco-wrapped-modal\">\n <ModalHeader\n onClose={onClose}\n title=\"Share\"\n subTitle={`Who should be able to view your church's \"Year in Planning Center\"`}\n />\n <ModalBody>\n <StackView spacing={3}>\n <StackView spacing={1}>\n <Heading level={3}>Access</Heading>\n <Radio\n checked={!shareOrgStats}\n label=\"Organization Admins\"\n name=\"radio\"\n onChange={() => updatePcoWrappedShared(false)}\n size=\"md\"\n value=\"false\"\n />\n <Radio\n checked={shareOrgStats}\n label=\"Any logged in user\"\n name=\"radio\"\n onChange={() => updatePcoWrappedShared(true)}\n size=\"md\"\n value=\"true\"\n />\n </StackView>\n <StackView spacing={1}>\n <Heading level={3}>Link</Heading>\n <StackView\n axis=\"vertical\"\n spacing={1}\n mediaQueries={{\n sm: { alignment: \"center\", axis: \"horizontal\" },\n }}\n overflowWrap=\"break-word\"\n >\n <Link external to=\"/wrapped\">\n {wrappedURL}\n </Link>\n {navigator.clipboard && (\n <Button\n disabled={copied}\n onClick={copyToClipboard}\n theme=\"primary\"\n variant=\"outline\"\n >\n {copied ? \"Copied!\" : \"Copy\"}\n </Button>\n )}\n </StackView>\n </StackView>\n </StackView>\n </ModalBody>\n <ModalFooter>\n <StackView\n padding={0}\n axis=\"horizontal\"\n alignment=\"end\"\n distribution=\"end\"\n spacing={2}\n >\n <Button onClick={onClose} title=\"Done\" theme=\"primary\" />\n </StackView>\n </ModalFooter>\n </Modal>\n </ModalPortal>\n )\n}\n","import React from \"react\"\n\nexport default function WelcomeBackground() {\n return (\n <svg\n width=\"1724\"\n height=\"1080\"\n viewBox=\"0 0 1724 1080\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g filter=\"url(#filter0_f_154_9174)\">\n <rect\n x=\"606.744\"\n y=\"1062.82\"\n width=\"649.488\"\n height=\"964.695\"\n rx=\"324.744\"\n transform=\"rotate(-120 606.744 1062.82)\"\n fill=\"url(#paint0_linear_154_9174)\"\n fillOpacity=\"0.5\"\n />\n </g>\n <circle cx=\"1200.5\" cy=\"195.5\" r=\"45.5\" fill=\"white\" fillOpacity=\"0.3\" />\n <circle cx=\"613.5\" cy=\"206.5\" r=\"22.5\" fill=\"white\" fillOpacity=\"0.4\" />\n <circle cx=\"1340\" cy=\"384\" r=\"21\" fill=\"white\" fillOpacity=\"0.5\" />\n <defs>\n <filter\n id=\"filter0_f_154_9174\"\n x=\"0.810547\"\n y=\"-263.19\"\n width=\"1722.57\"\n height=\"1607.2\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feGaussianBlur\n stdDeviation=\"200\"\n result=\"effect1_foregroundBlur_154_9174\"\n />\n </filter>\n <linearGradient\n id=\"paint0_linear_154_9174\"\n x1=\"1040.11\"\n y1=\"1031.29\"\n x2=\"1407.11\"\n y2=\"1806.85\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0.21875\" stopColor=\"#FFD748\" />\n <stop offset=\"0.541667\" stopColor=\"#FF4242\" />\n <stop offset=\"0.84375\" stopColor=\"#657CF1\" />\n </linearGradient>\n </defs>\n </svg>\n )\n}\n","import {\n Button,\n GridView,\n Heading,\n StackView,\n ThemeProvider,\n} from \"@planningcenter/tapestry-react\"\nimport React, { useState } from \"react\"\n\nimport ReactDOMServer from \"react-dom/server\"\nimport ShareModal from \"./share_modal\"\nimport WelcomeBackground from \"./welcome_background\"\nimport { token } from \"@planningcenter/tapestry\"\nimport { useLocalStorage } from \"../hooks/use_local_storage\"\n\nexport default function PcoWrappedBanner() {\n const [dismissed, setDismissed] = useLocalStorage(\n \"pco-wrapped-dismissed\",\n false,\n )\n const { enabled, shared, siteAdmin } = window.pco.wrapped\n const [shareModalOpen, setShareModalOpen] = useState(false)\n const [shareOrgStats, setShareOrgStats] = useState(shared)\n const svgString = ReactDOMServer.renderToStaticMarkup(<WelcomeBackground />)\n const svgDataUrl = `data:image/svg+xml,${encodeURIComponent(svgString)}`\n const [app, domain, suffix] = window.location.host.split(\".\")\n\n const wrappedURL = `${window.location.protocol}//home.${domain}.${suffix}/wrapped`\n if (dismissed || !enabled) return null\n\n const theme = {\n button: {\n themes: {\n wrapped: {\n fill: {\n backgroundColor: \"var(--t-fill-color-button-neutral-solid-default)\",\n },\n naked: {},\n outline: {},\n },\n },\n },\n }\n\n return (\n <ThemeProvider theme={theme}>\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n backgroundColor={\"var(--t-surface-color-card)\"}\n backgroundImage={`url('${svgDataUrl}')`}\n backgroundPosition=\"center center\"\n backgroundRepeat=\"no-repeat\"\n backgroundSize=\"auto\"\n distribution=\"space-between\"\n padding={2}\n >\n <StackView\n axis=\"vertical\"\n spacing={2}\n mediaQueries={{ sm: { alignment: \"center\", axis: \"horizontal\" } }}\n >\n <Heading level={4} fontWeight={800}>\n Your year in Planning Center is here!{\" \"}\n </Heading>\n <GridView\n columns=\"repeat(2, 1fr)\"\n spacing={1}\n mediaQueries={{ sm: { columns: \"repeat(2, max-content)\" } }}\n >\n <Button\n css={{\n \"&:visited\": {\n color: \"var(--t-text-color-default-inverted)\",\n },\n }}\n flex={1}\n external\n to={wrappedURL}\n theme=\"primary\"\n mediaQueries={{ sm: { flex: \"initial\" } }}\n >\n See it now\n </Button>\n {app === \"home\" && siteAdmin && (\n <Button\n flex={1}\n onClick={() => setShareModalOpen(true)}\n theme=\"wrapped\"\n mediaQueries={{ sm: { flex: \"initial\" } }}\n >\n Share\n </Button>\n )}\n </GridView>\n </StackView>\n <Button\n variant=\"naked\"\n icon={{\n name: \"general.x\",\n size: \"md\",\n color: token(\"--t-fill-color-neutral-020\"),\n }}\n title=\"Dismiss\"\n onClick={() => setDismissed(true)}\n />\n </StackView>\n {shareModalOpen && (\n <ShareModal\n onClose={() => setShareModalOpen(false)}\n shareOrgStats={shareOrgStats}\n setShareOrgStats={setShareOrgStats}\n />\n )}\n </ThemeProvider>\n )\n}\n","import { useEffect, useState } from \"react\"\n\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T,\n overwriteWithInitialValue = false\n) {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (overwriteWithInitialValue) return initialValue\n\n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key)\n\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue\n } catch {\n // If error also return initialValue\n return initialValue\n }\n })\n\n // Reflect the state into localStorage as a side effect.\n const localStorageRepresentation = JSON.stringify(storedValue)\n useEffect(() => {\n window.localStorage.setItem(key, localStorageRepresentation)\n }, [key, localStorageRepresentation])\n\n // When we are done with this key, drop it from localStorage completely\n const dropKey = () => window.localStorage.removeItem(key)\n\n return [storedValue, setStoredValue, dropKey] as const\n}\n"],"names":["_excluded","MODAL_SIZES","sm","md","lg","xl","getModalWidth","mediaQuery","modalSize","TOOLBAR_WIDTH","Modal","_ref","children","onClose","_ref$size","size","modalProps","_objectWithoutPropertiesLoose","React","createElement","TRModal","onRequestClose","radius","padding","maxWidth","marginHorizontal","mediaQueries","position","right","ModalPortal","_ref2","node","document","querySelector","createPortal","ModalTitle","_ref3","Heading","level","margin","css","color","token","fontWeight","lineHeight","overflow","textOverflow","whiteSpace","ModalSubTitle","_ref4","Text","fontSize","ModalHeader","_ref5","subTitle","Box","paddingHorizontal","paddingTop","StackView","axis","alignment","distribution","spacing","title","Button","theme","variant","icon","name","marginRight","onClick","ModalBody","_ref6","backgroundColor","ModalFooter","_ref7","borderTop","ShareModal","setShareOrgStats","shareOrgStats","_useState","useState","copied","setCopied","window","location","host","split","wrappedURL","protocol","_window$location$host","suffix","updatePcoWrappedShared","newShared","_document$querySelect","_document$querySelect2","fetch","method","headers","getAttribute","body","JSON","stringify","shared","then","response","ok","Error","error","console","open","Radio","checked","label","onChange","value","overflowWrap","Link","external","to","navigator","clipboard","disabled","writeText","WelcomeBackground","width","height","viewBox","fill","xmlns","filter","x","y","rx","transform","fillOpacity","cx","cy","r","id","filterUnits","colorInterpolationFilters","floodOpacity","result","mode","in","in2","stdDeviation","x1","y1","x2","y2","gradientUnits","offset","stopColor","useLocalStorage","key","initialValue","overwriteWithInitialValue","item","localStorage","getItem","parse","_unused","storedValue","setStoredValue","localStorageRepresentation","useEffect","setItem","removeItem","dismissed","setDismissed","_useLocalStorage","pco","wrapped","enabled","_window$pco$wrapped","siteAdmin","shareModalOpen","setShareModalOpen","_useState2","svgString","ReactDOMServer","renderToStaticMarkup","svgDataUrl","encodeURIComponent","app","domain","ThemeProvider","button","themes","naked","outline","backgroundImage","backgroundPosition","backgroundRepeat","backgroundSize","GridView","columns","flex"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wrapped.js","sources":["../modal.tsx","../components/share_modal.tsx","../components/welcome_background.tsx","../components/pco_wrapped_banner.tsx","../hooks/use_local_storage.ts"],"sourcesContent":["import {\n Box,\n Button,\n Heading,\n ModalProps,\n StackView,\n Modal as TRModal,\n Text,\n} from \"@planningcenter/tapestry-react\"\n\nimport React from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { token } from \"@planningcenter/tapestry\"\n\nconst MODAL_SIZES = {\n sm: 400,\n md: 600,\n lg: 800,\n xl: 1000,\n} as const\n\nconst TOOLBAR_WIDTH = 48\n\nconst getModalWidth = (\n mediaQuery: \"sm\" | \"md\" | \"lg\",\n modalSize: keyof typeof MODAL_SIZES,\n) => {\n switch (mediaQuery) {\n case \"sm\":\n return `calc(100% - ${TOOLBAR_WIDTH * 2}px)`\n case \"md\":\n return modalSize === \"lg\" || modalSize === \"xl\"\n ? `calc(100% - ${TOOLBAR_WIDTH * 2}px)`\n : `${MODAL_SIZES[modalSize]}px`\n case \"lg\":\n return `${MODAL_SIZES[modalSize]}px`\n default:\n return `${MODAL_SIZES.md}px`\n }\n}\n\nexport const Modal = ({\n children,\n onClose,\n size = \"md\",\n ...modalProps\n}: {\n children: React.ReactElement | React.ReactElement[]\n onClose: () => void\n size?: keyof typeof MODAL_SIZES\n} & ModalProps) => {\n return (\n <TRModal\n {...modalProps}\n onRequestClose={onClose}\n radius=\"8px\"\n padding=\"0\"\n maxWidth=\"90%\"\n marginHorizontal={0}\n mediaQueries={{\n sm: {\n maxWidth: getModalWidth(\"sm\", size),\n position: \"relative\",\n right: `${TOOLBAR_WIDTH / 2}px`,\n },\n md: {\n maxWidth: getModalWidth(\"md\", size),\n },\n lg: {\n maxWidth: getModalWidth(\"lg\", size),\n },\n }}\n >\n {children}\n </TRModal>\n )\n}\n\nexport const ModalPortal = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => {\n const node = document.querySelector(\n `[data-tapestry-react-theme-provider-home=\"true\"]`,\n ) as HTMLElement\n\n return createPortal(children, node)\n}\n\nconst ModalTitle = ({ children }: { children: string }) => {\n return (\n <Heading\n level={1}\n margin={0}\n css={{\n color: token(\"--t-text-color-default-headline\"),\n fontWeight: \"500\",\n lineHeight: \"2rem\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {children}\n </Heading>\n )\n}\n\nexport const ModalSubTitle = ({ children }: { children: string }) => {\n return (\n <Text\n fontSize={3}\n css={{\n color: token(\"--t-text-color-default-secondary\"),\n fontWeight: 500,\n lineHeight: 1.5,\n }}\n >\n {children}\n </Text>\n )\n}\n\ntype BaseModalHeaderProps = {\n onClose?: () => void\n title: string\n}\n\ntype ModalHeaderProps =\n | (BaseModalHeaderProps & { subTitle: string; children?: never })\n | (BaseModalHeaderProps & {\n subTitle?: never\n children: React.ReactElement | React.ReactElement[]\n })\n\nexport const ModalHeader = ({\n onClose,\n title,\n subTitle,\n children,\n}: ModalHeaderProps) => (\n <Box paddingHorizontal={4} paddingTop={4}>\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n distribution=\"space-between\"\n spacing={1}\n >\n <ModalTitle>{title}</ModalTitle>\n {onClose && (\n <Button\n theme=\"default\"\n variant=\"naked\"\n icon={{\n name: \"general.x\",\n size: \"md\",\n }}\n title=\"Close modal\"\n marginRight={-1}\n onClick={onClose}\n />\n )}\n </StackView>\n <Box paddingTop={subTitle || children ? 0.5 : 0}>\n {subTitle && <ModalSubTitle>{subTitle}</ModalSubTitle>}\n {children}\n </Box>\n </Box>\n)\n\nexport const ModalBody = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <Box\n backgroundColor={token(\"--t-surface-color-card\")}\n padding={4}\n data-modal-body\n >\n {children}\n </Box>\n)\n\nexport const ModalFooter = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <Box\n paddingHorizontal={4}\n paddingTop={3}\n backgroundColor={token(\"--t-surface-color-card\")}\n css={{\n borderTop: `solid 1px ${token(\"--t-border-color-default-base\")}`,\n }}\n >\n {children}\n </Box>\n)\n","import {\n Button,\n Heading,\n Link,\n Radio,\n StackView,\n} from \"@planningcenter/tapestry-react\"\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalPortal,\n} from \"../modal\"\nimport React, { useState } from \"react\"\nimport { pcoUrl } from \"@planningcenter/url\"\n\nexport default function ShareModal({\n onClose,\n setShareOrgStats,\n shareOrgStats,\n}: {\n onClose: () => void\n setShareOrgStats: (shared: boolean) => void\n shareOrgStats: boolean\n}) {\n const [copied, setCopied] = useState(false)\n const homeUrl = pcoUrl(\"home\")\n const wrappedURL = `${homeUrl}/wrapped`\n\n function copyToClipboard() {\n navigator.clipboard\n .writeText(wrappedURL)\n .then(() => setCopied(true))\n .catch((error) => console.error(error))\n }\n\n function updatePcoWrappedShared(newShared: boolean) {\n fetch(\"/wrapped\", {\n method: \"PATCH\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-CSRF-Token\":\n document\n .querySelector('meta[name=\"csrf-token\"]')\n ?.getAttribute(\"content\") ?? \"\",\n },\n body: JSON.stringify({ shared: newShared }),\n })\n .then((response) => {\n if (!response.ok)\n throw new Error(\"Failed to share. Please try again later.\")\n\n return setShareOrgStats(newShared)\n })\n .catch((error) => console.error(error))\n }\n\n return (\n <ModalPortal>\n <Modal onClose={onClose} open data-testid=\"pco-wrapped-modal\">\n <ModalHeader\n onClose={onClose}\n title=\"Share\"\n subTitle={`Who should be able to view your church's \"Year in Planning Center\"`}\n />\n <ModalBody>\n <StackView spacing={3}>\n <StackView spacing={1}>\n <Heading level={3}>Access</Heading>\n <Radio\n checked={!shareOrgStats}\n label=\"Organization Admins\"\n name=\"radio\"\n onChange={() => updatePcoWrappedShared(false)}\n size=\"md\"\n value=\"false\"\n />\n <Radio\n checked={shareOrgStats}\n label=\"Any logged in user\"\n name=\"radio\"\n onChange={() => updatePcoWrappedShared(true)}\n size=\"md\"\n value=\"true\"\n />\n </StackView>\n <StackView spacing={1}>\n <Heading level={3}>Link</Heading>\n <StackView\n axis=\"vertical\"\n spacing={1}\n mediaQueries={{\n sm: { alignment: \"center\", axis: \"horizontal\" },\n }}\n overflowWrap=\"break-word\"\n >\n <Link external to=\"/wrapped\">\n {wrappedURL}\n </Link>\n {navigator.clipboard && (\n <Button\n disabled={copied}\n onClick={copyToClipboard}\n theme=\"primary\"\n variant=\"outline\"\n >\n {copied ? \"Copied!\" : \"Copy\"}\n </Button>\n )}\n </StackView>\n </StackView>\n </StackView>\n </ModalBody>\n <ModalFooter>\n <StackView\n padding={0}\n axis=\"horizontal\"\n alignment=\"end\"\n distribution=\"end\"\n spacing={2}\n >\n <Button onClick={onClose} title=\"Done\" theme=\"primary\" />\n </StackView>\n </ModalFooter>\n </Modal>\n </ModalPortal>\n )\n}\n","import React from \"react\"\n\nexport default function WelcomeBackground() {\n return (\n <svg\n width=\"1724\"\n height=\"1080\"\n viewBox=\"0 0 1724 1080\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g filter=\"url(#filter0_f_154_9174)\">\n <rect\n x=\"606.744\"\n y=\"1062.82\"\n width=\"649.488\"\n height=\"964.695\"\n rx=\"324.744\"\n transform=\"rotate(-120 606.744 1062.82)\"\n fill=\"url(#paint0_linear_154_9174)\"\n fillOpacity=\"0.5\"\n />\n </g>\n <circle cx=\"1200.5\" cy=\"195.5\" r=\"45.5\" fill=\"white\" fillOpacity=\"0.3\" />\n <circle cx=\"613.5\" cy=\"206.5\" r=\"22.5\" fill=\"white\" fillOpacity=\"0.4\" />\n <circle cx=\"1340\" cy=\"384\" r=\"21\" fill=\"white\" fillOpacity=\"0.5\" />\n <defs>\n <filter\n id=\"filter0_f_154_9174\"\n x=\"0.810547\"\n y=\"-263.19\"\n width=\"1722.57\"\n height=\"1607.2\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feGaussianBlur\n stdDeviation=\"200\"\n result=\"effect1_foregroundBlur_154_9174\"\n />\n </filter>\n <linearGradient\n id=\"paint0_linear_154_9174\"\n x1=\"1040.11\"\n y1=\"1031.29\"\n x2=\"1407.11\"\n y2=\"1806.85\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0.21875\" stopColor=\"#FFD748\" />\n <stop offset=\"0.541667\" stopColor=\"#FF4242\" />\n <stop offset=\"0.84375\" stopColor=\"#657CF1\" />\n </linearGradient>\n </defs>\n </svg>\n )\n}\n","import {\n Button,\n GridView,\n Heading,\n StackView,\n ThemeProvider,\n} from \"@planningcenter/tapestry-react\"\nimport React, { useState } from \"react\"\nimport { pcoUrl } from \"@planningcenter/url\"\n\nimport ReactDOMServer from \"react-dom/server\"\nimport ShareModal from \"./share_modal\"\nimport WelcomeBackground from \"./welcome_background\"\nimport { token } from \"@planningcenter/tapestry\"\nimport { useLocalStorage } from \"../hooks/use_local_storage\"\n\nexport default function PcoWrappedBanner() {\n const [dismissed, setDismissed] = useLocalStorage(\n \"pco-wrapped-dismissed\",\n false,\n )\n const { enabled, shared, siteAdmin } = window.pco.wrapped\n const [shareModalOpen, setShareModalOpen] = useState(false)\n const [shareOrgStats, setShareOrgStats] = useState(shared)\n const svgString = ReactDOMServer.renderToStaticMarkup(<WelcomeBackground />)\n const svgDataUrl = `data:image/svg+xml,${encodeURIComponent(svgString)}`\n const isHomeApp = window.location.host.includes(\"home\")\n const homeUrl = pcoUrl(\"home\")\n const wrappedURL = `${homeUrl}/wrapped`\n\n if (dismissed || !enabled) return null\n\n const theme = {\n button: {\n themes: {\n wrapped: {\n fill: {\n backgroundColor: \"var(--t-fill-color-button-neutral-solid-default)\",\n },\n naked: {},\n outline: {},\n },\n },\n },\n }\n\n return (\n <ThemeProvider theme={theme}>\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n backgroundColor={\"var(--t-surface-color-card)\"}\n backgroundImage={`url('${svgDataUrl}')`}\n backgroundPosition=\"center center\"\n backgroundRepeat=\"no-repeat\"\n backgroundSize=\"auto\"\n distribution=\"space-between\"\n padding={2}\n >\n <StackView\n axis=\"vertical\"\n spacing={2}\n mediaQueries={{ sm: { alignment: \"center\", axis: \"horizontal\" } }}\n >\n <Heading level={4} fontWeight={800}>\n Your year in Planning Center is here!{\" \"}\n </Heading>\n <GridView\n columns=\"repeat(2, 1fr)\"\n spacing={1}\n mediaQueries={{ sm: { columns: \"repeat(2, max-content)\" } }}\n >\n <Button\n css={{\n \"&:visited\": {\n color: \"var(--t-text-color-default-inverted)\",\n },\n \"&:hover\": {\n color: \"var(--t-text-color-default-inverted)\",\n },\n }}\n flex={1}\n external\n to={wrappedURL}\n theme=\"primary\"\n mediaQueries={{ sm: { flex: \"initial\" } }}\n >\n See it now\n </Button>\n {isHomeApp && siteAdmin && (\n <Button\n flex={1}\n onClick={() => setShareModalOpen(true)}\n theme=\"wrapped\"\n mediaQueries={{ sm: { flex: \"initial\" } }}\n >\n Share\n </Button>\n )}\n </GridView>\n </StackView>\n <Button\n variant=\"naked\"\n icon={{\n name: \"general.x\",\n size: \"md\",\n color: token(\"--t-fill-color-neutral-020\"),\n }}\n title=\"Dismiss\"\n onClick={() => setDismissed(true)}\n />\n </StackView>\n {shareModalOpen && (\n <ShareModal\n onClose={() => setShareModalOpen(false)}\n shareOrgStats={shareOrgStats}\n setShareOrgStats={setShareOrgStats}\n />\n )}\n </ThemeProvider>\n )\n}\n","import { useEffect, useState } from \"react\"\n\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T,\n overwriteWithInitialValue = false\n) {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (overwriteWithInitialValue) return initialValue\n\n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key)\n\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue\n } catch {\n // If error also return initialValue\n return initialValue\n }\n })\n\n // Reflect the state into localStorage as a side effect.\n const localStorageRepresentation = JSON.stringify(storedValue)\n useEffect(() => {\n window.localStorage.setItem(key, localStorageRepresentation)\n }, [key, localStorageRepresentation])\n\n // When we are done with this key, drop it from localStorage completely\n const dropKey = () => window.localStorage.removeItem(key)\n\n return [storedValue, setStoredValue, dropKey] as const\n}\n"],"names":["_excluded","MODAL_SIZES","sm","md","lg","xl","getModalWidth","mediaQuery","modalSize","TOOLBAR_WIDTH","Modal","_ref","children","onClose","_ref$size","size","modalProps","_objectWithoutPropertiesLoose","React","createElement","TRModal","onRequestClose","radius","padding","maxWidth","marginHorizontal","mediaQueries","position","right","ModalPortal","_ref2","node","document","querySelector","createPortal","ModalTitle","_ref3","Heading","level","margin","css","color","token","fontWeight","lineHeight","overflow","textOverflow","whiteSpace","ModalSubTitle","_ref4","Text","fontSize","ModalHeader","_ref5","subTitle","Box","paddingHorizontal","paddingTop","StackView","axis","alignment","distribution","spacing","title","Button","theme","variant","icon","name","marginRight","onClick","ModalBody","_ref6","backgroundColor","ModalFooter","_ref7","borderTop","ShareModal","setShareOrgStats","shareOrgStats","_useState","useState","copied","setCopied","wrappedURL","pcoUrl","updatePcoWrappedShared","newShared","fetch","method","headers","_document$querySelect","_document$querySelect2","getAttribute","body","JSON","stringify","shared","then","response","ok","Error","error","console","open","Radio","checked","label","onChange","value","overflowWrap","Link","external","to","navigator","clipboard","disabled","writeText","WelcomeBackground","width","height","viewBox","fill","xmlns","filter","x","y","rx","transform","fillOpacity","cx","cy","r","id","filterUnits","colorInterpolationFilters","floodOpacity","result","mode","in","in2","stdDeviation","x1","y1","x2","y2","gradientUnits","offset","stopColor","_useLocalStorage","key","initialValue","overwriteWithInitialValue","item","window","localStorage","getItem","parse","_unused","storedValue","setStoredValue","localStorageRepresentation","useEffect","setItem","removeItem","useLocalStorage","dismissed","setDismissed","_window$pco$wrapped","pco","wrapped","enabled","siteAdmin","shareModalOpen","setShareModalOpen","_useState2","svgString","ReactDOMServer","renderToStaticMarkup","svgDataUrl","encodeURIComponent","isHomeApp","location","host","includes","ThemeProvider","button","themes","naked","outline","backgroundImage","backgroundPosition","backgroundRepeat","backgroundSize","GridView","columns","flex"],"mappings":"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"}
|
package/dist/wrapped.modern.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Modal as e,Box as t,StackView as r,Button as n,Heading as a,Text as l,Radio as
|
|
1
|
+
import{Modal as e,Box as t,StackView as r,Button as n,Heading as a,Text as l,Radio as i,Link as o,ThemeProvider as c,GridView as s}from"@planningcenter/tapestry-react";import d,{useState as m,useEffect as u}from"react";import{pcoUrl as p}from"@planningcenter/url";import g from"react-dom/server";import{createPortal as h}from"react-dom";import{token as f}from"@planningcenter/tapestry";function E(){return E=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},E.apply(null,arguments)}const x=["children","onClose","size"],w={sm:400,md:600,lg:800,xl:1e3},v=(e,t)=>{switch(e){case"sm":return"calc(100% - 96px)";case"md":return"lg"===t||"xl"===t?"calc(100% - 96px)":`${w[t]}px`;case"lg":return`${w[t]}px`;default:return`${w.md}px`}},b=t=>{let{children:r,onClose:n,size:a="md"}=t,l=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(t,x);/*#__PURE__*/return d.createElement(e,E({},l,{onRequestClose:n,radius:"8px",padding:"0",maxWidth:"90%",marginHorizontal:0,mediaQueries:{sm:{maxWidth:v("sm",a),position:"relative",right:"24px"},md:{maxWidth:v("md",a)},lg:{maxWidth:v("lg",a)}}}),r)},y=({children:e})=>{const t=document.querySelector('[data-tapestry-react-theme-provider-home="true"]');return h(e,t)},C=({children:e})=>/*#__PURE__*/d.createElement(a,{level:1,margin:0,css:{color:f("--t-text-color-default-headline"),fontWeight:"500",lineHeight:"2rem",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},e),k=({children:e})=>/*#__PURE__*/d.createElement(l,{fontSize:3,css:{color:f("--t-text-color-default-secondary"),fontWeight:500,lineHeight:1.5}},e),S=({onClose:e,title:a,subTitle:l,children:i})=>/*#__PURE__*/d.createElement(t,{paddingHorizontal:4,paddingTop:4},/*#__PURE__*/d.createElement(r,{axis:"horizontal",alignment:"center",distribution:"space-between",spacing:1},/*#__PURE__*/d.createElement(C,null,a),e&&/*#__PURE__*/d.createElement(n,{theme:"default",variant:"naked",icon:{name:"general.x",size:"md"},title:"Close modal",marginRight:-1,onClick:e})),/*#__PURE__*/d.createElement(t,{paddingTop:l||i?.5:0},l&&/*#__PURE__*/d.createElement(k,null,l),i)),O=({children:e})=>/*#__PURE__*/d.createElement(t,{backgroundColor:f("--t-surface-color-card"),padding:4,"data-modal-body":!0},e),z=({children:e})=>/*#__PURE__*/d.createElement(t,{paddingHorizontal:4,paddingTop:3,backgroundColor:f("--t-surface-color-card"),css:{borderTop:`solid 1px ${f("--t-border-color-default-base")}`}},e);function _({onClose:e,setShareOrgStats:t,shareOrgStats:l}){const[c,s]=m(!1),u=`${p("home")}/wrapped`;function g(e){var r,n;fetch("/wrapped",{method:"PATCH",headers:{"Content-Type":"application/json","X-CSRF-Token":null!=(r=null==(n=document.querySelector('meta[name="csrf-token"]'))?void 0:n.getAttribute("content"))?r:""},body:JSON.stringify({shared:e})}).then(r=>{if(!r.ok)throw new Error("Failed to share. Please try again later.");return t(e)}).catch(e=>console.error(e))}/*#__PURE__*/return d.createElement(y,null,/*#__PURE__*/d.createElement(b,{onClose:e,open:!0,"data-testid":"pco-wrapped-modal"},/*#__PURE__*/d.createElement(S,{onClose:e,title:"Share",subTitle:'Who should be able to view your church\'s "Year in Planning Center"'}),/*#__PURE__*/d.createElement(O,null,/*#__PURE__*/d.createElement(r,{spacing:3},/*#__PURE__*/d.createElement(r,{spacing:1},/*#__PURE__*/d.createElement(a,{level:3},"Access"),/*#__PURE__*/d.createElement(i,{checked:!l,label:"Organization Admins",name:"radio",onChange:()=>g(!1),size:"md",value:"false"}),/*#__PURE__*/d.createElement(i,{checked:l,label:"Any logged in user",name:"radio",onChange:()=>g(!0),size:"md",value:"true"})),/*#__PURE__*/d.createElement(r,{spacing:1},/*#__PURE__*/d.createElement(a,{level:3},"Link"),/*#__PURE__*/d.createElement(r,{axis:"vertical",spacing:1,mediaQueries:{sm:{alignment:"center",axis:"horizontal"}},overflowWrap:"break-word"},/*#__PURE__*/d.createElement(o,{external:!0,to:"/wrapped"},u),navigator.clipboard&&/*#__PURE__*/d.createElement(n,{disabled:c,onClick:function(){navigator.clipboard.writeText(u).then(()=>s(!0)).catch(e=>console.error(e))},theme:"primary",variant:"outline"},c?"Copied!":"Copy"))))),/*#__PURE__*/d.createElement(z,null,/*#__PURE__*/d.createElement(r,{padding:0,axis:"horizontal",alignment:"end",distribution:"end",spacing:2},/*#__PURE__*/d.createElement(n,{onClick:e,title:"Done",theme:"primary"})))))}function F(){/*#__PURE__*/return d.createElement("svg",{width:"1724",height:"1080",viewBox:"0 0 1724 1080",fill:"none",xmlns:"http://www.w3.org/2000/svg"},/*#__PURE__*/d.createElement("g",{filter:"url(#filter0_f_154_9174)"},/*#__PURE__*/d.createElement("rect",{x:"606.744",y:"1062.82",width:"649.488",height:"964.695",rx:"324.744",transform:"rotate(-120 606.744 1062.82)",fill:"url(#paint0_linear_154_9174)",fillOpacity:"0.5"})),/*#__PURE__*/d.createElement("circle",{cx:"1200.5",cy:"195.5",r:"45.5",fill:"white",fillOpacity:"0.3"}),/*#__PURE__*/d.createElement("circle",{cx:"613.5",cy:"206.5",r:"22.5",fill:"white",fillOpacity:"0.4"}),/*#__PURE__*/d.createElement("circle",{cx:"1340",cy:"384",r:"21",fill:"white",fillOpacity:"0.5"}),/*#__PURE__*/d.createElement("defs",null,/*#__PURE__*/d.createElement("filter",{id:"filter0_f_154_9174",x:"0.810547",y:"-263.19",width:"1722.57",height:"1607.2",filterUnits:"userSpaceOnUse",colorInterpolationFilters:"sRGB"},/*#__PURE__*/d.createElement("feFlood",{floodOpacity:"0",result:"BackgroundImageFix"}),/*#__PURE__*/d.createElement("feBlend",{mode:"normal",in:"SourceGraphic",in2:"BackgroundImageFix",result:"shape"}),/*#__PURE__*/d.createElement("feGaussianBlur",{stdDeviation:"200",result:"effect1_foregroundBlur_154_9174"})),/*#__PURE__*/d.createElement("linearGradient",{id:"paint0_linear_154_9174",x1:"1040.11",y1:"1031.29",x2:"1407.11",y2:"1806.85",gradientUnits:"userSpaceOnUse"},/*#__PURE__*/d.createElement("stop",{offset:"0.21875",stopColor:"#FFD748"}),/*#__PURE__*/d.createElement("stop",{offset:"0.541667",stopColor:"#FF4242"}),/*#__PURE__*/d.createElement("stop",{offset:"0.84375",stopColor:"#657CF1"}))))}function T(){const[e,t]=function(e,t,r=!1){const[n,a]=m(()=>{if(r)return t;try{const r=window.localStorage.getItem(e);return r?JSON.parse(r):t}catch(e){return t}}),l=JSON.stringify(n);return u(()=>{window.localStorage.setItem(e,l)},[e,l]),[n,a,()=>window.localStorage.removeItem(e)]}("pco-wrapped-dismissed",!1),{enabled:l,shared:i,siteAdmin:o}=window.pco.wrapped,[h,E]=m(!1),[x,w]=m(i),v=g.renderToStaticMarkup(/*#__PURE__*/d.createElement(F,null)),b=`data:image/svg+xml,${encodeURIComponent(v)}`,y=window.location.host.includes("home"),C=`${p("home")}/wrapped`;return e||!l?null:/*#__PURE__*/d.createElement(c,{theme:{button:{themes:{wrapped:{fill:{backgroundColor:"var(--t-fill-color-button-neutral-solid-default)"},naked:{},outline:{}}}}}},/*#__PURE__*/d.createElement(r,{axis:"horizontal",alignment:"center",backgroundColor:"var(--t-surface-color-card)",backgroundImage:`url('${b}')`,backgroundPosition:"center center",backgroundRepeat:"no-repeat",backgroundSize:"auto",distribution:"space-between",padding:2},/*#__PURE__*/d.createElement(r,{axis:"vertical",spacing:2,mediaQueries:{sm:{alignment:"center",axis:"horizontal"}}},/*#__PURE__*/d.createElement(a,{level:4,fontWeight:800},"Your year in Planning Center is here!"," "),/*#__PURE__*/d.createElement(s,{columns:"repeat(2, 1fr)",spacing:1,mediaQueries:{sm:{columns:"repeat(2, max-content)"}}},/*#__PURE__*/d.createElement(n,{css:{"&:visited":{color:"var(--t-text-color-default-inverted)"},"&:hover":{color:"var(--t-text-color-default-inverted)"}},flex:1,external:!0,to:C,theme:"primary",mediaQueries:{sm:{flex:"initial"}}},"See it now"),y&&o&&/*#__PURE__*/d.createElement(n,{flex:1,onClick:()=>E(!0),theme:"wrapped",mediaQueries:{sm:{flex:"initial"}}},"Share"))),/*#__PURE__*/d.createElement(n,{variant:"naked",icon:{name:"general.x",size:"md",color:f("--t-fill-color-neutral-020")},title:"Dismiss",onClick:()=>t(!0)})),h&&/*#__PURE__*/d.createElement(_,{onClose:()=>E(!1),shareOrgStats:x,setShareOrgStats:w}))}export{T as PcoWrappedBanner};
|
|
2
2
|
//# sourceMappingURL=wrapped.modern.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapped.modern.js","sources":["../modal.tsx","../components/share_modal.tsx","../components/welcome_background.tsx","../components/pco_wrapped_banner.tsx","../hooks/use_local_storage.ts"],"sourcesContent":["import {\n Box,\n Button,\n Heading,\n ModalProps,\n StackView,\n Modal as TRModal,\n Text,\n} from \"@planningcenter/tapestry-react\"\n\nimport React from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { token } from \"@planningcenter/tapestry\"\n\nconst MODAL_SIZES = {\n sm: 400,\n md: 600,\n lg: 800,\n xl: 1000,\n} as const\n\nconst TOOLBAR_WIDTH = 48\n\nconst getModalWidth = (\n mediaQuery: \"sm\" | \"md\" | \"lg\",\n modalSize: keyof typeof MODAL_SIZES,\n) => {\n switch (mediaQuery) {\n case \"sm\":\n return `calc(100% - ${TOOLBAR_WIDTH * 2}px)`\n case \"md\":\n return modalSize === \"lg\" || modalSize === \"xl\"\n ? `calc(100% - ${TOOLBAR_WIDTH * 2}px)`\n : `${MODAL_SIZES[modalSize]}px`\n case \"lg\":\n return `${MODAL_SIZES[modalSize]}px`\n default:\n return `${MODAL_SIZES.md}px`\n }\n}\n\nexport const Modal = ({\n children,\n onClose,\n size = \"md\",\n ...modalProps\n}: {\n children: React.ReactElement | React.ReactElement[]\n onClose: () => void\n size?: keyof typeof MODAL_SIZES\n} & ModalProps) => {\n return (\n <TRModal\n {...modalProps}\n onRequestClose={onClose}\n radius=\"8px\"\n padding=\"0\"\n maxWidth=\"90%\"\n marginHorizontal={0}\n mediaQueries={{\n sm: {\n maxWidth: getModalWidth(\"sm\", size),\n position: \"relative\",\n right: `${TOOLBAR_WIDTH / 2}px`,\n },\n md: {\n maxWidth: getModalWidth(\"md\", size),\n },\n lg: {\n maxWidth: getModalWidth(\"lg\", size),\n },\n }}\n >\n {children}\n </TRModal>\n )\n}\n\nexport const ModalPortal = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => {\n const node = document.querySelector(\n `[data-tapestry-react-theme-provider-home=\"true\"]`,\n ) as HTMLElement\n\n return createPortal(children, node)\n}\n\nconst ModalTitle = ({ children }: { children: string }) => {\n return (\n <Heading\n level={1}\n margin={0}\n css={{\n color: token(\"--t-text-color-default-headline\"),\n fontWeight: \"500\",\n lineHeight: \"2rem\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {children}\n </Heading>\n )\n}\n\nexport const ModalSubTitle = ({ children }: { children: string }) => {\n return (\n <Text\n fontSize={3}\n css={{\n color: token(\"--t-text-color-default-secondary\"),\n fontWeight: 500,\n lineHeight: 1.5,\n }}\n >\n {children}\n </Text>\n )\n}\n\ntype BaseModalHeaderProps = {\n onClose?: () => void\n title: string\n}\n\ntype ModalHeaderProps =\n | (BaseModalHeaderProps & { subTitle: string; children?: never })\n | (BaseModalHeaderProps & {\n subTitle?: never\n children: React.ReactElement | React.ReactElement[]\n })\n\nexport const ModalHeader = ({\n onClose,\n title,\n subTitle,\n children,\n}: ModalHeaderProps) => (\n <Box paddingHorizontal={4} paddingTop={4}>\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n distribution=\"space-between\"\n spacing={1}\n >\n <ModalTitle>{title}</ModalTitle>\n {onClose && (\n <Button\n theme=\"default\"\n variant=\"naked\"\n icon={{\n name: \"general.x\",\n size: \"md\",\n }}\n title=\"Close modal\"\n marginRight={-1}\n onClick={onClose}\n />\n )}\n </StackView>\n <Box paddingTop={subTitle || children ? 0.5 : 0}>\n {subTitle && <ModalSubTitle>{subTitle}</ModalSubTitle>}\n {children}\n </Box>\n </Box>\n)\n\nexport const ModalBody = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <Box\n backgroundColor={token(\"--t-surface-color-card\")}\n padding={4}\n data-modal-body\n >\n {children}\n </Box>\n)\n\nexport const ModalFooter = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <Box\n paddingHorizontal={4}\n paddingTop={3}\n backgroundColor={token(\"--t-surface-color-card\")}\n css={{\n borderTop: `solid 1px ${token(\"--t-border-color-default-base\")}`,\n }}\n >\n {children}\n </Box>\n)\n","import {\n Button,\n Heading,\n Link,\n Radio,\n StackView,\n} from \"@planningcenter/tapestry-react\"\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalPortal,\n} from \"../modal\"\nimport React, { useState } from \"react\"\n\nexport default function ShareModal({\n onClose,\n setShareOrgStats,\n shareOrgStats,\n}: {\n onClose: () => void\n setShareOrgStats: (shared: boolean) => void\n shareOrgStats: boolean\n}) {\n const [copied, setCopied] = useState(false)\n const [_, domain, suffix] = window.location.host.split(\".\")\n const wrappedURL = `${window.location.protocol}//home.${domain}.${suffix}/wrapped`\n\n function copyToClipboard() {\n navigator.clipboard\n .writeText(wrappedURL)\n .then(() => setCopied(true))\n .catch((error) => console.error(error))\n }\n\n function updatePcoWrappedShared(newShared: boolean) {\n fetch(\"/wrapped\", {\n method: \"PATCH\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-CSRF-Token\":\n document\n .querySelector('meta[name=\"csrf-token\"]')\n ?.getAttribute(\"content\") ?? \"\",\n },\n body: JSON.stringify({ shared: newShared }),\n })\n .then((response) => {\n if (!response.ok)\n throw new Error(\"Failed to share. Please try again later.\")\n\n return setShareOrgStats(newShared)\n })\n .catch((error) => console.error(error))\n }\n\n return (\n <ModalPortal>\n <Modal onClose={onClose} open data-testid=\"pco-wrapped-modal\">\n <ModalHeader\n onClose={onClose}\n title=\"Share\"\n subTitle={`Who should be able to view your church's \"Year in Planning Center\"`}\n />\n <ModalBody>\n <StackView spacing={3}>\n <StackView spacing={1}>\n <Heading level={3}>Access</Heading>\n <Radio\n checked={!shareOrgStats}\n label=\"Organization Admins\"\n name=\"radio\"\n onChange={() => updatePcoWrappedShared(false)}\n size=\"md\"\n value=\"false\"\n />\n <Radio\n checked={shareOrgStats}\n label=\"Any logged in user\"\n name=\"radio\"\n onChange={() => updatePcoWrappedShared(true)}\n size=\"md\"\n value=\"true\"\n />\n </StackView>\n <StackView spacing={1}>\n <Heading level={3}>Link</Heading>\n <StackView\n axis=\"vertical\"\n spacing={1}\n mediaQueries={{\n sm: { alignment: \"center\", axis: \"horizontal\" },\n }}\n overflowWrap=\"break-word\"\n >\n <Link external to=\"/wrapped\">\n {wrappedURL}\n </Link>\n {navigator.clipboard && (\n <Button\n disabled={copied}\n onClick={copyToClipboard}\n theme=\"primary\"\n variant=\"outline\"\n >\n {copied ? \"Copied!\" : \"Copy\"}\n </Button>\n )}\n </StackView>\n </StackView>\n </StackView>\n </ModalBody>\n <ModalFooter>\n <StackView\n padding={0}\n axis=\"horizontal\"\n alignment=\"end\"\n distribution=\"end\"\n spacing={2}\n >\n <Button onClick={onClose} title=\"Done\" theme=\"primary\" />\n </StackView>\n </ModalFooter>\n </Modal>\n </ModalPortal>\n )\n}\n","import React from \"react\"\n\nexport default function WelcomeBackground() {\n return (\n <svg\n width=\"1724\"\n height=\"1080\"\n viewBox=\"0 0 1724 1080\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g filter=\"url(#filter0_f_154_9174)\">\n <rect\n x=\"606.744\"\n y=\"1062.82\"\n width=\"649.488\"\n height=\"964.695\"\n rx=\"324.744\"\n transform=\"rotate(-120 606.744 1062.82)\"\n fill=\"url(#paint0_linear_154_9174)\"\n fillOpacity=\"0.5\"\n />\n </g>\n <circle cx=\"1200.5\" cy=\"195.5\" r=\"45.5\" fill=\"white\" fillOpacity=\"0.3\" />\n <circle cx=\"613.5\" cy=\"206.5\" r=\"22.5\" fill=\"white\" fillOpacity=\"0.4\" />\n <circle cx=\"1340\" cy=\"384\" r=\"21\" fill=\"white\" fillOpacity=\"0.5\" />\n <defs>\n <filter\n id=\"filter0_f_154_9174\"\n x=\"0.810547\"\n y=\"-263.19\"\n width=\"1722.57\"\n height=\"1607.2\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feGaussianBlur\n stdDeviation=\"200\"\n result=\"effect1_foregroundBlur_154_9174\"\n />\n </filter>\n <linearGradient\n id=\"paint0_linear_154_9174\"\n x1=\"1040.11\"\n y1=\"1031.29\"\n x2=\"1407.11\"\n y2=\"1806.85\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0.21875\" stopColor=\"#FFD748\" />\n <stop offset=\"0.541667\" stopColor=\"#FF4242\" />\n <stop offset=\"0.84375\" stopColor=\"#657CF1\" />\n </linearGradient>\n </defs>\n </svg>\n )\n}\n","import {\n Button,\n GridView,\n Heading,\n StackView,\n ThemeProvider,\n} from \"@planningcenter/tapestry-react\"\nimport React, { useState } from \"react\"\n\nimport ReactDOMServer from \"react-dom/server\"\nimport ShareModal from \"./share_modal\"\nimport WelcomeBackground from \"./welcome_background\"\nimport { token } from \"@planningcenter/tapestry\"\nimport { useLocalStorage } from \"../hooks/use_local_storage\"\n\nexport default function PcoWrappedBanner() {\n const [dismissed, setDismissed] = useLocalStorage(\n \"pco-wrapped-dismissed\",\n false,\n )\n const { enabled, shared, siteAdmin } = window.pco.wrapped\n const [shareModalOpen, setShareModalOpen] = useState(false)\n const [shareOrgStats, setShareOrgStats] = useState(shared)\n const svgString = ReactDOMServer.renderToStaticMarkup(<WelcomeBackground />)\n const svgDataUrl = `data:image/svg+xml,${encodeURIComponent(svgString)}`\n const [app, domain, suffix] = window.location.host.split(\".\")\n\n const wrappedURL = `${window.location.protocol}//home.${domain}.${suffix}/wrapped`\n if (dismissed || !enabled) return null\n\n const theme = {\n button: {\n themes: {\n wrapped: {\n fill: {\n backgroundColor: \"var(--t-fill-color-button-neutral-solid-default)\",\n },\n naked: {},\n outline: {},\n },\n },\n },\n }\n\n return (\n <ThemeProvider theme={theme}>\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n backgroundColor={\"var(--t-surface-color-card)\"}\n backgroundImage={`url('${svgDataUrl}')`}\n backgroundPosition=\"center center\"\n backgroundRepeat=\"no-repeat\"\n backgroundSize=\"auto\"\n distribution=\"space-between\"\n padding={2}\n >\n <StackView\n axis=\"vertical\"\n spacing={2}\n mediaQueries={{ sm: { alignment: \"center\", axis: \"horizontal\" } }}\n >\n <Heading level={4} fontWeight={800}>\n Your year in Planning Center is here!{\" \"}\n </Heading>\n <GridView\n columns=\"repeat(2, 1fr)\"\n spacing={1}\n mediaQueries={{ sm: { columns: \"repeat(2, max-content)\" } }}\n >\n <Button\n css={{\n \"&:visited\": {\n color: \"var(--t-text-color-default-inverted)\",\n },\n }}\n flex={1}\n external\n to={wrappedURL}\n theme=\"primary\"\n mediaQueries={{ sm: { flex: \"initial\" } }}\n >\n See it now\n </Button>\n {app === \"home\" && siteAdmin && (\n <Button\n flex={1}\n onClick={() => setShareModalOpen(true)}\n theme=\"wrapped\"\n mediaQueries={{ sm: { flex: \"initial\" } }}\n >\n Share\n </Button>\n )}\n </GridView>\n </StackView>\n <Button\n variant=\"naked\"\n icon={{\n name: \"general.x\",\n size: \"md\",\n color: token(\"--t-fill-color-neutral-020\"),\n }}\n title=\"Dismiss\"\n onClick={() => setDismissed(true)}\n />\n </StackView>\n {shareModalOpen && (\n <ShareModal\n onClose={() => setShareModalOpen(false)}\n shareOrgStats={shareOrgStats}\n setShareOrgStats={setShareOrgStats}\n />\n )}\n </ThemeProvider>\n )\n}\n","import { useEffect, useState } from \"react\"\n\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T,\n overwriteWithInitialValue = false\n) {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (overwriteWithInitialValue) return initialValue\n\n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key)\n\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue\n } catch {\n // If error also return initialValue\n return initialValue\n }\n })\n\n // Reflect the state into localStorage as a side effect.\n const localStorageRepresentation = JSON.stringify(storedValue)\n useEffect(() => {\n window.localStorage.setItem(key, localStorageRepresentation)\n }, [key, localStorageRepresentation])\n\n // When we are done with this key, drop it from localStorage completely\n const dropKey = () => window.localStorage.removeItem(key)\n\n return [storedValue, setStoredValue, dropKey] as const\n}\n"],"names":["_excluded","MODAL_SIZES","sm","md","lg","xl","getModalWidth","mediaQuery","modalSize","Modal","_ref","children","onClose","size","modalProps","_objectWithoutPropertiesLoose","React","createElement","TRModal","onRequestClose","radius","padding","maxWidth","marginHorizontal","mediaQueries","position","right","ModalPortal","node","document","querySelector","createPortal","ModalTitle","Heading","level","margin","css","color","token","fontWeight","lineHeight","overflow","textOverflow","whiteSpace","ModalSubTitle","Text","fontSize","ModalHeader","title","subTitle","Box","paddingHorizontal","paddingTop","StackView","axis","alignment","distribution","spacing","Button","theme","variant","icon","name","marginRight","onClick","ModalBody","backgroundColor","ModalFooter","borderTop","ShareModal","setShareOrgStats","shareOrgStats","copied","setCopied","useState","_","domain","suffix","window","location","host","split","wrappedURL","protocol","updatePcoWrappedShared","newShared","fetch","method","headers","_document$querySelect","_document$querySelect2","getAttribute","body","JSON","stringify","shared","then","response","ok","Error","catch","error","console","open","Radio","checked","label","onChange","value","overflowWrap","Link","external","to","navigator","clipboard","disabled","writeText","WelcomeBackground","width","height","viewBox","fill","xmlns","filter","x","y","rx","transform","fillOpacity","cx","cy","r","id","filterUnits","colorInterpolationFilters","floodOpacity","result","mode","in","in2","stdDeviation","x1","y1","x2","y2","gradientUnits","offset","stopColor","PcoWrappedBanner","dismissed","setDismissed","key","initialValue","overwriteWithInitialValue","storedValue","setStoredValue","item","localStorage","getItem","parse","_unused","localStorageRepresentation","useEffect","setItem","removeItem","useLocalStorage","enabled","siteAdmin","pco","wrapped","shareModalOpen","setShareModalOpen","svgString","ReactDOMServer","renderToStaticMarkup","svgDataUrl","encodeURIComponent","app","ThemeProvider","button","themes","naked","outline","backgroundImage","backgroundPosition","backgroundRepeat","backgroundSize","GridView","columns","flex"],"mappings":"6iBAAA,MAAAA,EAAA,CAAA,WAAA,UAAA,QAcMC,EAAc,CAClBC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,KAKAC,EAAgB,CACpBC,EACAC,KAEA,OAAQD,GACN,IAAK,KACH,MAAsB,oBACxB,IAAK,KACH,MAAqB,OAAdC,GAAoC,OAAdA,EACzB,oBACG,GAAAP,EAAYO,OACrB,IAAK,KACH,SAAUP,EAAYO,OACxB,QACE,MAAU,GAAAP,EAAYE,OAV1B,EAcWM,EAAQC,IASH,IATIC,SACpBA,EADoBC,QAEpBA,EAFoBC,KAGpBA,EAAO,MAMSH,EALbI,6IAKaC,CAAAL,EAAAV,gBAChB,OACEgB,EAACC,cAAAC,EACKJ,EAAAA,CAAAA,EAAAA,EACJ,CAAAK,eAAgBP,EAChBQ,OAAO,MACPC,QAAQ,IACRC,SAAS,MACTC,iBAAkB,EAClBC,aAAc,CACZtB,GAAI,CACFoB,SAAUhB,EAAc,KAAMO,GAC9BY,SAAU,WACVC,MAAO,QAETvB,GAAI,CACFmB,SAAUhB,EAAc,KAAMO,IAEhCT,GAAI,CACFkB,SAAUhB,EAAc,KAAMO,OAIjCF,EArBH,EA0BSgB,EAAc,EACzBhB,eAEA,MAAMiB,EAAOC,SAASC,cACpB,oDAGF,OAAOC,EAAapB,EAAUiB,EAAX,EAGfI,EAAa,EAAGrB,2BAElBK,EAACC,cAAAgB,EACC,CAAAC,MAAO,EACPC,OAAQ,EACRC,IAAK,CACHC,MAAOC,EAAM,mCACbC,WAAY,MACZC,WAAY,OACZC,SAAU,SACVC,aAAc,WACdC,WAAY,WAGbhC,GAKMiC,EAAgB,EAAGjC,2BAE5BK,EAAAC,cAAC4B,EAAD,CACEC,SAAU,EACVV,IAAK,CACHC,MAAOC,EAAM,oCACbC,WAAY,IACZC,WAAY,MAGb7B,GAiBMoC,EAAc,EACzBnC,UACAoC,QACAC,WACAtC,2BAEAK,EAAAC,cAACiC,EAAD,CAAKC,kBAAmB,EAAGC,WAAY,gBACrCpC,EAACC,cAAAoC,GACCC,KAAK,aACLC,UAAU,SACVC,aAAa,gBACbC,QAAS,gBAETzC,EAAAC,cAACe,EAAYgB,KAAAA,GACZpC,gBACCI,EAACC,cAAAyC,EACC,CAAAC,MAAM,UACNC,QAAQ,QACRC,KAAM,CACJC,KAAM,YACNjD,KAAM,MAERmC,MAAM,cACNe,aAAc,EACdC,QAASpD,kBAIfI,EAAAC,cAACiC,EAAD,CAAKE,WAAYH,GAAYtC,EAAW,GAAM,GAC3CsC,gBAAYjC,EAAAC,cAAC2B,EAAeK,KAAAA,GAC5BtC,IAKMsD,EAAY,EACvBtD,2BAEAK,EAAAC,cAACiC,EAAD,CACEgB,gBAAiB5B,EAAM,0BACvBjB,QAAS,EACT,mBAHF,GAKGV,GAIQwD,EAAc,EACzBxD,2BAEAK,EAAAC,cAACiC,EAAD,CACEC,kBAAmB,EACnBC,WAAY,EACZc,gBAAiB5B,EAAM,0BACvBF,IAAK,CACHgC,UAAwB,aAAA9B,EAAM,qCAG/B3B,GChLS,SAAU0D,GAAWzD,QACjCA,EADiC0D,iBAEjCA,EAFiCC,cAGjCA,IAMA,MAAOC,EAAQC,GAAaC,GAAS,IAC9BC,EAAGC,EAAQC,GAAUC,OAAOC,SAASC,KAAKC,MAAM,KACjDC,EAAgB,GAAAJ,OAAOC,SAASI,kBAAkBP,KAAUC,YASlE,SAASO,EAAuBC,GAC9BC,IAAAA,EAAAA,EAAAA,MAAM,WAAY,CAChBC,OAAQ,QACRC,QAAS,CACP,eAAgB,mBAChB,eAAA,OAAAC,EAAA,OAAAC,EACE7D,SACGC,cAAc,iCAFnB,EACE4D,EAEIC,aAAa,YAHnBF,EAGiC,IAEnCG,KAAMC,KAAKC,UAAU,CAAEC,OAAQV,MAE9BW,KAAMC,IACL,IAAKA,EAASC,GACZ,MAAUC,IAAAA,MAAM,4CAElB,OAAO7B,EAAiBe,EAAD,GAExBe,MAAOC,GAAUC,QAAQD,MAAMA,GACnC,cAED,OACErF,EAACC,cAAAU,EACC,kBAAAX,EAAAC,cAACR,EAAD,CAAOG,QAASA,EAAS2F,MAAI,EAAC,cAAY,kCACxCvF,EAACC,cAAA8B,EACC,CAAAnC,QAASA,EACToC,MAAM,QACNC,SAAU,qFAEZjC,EAAAC,cAACgD,EAAD,kBACEjD,gBAACqC,EAAD,CAAWI,QAAS,gBAClBzC,EAACC,cAAAoC,EAAU,CAAAI,QAAS,gBAClBzC,EAAAC,cAACgB,EAAQ,CAAAC,MAAO,GADlB,uBAEElB,EAACC,cAAAuF,EACC,CAAAC,SAAUlC,EACVmC,MAAM,sBACN5C,KAAK,QACL6C,SAAU,IAAMvB,GAAuB,GACvCvE,KAAK,KACL+F,MAAM,uBAER5F,EAAAC,cAACuF,EAAD,CACEC,QAASlC,EACTmC,MAAM,qBACN5C,KAAK,QACL6C,SAAU,IAAMvB,GAAuB,GACvCvE,KAAK,KACL+F,MAAM,uBAGV5F,EAACC,cAAAoC,EAAU,CAAAI,QAAS,gBAClBzC,EAAAC,cAACgB,EAAD,CAASC,MAAO,GAAhB,qBACAlB,EAAAC,cAACoC,EAAD,CACEC,KAAK,WACLG,QAAS,EACTjC,aAAc,CACZtB,GAAI,CAAEqD,UAAW,SAAUD,KAAM,eAEnCuD,aAAa,2BAEb7F,EAACC,cAAA6F,GAAKC,UAAQ,EAACC,GAAG,YACf9B,GAEF+B,UAAUC,wBACTlG,gBAAC0C,EAAD,CACEyD,SAAU3C,EACVR,QAzElB,WACEiD,UAAUC,UACPE,UAAUlC,GACVc,KAAK,IAAMvB,GAAU,IACrB2B,MAAOC,GAAUC,QAAQD,MAAMA,GACnC,EAqEiB1C,MAAM,UACNC,QAAQ,WAEPY,EAAS,UAAY,yBAOlCxD,gBAACmD,EAAD,kBACEnD,EAACC,cAAAoC,EACC,CAAAhC,QAAS,EACTiC,KAAK,aACLC,UAAU,MACVC,aAAa,MACbC,QAAS,gBAETzC,EAACC,cAAAyC,EAAO,CAAAM,QAASpD,EAASoC,MAAM,OAAOW,MAAM,eAMxD,CC7HuB0D,SAAAA,iBACtB,OACErG,EACEC,cAAA,MAAA,CAAAqG,MAAM,OACNC,OAAO,OACPC,QAAQ,gBACRC,KAAK,OACLC,MAAM,2CAEN1G,EAAGC,cAAA,IAAA,CAAA0G,OAAO,yCACR3G,EAAAC,cAAA,OAAA,CACE2G,EAAE,UACFC,EAAE,UACFP,MAAM,UACNC,OAAO,UACPO,GAAG,UACHC,UAAU,+BACVN,KAAK,+BACLO,YAAY,sBAGhBhH,EAAQC,cAAA,SAAA,CAAAgH,GAAG,SAASC,GAAG,QAAQC,EAAE,OAAOV,KAAK,QAAQO,YAAY,qBACjEhH,0BAAQiH,GAAG,QAAQC,GAAG,QAAQC,EAAE,OAAOV,KAAK,QAAQO,YAAY,qBAChEhH,EAAQC,cAAA,SAAA,CAAAgH,GAAG,OAAOC,GAAG,MAAMC,EAAE,KAAKV,KAAK,QAAQO,YAAY,qBAC3DhH,EAAAC,cAAA,OAAA,kBACED,EACEC,cAAA,SAAA,CAAAmH,GAAG,qBACHR,EAAE,WACFC,EAAE,UACFP,MAAM,UACNC,OAAO,SACPc,YAAY,iBACZC,0BAA0B,qBAE1BtH,EAASC,cAAA,UAAA,CAAAsH,aAAa,IAAIC,OAAO,oCACjCxH,2BACEyH,KAAK,SACLC,GAAG,gBACHC,IAAI,qBACJH,OAAO,uBAETxH,EACEC,cAAA,iBAAA,CAAA2H,aAAa,MACbJ,OAAO,kDAGXxH,EAAAC,cAAA,iBAAA,CACEmH,GAAG,yBACHS,GAAG,UACHC,GAAG,UACHC,GAAG,UACHC,GAAG,UACHC,cAAc,+BAEdjI,EAAAC,cAAA,OAAA,CAAMiI,OAAO,UAAUC,UAAU,yBACjCnI,EAAAC,cAAA,OAAA,CAAMiI,OAAO,WAAWC,UAAU,yBAClCnI,EAAMC,cAAA,OAAA,CAAAiI,OAAO,UAAUC,UAAU,cAK1C,CChDa,SAAUC,IACtB,MAAOC,EAAWC,GCdd,SACJC,EACAC,EACAC,GAA4B,GAI5B,MAAOC,EAAaC,GAAkBjF,EAAY,KAChD,GAAI+E,EAA2B,OAAOD,EAEtC,IAEE,MAAMI,EAAO9E,OAAO+E,aAAaC,QAAQP,GAGzC,OAAOK,EAAO/D,KAAKkE,MAAMH,GAAQJ,CAIlC,CAHC,MAAAQ,GAEA,OAAOR,CACR,IAIGS,EAA6BpE,KAAKC,UAAU4D,GAQlD,OAPAQ,EAAU,KACRpF,OAAO+E,aAAaM,QAAQZ,EAAKU,EAAjC,EACC,CAACV,EAAKU,IAKF,CAACP,EAAaC,EAFL,IAAM7E,OAAO+E,aAAaO,WAAWb,GAGtD,CDlBmCc,CAChC,yBACA,IAEIC,QAAEA,EAAFvE,OAAWA,EAAXwE,UAAmBA,GAAczF,OAAO0F,IAAIC,SAC3CC,EAAgBC,GAAqBjG,GAAS,IAC9CH,EAAeD,GAAoBI,EAASqB,GAC7C6E,EAAYC,EAAeC,kCAAqB9J,EAAAC,cAACoG,EAAD,OAChD0D,EAAmC,sBAAAC,mBAAmBJ,MACrDK,EAAKrG,EAAQC,GAAUC,OAAOC,SAASC,KAAKC,MAAM,KAEnDC,EAAgB,GAAAJ,OAAOC,SAASI,kBAAkBP,KAAUC,YAClE,OAAIwE,IAAciB,EAAgB,kBAiBhCtJ,EAACC,cAAAiK,GAAcvH,MAfH,CACZwH,OAAQ,CACNC,OAAQ,CACNX,QAAS,CACPhD,KAAM,CACJvD,gBAAiB,oDAEnBmH,MAAO,CAJA,EAKPC,QAAS,CALF,oBAaXtK,EAACC,cAAAoC,GACCC,KAAK,aACLC,UAAU,SACVW,gBAAiB,8BACjBqH,wBAAyBR,MACzBS,mBAAmB,gBACnBC,iBAAiB,YACjBC,eAAe,OACflI,aAAa,gBACbnC,QAAS,gBAETL,EAAAC,cAACoC,EAAD,CACEC,KAAK,WACLG,QAAS,EACTjC,aAAc,CAAEtB,GAAI,CAAEqD,UAAW,SAAUD,KAAM,6BAEjDtC,EAAAC,cAACgB,EAAD,CAASC,MAAO,EAAGK,WAAY,KACS,wCAAA,kBAExCvB,gBAAC2K,EAAD,CACEC,QAAQ,iBACRnI,QAAS,EACTjC,aAAc,CAAEtB,GAAI,CAAE0L,QAAS,yCAE/B5K,EAACC,cAAAyC,EACC,CAAAtB,IAAK,CACH,YAAa,CACXC,MAAO,yCAGXwJ,KAAM,EACN9E,UAAQ,EACRC,GAAI9B,EACJvB,MAAM,UACNnC,aAAc,CAAEtB,GAAI,CAAE2L,KAAM,aAfhC,cAmBW,SAARZ,GAAkBV,gBACjBvJ,EAAAC,cAACyC,EAAD,CACEmI,KAAM,EACN7H,QAAS,IAAM2G,GAAkB,GACjChH,MAAM,UACNnC,aAAc,CAAEtB,GAAI,CAAE2L,KAAM,aAxBlC,wBA+BF7K,EAACC,cAAAyC,EACC,CAAAE,QAAQ,QACRC,KAAM,CACJC,KAAM,YACNjD,KAAM,KACNwB,MAAOC,EAAM,+BAEfU,MAAM,UACNgB,QAAS,IAAMsF,GAAa,MAG/BoB,gBACC1J,EAACC,cAAAoD,EACC,CAAAzD,QAAS,IAAM+J,GAAkB,GACjCpG,cAAeA,EACfD,iBAAkBA,IAK3B"}
|
|
1
|
+
{"version":3,"file":"wrapped.modern.js","sources":["../modal.tsx","../components/share_modal.tsx","../components/welcome_background.tsx","../components/pco_wrapped_banner.tsx","../hooks/use_local_storage.ts"],"sourcesContent":["import {\n Box,\n Button,\n Heading,\n ModalProps,\n StackView,\n Modal as TRModal,\n Text,\n} from \"@planningcenter/tapestry-react\"\n\nimport React from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { token } from \"@planningcenter/tapestry\"\n\nconst MODAL_SIZES = {\n sm: 400,\n md: 600,\n lg: 800,\n xl: 1000,\n} as const\n\nconst TOOLBAR_WIDTH = 48\n\nconst getModalWidth = (\n mediaQuery: \"sm\" | \"md\" | \"lg\",\n modalSize: keyof typeof MODAL_SIZES,\n) => {\n switch (mediaQuery) {\n case \"sm\":\n return `calc(100% - ${TOOLBAR_WIDTH * 2}px)`\n case \"md\":\n return modalSize === \"lg\" || modalSize === \"xl\"\n ? `calc(100% - ${TOOLBAR_WIDTH * 2}px)`\n : `${MODAL_SIZES[modalSize]}px`\n case \"lg\":\n return `${MODAL_SIZES[modalSize]}px`\n default:\n return `${MODAL_SIZES.md}px`\n }\n}\n\nexport const Modal = ({\n children,\n onClose,\n size = \"md\",\n ...modalProps\n}: {\n children: React.ReactElement | React.ReactElement[]\n onClose: () => void\n size?: keyof typeof MODAL_SIZES\n} & ModalProps) => {\n return (\n <TRModal\n {...modalProps}\n onRequestClose={onClose}\n radius=\"8px\"\n padding=\"0\"\n maxWidth=\"90%\"\n marginHorizontal={0}\n mediaQueries={{\n sm: {\n maxWidth: getModalWidth(\"sm\", size),\n position: \"relative\",\n right: `${TOOLBAR_WIDTH / 2}px`,\n },\n md: {\n maxWidth: getModalWidth(\"md\", size),\n },\n lg: {\n maxWidth: getModalWidth(\"lg\", size),\n },\n }}\n >\n {children}\n </TRModal>\n )\n}\n\nexport const ModalPortal = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => {\n const node = document.querySelector(\n `[data-tapestry-react-theme-provider-home=\"true\"]`,\n ) as HTMLElement\n\n return createPortal(children, node)\n}\n\nconst ModalTitle = ({ children }: { children: string }) => {\n return (\n <Heading\n level={1}\n margin={0}\n css={{\n color: token(\"--t-text-color-default-headline\"),\n fontWeight: \"500\",\n lineHeight: \"2rem\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {children}\n </Heading>\n )\n}\n\nexport const ModalSubTitle = ({ children }: { children: string }) => {\n return (\n <Text\n fontSize={3}\n css={{\n color: token(\"--t-text-color-default-secondary\"),\n fontWeight: 500,\n lineHeight: 1.5,\n }}\n >\n {children}\n </Text>\n )\n}\n\ntype BaseModalHeaderProps = {\n onClose?: () => void\n title: string\n}\n\ntype ModalHeaderProps =\n | (BaseModalHeaderProps & { subTitle: string; children?: never })\n | (BaseModalHeaderProps & {\n subTitle?: never\n children: React.ReactElement | React.ReactElement[]\n })\n\nexport const ModalHeader = ({\n onClose,\n title,\n subTitle,\n children,\n}: ModalHeaderProps) => (\n <Box paddingHorizontal={4} paddingTop={4}>\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n distribution=\"space-between\"\n spacing={1}\n >\n <ModalTitle>{title}</ModalTitle>\n {onClose && (\n <Button\n theme=\"default\"\n variant=\"naked\"\n icon={{\n name: \"general.x\",\n size: \"md\",\n }}\n title=\"Close modal\"\n marginRight={-1}\n onClick={onClose}\n />\n )}\n </StackView>\n <Box paddingTop={subTitle || children ? 0.5 : 0}>\n {subTitle && <ModalSubTitle>{subTitle}</ModalSubTitle>}\n {children}\n </Box>\n </Box>\n)\n\nexport const ModalBody = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <Box\n backgroundColor={token(\"--t-surface-color-card\")}\n padding={4}\n data-modal-body\n >\n {children}\n </Box>\n)\n\nexport const ModalFooter = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <Box\n paddingHorizontal={4}\n paddingTop={3}\n backgroundColor={token(\"--t-surface-color-card\")}\n css={{\n borderTop: `solid 1px ${token(\"--t-border-color-default-base\")}`,\n }}\n >\n {children}\n </Box>\n)\n","import {\n Button,\n Heading,\n Link,\n Radio,\n StackView,\n} from \"@planningcenter/tapestry-react\"\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalPortal,\n} from \"../modal\"\nimport React, { useState } from \"react\"\nimport { pcoUrl } from \"@planningcenter/url\"\n\nexport default function ShareModal({\n onClose,\n setShareOrgStats,\n shareOrgStats,\n}: {\n onClose: () => void\n setShareOrgStats: (shared: boolean) => void\n shareOrgStats: boolean\n}) {\n const [copied, setCopied] = useState(false)\n const homeUrl = pcoUrl(\"home\")\n const wrappedURL = `${homeUrl}/wrapped`\n\n function copyToClipboard() {\n navigator.clipboard\n .writeText(wrappedURL)\n .then(() => setCopied(true))\n .catch((error) => console.error(error))\n }\n\n function updatePcoWrappedShared(newShared: boolean) {\n fetch(\"/wrapped\", {\n method: \"PATCH\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-CSRF-Token\":\n document\n .querySelector('meta[name=\"csrf-token\"]')\n ?.getAttribute(\"content\") ?? \"\",\n },\n body: JSON.stringify({ shared: newShared }),\n })\n .then((response) => {\n if (!response.ok)\n throw new Error(\"Failed to share. Please try again later.\")\n\n return setShareOrgStats(newShared)\n })\n .catch((error) => console.error(error))\n }\n\n return (\n <ModalPortal>\n <Modal onClose={onClose} open data-testid=\"pco-wrapped-modal\">\n <ModalHeader\n onClose={onClose}\n title=\"Share\"\n subTitle={`Who should be able to view your church's \"Year in Planning Center\"`}\n />\n <ModalBody>\n <StackView spacing={3}>\n <StackView spacing={1}>\n <Heading level={3}>Access</Heading>\n <Radio\n checked={!shareOrgStats}\n label=\"Organization Admins\"\n name=\"radio\"\n onChange={() => updatePcoWrappedShared(false)}\n size=\"md\"\n value=\"false\"\n />\n <Radio\n checked={shareOrgStats}\n label=\"Any logged in user\"\n name=\"radio\"\n onChange={() => updatePcoWrappedShared(true)}\n size=\"md\"\n value=\"true\"\n />\n </StackView>\n <StackView spacing={1}>\n <Heading level={3}>Link</Heading>\n <StackView\n axis=\"vertical\"\n spacing={1}\n mediaQueries={{\n sm: { alignment: \"center\", axis: \"horizontal\" },\n }}\n overflowWrap=\"break-word\"\n >\n <Link external to=\"/wrapped\">\n {wrappedURL}\n </Link>\n {navigator.clipboard && (\n <Button\n disabled={copied}\n onClick={copyToClipboard}\n theme=\"primary\"\n variant=\"outline\"\n >\n {copied ? \"Copied!\" : \"Copy\"}\n </Button>\n )}\n </StackView>\n </StackView>\n </StackView>\n </ModalBody>\n <ModalFooter>\n <StackView\n padding={0}\n axis=\"horizontal\"\n alignment=\"end\"\n distribution=\"end\"\n spacing={2}\n >\n <Button onClick={onClose} title=\"Done\" theme=\"primary\" />\n </StackView>\n </ModalFooter>\n </Modal>\n </ModalPortal>\n )\n}\n","import React from \"react\"\n\nexport default function WelcomeBackground() {\n return (\n <svg\n width=\"1724\"\n height=\"1080\"\n viewBox=\"0 0 1724 1080\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g filter=\"url(#filter0_f_154_9174)\">\n <rect\n x=\"606.744\"\n y=\"1062.82\"\n width=\"649.488\"\n height=\"964.695\"\n rx=\"324.744\"\n transform=\"rotate(-120 606.744 1062.82)\"\n fill=\"url(#paint0_linear_154_9174)\"\n fillOpacity=\"0.5\"\n />\n </g>\n <circle cx=\"1200.5\" cy=\"195.5\" r=\"45.5\" fill=\"white\" fillOpacity=\"0.3\" />\n <circle cx=\"613.5\" cy=\"206.5\" r=\"22.5\" fill=\"white\" fillOpacity=\"0.4\" />\n <circle cx=\"1340\" cy=\"384\" r=\"21\" fill=\"white\" fillOpacity=\"0.5\" />\n <defs>\n <filter\n id=\"filter0_f_154_9174\"\n x=\"0.810547\"\n y=\"-263.19\"\n width=\"1722.57\"\n height=\"1607.2\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feGaussianBlur\n stdDeviation=\"200\"\n result=\"effect1_foregroundBlur_154_9174\"\n />\n </filter>\n <linearGradient\n id=\"paint0_linear_154_9174\"\n x1=\"1040.11\"\n y1=\"1031.29\"\n x2=\"1407.11\"\n y2=\"1806.85\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0.21875\" stopColor=\"#FFD748\" />\n <stop offset=\"0.541667\" stopColor=\"#FF4242\" />\n <stop offset=\"0.84375\" stopColor=\"#657CF1\" />\n </linearGradient>\n </defs>\n </svg>\n )\n}\n","import {\n Button,\n GridView,\n Heading,\n StackView,\n ThemeProvider,\n} from \"@planningcenter/tapestry-react\"\nimport React, { useState } from \"react\"\nimport { pcoUrl } from \"@planningcenter/url\"\n\nimport ReactDOMServer from \"react-dom/server\"\nimport ShareModal from \"./share_modal\"\nimport WelcomeBackground from \"./welcome_background\"\nimport { token } from \"@planningcenter/tapestry\"\nimport { useLocalStorage } from \"../hooks/use_local_storage\"\n\nexport default function PcoWrappedBanner() {\n const [dismissed, setDismissed] = useLocalStorage(\n \"pco-wrapped-dismissed\",\n false,\n )\n const { enabled, shared, siteAdmin } = window.pco.wrapped\n const [shareModalOpen, setShareModalOpen] = useState(false)\n const [shareOrgStats, setShareOrgStats] = useState(shared)\n const svgString = ReactDOMServer.renderToStaticMarkup(<WelcomeBackground />)\n const svgDataUrl = `data:image/svg+xml,${encodeURIComponent(svgString)}`\n const isHomeApp = window.location.host.includes(\"home\")\n const homeUrl = pcoUrl(\"home\")\n const wrappedURL = `${homeUrl}/wrapped`\n\n if (dismissed || !enabled) return null\n\n const theme = {\n button: {\n themes: {\n wrapped: {\n fill: {\n backgroundColor: \"var(--t-fill-color-button-neutral-solid-default)\",\n },\n naked: {},\n outline: {},\n },\n },\n },\n }\n\n return (\n <ThemeProvider theme={theme}>\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n backgroundColor={\"var(--t-surface-color-card)\"}\n backgroundImage={`url('${svgDataUrl}')`}\n backgroundPosition=\"center center\"\n backgroundRepeat=\"no-repeat\"\n backgroundSize=\"auto\"\n distribution=\"space-between\"\n padding={2}\n >\n <StackView\n axis=\"vertical\"\n spacing={2}\n mediaQueries={{ sm: { alignment: \"center\", axis: \"horizontal\" } }}\n >\n <Heading level={4} fontWeight={800}>\n Your year in Planning Center is here!{\" \"}\n </Heading>\n <GridView\n columns=\"repeat(2, 1fr)\"\n spacing={1}\n mediaQueries={{ sm: { columns: \"repeat(2, max-content)\" } }}\n >\n <Button\n css={{\n \"&:visited\": {\n color: \"var(--t-text-color-default-inverted)\",\n },\n \"&:hover\": {\n color: \"var(--t-text-color-default-inverted)\",\n },\n }}\n flex={1}\n external\n to={wrappedURL}\n theme=\"primary\"\n mediaQueries={{ sm: { flex: \"initial\" } }}\n >\n See it now\n </Button>\n {isHomeApp && siteAdmin && (\n <Button\n flex={1}\n onClick={() => setShareModalOpen(true)}\n theme=\"wrapped\"\n mediaQueries={{ sm: { flex: \"initial\" } }}\n >\n Share\n </Button>\n )}\n </GridView>\n </StackView>\n <Button\n variant=\"naked\"\n icon={{\n name: \"general.x\",\n size: \"md\",\n color: token(\"--t-fill-color-neutral-020\"),\n }}\n title=\"Dismiss\"\n onClick={() => setDismissed(true)}\n />\n </StackView>\n {shareModalOpen && (\n <ShareModal\n onClose={() => setShareModalOpen(false)}\n shareOrgStats={shareOrgStats}\n setShareOrgStats={setShareOrgStats}\n />\n )}\n </ThemeProvider>\n )\n}\n","import { useEffect, useState } from \"react\"\n\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T,\n overwriteWithInitialValue = false\n) {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (overwriteWithInitialValue) return initialValue\n\n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key)\n\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue\n } catch {\n // If error also return initialValue\n return initialValue\n }\n })\n\n // Reflect the state into localStorage as a side effect.\n const localStorageRepresentation = JSON.stringify(storedValue)\n useEffect(() => {\n window.localStorage.setItem(key, localStorageRepresentation)\n }, [key, localStorageRepresentation])\n\n // When we are done with this key, drop it from localStorage completely\n const dropKey = () => window.localStorage.removeItem(key)\n\n return [storedValue, setStoredValue, dropKey] as const\n}\n"],"names":["_excluded","MODAL_SIZES","sm","md","lg","xl","getModalWidth","mediaQuery","modalSize","Modal","_ref","children","onClose","size","modalProps","_objectWithoutPropertiesLoose","React","createElement","TRModal","onRequestClose","radius","padding","maxWidth","marginHorizontal","mediaQueries","position","right","ModalPortal","node","document","querySelector","createPortal","ModalTitle","Heading","level","margin","css","color","token","fontWeight","lineHeight","overflow","textOverflow","whiteSpace","ModalSubTitle","Text","fontSize","ModalHeader","title","subTitle","Box","paddingHorizontal","paddingTop","StackView","axis","alignment","distribution","spacing","Button","theme","variant","icon","name","marginRight","onClick","ModalBody","backgroundColor","ModalFooter","borderTop","ShareModal","setShareOrgStats","shareOrgStats","copied","setCopied","useState","wrappedURL","pcoUrl","updatePcoWrappedShared","newShared","_document$querySelect","_document$querySelect2","fetch","method","headers","getAttribute","body","JSON","stringify","shared","then","response","ok","Error","catch","error","console","open","Radio","checked","label","onChange","value","overflowWrap","Link","external","to","navigator","clipboard","disabled","writeText","WelcomeBackground","width","height","viewBox","fill","xmlns","filter","x","y","rx","transform","fillOpacity","cx","cy","r","id","filterUnits","colorInterpolationFilters","floodOpacity","result","mode","in","in2","stdDeviation","x1","y1","x2","y2","gradientUnits","offset","stopColor","PcoWrappedBanner","dismissed","setDismissed","key","initialValue","overwriteWithInitialValue","storedValue","setStoredValue","item","window","localStorage","getItem","parse","_unused","localStorageRepresentation","useEffect","setItem","removeItem","useLocalStorage","enabled","siteAdmin","pco","wrapped","shareModalOpen","setShareModalOpen","svgString","ReactDOMServer","renderToStaticMarkup","svgDataUrl","encodeURIComponent","isHomeApp","location","host","includes","ThemeProvider","button","themes","naked","outline","backgroundImage","backgroundPosition","backgroundRepeat","backgroundSize","GridView","columns","flex"],"mappings":"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"}
|
package/dist/wrapped.module.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Modal as e,Box as t,StackView as r,Button as n,Heading as a,Text as i,Radio as
|
|
1
|
+
import{Modal as e,Box as t,StackView as r,Button as n,Heading as a,Text as i,Radio as l,Link as o,ThemeProvider as c,GridView as s}from"@planningcenter/tapestry-react";import d,{useState as m,useEffect as u}from"react";import{pcoUrl as p}from"@planningcenter/url";import f from"react-dom/server";import{createPortal as g}from"react-dom";import{token as h}from"@planningcenter/tapestry";function v(){return v=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},v.apply(null,arguments)}var E=["children","onClose","size"],x={sm:400,md:600,lg:800,xl:1e3},w=function(e,t){switch(e){case"sm":return"calc(100% - 96px)";case"md":return"lg"===t||"xl"===t?"calc(100% - 96px)":x[t]+"px";case"lg":return x[t]+"px";default:return x.md+"px"}},b=function(t){var r=t.children,n=t.onClose,a=t.size,i=void 0===a?"md":a,l=function(e,t){if(null==e)return{};var r={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==t.indexOf(n))continue;r[n]=e[n]}return r}(t,E);/*#__PURE__*/return d.createElement(e,v({},l,{onRequestClose:n,radius:"8px",padding:"0",maxWidth:"90%",marginHorizontal:0,mediaQueries:{sm:{maxWidth:w("sm",i),position:"relative",right:"24px"},md:{maxWidth:w("md",i)},lg:{maxWidth:w("lg",i)}}}),r)},y=function(e){var t=e.children,r=document.querySelector('[data-tapestry-react-theme-provider-home="true"]');return g(t,r)},C=function(e){var t=e.children;/*#__PURE__*/return d.createElement(a,{level:1,margin:0,css:{color:h("--t-text-color-default-headline"),fontWeight:"500",lineHeight:"2rem",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},t)},k=function(e){var t=e.children;/*#__PURE__*/return d.createElement(i,{fontSize:3,css:{color:h("--t-text-color-default-secondary"),fontWeight:500,lineHeight:1.5}},t)},S=function(e){var a=e.onClose,i=e.subTitle,l=e.children;/*#__PURE__*/return d.createElement(t,{paddingHorizontal:4,paddingTop:4},/*#__PURE__*/d.createElement(r,{axis:"horizontal",alignment:"center",distribution:"space-between",spacing:1},/*#__PURE__*/d.createElement(C,null,e.title),a&&/*#__PURE__*/d.createElement(n,{theme:"default",variant:"naked",icon:{name:"general.x",size:"md"},title:"Close modal",marginRight:-1,onClick:a})),/*#__PURE__*/d.createElement(t,{paddingTop:i||l?.5:0},i&&/*#__PURE__*/d.createElement(k,null,i),l))},O=function(e){var r=e.children;/*#__PURE__*/return d.createElement(t,{backgroundColor:h("--t-surface-color-card"),padding:4,"data-modal-body":!0},r)},z=function(e){var r=e.children;/*#__PURE__*/return d.createElement(t,{paddingHorizontal:4,paddingTop:3,backgroundColor:h("--t-surface-color-card"),css:{borderTop:"solid 1px "+h("--t-border-color-default-base")}},r)};function _(e){var t=e.onClose,i=e.setShareOrgStats,c=e.shareOrgStats,s=m(!1),u=s[0],f=s[1],g=p("home")+"/wrapped";function h(e){var t,r;fetch("/wrapped",{method:"PATCH",headers:{"Content-Type":"application/json","X-CSRF-Token":null!=(t=null==(r=document.querySelector('meta[name="csrf-token"]'))?void 0:r.getAttribute("content"))?t:""},body:JSON.stringify({shared:e})}).then(function(t){if(!t.ok)throw new Error("Failed to share. Please try again later.");return i(e)}).catch(function(e){return console.error(e)})}/*#__PURE__*/return d.createElement(y,null,/*#__PURE__*/d.createElement(b,{onClose:t,open:!0,"data-testid":"pco-wrapped-modal"},/*#__PURE__*/d.createElement(S,{onClose:t,title:"Share",subTitle:'Who should be able to view your church\'s "Year in Planning Center"'}),/*#__PURE__*/d.createElement(O,null,/*#__PURE__*/d.createElement(r,{spacing:3},/*#__PURE__*/d.createElement(r,{spacing:1},/*#__PURE__*/d.createElement(a,{level:3},"Access"),/*#__PURE__*/d.createElement(l,{checked:!c,label:"Organization Admins",name:"radio",onChange:function(){return h(!1)},size:"md",value:"false"}),/*#__PURE__*/d.createElement(l,{checked:c,label:"Any logged in user",name:"radio",onChange:function(){return h(!0)},size:"md",value:"true"})),/*#__PURE__*/d.createElement(r,{spacing:1},/*#__PURE__*/d.createElement(a,{level:3},"Link"),/*#__PURE__*/d.createElement(r,{axis:"vertical",spacing:1,mediaQueries:{sm:{alignment:"center",axis:"horizontal"}},overflowWrap:"break-word"},/*#__PURE__*/d.createElement(o,{external:!0,to:"/wrapped"},g),navigator.clipboard&&/*#__PURE__*/d.createElement(n,{disabled:u,onClick:function(){navigator.clipboard.writeText(g).then(function(){return f(!0)}).catch(function(e){return console.error(e)})},theme:"primary",variant:"outline"},u?"Copied!":"Copy"))))),/*#__PURE__*/d.createElement(z,null,/*#__PURE__*/d.createElement(r,{padding:0,axis:"horizontal",alignment:"end",distribution:"end",spacing:2},/*#__PURE__*/d.createElement(n,{onClick:t,title:"Done",theme:"primary"})))))}function F(){/*#__PURE__*/return d.createElement("svg",{width:"1724",height:"1080",viewBox:"0 0 1724 1080",fill:"none",xmlns:"http://www.w3.org/2000/svg"},/*#__PURE__*/d.createElement("g",{filter:"url(#filter0_f_154_9174)"},/*#__PURE__*/d.createElement("rect",{x:"606.744",y:"1062.82",width:"649.488",height:"964.695",rx:"324.744",transform:"rotate(-120 606.744 1062.82)",fill:"url(#paint0_linear_154_9174)",fillOpacity:"0.5"})),/*#__PURE__*/d.createElement("circle",{cx:"1200.5",cy:"195.5",r:"45.5",fill:"white",fillOpacity:"0.3"}),/*#__PURE__*/d.createElement("circle",{cx:"613.5",cy:"206.5",r:"22.5",fill:"white",fillOpacity:"0.4"}),/*#__PURE__*/d.createElement("circle",{cx:"1340",cy:"384",r:"21",fill:"white",fillOpacity:"0.5"}),/*#__PURE__*/d.createElement("defs",null,/*#__PURE__*/d.createElement("filter",{id:"filter0_f_154_9174",x:"0.810547",y:"-263.19",width:"1722.57",height:"1607.2",filterUnits:"userSpaceOnUse",colorInterpolationFilters:"sRGB"},/*#__PURE__*/d.createElement("feFlood",{floodOpacity:"0",result:"BackgroundImageFix"}),/*#__PURE__*/d.createElement("feBlend",{mode:"normal",in:"SourceGraphic",in2:"BackgroundImageFix",result:"shape"}),/*#__PURE__*/d.createElement("feGaussianBlur",{stdDeviation:"200",result:"effect1_foregroundBlur_154_9174"})),/*#__PURE__*/d.createElement("linearGradient",{id:"paint0_linear_154_9174",x1:"1040.11",y1:"1031.29",x2:"1407.11",y2:"1806.85",gradientUnits:"userSpaceOnUse"},/*#__PURE__*/d.createElement("stop",{offset:"0.21875",stopColor:"#FFD748"}),/*#__PURE__*/d.createElement("stop",{offset:"0.541667",stopColor:"#FF4242"}),/*#__PURE__*/d.createElement("stop",{offset:"0.84375",stopColor:"#657CF1"}))))}function T(){var e=function(e,t,r){void 0===r&&(r=!1);var n=m(function(){if(r)return t;try{var n=window.localStorage.getItem(e);return n?JSON.parse(n):t}catch(e){return t}}),a=n[0],i=n[1],l=JSON.stringify(a);return u(function(){window.localStorage.setItem(e,l)},[e,l]),[a,i,function(){return window.localStorage.removeItem(e)}]}("pco-wrapped-dismissed",!1),t=e[0],i=e[1],l=window.pco.wrapped,o=l.enabled,g=l.shared,v=l.siteAdmin,E=m(!1),x=E[0],w=E[1],b=m(g),y=b[0],C=b[1],k=f.renderToStaticMarkup(/*#__PURE__*/d.createElement(F,null)),S="data:image/svg+xml,"+encodeURIComponent(k),O=window.location.host.includes("home"),z=p("home")+"/wrapped";return t||!o?null:/*#__PURE__*/d.createElement(c,{theme:{button:{themes:{wrapped:{fill:{backgroundColor:"var(--t-fill-color-button-neutral-solid-default)"},naked:{},outline:{}}}}}},/*#__PURE__*/d.createElement(r,{axis:"horizontal",alignment:"center",backgroundColor:"var(--t-surface-color-card)",backgroundImage:"url('"+S+"')",backgroundPosition:"center center",backgroundRepeat:"no-repeat",backgroundSize:"auto",distribution:"space-between",padding:2},/*#__PURE__*/d.createElement(r,{axis:"vertical",spacing:2,mediaQueries:{sm:{alignment:"center",axis:"horizontal"}}},/*#__PURE__*/d.createElement(a,{level:4,fontWeight:800},"Your year in Planning Center is here!"," "),/*#__PURE__*/d.createElement(s,{columns:"repeat(2, 1fr)",spacing:1,mediaQueries:{sm:{columns:"repeat(2, max-content)"}}},/*#__PURE__*/d.createElement(n,{css:{"&:visited":{color:"var(--t-text-color-default-inverted)"},"&:hover":{color:"var(--t-text-color-default-inverted)"}},flex:1,external:!0,to:z,theme:"primary",mediaQueries:{sm:{flex:"initial"}}},"See it now"),O&&v&&/*#__PURE__*/d.createElement(n,{flex:1,onClick:function(){return w(!0)},theme:"wrapped",mediaQueries:{sm:{flex:"initial"}}},"Share"))),/*#__PURE__*/d.createElement(n,{variant:"naked",icon:{name:"general.x",size:"md",color:h("--t-fill-color-neutral-020")},title:"Dismiss",onClick:function(){return i(!0)}})),x&&/*#__PURE__*/d.createElement(_,{onClose:function(){return w(!1)},shareOrgStats:y,setShareOrgStats:C}))}export{T as PcoWrappedBanner};
|
|
2
2
|
//# sourceMappingURL=wrapped.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapped.module.js","sources":["../modal.tsx","../components/share_modal.tsx","../components/welcome_background.tsx","../components/pco_wrapped_banner.tsx","../hooks/use_local_storage.ts"],"sourcesContent":["import {\n Box,\n Button,\n Heading,\n ModalProps,\n StackView,\n Modal as TRModal,\n Text,\n} from \"@planningcenter/tapestry-react\"\n\nimport React from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { token } from \"@planningcenter/tapestry\"\n\nconst MODAL_SIZES = {\n sm: 400,\n md: 600,\n lg: 800,\n xl: 1000,\n} as const\n\nconst TOOLBAR_WIDTH = 48\n\nconst getModalWidth = (\n mediaQuery: \"sm\" | \"md\" | \"lg\",\n modalSize: keyof typeof MODAL_SIZES,\n) => {\n switch (mediaQuery) {\n case \"sm\":\n return `calc(100% - ${TOOLBAR_WIDTH * 2}px)`\n case \"md\":\n return modalSize === \"lg\" || modalSize === \"xl\"\n ? `calc(100% - ${TOOLBAR_WIDTH * 2}px)`\n : `${MODAL_SIZES[modalSize]}px`\n case \"lg\":\n return `${MODAL_SIZES[modalSize]}px`\n default:\n return `${MODAL_SIZES.md}px`\n }\n}\n\nexport const Modal = ({\n children,\n onClose,\n size = \"md\",\n ...modalProps\n}: {\n children: React.ReactElement | React.ReactElement[]\n onClose: () => void\n size?: keyof typeof MODAL_SIZES\n} & ModalProps) => {\n return (\n <TRModal\n {...modalProps}\n onRequestClose={onClose}\n radius=\"8px\"\n padding=\"0\"\n maxWidth=\"90%\"\n marginHorizontal={0}\n mediaQueries={{\n sm: {\n maxWidth: getModalWidth(\"sm\", size),\n position: \"relative\",\n right: `${TOOLBAR_WIDTH / 2}px`,\n },\n md: {\n maxWidth: getModalWidth(\"md\", size),\n },\n lg: {\n maxWidth: getModalWidth(\"lg\", size),\n },\n }}\n >\n {children}\n </TRModal>\n )\n}\n\nexport const ModalPortal = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => {\n const node = document.querySelector(\n `[data-tapestry-react-theme-provider-home=\"true\"]`,\n ) as HTMLElement\n\n return createPortal(children, node)\n}\n\nconst ModalTitle = ({ children }: { children: string }) => {\n return (\n <Heading\n level={1}\n margin={0}\n css={{\n color: token(\"--t-text-color-default-headline\"),\n fontWeight: \"500\",\n lineHeight: \"2rem\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {children}\n </Heading>\n )\n}\n\nexport const ModalSubTitle = ({ children }: { children: string }) => {\n return (\n <Text\n fontSize={3}\n css={{\n color: token(\"--t-text-color-default-secondary\"),\n fontWeight: 500,\n lineHeight: 1.5,\n }}\n >\n {children}\n </Text>\n )\n}\n\ntype BaseModalHeaderProps = {\n onClose?: () => void\n title: string\n}\n\ntype ModalHeaderProps =\n | (BaseModalHeaderProps & { subTitle: string; children?: never })\n | (BaseModalHeaderProps & {\n subTitle?: never\n children: React.ReactElement | React.ReactElement[]\n })\n\nexport const ModalHeader = ({\n onClose,\n title,\n subTitle,\n children,\n}: ModalHeaderProps) => (\n <Box paddingHorizontal={4} paddingTop={4}>\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n distribution=\"space-between\"\n spacing={1}\n >\n <ModalTitle>{title}</ModalTitle>\n {onClose && (\n <Button\n theme=\"default\"\n variant=\"naked\"\n icon={{\n name: \"general.x\",\n size: \"md\",\n }}\n title=\"Close modal\"\n marginRight={-1}\n onClick={onClose}\n />\n )}\n </StackView>\n <Box paddingTop={subTitle || children ? 0.5 : 0}>\n {subTitle && <ModalSubTitle>{subTitle}</ModalSubTitle>}\n {children}\n </Box>\n </Box>\n)\n\nexport const ModalBody = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <Box\n backgroundColor={token(\"--t-surface-color-card\")}\n padding={4}\n data-modal-body\n >\n {children}\n </Box>\n)\n\nexport const ModalFooter = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <Box\n paddingHorizontal={4}\n paddingTop={3}\n backgroundColor={token(\"--t-surface-color-card\")}\n css={{\n borderTop: `solid 1px ${token(\"--t-border-color-default-base\")}`,\n }}\n >\n {children}\n </Box>\n)\n","import {\n Button,\n Heading,\n Link,\n Radio,\n StackView,\n} from \"@planningcenter/tapestry-react\"\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalPortal,\n} from \"../modal\"\nimport React, { useState } from \"react\"\n\nexport default function ShareModal({\n onClose,\n setShareOrgStats,\n shareOrgStats,\n}: {\n onClose: () => void\n setShareOrgStats: (shared: boolean) => void\n shareOrgStats: boolean\n}) {\n const [copied, setCopied] = useState(false)\n const [_, domain, suffix] = window.location.host.split(\".\")\n const wrappedURL = `${window.location.protocol}//home.${domain}.${suffix}/wrapped`\n\n function copyToClipboard() {\n navigator.clipboard\n .writeText(wrappedURL)\n .then(() => setCopied(true))\n .catch((error) => console.error(error))\n }\n\n function updatePcoWrappedShared(newShared: boolean) {\n fetch(\"/wrapped\", {\n method: \"PATCH\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-CSRF-Token\":\n document\n .querySelector('meta[name=\"csrf-token\"]')\n ?.getAttribute(\"content\") ?? \"\",\n },\n body: JSON.stringify({ shared: newShared }),\n })\n .then((response) => {\n if (!response.ok)\n throw new Error(\"Failed to share. Please try again later.\")\n\n return setShareOrgStats(newShared)\n })\n .catch((error) => console.error(error))\n }\n\n return (\n <ModalPortal>\n <Modal onClose={onClose} open data-testid=\"pco-wrapped-modal\">\n <ModalHeader\n onClose={onClose}\n title=\"Share\"\n subTitle={`Who should be able to view your church's \"Year in Planning Center\"`}\n />\n <ModalBody>\n <StackView spacing={3}>\n <StackView spacing={1}>\n <Heading level={3}>Access</Heading>\n <Radio\n checked={!shareOrgStats}\n label=\"Organization Admins\"\n name=\"radio\"\n onChange={() => updatePcoWrappedShared(false)}\n size=\"md\"\n value=\"false\"\n />\n <Radio\n checked={shareOrgStats}\n label=\"Any logged in user\"\n name=\"radio\"\n onChange={() => updatePcoWrappedShared(true)}\n size=\"md\"\n value=\"true\"\n />\n </StackView>\n <StackView spacing={1}>\n <Heading level={3}>Link</Heading>\n <StackView\n axis=\"vertical\"\n spacing={1}\n mediaQueries={{\n sm: { alignment: \"center\", axis: \"horizontal\" },\n }}\n overflowWrap=\"break-word\"\n >\n <Link external to=\"/wrapped\">\n {wrappedURL}\n </Link>\n {navigator.clipboard && (\n <Button\n disabled={copied}\n onClick={copyToClipboard}\n theme=\"primary\"\n variant=\"outline\"\n >\n {copied ? \"Copied!\" : \"Copy\"}\n </Button>\n )}\n </StackView>\n </StackView>\n </StackView>\n </ModalBody>\n <ModalFooter>\n <StackView\n padding={0}\n axis=\"horizontal\"\n alignment=\"end\"\n distribution=\"end\"\n spacing={2}\n >\n <Button onClick={onClose} title=\"Done\" theme=\"primary\" />\n </StackView>\n </ModalFooter>\n </Modal>\n </ModalPortal>\n )\n}\n","import React from \"react\"\n\nexport default function WelcomeBackground() {\n return (\n <svg\n width=\"1724\"\n height=\"1080\"\n viewBox=\"0 0 1724 1080\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g filter=\"url(#filter0_f_154_9174)\">\n <rect\n x=\"606.744\"\n y=\"1062.82\"\n width=\"649.488\"\n height=\"964.695\"\n rx=\"324.744\"\n transform=\"rotate(-120 606.744 1062.82)\"\n fill=\"url(#paint0_linear_154_9174)\"\n fillOpacity=\"0.5\"\n />\n </g>\n <circle cx=\"1200.5\" cy=\"195.5\" r=\"45.5\" fill=\"white\" fillOpacity=\"0.3\" />\n <circle cx=\"613.5\" cy=\"206.5\" r=\"22.5\" fill=\"white\" fillOpacity=\"0.4\" />\n <circle cx=\"1340\" cy=\"384\" r=\"21\" fill=\"white\" fillOpacity=\"0.5\" />\n <defs>\n <filter\n id=\"filter0_f_154_9174\"\n x=\"0.810547\"\n y=\"-263.19\"\n width=\"1722.57\"\n height=\"1607.2\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feGaussianBlur\n stdDeviation=\"200\"\n result=\"effect1_foregroundBlur_154_9174\"\n />\n </filter>\n <linearGradient\n id=\"paint0_linear_154_9174\"\n x1=\"1040.11\"\n y1=\"1031.29\"\n x2=\"1407.11\"\n y2=\"1806.85\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0.21875\" stopColor=\"#FFD748\" />\n <stop offset=\"0.541667\" stopColor=\"#FF4242\" />\n <stop offset=\"0.84375\" stopColor=\"#657CF1\" />\n </linearGradient>\n </defs>\n </svg>\n )\n}\n","import {\n Button,\n GridView,\n Heading,\n StackView,\n ThemeProvider,\n} from \"@planningcenter/tapestry-react\"\nimport React, { useState } from \"react\"\n\nimport ReactDOMServer from \"react-dom/server\"\nimport ShareModal from \"./share_modal\"\nimport WelcomeBackground from \"./welcome_background\"\nimport { token } from \"@planningcenter/tapestry\"\nimport { useLocalStorage } from \"../hooks/use_local_storage\"\n\nexport default function PcoWrappedBanner() {\n const [dismissed, setDismissed] = useLocalStorage(\n \"pco-wrapped-dismissed\",\n false,\n )\n const { enabled, shared, siteAdmin } = window.pco.wrapped\n const [shareModalOpen, setShareModalOpen] = useState(false)\n const [shareOrgStats, setShareOrgStats] = useState(shared)\n const svgString = ReactDOMServer.renderToStaticMarkup(<WelcomeBackground />)\n const svgDataUrl = `data:image/svg+xml,${encodeURIComponent(svgString)}`\n const [app, domain, suffix] = window.location.host.split(\".\")\n\n const wrappedURL = `${window.location.protocol}//home.${domain}.${suffix}/wrapped`\n if (dismissed || !enabled) return null\n\n const theme = {\n button: {\n themes: {\n wrapped: {\n fill: {\n backgroundColor: \"var(--t-fill-color-button-neutral-solid-default)\",\n },\n naked: {},\n outline: {},\n },\n },\n },\n }\n\n return (\n <ThemeProvider theme={theme}>\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n backgroundColor={\"var(--t-surface-color-card)\"}\n backgroundImage={`url('${svgDataUrl}')`}\n backgroundPosition=\"center center\"\n backgroundRepeat=\"no-repeat\"\n backgroundSize=\"auto\"\n distribution=\"space-between\"\n padding={2}\n >\n <StackView\n axis=\"vertical\"\n spacing={2}\n mediaQueries={{ sm: { alignment: \"center\", axis: \"horizontal\" } }}\n >\n <Heading level={4} fontWeight={800}>\n Your year in Planning Center is here!{\" \"}\n </Heading>\n <GridView\n columns=\"repeat(2, 1fr)\"\n spacing={1}\n mediaQueries={{ sm: { columns: \"repeat(2, max-content)\" } }}\n >\n <Button\n css={{\n \"&:visited\": {\n color: \"var(--t-text-color-default-inverted)\",\n },\n }}\n flex={1}\n external\n to={wrappedURL}\n theme=\"primary\"\n mediaQueries={{ sm: { flex: \"initial\" } }}\n >\n See it now\n </Button>\n {app === \"home\" && siteAdmin && (\n <Button\n flex={1}\n onClick={() => setShareModalOpen(true)}\n theme=\"wrapped\"\n mediaQueries={{ sm: { flex: \"initial\" } }}\n >\n Share\n </Button>\n )}\n </GridView>\n </StackView>\n <Button\n variant=\"naked\"\n icon={{\n name: \"general.x\",\n size: \"md\",\n color: token(\"--t-fill-color-neutral-020\"),\n }}\n title=\"Dismiss\"\n onClick={() => setDismissed(true)}\n />\n </StackView>\n {shareModalOpen && (\n <ShareModal\n onClose={() => setShareModalOpen(false)}\n shareOrgStats={shareOrgStats}\n setShareOrgStats={setShareOrgStats}\n />\n )}\n </ThemeProvider>\n )\n}\n","import { useEffect, useState } from \"react\"\n\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T,\n overwriteWithInitialValue = false\n) {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (overwriteWithInitialValue) return initialValue\n\n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key)\n\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue\n } catch {\n // If error also return initialValue\n return initialValue\n }\n })\n\n // Reflect the state into localStorage as a side effect.\n const localStorageRepresentation = JSON.stringify(storedValue)\n useEffect(() => {\n window.localStorage.setItem(key, localStorageRepresentation)\n }, [key, localStorageRepresentation])\n\n // When we are done with this key, drop it from localStorage completely\n const dropKey = () => window.localStorage.removeItem(key)\n\n return [storedValue, setStoredValue, dropKey] as const\n}\n"],"names":["_excluded","MODAL_SIZES","sm","md","lg","xl","getModalWidth","mediaQuery","modalSize","TOOLBAR_WIDTH","Modal","_ref","children","onClose","_ref$size","size","modalProps","_objectWithoutPropertiesLoose","React","createElement","TRModal","onRequestClose","radius","padding","maxWidth","marginHorizontal","mediaQueries","position","right","ModalPortal","_ref2","node","document","querySelector","createPortal","ModalTitle","_ref3","Heading","level","margin","css","color","token","fontWeight","lineHeight","overflow","textOverflow","whiteSpace","ModalSubTitle","_ref4","Text","fontSize","ModalHeader","_ref5","subTitle","Box","paddingHorizontal","paddingTop","StackView","axis","alignment","distribution","spacing","title","Button","theme","variant","icon","name","marginRight","onClick","ModalBody","_ref6","backgroundColor","ModalFooter","_ref7","borderTop","ShareModal","setShareOrgStats","shareOrgStats","_useState","useState","copied","setCopied","window","location","host","split","wrappedURL","protocol","_window$location$host","suffix","updatePcoWrappedShared","newShared","_document$querySelect","_document$querySelect2","fetch","method","headers","getAttribute","body","JSON","stringify","shared","then","response","ok","Error","error","console","open","Radio","checked","label","onChange","value","overflowWrap","Link","external","to","navigator","clipboard","disabled","writeText","WelcomeBackground","width","height","viewBox","fill","xmlns","filter","x","y","rx","transform","fillOpacity","cx","cy","r","id","filterUnits","colorInterpolationFilters","floodOpacity","result","mode","in","in2","stdDeviation","x1","y1","x2","y2","gradientUnits","offset","stopColor","PcoWrappedBanner","useLocalStorage","key","initialValue","overwriteWithInitialValue","item","localStorage","getItem","parse","_unused","storedValue","setStoredValue","localStorageRepresentation","useEffect","setItem","removeItem","dismissed","setDismissed","_useLocalStorage","pco","wrapped","enabled","_window$pco$wrapped","siteAdmin","shareModalOpen","setShareModalOpen","_useState2","svgString","ReactDOMServer","renderToStaticMarkup","svgDataUrl","encodeURIComponent","app","domain","ThemeProvider","button","themes","naked","outline","backgroundImage","backgroundPosition","backgroundRepeat","backgroundSize","GridView","columns","flex"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wrapped.module.js","sources":["../modal.tsx","../components/share_modal.tsx","../components/welcome_background.tsx","../components/pco_wrapped_banner.tsx","../hooks/use_local_storage.ts"],"sourcesContent":["import {\n Box,\n Button,\n Heading,\n ModalProps,\n StackView,\n Modal as TRModal,\n Text,\n} from \"@planningcenter/tapestry-react\"\n\nimport React from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { token } from \"@planningcenter/tapestry\"\n\nconst MODAL_SIZES = {\n sm: 400,\n md: 600,\n lg: 800,\n xl: 1000,\n} as const\n\nconst TOOLBAR_WIDTH = 48\n\nconst getModalWidth = (\n mediaQuery: \"sm\" | \"md\" | \"lg\",\n modalSize: keyof typeof MODAL_SIZES,\n) => {\n switch (mediaQuery) {\n case \"sm\":\n return `calc(100% - ${TOOLBAR_WIDTH * 2}px)`\n case \"md\":\n return modalSize === \"lg\" || modalSize === \"xl\"\n ? `calc(100% - ${TOOLBAR_WIDTH * 2}px)`\n : `${MODAL_SIZES[modalSize]}px`\n case \"lg\":\n return `${MODAL_SIZES[modalSize]}px`\n default:\n return `${MODAL_SIZES.md}px`\n }\n}\n\nexport const Modal = ({\n children,\n onClose,\n size = \"md\",\n ...modalProps\n}: {\n children: React.ReactElement | React.ReactElement[]\n onClose: () => void\n size?: keyof typeof MODAL_SIZES\n} & ModalProps) => {\n return (\n <TRModal\n {...modalProps}\n onRequestClose={onClose}\n radius=\"8px\"\n padding=\"0\"\n maxWidth=\"90%\"\n marginHorizontal={0}\n mediaQueries={{\n sm: {\n maxWidth: getModalWidth(\"sm\", size),\n position: \"relative\",\n right: `${TOOLBAR_WIDTH / 2}px`,\n },\n md: {\n maxWidth: getModalWidth(\"md\", size),\n },\n lg: {\n maxWidth: getModalWidth(\"lg\", size),\n },\n }}\n >\n {children}\n </TRModal>\n )\n}\n\nexport const ModalPortal = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => {\n const node = document.querySelector(\n `[data-tapestry-react-theme-provider-home=\"true\"]`,\n ) as HTMLElement\n\n return createPortal(children, node)\n}\n\nconst ModalTitle = ({ children }: { children: string }) => {\n return (\n <Heading\n level={1}\n margin={0}\n css={{\n color: token(\"--t-text-color-default-headline\"),\n fontWeight: \"500\",\n lineHeight: \"2rem\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {children}\n </Heading>\n )\n}\n\nexport const ModalSubTitle = ({ children }: { children: string }) => {\n return (\n <Text\n fontSize={3}\n css={{\n color: token(\"--t-text-color-default-secondary\"),\n fontWeight: 500,\n lineHeight: 1.5,\n }}\n >\n {children}\n </Text>\n )\n}\n\ntype BaseModalHeaderProps = {\n onClose?: () => void\n title: string\n}\n\ntype ModalHeaderProps =\n | (BaseModalHeaderProps & { subTitle: string; children?: never })\n | (BaseModalHeaderProps & {\n subTitle?: never\n children: React.ReactElement | React.ReactElement[]\n })\n\nexport const ModalHeader = ({\n onClose,\n title,\n subTitle,\n children,\n}: ModalHeaderProps) => (\n <Box paddingHorizontal={4} paddingTop={4}>\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n distribution=\"space-between\"\n spacing={1}\n >\n <ModalTitle>{title}</ModalTitle>\n {onClose && (\n <Button\n theme=\"default\"\n variant=\"naked\"\n icon={{\n name: \"general.x\",\n size: \"md\",\n }}\n title=\"Close modal\"\n marginRight={-1}\n onClick={onClose}\n />\n )}\n </StackView>\n <Box paddingTop={subTitle || children ? 0.5 : 0}>\n {subTitle && <ModalSubTitle>{subTitle}</ModalSubTitle>}\n {children}\n </Box>\n </Box>\n)\n\nexport const ModalBody = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <Box\n backgroundColor={token(\"--t-surface-color-card\")}\n padding={4}\n data-modal-body\n >\n {children}\n </Box>\n)\n\nexport const ModalFooter = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <Box\n paddingHorizontal={4}\n paddingTop={3}\n backgroundColor={token(\"--t-surface-color-card\")}\n css={{\n borderTop: `solid 1px ${token(\"--t-border-color-default-base\")}`,\n }}\n >\n {children}\n </Box>\n)\n","import {\n Button,\n Heading,\n Link,\n Radio,\n StackView,\n} from \"@planningcenter/tapestry-react\"\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalPortal,\n} from \"../modal\"\nimport React, { useState } from \"react\"\nimport { pcoUrl } from \"@planningcenter/url\"\n\nexport default function ShareModal({\n onClose,\n setShareOrgStats,\n shareOrgStats,\n}: {\n onClose: () => void\n setShareOrgStats: (shared: boolean) => void\n shareOrgStats: boolean\n}) {\n const [copied, setCopied] = useState(false)\n const homeUrl = pcoUrl(\"home\")\n const wrappedURL = `${homeUrl}/wrapped`\n\n function copyToClipboard() {\n navigator.clipboard\n .writeText(wrappedURL)\n .then(() => setCopied(true))\n .catch((error) => console.error(error))\n }\n\n function updatePcoWrappedShared(newShared: boolean) {\n fetch(\"/wrapped\", {\n method: \"PATCH\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-CSRF-Token\":\n document\n .querySelector('meta[name=\"csrf-token\"]')\n ?.getAttribute(\"content\") ?? \"\",\n },\n body: JSON.stringify({ shared: newShared }),\n })\n .then((response) => {\n if (!response.ok)\n throw new Error(\"Failed to share. Please try again later.\")\n\n return setShareOrgStats(newShared)\n })\n .catch((error) => console.error(error))\n }\n\n return (\n <ModalPortal>\n <Modal onClose={onClose} open data-testid=\"pco-wrapped-modal\">\n <ModalHeader\n onClose={onClose}\n title=\"Share\"\n subTitle={`Who should be able to view your church's \"Year in Planning Center\"`}\n />\n <ModalBody>\n <StackView spacing={3}>\n <StackView spacing={1}>\n <Heading level={3}>Access</Heading>\n <Radio\n checked={!shareOrgStats}\n label=\"Organization Admins\"\n name=\"radio\"\n onChange={() => updatePcoWrappedShared(false)}\n size=\"md\"\n value=\"false\"\n />\n <Radio\n checked={shareOrgStats}\n label=\"Any logged in user\"\n name=\"radio\"\n onChange={() => updatePcoWrappedShared(true)}\n size=\"md\"\n value=\"true\"\n />\n </StackView>\n <StackView spacing={1}>\n <Heading level={3}>Link</Heading>\n <StackView\n axis=\"vertical\"\n spacing={1}\n mediaQueries={{\n sm: { alignment: \"center\", axis: \"horizontal\" },\n }}\n overflowWrap=\"break-word\"\n >\n <Link external to=\"/wrapped\">\n {wrappedURL}\n </Link>\n {navigator.clipboard && (\n <Button\n disabled={copied}\n onClick={copyToClipboard}\n theme=\"primary\"\n variant=\"outline\"\n >\n {copied ? \"Copied!\" : \"Copy\"}\n </Button>\n )}\n </StackView>\n </StackView>\n </StackView>\n </ModalBody>\n <ModalFooter>\n <StackView\n padding={0}\n axis=\"horizontal\"\n alignment=\"end\"\n distribution=\"end\"\n spacing={2}\n >\n <Button onClick={onClose} title=\"Done\" theme=\"primary\" />\n </StackView>\n </ModalFooter>\n </Modal>\n </ModalPortal>\n )\n}\n","import React from \"react\"\n\nexport default function WelcomeBackground() {\n return (\n <svg\n width=\"1724\"\n height=\"1080\"\n viewBox=\"0 0 1724 1080\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g filter=\"url(#filter0_f_154_9174)\">\n <rect\n x=\"606.744\"\n y=\"1062.82\"\n width=\"649.488\"\n height=\"964.695\"\n rx=\"324.744\"\n transform=\"rotate(-120 606.744 1062.82)\"\n fill=\"url(#paint0_linear_154_9174)\"\n fillOpacity=\"0.5\"\n />\n </g>\n <circle cx=\"1200.5\" cy=\"195.5\" r=\"45.5\" fill=\"white\" fillOpacity=\"0.3\" />\n <circle cx=\"613.5\" cy=\"206.5\" r=\"22.5\" fill=\"white\" fillOpacity=\"0.4\" />\n <circle cx=\"1340\" cy=\"384\" r=\"21\" fill=\"white\" fillOpacity=\"0.5\" />\n <defs>\n <filter\n id=\"filter0_f_154_9174\"\n x=\"0.810547\"\n y=\"-263.19\"\n width=\"1722.57\"\n height=\"1607.2\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feGaussianBlur\n stdDeviation=\"200\"\n result=\"effect1_foregroundBlur_154_9174\"\n />\n </filter>\n <linearGradient\n id=\"paint0_linear_154_9174\"\n x1=\"1040.11\"\n y1=\"1031.29\"\n x2=\"1407.11\"\n y2=\"1806.85\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0.21875\" stopColor=\"#FFD748\" />\n <stop offset=\"0.541667\" stopColor=\"#FF4242\" />\n <stop offset=\"0.84375\" stopColor=\"#657CF1\" />\n </linearGradient>\n </defs>\n </svg>\n )\n}\n","import {\n Button,\n GridView,\n Heading,\n StackView,\n ThemeProvider,\n} from \"@planningcenter/tapestry-react\"\nimport React, { useState } from \"react\"\nimport { pcoUrl } from \"@planningcenter/url\"\n\nimport ReactDOMServer from \"react-dom/server\"\nimport ShareModal from \"./share_modal\"\nimport WelcomeBackground from \"./welcome_background\"\nimport { token } from \"@planningcenter/tapestry\"\nimport { useLocalStorage } from \"../hooks/use_local_storage\"\n\nexport default function PcoWrappedBanner() {\n const [dismissed, setDismissed] = useLocalStorage(\n \"pco-wrapped-dismissed\",\n false,\n )\n const { enabled, shared, siteAdmin } = window.pco.wrapped\n const [shareModalOpen, setShareModalOpen] = useState(false)\n const [shareOrgStats, setShareOrgStats] = useState(shared)\n const svgString = ReactDOMServer.renderToStaticMarkup(<WelcomeBackground />)\n const svgDataUrl = `data:image/svg+xml,${encodeURIComponent(svgString)}`\n const isHomeApp = window.location.host.includes(\"home\")\n const homeUrl = pcoUrl(\"home\")\n const wrappedURL = `${homeUrl}/wrapped`\n\n if (dismissed || !enabled) return null\n\n const theme = {\n button: {\n themes: {\n wrapped: {\n fill: {\n backgroundColor: \"var(--t-fill-color-button-neutral-solid-default)\",\n },\n naked: {},\n outline: {},\n },\n },\n },\n }\n\n return (\n <ThemeProvider theme={theme}>\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n backgroundColor={\"var(--t-surface-color-card)\"}\n backgroundImage={`url('${svgDataUrl}')`}\n backgroundPosition=\"center center\"\n backgroundRepeat=\"no-repeat\"\n backgroundSize=\"auto\"\n distribution=\"space-between\"\n padding={2}\n >\n <StackView\n axis=\"vertical\"\n spacing={2}\n mediaQueries={{ sm: { alignment: \"center\", axis: \"horizontal\" } }}\n >\n <Heading level={4} fontWeight={800}>\n Your year in Planning Center is here!{\" \"}\n </Heading>\n <GridView\n columns=\"repeat(2, 1fr)\"\n spacing={1}\n mediaQueries={{ sm: { columns: \"repeat(2, max-content)\" } }}\n >\n <Button\n css={{\n \"&:visited\": {\n color: \"var(--t-text-color-default-inverted)\",\n },\n \"&:hover\": {\n color: \"var(--t-text-color-default-inverted)\",\n },\n }}\n flex={1}\n external\n to={wrappedURL}\n theme=\"primary\"\n mediaQueries={{ sm: { flex: \"initial\" } }}\n >\n See it now\n </Button>\n {isHomeApp && siteAdmin && (\n <Button\n flex={1}\n onClick={() => setShareModalOpen(true)}\n theme=\"wrapped\"\n mediaQueries={{ sm: { flex: \"initial\" } }}\n >\n Share\n </Button>\n )}\n </GridView>\n </StackView>\n <Button\n variant=\"naked\"\n icon={{\n name: \"general.x\",\n size: \"md\",\n color: token(\"--t-fill-color-neutral-020\"),\n }}\n title=\"Dismiss\"\n onClick={() => setDismissed(true)}\n />\n </StackView>\n {shareModalOpen && (\n <ShareModal\n onClose={() => setShareModalOpen(false)}\n shareOrgStats={shareOrgStats}\n setShareOrgStats={setShareOrgStats}\n />\n )}\n </ThemeProvider>\n )\n}\n","import { useEffect, useState } from \"react\"\n\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T,\n overwriteWithInitialValue = false\n) {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (overwriteWithInitialValue) return initialValue\n\n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key)\n\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue\n } catch {\n // If error also return initialValue\n return initialValue\n }\n })\n\n // Reflect the state into localStorage as a side effect.\n const localStorageRepresentation = JSON.stringify(storedValue)\n useEffect(() => {\n window.localStorage.setItem(key, localStorageRepresentation)\n }, [key, localStorageRepresentation])\n\n // When we are done with this key, drop it from localStorage completely\n const dropKey = () => window.localStorage.removeItem(key)\n\n return [storedValue, setStoredValue, dropKey] as const\n}\n"],"names":["_excluded","MODAL_SIZES","sm","md","lg","xl","getModalWidth","mediaQuery","modalSize","TOOLBAR_WIDTH","Modal","_ref","children","onClose","_ref$size","size","modalProps","_objectWithoutPropertiesLoose","React","createElement","TRModal","onRequestClose","radius","padding","maxWidth","marginHorizontal","mediaQueries","position","right","ModalPortal","_ref2","node","document","querySelector","createPortal","ModalTitle","_ref3","Heading","level","margin","css","color","token","fontWeight","lineHeight","overflow","textOverflow","whiteSpace","ModalSubTitle","_ref4","Text","fontSize","ModalHeader","_ref5","subTitle","Box","paddingHorizontal","paddingTop","StackView","axis","alignment","distribution","spacing","title","Button","theme","variant","icon","name","marginRight","onClick","ModalBody","_ref6","backgroundColor","ModalFooter","_ref7","borderTop","ShareModal","setShareOrgStats","shareOrgStats","_useState","useState","copied","setCopied","wrappedURL","pcoUrl","updatePcoWrappedShared","newShared","fetch","method","headers","_document$querySelect","_document$querySelect2","getAttribute","body","JSON","stringify","shared","then","response","ok","Error","error","console","open","Radio","checked","label","onChange","value","overflowWrap","Link","external","to","navigator","clipboard","disabled","writeText","WelcomeBackground","width","height","viewBox","fill","xmlns","filter","x","y","rx","transform","fillOpacity","cx","cy","r","id","filterUnits","colorInterpolationFilters","floodOpacity","result","mode","in","in2","stdDeviation","x1","y1","x2","y2","gradientUnits","offset","stopColor","PcoWrappedBanner","_useLocalStorage","key","initialValue","overwriteWithInitialValue","item","window","localStorage","getItem","parse","_unused","storedValue","setStoredValue","localStorageRepresentation","useEffect","setItem","removeItem","useLocalStorage","dismissed","setDismissed","_window$pco$wrapped","pco","wrapped","enabled","siteAdmin","shareModalOpen","setShareModalOpen","_useState2","svgString","ReactDOMServer","renderToStaticMarkup","svgDataUrl","encodeURIComponent","isHomeApp","location","host","includes","ThemeProvider","button","themes","naked","outline","backgroundImage","backgroundPosition","backgroundRepeat","backgroundSize","GridView","columns","flex"],"mappings":"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"}
|
package/dist/wrapped.umd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@planningcenter/tapestry-react"),require("react"),require("react-dom/server"),require("react-dom"),require("@planningcenter/tapestry")):"function"==typeof define&&define.amd?define(["exports","@planningcenter/tapestry-react","react","react-dom/server","react-dom","@planningcenter/tapestry"],t):t(((e||self).PLANNINGCENTER=e.PLANNINGCENTER||{},e.PLANNINGCENTER.wrapped={}),e.tapestryReact,e.react,e.ReactDOMServer,e.reactDom,e.tapestry)}(this,function(e,t,n,a,
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@planningcenter/tapestry-react"),require("react"),require("@planningcenter/url"),require("react-dom/server"),require("react-dom"),require("@planningcenter/tapestry")):"function"==typeof define&&define.amd?define(["exports","@planningcenter/tapestry-react","react","@planningcenter/url","react-dom/server","react-dom","@planningcenter/tapestry"],t):t(((e||self).PLANNINGCENTER=e.PLANNINGCENTER||{},e.PLANNINGCENTER.wrapped={}),e.tapestryReact,e.react,e.url,e.ReactDOMServer,e.reactDom,e.tapestry)}(this,function(e,t,n,r,a,l,i){function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=/*#__PURE__*/o(n),d=/*#__PURE__*/o(a);function u(){return u=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},u.apply(null,arguments)}var s=["children","onClose","size"],f={sm:400,md:600,lg:800,xl:1e3},m=function(e,t){switch(e){case"sm":return"calc(100% - 96px)";case"md":return"lg"===t||"xl"===t?"calc(100% - 96px)":f[t]+"px";case"lg":return f[t]+"px";default:return f.md+"px"}},p=function(e){var n=e.children,r=e.onClose,a=e.size,l=void 0===a?"md":a,i=function(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}(e,s);/*#__PURE__*/return c.default.createElement(t.Modal,u({},i,{onRequestClose:r,radius:"8px",padding:"0",maxWidth:"90%",marginHorizontal:0,mediaQueries:{sm:{maxWidth:m("sm",l),position:"relative",right:"24px"},md:{maxWidth:m("md",l)},lg:{maxWidth:m("lg",l)}}}),n)},g=function(e){var t=e.children,n=document.querySelector('[data-tapestry-react-theme-provider-home="true"]');return l.createPortal(t,n)},h=function(e){var n=e.children;/*#__PURE__*/return c.default.createElement(t.Heading,{level:1,margin:0,css:{color:i.token("--t-text-color-default-headline"),fontWeight:"500",lineHeight:"2rem",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}},n)},E=function(e){var n=e.children;/*#__PURE__*/return c.default.createElement(t.Text,{fontSize:3,css:{color:i.token("--t-text-color-default-secondary"),fontWeight:500,lineHeight:1.5}},n)},v=function(e){var n=e.onClose,r=e.subTitle,a=e.children;/*#__PURE__*/return c.default.createElement(t.Box,{paddingHorizontal:4,paddingTop:4},/*#__PURE__*/c.default.createElement(t.StackView,{axis:"horizontal",alignment:"center",distribution:"space-between",spacing:1},/*#__PURE__*/c.default.createElement(h,null,e.title),n&&/*#__PURE__*/c.default.createElement(t.Button,{theme:"default",variant:"naked",icon:{name:"general.x",size:"md"},title:"Close modal",marginRight:-1,onClick:n})),/*#__PURE__*/c.default.createElement(t.Box,{paddingTop:r||a?.5:0},r&&/*#__PURE__*/c.default.createElement(E,null,r),a))},x=function(e){var n=e.children;/*#__PURE__*/return c.default.createElement(t.Box,{backgroundColor:i.token("--t-surface-color-card"),padding:4,"data-modal-body":!0},n)},w=function(e){var n=e.children;/*#__PURE__*/return c.default.createElement(t.Box,{paddingHorizontal:4,paddingTop:3,backgroundColor:i.token("--t-surface-color-card"),css:{borderTop:"solid 1px "+i.token("--t-border-color-default-base")}},n)};function y(e){var a=e.onClose,l=e.setShareOrgStats,i=e.shareOrgStats,o=n.useState(!1),d=o[0],u=o[1],s=r.pcoUrl("home")+"/wrapped";function f(e){var t,n;fetch("/wrapped",{method:"PATCH",headers:{"Content-Type":"application/json","X-CSRF-Token":null!=(t=null==(n=document.querySelector('meta[name="csrf-token"]'))?void 0:n.getAttribute("content"))?t:""},body:JSON.stringify({shared:e})}).then(function(t){if(!t.ok)throw new Error("Failed to share. Please try again later.");return l(e)}).catch(function(e){return console.error(e)})}/*#__PURE__*/return c.default.createElement(g,null,/*#__PURE__*/c.default.createElement(p,{onClose:a,open:!0,"data-testid":"pco-wrapped-modal"},/*#__PURE__*/c.default.createElement(v,{onClose:a,title:"Share",subTitle:'Who should be able to view your church\'s "Year in Planning Center"'}),/*#__PURE__*/c.default.createElement(x,null,/*#__PURE__*/c.default.createElement(t.StackView,{spacing:3},/*#__PURE__*/c.default.createElement(t.StackView,{spacing:1},/*#__PURE__*/c.default.createElement(t.Heading,{level:3},"Access"),/*#__PURE__*/c.default.createElement(t.Radio,{checked:!i,label:"Organization Admins",name:"radio",onChange:function(){return f(!1)},size:"md",value:"false"}),/*#__PURE__*/c.default.createElement(t.Radio,{checked:i,label:"Any logged in user",name:"radio",onChange:function(){return f(!0)},size:"md",value:"true"})),/*#__PURE__*/c.default.createElement(t.StackView,{spacing:1},/*#__PURE__*/c.default.createElement(t.Heading,{level:3},"Link"),/*#__PURE__*/c.default.createElement(t.StackView,{axis:"vertical",spacing:1,mediaQueries:{sm:{alignment:"center",axis:"horizontal"}},overflowWrap:"break-word"},/*#__PURE__*/c.default.createElement(t.Link,{external:!0,to:"/wrapped"},s),navigator.clipboard&&/*#__PURE__*/c.default.createElement(t.Button,{disabled:d,onClick:function(){navigator.clipboard.writeText(s).then(function(){return u(!0)}).catch(function(e){return console.error(e)})},theme:"primary",variant:"outline"},d?"Copied!":"Copy"))))),/*#__PURE__*/c.default.createElement(w,null,/*#__PURE__*/c.default.createElement(t.StackView,{padding:0,axis:"horizontal",alignment:"end",distribution:"end",spacing:2},/*#__PURE__*/c.default.createElement(t.Button,{onClick:a,title:"Done",theme:"primary"})))))}function k(){/*#__PURE__*/return c.default.createElement("svg",{width:"1724",height:"1080",viewBox:"0 0 1724 1080",fill:"none",xmlns:"http://www.w3.org/2000/svg"},/*#__PURE__*/c.default.createElement("g",{filter:"url(#filter0_f_154_9174)"},/*#__PURE__*/c.default.createElement("rect",{x:"606.744",y:"1062.82",width:"649.488",height:"964.695",rx:"324.744",transform:"rotate(-120 606.744 1062.82)",fill:"url(#paint0_linear_154_9174)",fillOpacity:"0.5"})),/*#__PURE__*/c.default.createElement("circle",{cx:"1200.5",cy:"195.5",r:"45.5",fill:"white",fillOpacity:"0.3"}),/*#__PURE__*/c.default.createElement("circle",{cx:"613.5",cy:"206.5",r:"22.5",fill:"white",fillOpacity:"0.4"}),/*#__PURE__*/c.default.createElement("circle",{cx:"1340",cy:"384",r:"21",fill:"white",fillOpacity:"0.5"}),/*#__PURE__*/c.default.createElement("defs",null,/*#__PURE__*/c.default.createElement("filter",{id:"filter0_f_154_9174",x:"0.810547",y:"-263.19",width:"1722.57",height:"1607.2",filterUnits:"userSpaceOnUse",colorInterpolationFilters:"sRGB"},/*#__PURE__*/c.default.createElement("feFlood",{floodOpacity:"0",result:"BackgroundImageFix"}),/*#__PURE__*/c.default.createElement("feBlend",{mode:"normal",in:"SourceGraphic",in2:"BackgroundImageFix",result:"shape"}),/*#__PURE__*/c.default.createElement("feGaussianBlur",{stdDeviation:"200",result:"effect1_foregroundBlur_154_9174"})),/*#__PURE__*/c.default.createElement("linearGradient",{id:"paint0_linear_154_9174",x1:"1040.11",y1:"1031.29",x2:"1407.11",y2:"1806.85",gradientUnits:"userSpaceOnUse"},/*#__PURE__*/c.default.createElement("stop",{offset:"0.21875",stopColor:"#FFD748"}),/*#__PURE__*/c.default.createElement("stop",{offset:"0.541667",stopColor:"#FF4242"}),/*#__PURE__*/c.default.createElement("stop",{offset:"0.84375",stopColor:"#657CF1"}))))}e.PcoWrappedBanner=function(){var e=function(e,t,r){void 0===r&&(r=!1);var a=n.useState(function(){if(r)return t;try{var n=window.localStorage.getItem(e);return n?JSON.parse(n):t}catch(e){return t}}),l=a[0],i=a[1],o=JSON.stringify(l);return n.useEffect(function(){window.localStorage.setItem(e,o)},[e,o]),[l,i,function(){return window.localStorage.removeItem(e)}]}("pco-wrapped-dismissed",!1),a=e[0],l=e[1],o=window.pco.wrapped,u=o.enabled,s=o.shared,f=o.siteAdmin,m=n.useState(!1),p=m[0],g=m[1],h=n.useState(s),E=h[0],v=h[1],x=d.default.renderToStaticMarkup(/*#__PURE__*/c.default.createElement(k,null)),w="data:image/svg+xml,"+encodeURIComponent(x),b=window.location.host.includes("home"),S=r.pcoUrl("home")+"/wrapped";return a||!u?null:/*#__PURE__*/c.default.createElement(t.ThemeProvider,{theme:{button:{themes:{wrapped:{fill:{backgroundColor:"var(--t-fill-color-button-neutral-solid-default)"},naked:{},outline:{}}}}}},/*#__PURE__*/c.default.createElement(t.StackView,{axis:"horizontal",alignment:"center",backgroundColor:"var(--t-surface-color-card)",backgroundImage:"url('"+w+"')",backgroundPosition:"center center",backgroundRepeat:"no-repeat",backgroundSize:"auto",distribution:"space-between",padding:2},/*#__PURE__*/c.default.createElement(t.StackView,{axis:"vertical",spacing:2,mediaQueries:{sm:{alignment:"center",axis:"horizontal"}}},/*#__PURE__*/c.default.createElement(t.Heading,{level:4,fontWeight:800},"Your year in Planning Center is here!"," "),/*#__PURE__*/c.default.createElement(t.GridView,{columns:"repeat(2, 1fr)",spacing:1,mediaQueries:{sm:{columns:"repeat(2, max-content)"}}},/*#__PURE__*/c.default.createElement(t.Button,{css:{"&:visited":{color:"var(--t-text-color-default-inverted)"},"&:hover":{color:"var(--t-text-color-default-inverted)"}},flex:1,external:!0,to:S,theme:"primary",mediaQueries:{sm:{flex:"initial"}}},"See it now"),b&&f&&/*#__PURE__*/c.default.createElement(t.Button,{flex:1,onClick:function(){return g(!0)},theme:"wrapped",mediaQueries:{sm:{flex:"initial"}}},"Share"))),/*#__PURE__*/c.default.createElement(t.Button,{variant:"naked",icon:{name:"general.x",size:"md",color:i.token("--t-fill-color-neutral-020")},title:"Dismiss",onClick:function(){return l(!0)}})),p&&/*#__PURE__*/c.default.createElement(y,{onClose:function(){return g(!1)},shareOrgStats:E,setShareOrgStats:v}))}});
|
|
2
2
|
//# sourceMappingURL=wrapped.umd.js.map
|
package/dist/wrapped.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapped.umd.js","sources":["../modal.tsx","../components/share_modal.tsx","../components/welcome_background.tsx","../components/pco_wrapped_banner.tsx","../hooks/use_local_storage.ts"],"sourcesContent":["import {\n Box,\n Button,\n Heading,\n ModalProps,\n StackView,\n Modal as TRModal,\n Text,\n} from \"@planningcenter/tapestry-react\"\n\nimport React from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { token } from \"@planningcenter/tapestry\"\n\nconst MODAL_SIZES = {\n sm: 400,\n md: 600,\n lg: 800,\n xl: 1000,\n} as const\n\nconst TOOLBAR_WIDTH = 48\n\nconst getModalWidth = (\n mediaQuery: \"sm\" | \"md\" | \"lg\",\n modalSize: keyof typeof MODAL_SIZES,\n) => {\n switch (mediaQuery) {\n case \"sm\":\n return `calc(100% - ${TOOLBAR_WIDTH * 2}px)`\n case \"md\":\n return modalSize === \"lg\" || modalSize === \"xl\"\n ? `calc(100% - ${TOOLBAR_WIDTH * 2}px)`\n : `${MODAL_SIZES[modalSize]}px`\n case \"lg\":\n return `${MODAL_SIZES[modalSize]}px`\n default:\n return `${MODAL_SIZES.md}px`\n }\n}\n\nexport const Modal = ({\n children,\n onClose,\n size = \"md\",\n ...modalProps\n}: {\n children: React.ReactElement | React.ReactElement[]\n onClose: () => void\n size?: keyof typeof MODAL_SIZES\n} & ModalProps) => {\n return (\n <TRModal\n {...modalProps}\n onRequestClose={onClose}\n radius=\"8px\"\n padding=\"0\"\n maxWidth=\"90%\"\n marginHorizontal={0}\n mediaQueries={{\n sm: {\n maxWidth: getModalWidth(\"sm\", size),\n position: \"relative\",\n right: `${TOOLBAR_WIDTH / 2}px`,\n },\n md: {\n maxWidth: getModalWidth(\"md\", size),\n },\n lg: {\n maxWidth: getModalWidth(\"lg\", size),\n },\n }}\n >\n {children}\n </TRModal>\n )\n}\n\nexport const ModalPortal = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => {\n const node = document.querySelector(\n `[data-tapestry-react-theme-provider-home=\"true\"]`,\n ) as HTMLElement\n\n return createPortal(children, node)\n}\n\nconst ModalTitle = ({ children }: { children: string }) => {\n return (\n <Heading\n level={1}\n margin={0}\n css={{\n color: token(\"--t-text-color-default-headline\"),\n fontWeight: \"500\",\n lineHeight: \"2rem\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {children}\n </Heading>\n )\n}\n\nexport const ModalSubTitle = ({ children }: { children: string }) => {\n return (\n <Text\n fontSize={3}\n css={{\n color: token(\"--t-text-color-default-secondary\"),\n fontWeight: 500,\n lineHeight: 1.5,\n }}\n >\n {children}\n </Text>\n )\n}\n\ntype BaseModalHeaderProps = {\n onClose?: () => void\n title: string\n}\n\ntype ModalHeaderProps =\n | (BaseModalHeaderProps & { subTitle: string; children?: never })\n | (BaseModalHeaderProps & {\n subTitle?: never\n children: React.ReactElement | React.ReactElement[]\n })\n\nexport const ModalHeader = ({\n onClose,\n title,\n subTitle,\n children,\n}: ModalHeaderProps) => (\n <Box paddingHorizontal={4} paddingTop={4}>\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n distribution=\"space-between\"\n spacing={1}\n >\n <ModalTitle>{title}</ModalTitle>\n {onClose && (\n <Button\n theme=\"default\"\n variant=\"naked\"\n icon={{\n name: \"general.x\",\n size: \"md\",\n }}\n title=\"Close modal\"\n marginRight={-1}\n onClick={onClose}\n />\n )}\n </StackView>\n <Box paddingTop={subTitle || children ? 0.5 : 0}>\n {subTitle && <ModalSubTitle>{subTitle}</ModalSubTitle>}\n {children}\n </Box>\n </Box>\n)\n\nexport const ModalBody = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <Box\n backgroundColor={token(\"--t-surface-color-card\")}\n padding={4}\n data-modal-body\n >\n {children}\n </Box>\n)\n\nexport const ModalFooter = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <Box\n paddingHorizontal={4}\n paddingTop={3}\n backgroundColor={token(\"--t-surface-color-card\")}\n css={{\n borderTop: `solid 1px ${token(\"--t-border-color-default-base\")}`,\n }}\n >\n {children}\n </Box>\n)\n","import {\n Button,\n Heading,\n Link,\n Radio,\n StackView,\n} from \"@planningcenter/tapestry-react\"\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalPortal,\n} from \"../modal\"\nimport React, { useState } from \"react\"\n\nexport default function ShareModal({\n onClose,\n setShareOrgStats,\n shareOrgStats,\n}: {\n onClose: () => void\n setShareOrgStats: (shared: boolean) => void\n shareOrgStats: boolean\n}) {\n const [copied, setCopied] = useState(false)\n const [_, domain, suffix] = window.location.host.split(\".\")\n const wrappedURL = `${window.location.protocol}//home.${domain}.${suffix}/wrapped`\n\n function copyToClipboard() {\n navigator.clipboard\n .writeText(wrappedURL)\n .then(() => setCopied(true))\n .catch((error) => console.error(error))\n }\n\n function updatePcoWrappedShared(newShared: boolean) {\n fetch(\"/wrapped\", {\n method: \"PATCH\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-CSRF-Token\":\n document\n .querySelector('meta[name=\"csrf-token\"]')\n ?.getAttribute(\"content\") ?? \"\",\n },\n body: JSON.stringify({ shared: newShared }),\n })\n .then((response) => {\n if (!response.ok)\n throw new Error(\"Failed to share. Please try again later.\")\n\n return setShareOrgStats(newShared)\n })\n .catch((error) => console.error(error))\n }\n\n return (\n <ModalPortal>\n <Modal onClose={onClose} open data-testid=\"pco-wrapped-modal\">\n <ModalHeader\n onClose={onClose}\n title=\"Share\"\n subTitle={`Who should be able to view your church's \"Year in Planning Center\"`}\n />\n <ModalBody>\n <StackView spacing={3}>\n <StackView spacing={1}>\n <Heading level={3}>Access</Heading>\n <Radio\n checked={!shareOrgStats}\n label=\"Organization Admins\"\n name=\"radio\"\n onChange={() => updatePcoWrappedShared(false)}\n size=\"md\"\n value=\"false\"\n />\n <Radio\n checked={shareOrgStats}\n label=\"Any logged in user\"\n name=\"radio\"\n onChange={() => updatePcoWrappedShared(true)}\n size=\"md\"\n value=\"true\"\n />\n </StackView>\n <StackView spacing={1}>\n <Heading level={3}>Link</Heading>\n <StackView\n axis=\"vertical\"\n spacing={1}\n mediaQueries={{\n sm: { alignment: \"center\", axis: \"horizontal\" },\n }}\n overflowWrap=\"break-word\"\n >\n <Link external to=\"/wrapped\">\n {wrappedURL}\n </Link>\n {navigator.clipboard && (\n <Button\n disabled={copied}\n onClick={copyToClipboard}\n theme=\"primary\"\n variant=\"outline\"\n >\n {copied ? \"Copied!\" : \"Copy\"}\n </Button>\n )}\n </StackView>\n </StackView>\n </StackView>\n </ModalBody>\n <ModalFooter>\n <StackView\n padding={0}\n axis=\"horizontal\"\n alignment=\"end\"\n distribution=\"end\"\n spacing={2}\n >\n <Button onClick={onClose} title=\"Done\" theme=\"primary\" />\n </StackView>\n </ModalFooter>\n </Modal>\n </ModalPortal>\n )\n}\n","import React from \"react\"\n\nexport default function WelcomeBackground() {\n return (\n <svg\n width=\"1724\"\n height=\"1080\"\n viewBox=\"0 0 1724 1080\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g filter=\"url(#filter0_f_154_9174)\">\n <rect\n x=\"606.744\"\n y=\"1062.82\"\n width=\"649.488\"\n height=\"964.695\"\n rx=\"324.744\"\n transform=\"rotate(-120 606.744 1062.82)\"\n fill=\"url(#paint0_linear_154_9174)\"\n fillOpacity=\"0.5\"\n />\n </g>\n <circle cx=\"1200.5\" cy=\"195.5\" r=\"45.5\" fill=\"white\" fillOpacity=\"0.3\" />\n <circle cx=\"613.5\" cy=\"206.5\" r=\"22.5\" fill=\"white\" fillOpacity=\"0.4\" />\n <circle cx=\"1340\" cy=\"384\" r=\"21\" fill=\"white\" fillOpacity=\"0.5\" />\n <defs>\n <filter\n id=\"filter0_f_154_9174\"\n x=\"0.810547\"\n y=\"-263.19\"\n width=\"1722.57\"\n height=\"1607.2\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feGaussianBlur\n stdDeviation=\"200\"\n result=\"effect1_foregroundBlur_154_9174\"\n />\n </filter>\n <linearGradient\n id=\"paint0_linear_154_9174\"\n x1=\"1040.11\"\n y1=\"1031.29\"\n x2=\"1407.11\"\n y2=\"1806.85\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0.21875\" stopColor=\"#FFD748\" />\n <stop offset=\"0.541667\" stopColor=\"#FF4242\" />\n <stop offset=\"0.84375\" stopColor=\"#657CF1\" />\n </linearGradient>\n </defs>\n </svg>\n )\n}\n","import {\n Button,\n GridView,\n Heading,\n StackView,\n ThemeProvider,\n} from \"@planningcenter/tapestry-react\"\nimport React, { useState } from \"react\"\n\nimport ReactDOMServer from \"react-dom/server\"\nimport ShareModal from \"./share_modal\"\nimport WelcomeBackground from \"./welcome_background\"\nimport { token } from \"@planningcenter/tapestry\"\nimport { useLocalStorage } from \"../hooks/use_local_storage\"\n\nexport default function PcoWrappedBanner() {\n const [dismissed, setDismissed] = useLocalStorage(\n \"pco-wrapped-dismissed\",\n false,\n )\n const { enabled, shared, siteAdmin } = window.pco.wrapped\n const [shareModalOpen, setShareModalOpen] = useState(false)\n const [shareOrgStats, setShareOrgStats] = useState(shared)\n const svgString = ReactDOMServer.renderToStaticMarkup(<WelcomeBackground />)\n const svgDataUrl = `data:image/svg+xml,${encodeURIComponent(svgString)}`\n const [app, domain, suffix] = window.location.host.split(\".\")\n\n const wrappedURL = `${window.location.protocol}//home.${domain}.${suffix}/wrapped`\n if (dismissed || !enabled) return null\n\n const theme = {\n button: {\n themes: {\n wrapped: {\n fill: {\n backgroundColor: \"var(--t-fill-color-button-neutral-solid-default)\",\n },\n naked: {},\n outline: {},\n },\n },\n },\n }\n\n return (\n <ThemeProvider theme={theme}>\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n backgroundColor={\"var(--t-surface-color-card)\"}\n backgroundImage={`url('${svgDataUrl}')`}\n backgroundPosition=\"center center\"\n backgroundRepeat=\"no-repeat\"\n backgroundSize=\"auto\"\n distribution=\"space-between\"\n padding={2}\n >\n <StackView\n axis=\"vertical\"\n spacing={2}\n mediaQueries={{ sm: { alignment: \"center\", axis: \"horizontal\" } }}\n >\n <Heading level={4} fontWeight={800}>\n Your year in Planning Center is here!{\" \"}\n </Heading>\n <GridView\n columns=\"repeat(2, 1fr)\"\n spacing={1}\n mediaQueries={{ sm: { columns: \"repeat(2, max-content)\" } }}\n >\n <Button\n css={{\n \"&:visited\": {\n color: \"var(--t-text-color-default-inverted)\",\n },\n }}\n flex={1}\n external\n to={wrappedURL}\n theme=\"primary\"\n mediaQueries={{ sm: { flex: \"initial\" } }}\n >\n See it now\n </Button>\n {app === \"home\" && siteAdmin && (\n <Button\n flex={1}\n onClick={() => setShareModalOpen(true)}\n theme=\"wrapped\"\n mediaQueries={{ sm: { flex: \"initial\" } }}\n >\n Share\n </Button>\n )}\n </GridView>\n </StackView>\n <Button\n variant=\"naked\"\n icon={{\n name: \"general.x\",\n size: \"md\",\n color: token(\"--t-fill-color-neutral-020\"),\n }}\n title=\"Dismiss\"\n onClick={() => setDismissed(true)}\n />\n </StackView>\n {shareModalOpen && (\n <ShareModal\n onClose={() => setShareModalOpen(false)}\n shareOrgStats={shareOrgStats}\n setShareOrgStats={setShareOrgStats}\n />\n )}\n </ThemeProvider>\n )\n}\n","import { useEffect, useState } from \"react\"\n\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T,\n overwriteWithInitialValue = false\n) {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (overwriteWithInitialValue) return initialValue\n\n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key)\n\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue\n } catch {\n // If error also return initialValue\n return initialValue\n }\n })\n\n // Reflect the state into localStorage as a side effect.\n const localStorageRepresentation = JSON.stringify(storedValue)\n useEffect(() => {\n window.localStorage.setItem(key, localStorageRepresentation)\n }, [key, localStorageRepresentation])\n\n // When we are done with this key, drop it from localStorage completely\n const dropKey = () => window.localStorage.removeItem(key)\n\n return [storedValue, setStoredValue, dropKey] as const\n}\n"],"names":["_excluded","MODAL_SIZES","sm","md","lg","xl","getModalWidth","mediaQuery","modalSize","TOOLBAR_WIDTH","Modal","_ref","children","onClose","_ref$size","size","modalProps","_objectWithoutPropertiesLoose","React","createElement","TRModal","onRequestClose","radius","padding","maxWidth","marginHorizontal","mediaQueries","position","right","ModalPortal","_ref2","node","document","querySelector","createPortal","ModalTitle","_ref3","Heading","level","margin","css","color","token","fontWeight","lineHeight","overflow","textOverflow","whiteSpace","ModalSubTitle","_ref4","Text","fontSize","ModalHeader","_ref5","subTitle","Box","paddingHorizontal","paddingTop","StackView","axis","alignment","distribution","spacing","title","Button","theme","variant","icon","name","marginRight","onClick","ModalBody","_ref6","backgroundColor","ModalFooter","_ref7","borderTop","ShareModal","setShareOrgStats","shareOrgStats","_useState","useState","copied","setCopied","window","location","host","split","wrappedURL","protocol","_window$location$host","suffix","updatePcoWrappedShared","newShared","_document$querySelect","_document$querySelect2","fetch","method","headers","getAttribute","body","JSON","stringify","shared","then","response","ok","Error","error","console","open","Radio","checked","label","onChange","value","overflowWrap","Link","external","to","navigator","clipboard","disabled","writeText","WelcomeBackground","width","height","viewBox","fill","xmlns","filter","x","y","rx","transform","fillOpacity","cx","cy","r","id","filterUnits","colorInterpolationFilters","floodOpacity","result","mode","in","in2","stdDeviation","x1","y1","x2","y2","gradientUnits","offset","stopColor","useLocalStorage","key","initialValue","overwriteWithInitialValue","item","localStorage","getItem","parse","_unused","storedValue","setStoredValue","localStorageRepresentation","useEffect","setItem","removeItem","dismissed","setDismissed","_useLocalStorage","pco","wrapped","enabled","_window$pco$wrapped","siteAdmin","shareModalOpen","setShareModalOpen","_useState2","svgString","ReactDOMServer","renderToStaticMarkup","svgDataUrl","encodeURIComponent","app","domain","ThemeProvider","button","themes","naked","outline","backgroundImage","backgroundPosition","backgroundRepeat","backgroundSize","GridView","columns","flex"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wrapped.umd.js","sources":["../modal.tsx","../components/share_modal.tsx","../components/welcome_background.tsx","../components/pco_wrapped_banner.tsx","../hooks/use_local_storage.ts"],"sourcesContent":["import {\n Box,\n Button,\n Heading,\n ModalProps,\n StackView,\n Modal as TRModal,\n Text,\n} from \"@planningcenter/tapestry-react\"\n\nimport React from \"react\"\nimport { createPortal } from \"react-dom\"\nimport { token } from \"@planningcenter/tapestry\"\n\nconst MODAL_SIZES = {\n sm: 400,\n md: 600,\n lg: 800,\n xl: 1000,\n} as const\n\nconst TOOLBAR_WIDTH = 48\n\nconst getModalWidth = (\n mediaQuery: \"sm\" | \"md\" | \"lg\",\n modalSize: keyof typeof MODAL_SIZES,\n) => {\n switch (mediaQuery) {\n case \"sm\":\n return `calc(100% - ${TOOLBAR_WIDTH * 2}px)`\n case \"md\":\n return modalSize === \"lg\" || modalSize === \"xl\"\n ? `calc(100% - ${TOOLBAR_WIDTH * 2}px)`\n : `${MODAL_SIZES[modalSize]}px`\n case \"lg\":\n return `${MODAL_SIZES[modalSize]}px`\n default:\n return `${MODAL_SIZES.md}px`\n }\n}\n\nexport const Modal = ({\n children,\n onClose,\n size = \"md\",\n ...modalProps\n}: {\n children: React.ReactElement | React.ReactElement[]\n onClose: () => void\n size?: keyof typeof MODAL_SIZES\n} & ModalProps) => {\n return (\n <TRModal\n {...modalProps}\n onRequestClose={onClose}\n radius=\"8px\"\n padding=\"0\"\n maxWidth=\"90%\"\n marginHorizontal={0}\n mediaQueries={{\n sm: {\n maxWidth: getModalWidth(\"sm\", size),\n position: \"relative\",\n right: `${TOOLBAR_WIDTH / 2}px`,\n },\n md: {\n maxWidth: getModalWidth(\"md\", size),\n },\n lg: {\n maxWidth: getModalWidth(\"lg\", size),\n },\n }}\n >\n {children}\n </TRModal>\n )\n}\n\nexport const ModalPortal = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => {\n const node = document.querySelector(\n `[data-tapestry-react-theme-provider-home=\"true\"]`,\n ) as HTMLElement\n\n return createPortal(children, node)\n}\n\nconst ModalTitle = ({ children }: { children: string }) => {\n return (\n <Heading\n level={1}\n margin={0}\n css={{\n color: token(\"--t-text-color-default-headline\"),\n fontWeight: \"500\",\n lineHeight: \"2rem\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {children}\n </Heading>\n )\n}\n\nexport const ModalSubTitle = ({ children }: { children: string }) => {\n return (\n <Text\n fontSize={3}\n css={{\n color: token(\"--t-text-color-default-secondary\"),\n fontWeight: 500,\n lineHeight: 1.5,\n }}\n >\n {children}\n </Text>\n )\n}\n\ntype BaseModalHeaderProps = {\n onClose?: () => void\n title: string\n}\n\ntype ModalHeaderProps =\n | (BaseModalHeaderProps & { subTitle: string; children?: never })\n | (BaseModalHeaderProps & {\n subTitle?: never\n children: React.ReactElement | React.ReactElement[]\n })\n\nexport const ModalHeader = ({\n onClose,\n title,\n subTitle,\n children,\n}: ModalHeaderProps) => (\n <Box paddingHorizontal={4} paddingTop={4}>\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n distribution=\"space-between\"\n spacing={1}\n >\n <ModalTitle>{title}</ModalTitle>\n {onClose && (\n <Button\n theme=\"default\"\n variant=\"naked\"\n icon={{\n name: \"general.x\",\n size: \"md\",\n }}\n title=\"Close modal\"\n marginRight={-1}\n onClick={onClose}\n />\n )}\n </StackView>\n <Box paddingTop={subTitle || children ? 0.5 : 0}>\n {subTitle && <ModalSubTitle>{subTitle}</ModalSubTitle>}\n {children}\n </Box>\n </Box>\n)\n\nexport const ModalBody = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <Box\n backgroundColor={token(\"--t-surface-color-card\")}\n padding={4}\n data-modal-body\n >\n {children}\n </Box>\n)\n\nexport const ModalFooter = ({\n children,\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <Box\n paddingHorizontal={4}\n paddingTop={3}\n backgroundColor={token(\"--t-surface-color-card\")}\n css={{\n borderTop: `solid 1px ${token(\"--t-border-color-default-base\")}`,\n }}\n >\n {children}\n </Box>\n)\n","import {\n Button,\n Heading,\n Link,\n Radio,\n StackView,\n} from \"@planningcenter/tapestry-react\"\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalPortal,\n} from \"../modal\"\nimport React, { useState } from \"react\"\nimport { pcoUrl } from \"@planningcenter/url\"\n\nexport default function ShareModal({\n onClose,\n setShareOrgStats,\n shareOrgStats,\n}: {\n onClose: () => void\n setShareOrgStats: (shared: boolean) => void\n shareOrgStats: boolean\n}) {\n const [copied, setCopied] = useState(false)\n const homeUrl = pcoUrl(\"home\")\n const wrappedURL = `${homeUrl}/wrapped`\n\n function copyToClipboard() {\n navigator.clipboard\n .writeText(wrappedURL)\n .then(() => setCopied(true))\n .catch((error) => console.error(error))\n }\n\n function updatePcoWrappedShared(newShared: boolean) {\n fetch(\"/wrapped\", {\n method: \"PATCH\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-CSRF-Token\":\n document\n .querySelector('meta[name=\"csrf-token\"]')\n ?.getAttribute(\"content\") ?? \"\",\n },\n body: JSON.stringify({ shared: newShared }),\n })\n .then((response) => {\n if (!response.ok)\n throw new Error(\"Failed to share. Please try again later.\")\n\n return setShareOrgStats(newShared)\n })\n .catch((error) => console.error(error))\n }\n\n return (\n <ModalPortal>\n <Modal onClose={onClose} open data-testid=\"pco-wrapped-modal\">\n <ModalHeader\n onClose={onClose}\n title=\"Share\"\n subTitle={`Who should be able to view your church's \"Year in Planning Center\"`}\n />\n <ModalBody>\n <StackView spacing={3}>\n <StackView spacing={1}>\n <Heading level={3}>Access</Heading>\n <Radio\n checked={!shareOrgStats}\n label=\"Organization Admins\"\n name=\"radio\"\n onChange={() => updatePcoWrappedShared(false)}\n size=\"md\"\n value=\"false\"\n />\n <Radio\n checked={shareOrgStats}\n label=\"Any logged in user\"\n name=\"radio\"\n onChange={() => updatePcoWrappedShared(true)}\n size=\"md\"\n value=\"true\"\n />\n </StackView>\n <StackView spacing={1}>\n <Heading level={3}>Link</Heading>\n <StackView\n axis=\"vertical\"\n spacing={1}\n mediaQueries={{\n sm: { alignment: \"center\", axis: \"horizontal\" },\n }}\n overflowWrap=\"break-word\"\n >\n <Link external to=\"/wrapped\">\n {wrappedURL}\n </Link>\n {navigator.clipboard && (\n <Button\n disabled={copied}\n onClick={copyToClipboard}\n theme=\"primary\"\n variant=\"outline\"\n >\n {copied ? \"Copied!\" : \"Copy\"}\n </Button>\n )}\n </StackView>\n </StackView>\n </StackView>\n </ModalBody>\n <ModalFooter>\n <StackView\n padding={0}\n axis=\"horizontal\"\n alignment=\"end\"\n distribution=\"end\"\n spacing={2}\n >\n <Button onClick={onClose} title=\"Done\" theme=\"primary\" />\n </StackView>\n </ModalFooter>\n </Modal>\n </ModalPortal>\n )\n}\n","import React from \"react\"\n\nexport default function WelcomeBackground() {\n return (\n <svg\n width=\"1724\"\n height=\"1080\"\n viewBox=\"0 0 1724 1080\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g filter=\"url(#filter0_f_154_9174)\">\n <rect\n x=\"606.744\"\n y=\"1062.82\"\n width=\"649.488\"\n height=\"964.695\"\n rx=\"324.744\"\n transform=\"rotate(-120 606.744 1062.82)\"\n fill=\"url(#paint0_linear_154_9174)\"\n fillOpacity=\"0.5\"\n />\n </g>\n <circle cx=\"1200.5\" cy=\"195.5\" r=\"45.5\" fill=\"white\" fillOpacity=\"0.3\" />\n <circle cx=\"613.5\" cy=\"206.5\" r=\"22.5\" fill=\"white\" fillOpacity=\"0.4\" />\n <circle cx=\"1340\" cy=\"384\" r=\"21\" fill=\"white\" fillOpacity=\"0.5\" />\n <defs>\n <filter\n id=\"filter0_f_154_9174\"\n x=\"0.810547\"\n y=\"-263.19\"\n width=\"1722.57\"\n height=\"1607.2\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\" />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n />\n <feGaussianBlur\n stdDeviation=\"200\"\n result=\"effect1_foregroundBlur_154_9174\"\n />\n </filter>\n <linearGradient\n id=\"paint0_linear_154_9174\"\n x1=\"1040.11\"\n y1=\"1031.29\"\n x2=\"1407.11\"\n y2=\"1806.85\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop offset=\"0.21875\" stopColor=\"#FFD748\" />\n <stop offset=\"0.541667\" stopColor=\"#FF4242\" />\n <stop offset=\"0.84375\" stopColor=\"#657CF1\" />\n </linearGradient>\n </defs>\n </svg>\n )\n}\n","import {\n Button,\n GridView,\n Heading,\n StackView,\n ThemeProvider,\n} from \"@planningcenter/tapestry-react\"\nimport React, { useState } from \"react\"\nimport { pcoUrl } from \"@planningcenter/url\"\n\nimport ReactDOMServer from \"react-dom/server\"\nimport ShareModal from \"./share_modal\"\nimport WelcomeBackground from \"./welcome_background\"\nimport { token } from \"@planningcenter/tapestry\"\nimport { useLocalStorage } from \"../hooks/use_local_storage\"\n\nexport default function PcoWrappedBanner() {\n const [dismissed, setDismissed] = useLocalStorage(\n \"pco-wrapped-dismissed\",\n false,\n )\n const { enabled, shared, siteAdmin } = window.pco.wrapped\n const [shareModalOpen, setShareModalOpen] = useState(false)\n const [shareOrgStats, setShareOrgStats] = useState(shared)\n const svgString = ReactDOMServer.renderToStaticMarkup(<WelcomeBackground />)\n const svgDataUrl = `data:image/svg+xml,${encodeURIComponent(svgString)}`\n const isHomeApp = window.location.host.includes(\"home\")\n const homeUrl = pcoUrl(\"home\")\n const wrappedURL = `${homeUrl}/wrapped`\n\n if (dismissed || !enabled) return null\n\n const theme = {\n button: {\n themes: {\n wrapped: {\n fill: {\n backgroundColor: \"var(--t-fill-color-button-neutral-solid-default)\",\n },\n naked: {},\n outline: {},\n },\n },\n },\n }\n\n return (\n <ThemeProvider theme={theme}>\n <StackView\n axis=\"horizontal\"\n alignment=\"center\"\n backgroundColor={\"var(--t-surface-color-card)\"}\n backgroundImage={`url('${svgDataUrl}')`}\n backgroundPosition=\"center center\"\n backgroundRepeat=\"no-repeat\"\n backgroundSize=\"auto\"\n distribution=\"space-between\"\n padding={2}\n >\n <StackView\n axis=\"vertical\"\n spacing={2}\n mediaQueries={{ sm: { alignment: \"center\", axis: \"horizontal\" } }}\n >\n <Heading level={4} fontWeight={800}>\n Your year in Planning Center is here!{\" \"}\n </Heading>\n <GridView\n columns=\"repeat(2, 1fr)\"\n spacing={1}\n mediaQueries={{ sm: { columns: \"repeat(2, max-content)\" } }}\n >\n <Button\n css={{\n \"&:visited\": {\n color: \"var(--t-text-color-default-inverted)\",\n },\n \"&:hover\": {\n color: \"var(--t-text-color-default-inverted)\",\n },\n }}\n flex={1}\n external\n to={wrappedURL}\n theme=\"primary\"\n mediaQueries={{ sm: { flex: \"initial\" } }}\n >\n See it now\n </Button>\n {isHomeApp && siteAdmin && (\n <Button\n flex={1}\n onClick={() => setShareModalOpen(true)}\n theme=\"wrapped\"\n mediaQueries={{ sm: { flex: \"initial\" } }}\n >\n Share\n </Button>\n )}\n </GridView>\n </StackView>\n <Button\n variant=\"naked\"\n icon={{\n name: \"general.x\",\n size: \"md\",\n color: token(\"--t-fill-color-neutral-020\"),\n }}\n title=\"Dismiss\"\n onClick={() => setDismissed(true)}\n />\n </StackView>\n {shareModalOpen && (\n <ShareModal\n onClose={() => setShareModalOpen(false)}\n shareOrgStats={shareOrgStats}\n setShareOrgStats={setShareOrgStats}\n />\n )}\n </ThemeProvider>\n )\n}\n","import { useEffect, useState } from \"react\"\n\nexport function useLocalStorage<T>(\n key: string,\n initialValue: T,\n overwriteWithInitialValue = false\n) {\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(() => {\n if (overwriteWithInitialValue) return initialValue\n\n try {\n // Get from local storage by key\n const item = window.localStorage.getItem(key)\n\n // Parse stored json or if none return initialValue\n return item ? JSON.parse(item) : initialValue\n } catch {\n // If error also return initialValue\n return initialValue\n }\n })\n\n // Reflect the state into localStorage as a side effect.\n const localStorageRepresentation = JSON.stringify(storedValue)\n useEffect(() => {\n window.localStorage.setItem(key, localStorageRepresentation)\n }, [key, localStorageRepresentation])\n\n // When we are done with this key, drop it from localStorage completely\n const dropKey = () => window.localStorage.removeItem(key)\n\n return [storedValue, setStoredValue, dropKey] as const\n}\n"],"names":["_excluded","MODAL_SIZES","sm","md","lg","xl","getModalWidth","mediaQuery","modalSize","TOOLBAR_WIDTH","Modal","_ref","children","onClose","_ref$size","size","modalProps","_objectWithoutPropertiesLoose","React","createElement","TRModal","onRequestClose","radius","padding","maxWidth","marginHorizontal","mediaQueries","position","right","ModalPortal","_ref2","node","document","querySelector","createPortal","ModalTitle","_ref3","Heading","level","margin","css","color","token","fontWeight","lineHeight","overflow","textOverflow","whiteSpace","ModalSubTitle","_ref4","Text","fontSize","ModalHeader","_ref5","subTitle","Box","paddingHorizontal","paddingTop","StackView","axis","alignment","distribution","spacing","title","Button","theme","variant","icon","name","marginRight","onClick","ModalBody","_ref6","backgroundColor","ModalFooter","_ref7","borderTop","ShareModal","setShareOrgStats","shareOrgStats","_useState","useState","copied","setCopied","wrappedURL","pcoUrl","updatePcoWrappedShared","newShared","fetch","method","headers","_document$querySelect","_document$querySelect2","getAttribute","body","JSON","stringify","shared","then","response","ok","Error","error","console","open","Radio","checked","label","onChange","value","overflowWrap","Link","external","to","navigator","clipboard","disabled","writeText","WelcomeBackground","width","height","viewBox","fill","xmlns","filter","x","y","rx","transform","fillOpacity","cx","cy","r","id","filterUnits","colorInterpolationFilters","floodOpacity","result","mode","in","in2","stdDeviation","x1","y1","x2","y2","gradientUnits","offset","stopColor","_useLocalStorage","key","initialValue","overwriteWithInitialValue","item","window","localStorage","getItem","parse","_unused","storedValue","setStoredValue","localStorageRepresentation","useEffect","setItem","removeItem","useLocalStorage","dismissed","setDismissed","_window$pco$wrapped","pco","wrapped","enabled","siteAdmin","shareModalOpen","setShareModalOpen","_useState2","svgString","ReactDOMServer","renderToStaticMarkup","svgDataUrl","encodeURIComponent","isHomeApp","location","host","includes","ThemeProvider","button","themes","naked","outline","backgroundImage","backgroundPosition","backgroundRepeat","backgroundSize","GridView","columns","flex"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@planningcenter/wrapped",
|
|
3
|
-
"version": "1.0.1-rc.
|
|
3
|
+
"version": "1.0.1-rc.1",
|
|
4
4
|
"description": "PCO Wrapped components",
|
|
5
5
|
"source": "index.tsx",
|
|
6
6
|
"main": "./dist/wrapped.js",
|
|
@@ -28,7 +28,8 @@
|
|
|
28
28
|
"private": false,
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@planningcenter/tapestry": "^2.6.0",
|
|
31
|
-
"@planningcenter/tapestry-react": "^4.13.0"
|
|
31
|
+
"@planningcenter/tapestry-react": "^4.13.0",
|
|
32
|
+
"@planningcenter/url": "^3.1.0"
|
|
32
33
|
},
|
|
33
34
|
"devDependencies": {
|
|
34
35
|
"@types/jest": "^29.5.14",
|