@frigade/react 2.0.0-alpha.3 → 2.0.0-alpha.31

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/index.js CHANGED
@@ -1,3 +1,18 @@
1
- "use client";
2
- var _=Object.defineProperty,Fr=Object.defineProperties;var Wr=Object.getOwnPropertyDescriptors;var A=Object.getOwnPropertySymbols;var rr=Object.prototype.hasOwnProperty,er=Object.prototype.propertyIsEnumerable;var Z=(r,e,o)=>e in r?_(r,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[e]=o,l=(r,e)=>{for(var o in e||(e={}))rr.call(e,o)&&Z(r,o,e[o]);if(A)for(var o of A(e))er.call(e,o)&&Z(r,o,e[o]);return r},p=(r,e)=>Fr(r,Wr(e));var c=(r,e)=>{var o={};for(var t in r)rr.call(r,t)&&e.indexOf(t)<0&&(o[t]=r[t]);if(r!=null&&A)for(var t of A(r))e.indexOf(t)<0&&er.call(r,t)&&(o[t]=r[t]);return o};var or=(r,e)=>{for(var o in e)_(r,o,{get:e[o],enumerable:!0})};var R=(r,e,o)=>new Promise((t,n)=>{var a=f=>{try{s(o.next(f))}catch(m){n(m)}},i=f=>{try{s(o.throw(f))}catch(m){n(m)}},s=f=>f.done?t(f.value):Promise.resolve(f.value).then(a,i);s((o=o.apply(r,e)).next())});import*as sr from"react";import{clsx as Mr}from"clsx";var d={borders:{md:"var(--fr-borders-md)"},borderWidths:{0:"var(--fr-borderWidths-0)",md:"var(--fr-borderWidths-md)"},colors:{black:"var(--fr-colors-black)",gray100:"var(--fr-colors-gray100)",gray200:"var(--fr-colors-gray200)",gray300:"var(--fr-colors-gray300)",gray400:"var(--fr-colors-gray400)",gray500:"var(--fr-colors-gray500)",gray600:"var(--fr-colors-gray600)",gray700:"var(--fr-colors-gray700)",gray800:"var(--fr-colors-gray800)",gray900:"var(--fr-colors-gray900)",white:"var(--fr-colors-white)",blue400:"var(--fr-colors-blue400)",blue500:"var(--fr-colors-blue500)",blue800:"var(--fr-colors-blue800)",blue900:"var(--fr-colors-blue900)",green400:"var(--fr-colors-green400)",green500:"var(--fr-colors-green500)",green800:"var(--fr-colors-green800)",transparent:"var(--fr-colors-transparent)",red500:"var(--fr-colors-red500)",neutral:{background:"var(--fr-colors-neutral-background)",border:"var(--fr-colors-neutral-border)",foreground:"var(--fr-colors-neutral-foreground)",surface:"var(--fr-colors-neutral-surface)",active:{background:"var(--fr-colors-neutral-active-background)",border:"var(--fr-colors-neutral-active-border)",foreground:"var(--fr-colors-neutral-active-foreground)",surface:"var(--fr-colors-neutral-active-surface)"},focus:{background:"var(--fr-colors-neutral-focus-background)",border:"var(--fr-colors-neutral-focus-border)",foreground:"var(--fr-colors-neutral-focus-foreground)",surface:"var(--fr-colors-neutral-focus-surface)"},hover:{background:"var(--fr-colors-neutral-hover-background)",border:"var(--fr-colors-neutral-hover-border)",foreground:"var(--fr-colors-neutral-hover-foreground)",surface:"var(--fr-colors-neutral-hover-surface)"}},primary:{background:"var(--fr-colors-primary-background)",border:"var(--fr-colors-primary-border)",foreground:"var(--fr-colors-primary-foreground)",surface:"var(--fr-colors-primary-surface)",active:{background:"var(--fr-colors-primary-active-background)",border:"var(--fr-colors-primary-active-border)",foreground:"var(--fr-colors-primary-active-foreground)",surface:"var(--fr-colors-primary-active-surface)"},focus:{background:"var(--fr-colors-primary-focus-background)",border:"var(--fr-colors-primary-focus-border)",foreground:"var(--fr-colors-primary-focus-foreground)",surface:"var(--fr-colors-primary-focus-surface)"},hover:{background:"var(--fr-colors-primary-hover-background)",border:"var(--fr-colors-primary-hover-border)",foreground:"var(--fr-colors-primary-hover-foreground)",surface:"var(--fr-colors-primary-hover-surface)"}},secondary:{background:"var(--fr-colors-secondary-background)",border:"var(--fr-colors-secondary-border)",foreground:"var(--fr-colors-secondary-foreground)",surface:"var(--fr-colors-secondary-surface)",active:{background:"var(--fr-colors-secondary-active-background)",border:"var(--fr-colors-secondary-active-border)",foreground:"var(--fr-colors-secondary-active-foreground)",surface:"var(--fr-colors-secondary-active-surface)"},focus:{background:"var(--fr-colors-secondary-focus-background)",border:"var(--fr-colors-secondary-focus-border)",foreground:"var(--fr-colors-secondary-focus-foreground)",surface:"var(--fr-colors-secondary-focus-surface)"},hover:{background:"var(--fr-colors-secondary-hover-background)",border:"var(--fr-colors-secondary-hover-border)",foreground:"var(--fr-colors-secondary-hover-foreground)",surface:"var(--fr-colors-secondary-hover-surface)"}}},fontFamilies:{default:"var(--fr-fontFamilies-default)"},fontSizes:{xs:"var(--fr-fontSizes-xs)",sm:"var(--fr-fontSizes-sm)",md:"var(--fr-fontSizes-md)",lg:"var(--fr-fontSizes-lg)",xl:"var(--fr-fontSizes-xl)","2xl":"var(--fr-fontSizes-2xl)","3xl":"var(--fr-fontSizes-3xl)","4xl":"var(--fr-fontSizes-4xl)","5xl":"var(--fr-fontSizes-5xl)"},fontWeights:{regular:"var(--fr-fontWeights-regular)",demibold:"var(--fr-fontWeights-demibold)",bold:"var(--fr-fontWeights-bold)"},letterSpacings:{md:"var(--fr-letterSpacings-md)"},lineHeights:{xs:"var(--fr-lineHeights-xs)",sm:"var(--fr-lineHeights-sm)",md:"var(--fr-lineHeights-md)",lg:"var(--fr-lineHeights-lg)",xl:"var(--fr-lineHeights-xl)","2xl":"var(--fr-lineHeights-2xl)","3xl":"var(--fr-lineHeights-3xl)","4xl":"var(--fr-lineHeights-4xl)"},radii:{md:"var(--fr-radii-md)",lg:"var(--fr-radii-lg)",round:"var(--fr-radii-round)"},shadows:{md:"var(--fr-shadows-md)"},space:{0:"var(--fr-space-0)",1:"var(--fr-space-1)",2:"var(--fr-space-2)",3:"var(--fr-space-3)",4:"var(--fr-space-4)",5:"var(--fr-space-5)",6:"var(--fr-space-6)",7:"var(--fr-space-7)",8:"var(--fr-space-8)",9:"var(--fr-space-9)",10:"var(--fr-space-10)",11:"var(--fr-space-11)",12:"var(--fr-space-12)",13:"var(--fr-space-13)",14:"var(--fr-space-14)",15:"var(--fr-space-15)",16:"var(--fr-space-16)",17:"var(--fr-space-17)",18:"var(--fr-space-18)",19:"var(--fr-space-19)",20:"var(--fr-space-20)","-20":"var(--fr-space--20)","-19":"var(--fr-space--19)","-18":"var(--fr-space--18)","-17":"var(--fr-space--17)","-16":"var(--fr-space--16)","-15":"var(--fr-space--15)","-14":"var(--fr-space--14)","-13":"var(--fr-space--13)","-12":"var(--fr-space--12)","-11":"var(--fr-space--11)","-10":"var(--fr-space--10)","-9":"var(--fr-space--9)","-8":"var(--fr-space--8)","-7":"var(--fr-space--7)","-6":"var(--fr-space--6)","-5":"var(--fr-space--5)","-4":"var(--fr-space--4)","-3":"var(--fr-space--3)","-2":"var(--fr-space--2)","-1":"var(--fr-space--1)","-0.5":"var(--fr-space--0-5)","0.5":"var(--fr-space-0-5)",auto:"var(--fr-space-auto)"}};function E(r,e="",o="."){return Object.keys(r).reduce((t,n)=>{let i=`${e.length?`${e}${o}`:""}${n}`,s=r[n];return typeof s=="object"&&s!==null&&!Array.isArray(s)?Object.assign(t,E(s,i,o)):t[i]=s,t},{})}var M=E(d.colors),tr={color:M,backgroundColor:M,borderColor:M,border:d.borders,borderRadius:d.radii,borderWidth:d.borderWidths,fontFamily:d.fontFamilies,fontSize:d.fontSizes,fontWeight:d.fontWeights,gap:d.space,lineHeight:d.lineHeights,margin:d.space,marginTop:d.space,marginRight:d.space,marginBottom:d.space,marginLeft:d.space,padding:d.space,paddingTop:d.space,paddingRight:d.space,paddingBottom:d.space,paddingLeft:d.space,alignContent:["center","start","end","flex-start","flex-end","normal","baseline","first baseline","last baseline","space-between","space-around","space-evenly","stretch","safe center","unsafe center","inherit","initial","revert","revert-layer","unset"],alignItems:["normal","stretch","center","start","end","flex-start","flex-end","self-start","self-end","baseline","first baseline","last baseline","safe center","unsafe center","inherit","initial","revert","revert-layer","unset"],alignSelf:["auto","normal","center","start","end","self-start","self-end","flex-start","flex-end","baseline","first baseline","last baseline","stretch","safe center","unsafe center","inherit","initial","revert","revert-layer","unset"],flexDirection:["row","row-reverse","column","column-reverse","inherit","initial","revert","revert-layer","unset"],flexWrap:["nowrap","wrap","wrap-reverse","inherit","initial","revert","revert-layer","unset"],justifyContent:["center","start","end","flex-start","flex-end","left","right","normal","space-between","space-around","space-evenly","stretch","safe center","unsafe center","inherit","initial","revert","revert-layer","unset"],justifyItems:["normal","stretch","center","start","end","flex-start","flex-end","self-start","self-end","left","right","baseline","first baseline","last baseline","safe center","unsafe center","legacy right","legacy left","legacy center","inherit","initial","revert","revert-layer","unset"],boxSizing:["border-box","content-box","inherit","initial","revert","revert-layer","unset"],position:["static","relative","absolute","fixed","sticky","inherit","initial","revert","revert-layer","unset"],display:["block","block flex","block flow","block flow-root","block grid","contents","flex","flow-root","grid","inherit","initial","inline","inline flex","inline flow","inline flow-root","inline grid","inline-block","inline-flex","inline-grid","list-item","none","revert","revert-layer","table","table-row-group","table-header-group","table-footer-group","table-row","table-cell","table-column-group","table-column","table-caption","unset"]},nr={m:["margin"],mt:["marginTop"],mr:["marginRight"],mb:["marginBottom"],ml:["marginLeft"],mx:["marginLeft","marginRight"],my:["marginTop","marginBottom"],p:["padding"],pt:["paddingTop"],pr:["paddingRight"],pb:["paddingBottom"],pl:["paddingLeft"],px:["paddingLeft","paddingRight"],py:["paddingTop","paddingBottom"]};function Ar(r){if(Array.isArray(r))return new Map(r.map(e=>[e,e]));if(typeof r=="object"&&r!==null)return new Map(Object.entries(r));if(["string","number"].includes(typeof r))return new Map([r,r]);throw new Error("Invalid entry in styleProps")}var Vr=new Map(Object.entries(tr).map(([r,e])=>[r,Ar(e)])),Er=new Map(Object.entries(nr).map(([r,e])=>[r,new Set(e)]));function ar(r){let e=Object.assign({},r),o={};return Object.entries(e).forEach(([t,n])=>{let a=Er.get(t);a!=null&&(a.forEach(i=>{e[i]=n}),delete e[t])}),Object.entries(e).forEach(([t,n])=>{let a=Vr.get(t);if(a!=null)if(typeof n=="string"&&n.indexOf(" ")>-1){let i=n.split(" ");o[t]=i.map(s=>{var f;return(f=a.get(s.toString()))!=null?f:s}).join(" "),delete e[t]}else a.has(n.toString())&&(o[t]=a.get(n.toString()),delete e[t])}),{cssFromProps:o,unmatchedProps:e}}import{jsx as zr}from"@emotion/react/jsx-runtime";function ir(r){return r&&`fr-${r}`}function jr(r){return r&&(Array.isArray(r)?r.map(e=>ir(e)).join(" "):ir(r))}function Dr(s,i){var f=s,{as:r,children:e,className:o,css:t,part:n}=f,a=c(f,["as","children","className","css","part"]);let m=r!=null?r:"div",{cssFromProps:x,unmatchedProps:b}=ar(a),P=jr(n),B=o||P?Mr(o,P):void 0;return zr(m,p(l({className:B,css:[l(l({boxSizing:"border-box"},x),t)]},b),{ref:i,children:e}))}var u=sr.forwardRef(Dr);var j={};or(j,{Body1:()=>Xr,Body2:()=>Jr,Caption:()=>Qr,Display1:()=>Ir,Display2:()=>$r,H1:()=>Lr,H2:()=>Kr,H3:()=>Nr,H4:()=>qr,base:()=>y});var y=({fontFamilies:r})=>({fontFamily:r.default,margin:0}),Ir=({fontSizes:r,fontWeights:e,lineHeights:o})=>[y,{fontSize:r["5xl"],fontWeight:e.bold,lineHeight:o["4xl"]}],$r=({fontSizes:r,fontWeights:e,lineHeights:o})=>[y,{fontSize:r["4xl"],fontWeight:e.bold,lineHeight:o["3xl"]}],Lr=({fontSizes:r,fontWeights:e,lineHeights:o})=>[y,{fontSize:r["3xl"],fontWeight:e.bold,lineHeight:o["2xl"]}],Kr=({fontSizes:r,fontWeights:e,lineHeights:o})=>[y,{fontSize:r["2xl"],fontWeight:e.bold,lineHeight:o.xl}],Nr=({fontSizes:r,fontWeights:e,lineHeights:o})=>[y,{fontSize:r.xl,fontWeight:e.bold,lineHeight:o.lg}],qr=({fontSizes:r,fontWeights:e,lineHeights:o})=>[y,{fontSize:r.lg,fontWeight:e.bold,lineHeight:o.md}],Xr=({fontSizes:r,fontWeights:e,lineHeights:o})=>[y,{fontSize:r.md,fontWeight:e.regular,lineHeight:o.md}],Jr=({fontSizes:r,fontWeights:e,lineHeights:o})=>[y,{fontSize:r.sm,fontWeight:e.regular,lineHeight:o.md}],Qr=({fontSizes:r,fontWeights:e,lineHeights:o})=>[y,{fontSize:r.xs,fontWeight:e.regular,lineHeight:o.sm}];import{jsx as cr}from"@emotion/react/jsx-runtime";function lr(a){var i=a,{as:r="span",children:e,css:o,variant:t="Body1"}=i,n=c(i,["as","children","css","variant"]);return cr(u,p(l({as:r,css:[j[t],o]},n),{children:e}))}var Ur=["Display1","Display2","H1","H2","H3","H4","Body1","Body2","Caption"],Yr=Object.fromEntries(Ur.map(r=>{let e=["H1","H2","H3","H4"].includes(r)?r.toLowerCase():void 0,o=t=>cr(lr,p(l({as:e},t),{variant:r,children:t.children}));return o.displayName=`Text.${r}`,[r,o]})),w=Object.assign(lr,Yr);var D={};or(D,{Link:()=>_r,Plain:()=>re,Primary:()=>Gr,Secondary:()=>Zr,base:()=>k});var k=({radii:r,space:e})=>({borderWidth:0,borderRadius:r.md,padding:`${e[2]} ${e[4]}`}),Gr=({colors:r})=>[k,{backgroundColor:r.primary.surface,color:r.primary.foreground,"&:hover":{backgroundColor:r.primary.hover.surface}}],Zr=({colors:r})=>[k,{backgroundColor:r.secondary.surface,color:r.secondary.foreground,"&:hover":{backgroundColor:r.secondary.hover.surface}}],_r=({colors:r})=>[k,{backgroundColor:r.transparent,color:r.primary.surface,"&:hover":{color:r.primary.hover.surface}}],re=({colors:r})=>[k,{backgroundColor:r.transparent,color:r.neutral.foreground}];import{jsx as pr,jsxs as te}from"@emotion/react/jsx-runtime";function fr(i){var s=i,{as:r,children:e,css:o={},title:t,variant:n="Primary"}=s,a=c(s,["as","children","css","title","variant"]);return te(u,p(l({as:r!=null?r:"button",css:[D[n],o]},a),{children:[e,t&&pr(w.Body2,{fontWeight:"demibold",children:t})]}))}var ee=["Primary","Secondary","Link","Plain"],oe=Object.fromEntries(ee.map(r=>{let e=r.toLocaleLowerCase(),o=a=>{var i=a,{part:t}=i,n=c(i,["part"]);return pr(fr,p(l({part:[`button-${e}`,t]},n),{variant:r,children:n.children}))};return o.displayName=`Text.${r}`,[r,o]})),O=Object.assign(fr,oe);import*as z from"react";import{jsx as dr}from"@emotion/react/jsx-runtime";var ne=z.forwardRef((n,t)=>{var a=n,{children:r,css:e}=a,o=c(a,["children","css"]);return dr(u,p(l({css:[{display:"flex",flexDirection:"row"},e]},o),{ref:t,children:r}))}),ae=z.forwardRef((n,t)=>{var a=n,{children:r,css:e}=a,o=c(a,["children","css"]);return dr(u,p(l({css:[{display:"flex",flexDirection:"column"},e]},o),{ref:t,children:r}))}),S={Column:ae,Row:ne};import{createContext as se}from"react";import{ThemeProvider as le}from"@emotion/react";function ur(r){var e=r.match(/^var\((.*)\)$/);return e?e[1]:r}function gr(r,e){var o=r;for(var t of e){if(!(t in o))throw new Error("Path ".concat(e.join(" -> ")," does not exist in object"));o=o[t]}return o}function I(r,e){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:[],t=r.constructor();for(var n in r){var a=r[n],i=[...o,n];typeof a=="string"||typeof a=="number"||a==null?t[n]=e(a,i):typeof a=="object"&&!Array.isArray(a)?t[n]=I(a,e,i):console.warn('Skipping invalid key "'.concat(i.join("."),'". Should be a string, number, null or object. Received: "').concat(Array.isArray(a)?"Array":typeof a,'"'))}return t}function mr(r,e,o){r.style.setProperty(ur(e),o)}function vr(r,e,o){if(typeof o=="object"){var t=e;I(o,(i,s)=>{mr(r,gr(t,s),String(i))})}else{var n=e;for(var a in n)mr(r,a,n[a])}}import{useEffect as ie}from"react";function $(r,e=d){return Object.keys(r).reduce((o,t)=>{let n=r[t];return typeof n=="object"&&n!==null&&!Array.isArray(n)&&t in r?Object.assign(o,$(n,e[t])):o[e[t]]=r[t],o},{})}function br(r={},e=":root"){ie(()=>{let o=$(r),t=document.querySelector(e);vr(t,o)},[r])}import{jsx as xr}from"@emotion/react/jsx-runtime";var L=se({apiKey:"",config:{}});function ce({apiKey:r,children:e,config:o={},theme:t}){return br(t),xr(L.Provider,{value:{apiKey:r,config:o},children:xr(le,{theme:d,children:e})})}import{useEffect as be,useRef as xe,useState as X}from"react";import{XMarkIcon as ye}from"@heroicons/react/24/solid";import*as h from"@radix-ui/react-popover";import{useCallback as fe,useLayoutEffect as pe,useState as yr}from"react";function hr(){let r="DOMRect"in globalThis?new DOMRect:{height:0,width:0,x:0,y:0,bottom:0,top:0,right:0,left:0,toJSON:()=>{}},[e,o]=yr(r),[t,n]=yr(null),a=fe(i=>{n(i)},[]);return pe(()=>{t&&o(t.getBoundingClientRect())},[t]),{node:t,rect:e,ref:a}}var Pr="_16td421";import{jsx as wr,jsxs as de}from"@emotion/react/jsx-runtime";function Tr(t){var n=t,{style:r={},part:e=""}=n,o=c(n,["style","part"]);return de(u,p(l({part:`dot-wrapper ${e}`,style:l({height:"48px",position:"absolute",width:"48px"},r)},o),{children:[wr(u,{backgroundColor:"primary.surface",className:Pr,part:"dot-pulse",style:{borderRadius:"24px",height:"48px",left:0,position:"absolute",top:0,transformOrigin:"center center",width:"48px"}}),wr(u,{backgroundColor:"primary.surface",part:"dot",style:{borderRadius:"12px",height:"24px",left:"12px",position:"absolute",top:"12px",width:"24px"}})]}))}import{jsx as ue}from"@emotion/react/jsx-runtime";function K(t){var n=t,{part:r,src:e}=n,o=c(n,["part","src"]);return ue(u,l({as:"img",part:["image",r],src:e},o))}import{jsx as me}from"@emotion/react/jsx-runtime";function ge(r){var e,o,t;if(r.includes("youtube"))return`https://www.youtube.com/embed/${(e=r.split("v=")[1])==null?void 0:e.split("&")[0]}`;if(r.includes("vimeo"))return`https://player.vimeo.com/video/${(o=r.split("vimeo.com/")[1])==null?void 0:o.split("&")[0]}`;if(r.includes("wistia"))return`https://fast.wistia.net/embed/iframe/${(t=r.split("wistia.com/medias/")[1])==null?void 0:t.split("&")[0]}`;throw new Error("Could not map videoUri to a known provider (Youtube, Vimeo, Wistia).")}function N(t){var n=t,{part:r,src:e}=n,o=c(n,["part","src"]);let a=ge(e);return me(u,l({allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowFullScreen:!0,as:"iframe",backgroundColor:"gray100",borderWidth:0,part:["video",r],src:a},o))}import{jsx as ve}from"@emotion/react/jsx-runtime";function q(t){var n=t,{src:r,type:e}=n,o=c(n,["src","type"]);return ve(e==="video"?N:K,l({src:r},o))}function Br({props:r,alignAttr:e,sideAttr:o}){let t=o!=null?o:"bottom",n={},a=(()=>{if(["after","before"].includes(r.align)){if(e=="start")return"before";if(e=="end")return"after"}return r.align})(),i="-24px",s={top:"bottom",right:"left",bottom:"top",left:"right"};return n[s[t]]=i,["before","end"].includes(a)?["top","bottom"].includes(t)?n.right=i:n.bottom=i:["after","start"].includes(a)?["top","bottom"].includes(t)?n.left=i:n.top=i:["top","bottom"].includes(t)?n.left=`calc(50% + ${i})`:n.top=`calc(50% + ${i})`,n}var Sr={content:["align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPadding","forceMount","hideWhenDetached","onCloseAutoFocus","onEscapeKeyDown","onFocusOutside","onInteractOutside","onOpenAutoFocus","onPointerDownOutside","side","sideOffset","sticky"],root:["defaultOpen","modal","onOpenChange","open"]};function Cr(r,e){var n,a,i;let o=Object.fromEntries(Sr.content.map(s=>[s,r[s]]).filter(s=>s[1]!==void 0)),t=Object.fromEntries(Sr.root.map(s=>[s,r[s]]).filter(s=>s[1]!==void 0));if(["before","after"].includes(o.align)){let s={after:"end",before:"start"},f=(H,V)=>["top","bottom"].includes(V)?H=="after"?"marginLeft":"marginRight":H=="after"?"marginTop":"marginBottom",m=(n=o.alignOffset)!=null?n:0,x=(a=o.style)!=null?a:{},b=(i=o.side)!=null?i:"bottom",P=o.align;o.style=p(l({},x),{[f(P,b)]:m});let B=["top","bottom"].includes(b)?e.width:e.height;o.alignOffset=(B+m)*-1,o.align=s[P]}return{contentProps:o,rootProps:t}}import{jsx as v,jsxs as J}from"@emotion/react/jsx-runtime";function g(i){var s=i,{anchor:r,children:e,css:o,spotlight:t=!1,style:n}=s,a=c(s,["anchor","children","css","spotlight","style"]);let{node:f,rect:m,ref:x}=hr(),[b,P]=X(a.align),[B,H]=X(a.side);if(f!==null){let C=f.getAttribute("data-align"),G=f.getAttribute("data-side");b!==C&&P(C),B!==G&&H(G)}let{contentProps:V,rootProps:kr}=Cr(a,m),U=xe(null),[F,Or]=X(null);if(be(()=>{let C=document.querySelector(r);C!=null&&(U.current=C,Or(U))},[r]),F==null)return null;let W=F.current.getBoundingClientRect(),Y="0";typeof window!="undefined"&&(Y=window.getComputedStyle(F.current).borderRadius);let Hr=Br({props:a,alignAttr:b,sideAttr:B});return J(h.Root,p(l({defaultOpen:!0},kr),{children:[v(h.Anchor,{virtualRef:F}),v(h.Portal,{children:J("div",{css:o,children:[t&&v(u,{borderRadius:Y,part:"tooltip-spotlight",position:"absolute",css:{boxShadow:"0 0 0 2000px rgb(0 0 0 / 0.5)",height:W.height,left:W.left,top:W.top,width:W.width}}),v(h.Content,p(l({asChild:!0},V),{ref:x,children:J(S.Column,{backgroundColor:"white",borderRadius:"md",p:5,part:"tooltip-content",position:"relative",css:l({boxShadow:"0px 4px 20px rgba(0, 0, 0, 0.1)",width:"300px"},n),children:[v(Tr,{style:Hr}),e]})}))]})})]}))}g.Close=o=>{var t=o,{css:r}=t,e=c(t,["css"]);return v(h.Close,{"aria-label":"Close",asChild:!0,children:v(O.Plain,p(l({css:[{top:0,right:0},r],part:"tooltip-close",position:"absolute"},e),{children:v(ye,{height:"20",fill:"currentColor"})}))})};g.Media=o=>{var t=o,{src:r}=t,e=c(t,["src"]);return r==null?null:v(q,l({borderRadius:"md md 0 0",borderWidth:"0",css:{aspectRatio:"2"},margin:"-5 -5 5",src:r},e))};g.Primary=t=>{var n=t,{onClick:r,title:e}=n,o=c(n,["onClick","title"]);return e==null?null:v(O.Primary,l({title:e,onClick:r},o))};g.Progress=o=>{var t=o,{children:r}=t,e=c(t,["children"]);return r==null?null:v(w.Body2,p(l({fontWeight:"demibold",part:"progress"},e),{children:r}))};g.Secondary=t=>{var n=t,{onClick:r,title:e}=n,o=c(n,["onClick","title"]);return e==null?null:v(O.Secondary,l({title:e,onClick:r},o))};g.Subtitle=o=>{var t=o,{children:r}=t,e=c(t,["children"]);return r==null?null:v(w.Body2,p(l({part:"subtitle"},e),{children:r}))};g.Title=o=>{var t=o,{children:r}=t,e=c(t,["children"]);return r==null?null:v(w.Body1,p(l({fontWeight:"bold",mb:1,part:"title"},e),{children:r}))};import{Frigade as he}from"@frigade/js";import{useContext as Pe,useState as we}from"react";function Rr(r){let[e,o]=we(null),{apiKey:t,config:n}=Pe(L);function a(){return R(this,null,function*(){let i=Object.fromEntries(Object.entries(n).filter(([m,x])=>["apiUrl","userId"].includes(m)&&x!=null)),f=yield(yield new he(t,i)).getFlow(r);o(f)})}return e===null&&a(),{flow:e,fetchFlow:a}}import{jsx as T,jsxs as Q}from"@emotion/react/jsx-runtime";function Te(o){var t=o,{flowId:r}=t,e=c(t,["flowId"]);var x;let{flow:n,fetchFlow:a}=Rr(r);if(n==null||n!=null&&n.isCompleted||n!=null&&n.isSkipped)return null;n.start();let i=n.getCurrentStep();i==null||i.start();function s(){return R(this,null,function*(){yield n.skip(),a()})}function f(){return R(this,null,function*(){yield i.complete(),a()})}let m=f;return Q(g,p(l({align:"after",anchor:i.selector,onOpenAutoFocus:b=>b.preventDefault(),onPointerDownOutside:b=>b.preventDefault()},e),{children:[T(g.Close,{onClick:s}),T(g.Media,{src:(x=i.videoUri)!=null?x:i.imageUri,type:i.videoUri?"video":"image"}),T(g.Title,{children:i.title}),T(g.Subtitle,{children:i.subtitle}),Q(S.Row,{pt:4,alignItems:"center",justifyContent:"space-between",children:[T(g.Progress,{children:`${n.getNumberOfCompletedSteps()}/${n.steps.size}`}),Q(S.Row,{gap:3,children:[T(g.Secondary,{title:i.secondaryButtonTitle,onClick:m}),T(g.Primary,{title:i.primaryButtonTitle,onClick:f})]})]})]}))}export{u as Box,O as Button,S as Flex,ce as Provider,w as Text,g as Tooltip,Te as Tour};
1
+ 'use client';
2
+ import * as y from '@radix-ui/react-dialog';
3
+ import { XMarkIcon } from '@heroicons/react/24/solid';
4
+ import * as U from 'react';
5
+ import { createContext, useState, useRef, useEffect, useContext, useCallback, useLayoutEffect } from 'react';
6
+ import { clsx } from 'clsx';
7
+ import qe from 'known-css-properties';
8
+ import it from 'dompurify';
9
+ import { jsx, jsxs } from '@emotion/react/jsx-runtime';
10
+ import { keyframes, Global, ThemeProvider } from '@emotion/react';
11
+ import { Frigade } from '@frigade/js';
12
+ import * as C from '@radix-ui/react-popover';
13
+
14
+ var _e=Object.defineProperty;var Ue=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,o)=>(typeof require<"u"?require:t)[o]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var te=(e,t)=>{for(var o in t)_e(e,o,{get:t[o],enumerable:!0});};var oe={borders:{md:"1px solid"},borderWidths:{0:"0",md:"1px"}};var re={black:"#000000",gray100:"#14161A",gray200:"#181B20",gray300:"#1F2329",gray400:"#2E343D",gray500:"#4C5766",gray600:"#5A6472",gray700:"#C5CBD3",gray800:"#E2E5E9",gray900:"#F1F2F4",white:"#ffffff",blue400:"#015AC6",blue500:"#0171F8",blue800:"#DBECFF",blue900:"#F5F9FF",green400:"#009E37",green500:"#00D149",green800:"#DBFFE8",transparent:"#FFFFFF00",inherit:"inherit",red500:"#c00000"};var ne={md:"10px",lg:"20px",round:"50%"};var l=e=>`var(--fr-colors-${e})`,ie={neutral:{background:l("white"),border:l("gray500"),foreground:l("black"),surface:l("gray700"),active:{background:l("white"),border:l("gray900"),foreground:l("black"),surface:l("gray700")},focus:{background:l("white"),border:l("gray900"),foreground:l("black"),surface:l("gray700")},hover:{background:l("white"),border:l("gray900"),foreground:l("black"),surface:l("gray700")}},primary:{background:l("blue500"),border:l("blue500"),foreground:l("white"),surface:l("blue500"),active:{background:l("blue400"),border:l("blue400"),foreground:l("white"),surface:l("blue400")},focus:{background:l("blue500"),border:l("blue500"),foreground:l("white"),surface:l("blue500")},hover:{background:l("blue400"),border:l("blue400"),foreground:l("white"),surface:l("blue400")}},secondary:{background:l("gray900"),border:l("gray900"),foreground:l("black"),surface:l("gray900"),active:{background:l("gray800"),border:l("gray800"),foreground:l("black"),surface:l("gray800")},focus:{background:l("gray900"),border:l("gray900"),foreground:l("black"),surface:l("gray900")},hover:{background:l("gray800"),border:l("gray800"),foreground:l("black"),surface:l("gray800")}}};var se={md:"0px 4px 20px rgba(0, 0, 0, 0.1)"};var Je="px",Xe=e=>typeof e=="number"?`${4*e}${Je}`:e,Ge=[-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,-.5,0,.5,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,"auto"],ae=Object.fromEntries(Ge.map(e=>[e,Xe(e)]));var le={fontFamilies:{default:"TT Interphases Pro, sans-serif"},fontSizes:{xs:"12px",sm:"14px",md:"16px",lg:"18px",xl:"20px","2xl":"24px","3xl":"30px","4xl":"36px","5xl":"48px"},fontWeights:{thin:"100",extralight:"200",light:"300",regular:"400",medium:"500",demibold:"600",bold:"700",extrabold:"800",black:"900"},letterSpacings:{md:"0.02em"},lineHeights:{xs:"18px",sm:"22px",md:"24px",lg:"26px",xl:"30px","2xl":"38px","3xl":"46px","4xl":"60px"}};var z={...oe,colors:{...re,...ie},...le,radii:ne,shadows:se,space:ae};function A(e,t="",o="."){return Object.keys(e).reduce((r,n)=>{let i=`${t.length?`${t}${o}`:""}${n}`,s=e[n];return typeof s=="object"&&s!==null&&!Array.isArray(s)?Object.assign(r,A(s,i,o)):r[i]=s,r},{})}function K(e){return A(e,"--fr","-")}function pe(e,t="--fr"){let o={};return Object.keys(e).forEach(r=>{let n=e[r];typeof n=="object"&&n!==null&&!Array.isArray(n)?o[r]=pe(n,`${t}-${r}`):o[r]=`var(${t}-${r})`;}),o}var de=K(z),c=pe(z);var Ye=new Set(["alt","size","src"]),Qe=qe.all.filter(e=>e.indexOf("-")!=0&&!Ye.has(e)).map(e=>[e.replace(/-([a-z])/g,(t,o)=>o.toUpperCase()),null]),Ze=Object.fromEntries(Qe),j=A(c.colors),et={color:j,backgroundColor:j,borderColor:j,border:c.borders,borderRadius:c.radii,borderWidth:c.borderWidths,boxShadow:c.shadows,fontFamily:c.fontFamilies,fontSize:c.fontSizes,fontWeight:c.fontWeights,gap:c.space,lineHeight:c.lineHeights,margin:c.space,marginBottom:c.space,marginLeft:c.space,marginRight:c.space,marginTop:c.space,padding:c.space,paddingBottom:c.space,paddingLeft:c.space,paddingRight:c.space,paddingTop:c.space},ce={...Ze,...et},ue={bg:["backgroundColor"],m:["margin"],mt:["marginTop"],mr:["marginRight"],mb:["marginBottom"],ml:["marginLeft"],mx:["marginLeft","marginRight"],my:["marginTop","marginBottom"],p:["padding"],pt:["paddingTop"],pr:["paddingRight"],pb:["paddingBottom"],pl:["paddingLeft"],px:["paddingLeft","paddingRight"],py:["paddingTop","paddingBottom"]},me=new Set(["active","focus","focusVisible","focusWithin","hover"]);function tt(e){return Array.isArray(e)?new Map(e.map(t=>[t,t])):typeof e=="object"&&e!==null?new Map(Object.entries(e)):["string","number"].includes(typeof e)?new Map([e,e]):new Map}var fe=new Map(Object.entries(ce).map(([e,t])=>[e,tt(t)])),ot=new Map(Object.entries(ue).map(([e,t])=>[e,new Set(t)])),rt=new Set(["height","width"]),nt=new Set(["canvas","embed","iframe","img","input","object","video"]);function ge(e){let[t,o]=e.split(":");return [t,me.has(o)?o:null]}function xe(e,t="div"){let o=Object.assign({},e),r={};function n(a){if(a==null)return r;let s=`&:${a.replace(/[A-Z]/g,p=>`-${p.toLocaleLowerCase()}`)}`;return r[s]==null&&(r[s]={}),r[s]}return Object.entries(o).forEach(([a,i])=>{let[s,p]=ge(a),d=ot.get(s);d!=null&&(d.forEach(u=>{let P=`${u}${p?":"+p:""}`;o[P]=i;}),delete o[a]);}),Object.entries(o).forEach(([a,i])=>{let[s,p]=ge(a),d=fe.get(s);if(d!=null){if(typeof i=="string"&&i.indexOf(" ")>-1){let u=i.split(" ");n(p)[s]=u.map(P=>d.get(P.toString())??P).join(" ");}else d.has(i.toString())?n(p)[s]=d.get(i.toString()):n(p)[s]=i;(typeof t!="string"||!nt.has(t)||!rt.has(s))&&delete o[a];}}),Object.keys(o).forEach(a=>{let i=a.substring(1);a.indexOf("_")===0&&fe.has(i)&&(o[i]=o[a],delete o[a]);}),{cssFromProps:r,unmatchedProps:o}}function st(){if(typeof window>"u"){let{JSDOM:e}=Ue("jsdom");return new e("<!DOCTYPE html>").window}return window}function ye(e){return e?{__html:it(st()).sanitize(e,{ALLOWED_TAGS:["b","i","a","span","div","p","pre","u","br","img","code","li","ul","table","tbody","thead","tr","td","th","h1","h2","h3","h4","video"],ALLOWED_ATTR:["style","class","target","id","href","alt","src","controls","autoplay","loop","muted"]})}:{__html:""}}function lt(e){return e&&`fr-${e}`}function be(e){return e&&(Array.isArray(e)?e.map(t=>be(t)).join(" "):lt(e))}function pt({as:e,children:t,className:o,css:r={},part:n,...a},i){let s=e??"div",{cssFromProps:p,unmatchedProps:d}=xe(a,s),u=be(n),P=o||u?clsx(o,u):void 0,E=[{boxSizing:"border-box"},p,r];return typeof t=="string"?jsx(s,{className:P,css:E,...d,ref:i,dangerouslySetInnerHTML:ye(t)}):jsx(s,{className:P,css:E,...d,ref:i,children:t})}var m=U.forwardRef(pt);var N={};te(N,{Body1:()=>xt,Body2:()=>yt,Caption:()=>ht,Display1:()=>dt,Display2:()=>ct,H1:()=>ut,H2:()=>mt,H3:()=>ft,H4:()=>gt});var w={color:"neutral.foreground",fontFamily:"default",margin:"0"},dt={...w,fontSize:"5xl",fontWeight:"bold",lineHeight:"4xl"},ct={...w,fontSize:"4xl",fontWeight:"bold",lineHeight:"3xl"},ut={...w,fontSize:"3xl",fontWeight:"bold",lineHeight:"2xl"},mt={...w,fontSize:"2xl",fontWeight:"bold",lineHeight:"xl"},ft={...w,fontSize:"xl",fontWeight:"bold",lineHeight:"lg"},gt={...w,fontSize:"lg",fontWeight:"bold",lineHeight:"md"},xt={...w,fontSize:"md",fontWeight:"regular",lineHeight:"md"},yt={...w,fontSize:"sm",fontWeight:"regular",lineHeight:"md"},ht={...w,fontSize:"xs",fontWeight:"regular",lineHeight:"sm"};function Te({as:e="span",children:t,variant:o="Body1",...r}){return jsx(m,{as:e,...N[o],...r,children:t})}var Pt=["Display1","Display2","H1","H2","H3","H4","Body1","Body2","Caption"],bt=Object.fromEntries(Pt.map(e=>{let t=["H1","H2","H3","H4"].includes(e)?e.toLowerCase():void 0,o=r=>jsx(Te,{as:t,...r,variant:e,children:r.children});return o.displayName=`Text.${e}`,[e,o]})),b=Object.assign(Te,bt);var _={};te(_,{Link:()=>Ct,Plain:()=>wt,Primary:()=>Tt,Secondary:()=>St});var I={borderWidth:"0",borderRadius:"md",padding:"2 4"},Tt={...I,backgroundColor:"primary.surface",color:"primary.foreground","backgroundColor:hover":"primary.hover.surface"},St={...I,backgroundColor:"secondary.surface",color:"secondary.foreground","backgroundColor:hover":"secondary.hover.surface"},Ct={...I,backgroundColor:"transparent",color:"primary.surface","color:hover":"primary.hover.surface"},wt={...I,backgroundColor:"transparent",color:"neutral.foreground"};function Ce({as:e,children:t,part:o,title:r,variant:n="Primary",...a}){let i=n.toLocaleLowerCase();return jsxs(m,{as:e??"button",part:[`button-${i}`,o],..._[n],...a,children:[t,r&&jsx(b.Body2,{fontWeight:"demibold",color:"inherit",children:r})]})}var Bt=["Primary","Secondary","Link","Plain"],Rt=Object.fromEntries(Bt.map(e=>{let t=o=>jsx(Ce,{...o,variant:e,children:o.children});return t.displayName=`Text.${e}`,[e,t]})),T=Object.assign(Ce,Rt);var Ft=U.forwardRef(({children:e,css:t,...o},r)=>jsx(m,{css:[{display:"flex",flexDirection:"row"},t],...o,ref:r,children:e})),kt=U.forwardRef(({children:e,css:t,...o},r)=>jsx(m,{css:[{display:"flex",flexDirection:"column"},t],...o,ref:r,children:e})),S={Column:kt,Row:Ft};var v=U.forwardRef(({as:e,children:t,...o},r)=>{let n=e??S.Column;return jsx(n,{backgroundColor:"neutral.background",borderRadius:"md",p:5,...o,ref:r,children:t})});function ve({part:e,src:t,...o}){return jsx(m,{as:"img",part:["image",e],src:t,...o})}function Ht(e){var t,o,r;if(e.includes("youtube"))return `https://www.youtube.com/embed/${(t=e.split("v=")[1])==null?void 0:t.split("&")[0]}`;if(e.includes("vimeo"))return `https://player.vimeo.com/video/${(o=e.split("vimeo.com/")[1])==null?void 0:o.split("&")[0]}`;if(e.includes("wistia"))return `https://fast.wistia.net/embed/iframe/${(r=e.split("wistia.com/medias/")[1])==null?void 0:r.split("&")[0]}`;throw new Error("Could not map videoUri to a known provider (Youtube, Vimeo, Wistia).")}function Fe({part:e,src:t,...o}){let r=Ht(t);return jsx(m,{allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowFullScreen:!0,as:"iframe",backgroundColor:"gray100",borderWidth:0,part:["video",e],src:r,...o})}function $({src:e,type:t,...o}){return jsx(t==="video"?Fe:ve,{src:e,...o})}function x({children:e,...t}){return jsx(y.Root,{defaultOpen:!0,modal:!0,children:jsxs(y.Portal,{children:[jsx(y.Overlay,{style:{background:"rgb(0 0 0 / 0.5)",position:"fixed",inset:0}}),jsx(y.Content,{asChild:!0,onOpenAutoFocus:o=>o.preventDefault(),onPointerDownOutside:o=>o.preventDefault(),children:jsx(v,{boxShadow:"md",css:{left:"50%",maxWidth:430,top:"50%",transform:"translate(-50%, -50%)"},p:8,position:"fixed",textAlign:"center",...t,children:e})})]})})}x.Close=e=>jsx(y.Close,{"aria-label":"Close",asChild:!0,children:jsx(T.Plain,{css:{top:"4px",right:"-4px"},part:"close",position:"absolute",...e,children:jsx(XMarkIcon,{height:"24",fill:"currentColor"})})});x.Subtitle=({children:e,...t})=>jsx(y.Description,{asChild:!0,children:jsx(b.Body2,{part:"subtitle",mb:5,...t,children:e})});x.Media=({src:e,...t})=>e==null?null:jsx($,{borderRadius:"md",src:e,...t});x.Primary=({onClick:e,title:t,...o})=>t==null?null:jsx(T.Primary,{title:t,onClick:e,...o});x.ProgressDots=({current:e,total:t})=>{let o=[...Array(t)].map((r,n)=>jsx("circle",{r:4,cx:4+16*n,cy:"4px",fill:e===n?c.colors.blue500:c.colors.blue800},n));return jsx(m,{as:"svg",width:16*t-8,height:"8px",viewBox:`0 0 ${16*t-8} 8`,margin:"5 auto",children:o})};x.Secondary=({onClick:e,title:t,...o})=>t==null?null:jsx(T.Secondary,{title:t,onClick:e,...o});x.Title=({children:e,...t})=>jsx(y.Title,{asChild:!0,children:jsx(b.H3,{mb:1,part:"title",...t,children:e})});var B=createContext({apiKey:"",modals:[],setModals:()=>{},navigate:()=>{}});function Nt({children:e,navigate:t,theme:o,...r}){let n=o?K(o):{},[a,i]=useState([]),s=useRef(new Frigade(r.apiKey,{apiKey:r.apiKey,apiUrl:r.apiUrl,userId:r.userId,groupId:r.groupId})),p=t??((d,u="_self")=>{window.open(d,u);});return useEffect(()=>()=>{var d;(d=s.current)==null||d.destroy();},[]),jsxs(B.Provider,{value:{modals:a,setModals:i,navigate:p,...r,frigade:s.current},children:[jsx(Global,{styles:{":root":{...de,...n}}}),jsx(ThemeProvider,{theme:c,children:e})]})}function F(e,t){let[o,r]=useState(),[n,a]=useState(""),{frigade:i}=useContext(B),s=p=>{p.id===e&&(t!=null&&t.variables&&p.applyVariables(t.variables),r(p),a(Math.random().toString()));};return useEffect(()=>((async()=>{let p=await i.getFlow(e);if(!p||i.hasFailedToLoad()){r(void 0);return}t!=null&&t.variables&&p.applyVariables(t.variables),r(p);})(),i.onStateChange(s),()=>{i.removeStateChangeHandler(s);}),[]),{flow:o}}function R(e,{onComplete:t,onDismiss:o}={}){let r=useRef(null);return useEffect(()=>{e!=null&&(e.isCompleted&&r.current===!1&&(async()=>await(t==null?void 0:t(e)))(),r.current=e==null?void 0:e.isCompleted);},[e==null?void 0:e.isCompleted]),{handleDismiss:useCallback(async n=>{if(await(o==null?void 0:o(e,n))===!1)return n.preventDefault(),!1;await e.skip();},[e])}}function k(e,{onPrimary:t,onSecondary:o}={}){let{navigate:r}=useContext(B);return {handlePrimary:useCallback(async n=>{if(await(t==null?void 0:t(e,n))===!1)return n.preventDefault(),!1;await e.complete(),e.primaryButtonUri!=null&&r(e.primaryButtonUri,e.primaryButtonUriTarget);},[e]),handleSecondary:useCallback(async n=>{if(await(o==null?void 0:o(e,n))===!1)return n.preventDefault(),!1;await e.complete(),e.secondaryButtonUri!=null&&r(e.secondaryButtonUri,e.secondaryButtonUriTarget);},[e])}}function Qt({flowId:e,onComplete:t,onDismiss:o,onPrimary:r,onSecondary:n,variables:a}){let{flow:i}=F(e,{variables:a}),s=i==null?void 0:i.getCurrentStep(),{handleDismiss:p}=R(i,{onComplete:t,onDismiss:o}),{handlePrimary:d,handleSecondary:u}=k(s,{onPrimary:r,onSecondary:n});return i==null||i.isVisible===!1?null:(i.start(),s==null||s.start(),jsxs(x,{children:[jsx(x.Close,{onClick:p}),jsx(x.Title,{children:s.title}),jsx(x.Subtitle,{children:s.subtitle}),jsx(x.Media,{src:s.imageUri,css:{aspectRatio:"1.5",objectFit:"cover",width:"100%"}}),jsx(x.ProgressDots,{current:i.getNumberOfCompletedSteps(),total:i.getNumberOfAvailableSteps()}),jsxs(S.Row,{css:{"& > button":{flexGrow:1}},gap:3,children:[jsx(x.Secondary,{title:"Secondary",onClick:u}),jsx(x.Primary,{title:"Primary",onClick:d})]})]}))}function eo({flowId:e,onComplete:t,onDismiss:o,onPrimary:r,onSecondary:n,...a}){let{flow:i}=F(e),s=i==null?void 0:i.getCurrentStep(),{handleDismiss:p}=R(i,{onComplete:t,onDismiss:o}),{handlePrimary:d,handleSecondary:u}=k(s,{onPrimary:r,onSecondary:n});return i==null||i.isVisible===!1?null:(i.start(),s==null||s.start(),jsxs(v,{as:S.Row,border:"md",borderColor:"gray900",justifyContent:"space-between",...a,children:[jsxs(S.Row,{gap:3,children:[jsx("img",{src:s.imageUri,style:{height:40,width:40,alignSelf:"center"}}),jsxs(S.Column,{children:[jsx(b.H4,{mb:1,children:s.title}),jsx(b.Body2,{children:s.subtitle})]})]}),jsxs(S.Row,{alignItems:"center",gap:3,children:[jsx(T.Secondary,{title:s.secondaryButtonTitle,onClick:u}),jsx(T.Primary,{title:s.primaryButtonTitle,onClick:d}),jsx(T.Plain,{part:"banner-close",onClick:p,children:jsx(XMarkIcon,{height:"24",fill:"currentColor"})})]})]}))}function J(){let e="DOMRect"in globalThis?new DOMRect:{height:0,width:0,x:0,y:0,bottom:0,top:0,right:0,left:0,toJSON:()=>{}},[t,o]=useState(e),[r,n]=useState(null),a=useCallback(i=>{n(i);},[]);return useLayoutEffect(()=>{r&&o(r.getBoundingClientRect());},[r]),{node:r,rect:t,ref:a}}var no=keyframes({"0%":{opacity:.5,transform:"scale(0.5)"},"50%":{opacity:0,transform:"scale(1)"},"100%":{opacity:0,transform:"scale(1)"}});function Ae({style:e={},part:t="",...o}){return jsxs(m,{part:`dot-wrapper ${t}`,style:{height:"48px",position:"absolute",width:"48px",...e},...o,children:[jsx(m,{backgroundColor:"primary.surface",part:"dot-pulse",css:{animation:`2s ease-out infinite ${no}`,borderRadius:"24px",height:"48px",left:0,position:"absolute",top:0,transformOrigin:"center center",width:"48px"}}),jsx(m,{backgroundColor:"primary.surface",part:"dot",style:{borderRadius:"12px",height:"24px",left:"12px",position:"absolute",top:"12px",width:"24px"}})]})}function $e({props:e,alignAttr:t,sideAttr:o}){let r=o??"bottom",n={},a=()=>{if(["after","before"].includes(e.align)){if(t=="start")return "before";if(t=="end")return "after"}return e.align??"after"},i="-24px",s={top:"bottom",right:"left",bottom:"top",left:"right"};n[s[r]]=i;let p=a();return ["before","end"].includes(p)?["top","bottom"].includes(r)?n.right=i:n.bottom=i:["after","start"].includes(p)?["top","bottom"].includes(r)?n.left=i:n.top=i:["top","bottom"].includes(r)?n.left=`calc(50% + ${i})`:n.top=`calc(50% + ${i})`,n}var We={content:["align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPadding","forceMount","hideWhenDetached","onCloseAutoFocus","onEscapeKeyDown","onFocusOutside","onInteractOutside","onOpenAutoFocus","onPointerDownOutside","side","sideOffset","sticky"],root:["defaultOpen","modal","onOpenChange","open"]};function Ve(e,t){let o=Object.fromEntries(We.content.map(n=>[n,e[n]]).filter(n=>n[1]!==void 0)),r=Object.fromEntries(We.root.map(n=>[n,e[n]]).filter(n=>n[1]!==void 0));if(o.align=o.align??"after",o.side=o.side??"bottom",["before","after"].includes(o.align)){let n={after:"end",before:"start"},a=(P,E)=>["top","bottom"].includes(E)?P=="after"?"marginLeft":"marginRight":P=="after"?"marginTop":"marginBottom",i=o.alignOffset??0,s=o.style??{},p=o.side??"bottom",d=o.align;o.style={...s,[a(d,p)]:i};let u=["top","bottom"].includes(p)?t.width:t.height;o.alignOffset=(u+i)*-1,o.align=n[d];}return {contentProps:o,rootProps:r}}function f({anchor:e,children:t,className:o,spotlight:r=!1,style:n,...a}){let{node:i,rect:s,ref:p}=J(),{contentProps:d,rootProps:u}=Ve(a,s),[P,E]=useState(d.align),[Y,Ke]=useState(d.side);if(i!==null){let M=i.getAttribute("data-align"),ee=i.getAttribute("data-side");P!==M&&E(M),Y!==ee&&Ke(ee);}let Q=useRef(null),[W,je]=useState(null);if(useEffect(()=>{let M=document.querySelector(e);M!=null&&(Q.current=M,je(Q));},[e]),W==null)return null;let V=W.current.getBoundingClientRect(),Z="0";typeof window<"u"&&(Z=window.getComputedStyle(W.current).borderRadius);let Ne=$e({props:a,alignAttr:P,sideAttr:Y});return jsxs(C.Root,{defaultOpen:!0,...u,children:[jsx(C.Anchor,{virtualRef:W}),jsx(C.Portal,{children:jsxs("div",{className:o,css:{bottom:0,left:0,position:"absolute",right:0,top:0,zIndex:9999},children:[r&&jsx(m,{part:"tooltip-spotlight",position:"absolute",css:{borderRadius:Z,boxShadow:"0 0 0 2000px rgb(0 0 0 / 0.5)",height:V.height,left:V.left,top:V.top,width:V.width}}),jsx(C.Content,{asChild:!0,...d,ref:p,children:jsxs(v,{boxShadow:"md",part:"tooltip-content",position:"relative",css:{maxWidth:"360px",...n},children:[jsx(Ae,{style:Ne}),t]})})]})})]})}f.Close=e=>jsx(C.Close,{"aria-label":"Close",asChild:!0,children:jsx(T.Plain,{css:{top:"12px",right:"4px"},part:"close",position:"absolute",...e,children:jsx(XMarkIcon,{height:"24",fill:"currentColor"})})});f.Media=({src:e,...t})=>e==null?null:jsx($,{borderRadius:"md md 0 0",borderWidth:"0",css:{aspectRatio:"2"},margin:"-5 -5 5",src:e,...t});f.Primary=({onClick:e,title:t,...o})=>t==null?null:jsx(T.Primary,{title:t,onClick:e,...o});f.Progress=({children:e,...t})=>e==null?null:jsx(b.Body2,{fontWeight:"demibold",part:"progress",...t,children:e});f.Secondary=({onClick:e,title:t,...o})=>t==null?null:jsx(T.Secondary,{title:t,onClick:e,...o});f.Subtitle=({children:e,...t})=>e==null?null:jsx(b.Body2,{part:"subtitle",...t,children:e});f.Title=({children:e,...t})=>e==null?null:jsx(b.Body1,{fontWeight:"bold",mb:1,part:"title",...t,children:e});function q(e){let{modals:t,setModals:o}=useContext(B),[r,n]=useState(!1);return useEffect(()=>(o([...t,e]),()=>o(t.filter(a=>a!==e))),[]),useEffect(()=>{let a=t[0]===e;a!==r&&n(a);},[t]),{isCurrentModal:r}}function ze({step:e,flow:t,onDismiss:o,onPrimary:r,onSecondary:n,...a}){let{isCurrentModal:i}=q(`${t.id}-${e.id}`),{handleDismiss:s}=R(t,{onDismiss:o}),{handlePrimary:p,handleSecondary:d}=k(e,{onPrimary:r,onSecondary:n});return i?jsxs(f,{anchor:e.selector,onOpenAutoFocus:u=>u.preventDefault(),onPointerDownOutside:u=>u.preventDefault(),...a,children:[jsx(f.Close,{onClick:s}),jsx(f.Media,{src:e.videoUri??e.imageUri,type:e.videoUri?"video":"image"}),jsx(f.Title,{children:e.title}),jsx(f.Subtitle,{children:e.subtitle}),jsxs(S.Row,{alignItems:"center",gap:3,justifyContent:"flex-end",part:"tooltip-footer",pt:4,children:[jsx(f.Progress,{children:`${t.getNumberOfCompletedSteps()+1}/${t.getNumberOfAvailableSteps()}`}),jsx(f.Secondary,{marginLeft:"auto",title:e.secondaryButtonTitle,onClick:d}),jsx(f.Primary,{title:e.primaryButtonTitle,onClick:p})]})]},e.id):null}function uo({flowId:e,onComplete:t,variables:o,...r}){let{flow:n}=F(e,{variables:o});if(R(n,{onComplete:t}),n==null||n.isVisible===!1)return null;n.start();let a=n.getCurrentStep();return a==null||a.start(),jsx(ze,{step:a,flow:n,...r})}function go(){let{frigade:e}=useContext(B);return {frigade:e}}
15
+
16
+ export { Qt as Announcement, eo as Banner, m as Box, T as Button, v as Card, S as Flex, Nt as Provider, b as Text, f as Tooltip, uo as Tour, J as useBoundingClientRect, F as useFlow, R as useFlowHandlers, go as useFrigade, q as useModal, k as useStepHandlers };
17
+ //# sourceMappingURL=out.js.map
3
18
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Box/index.tsx","../src/shared/theme/themeContract.css.ts","../src/shared/flattenObject.ts","../src/components/Box/styleProps.ts","../src/components/Box/stylePropsToCss.ts","../src/components/Text/Text.styles.ts","../src/components/Text/index.tsx","../src/components/Button/Button.styles.ts","../src/components/Button/index.tsx","../src/components/Flex/Flex.tsx","../src/components/Provider/index.tsx","../../../node_modules/@vanilla-extract/private/dist/vanilla-extract-private.esm.js","../../../node_modules/@vanilla-extract/dynamic/dist/vanilla-extract-dynamic.esm.js","../src/hooks/useThemeOverrides.ts","../src/shared/mapThemePropToThemeVars.ts","../src/components/Tooltip/index.tsx","../src/hooks/useBoundingClientRect.ts","../src/components/Tooltip/Dot.css.ts","../src/components/Tooltip/Dot.tsx","../src/components/Media/Image.tsx","../src/components/Media/Video.tsx","../src/components/Media/Media.tsx","../src/components/Tooltip/getDotPosition.ts","../src/components/Tooltip/mapTooltipPropsToPopoverProps.ts","../src/hooks/useFlow.ts","../src/components/Tour/index.tsx"],"sourcesContent":["import * as React from 'react'\nimport { clsx } from 'clsx'\n\nimport '../../shared/theme/baseTheme.css'\nimport { stylePropsToCss } from './stylePropsToCss'\n\nfunction prefixPart(part: string | undefined) {\n return part ? `fr-${part}` : part\n}\n\nfunction processPart(part: string | string[] | undefined) {\n if (!part) return part\n\n return Array.isArray(part) ? part.map((p) => prefixPart(p)).join(' ') : prefixPart(part)\n}\n\nexport type BoxProps<T extends React.ElementType = React.ElementType> = {\n as?: T\n part?: string | string[]\n} & React.ComponentPropsWithRef<T>\n\nfunction BoxWithRef<T extends React.ElementType = React.ElementType>(\n { as, children, className, css, part, ...props }: BoxProps<T>,\n ref: React.ForwardedRef<T>\n) {\n const Component = as ?? 'div'\n\n const { cssFromProps, unmatchedProps } = stylePropsToCss(props)\n\n const processedPart = processPart(part)\n const classNameWithPart = className || processedPart ? clsx(className, processedPart) : undefined\n\n return (\n // @ts-ignore: TODO: ref types are yet again complaining\n <Component\n className={classNameWithPart}\n css={[{ boxSizing: 'border-box', ...cssFromProps, ...css }]}\n {...unmatchedProps}\n ref={ref}\n >\n {children}\n </Component>\n )\n}\n\nexport const Box = React.forwardRef(BoxWithRef)\n","export var theme = {borders:{md:'var(--fr-borders-md)'},borderWidths:{'0':'var(--fr-borderWidths-0)',md:'var(--fr-borderWidths-md)'},colors:{black:'var(--fr-colors-black)',gray100:'var(--fr-colors-gray100)',gray200:'var(--fr-colors-gray200)',gray300:'var(--fr-colors-gray300)',gray400:'var(--fr-colors-gray400)',gray500:'var(--fr-colors-gray500)',gray600:'var(--fr-colors-gray600)',gray700:'var(--fr-colors-gray700)',gray800:'var(--fr-colors-gray800)',gray900:'var(--fr-colors-gray900)',white:'var(--fr-colors-white)',blue400:'var(--fr-colors-blue400)',blue500:'var(--fr-colors-blue500)',blue800:'var(--fr-colors-blue800)',blue900:'var(--fr-colors-blue900)',green400:'var(--fr-colors-green400)',green500:'var(--fr-colors-green500)',green800:'var(--fr-colors-green800)',transparent:'var(--fr-colors-transparent)',red500:'var(--fr-colors-red500)',neutral:{background:'var(--fr-colors-neutral-background)',border:'var(--fr-colors-neutral-border)',foreground:'var(--fr-colors-neutral-foreground)',surface:'var(--fr-colors-neutral-surface)',active:{background:'var(--fr-colors-neutral-active-background)',border:'var(--fr-colors-neutral-active-border)',foreground:'var(--fr-colors-neutral-active-foreground)',surface:'var(--fr-colors-neutral-active-surface)'},focus:{background:'var(--fr-colors-neutral-focus-background)',border:'var(--fr-colors-neutral-focus-border)',foreground:'var(--fr-colors-neutral-focus-foreground)',surface:'var(--fr-colors-neutral-focus-surface)'},hover:{background:'var(--fr-colors-neutral-hover-background)',border:'var(--fr-colors-neutral-hover-border)',foreground:'var(--fr-colors-neutral-hover-foreground)',surface:'var(--fr-colors-neutral-hover-surface)'}},primary:{background:'var(--fr-colors-primary-background)',border:'var(--fr-colors-primary-border)',foreground:'var(--fr-colors-primary-foreground)',surface:'var(--fr-colors-primary-surface)',active:{background:'var(--fr-colors-primary-active-background)',border:'var(--fr-colors-primary-active-border)',foreground:'var(--fr-colors-primary-active-foreground)',surface:'var(--fr-colors-primary-active-surface)'},focus:{background:'var(--fr-colors-primary-focus-background)',border:'var(--fr-colors-primary-focus-border)',foreground:'var(--fr-colors-primary-focus-foreground)',surface:'var(--fr-colors-primary-focus-surface)'},hover:{background:'var(--fr-colors-primary-hover-background)',border:'var(--fr-colors-primary-hover-border)',foreground:'var(--fr-colors-primary-hover-foreground)',surface:'var(--fr-colors-primary-hover-surface)'}},secondary:{background:'var(--fr-colors-secondary-background)',border:'var(--fr-colors-secondary-border)',foreground:'var(--fr-colors-secondary-foreground)',surface:'var(--fr-colors-secondary-surface)',active:{background:'var(--fr-colors-secondary-active-background)',border:'var(--fr-colors-secondary-active-border)',foreground:'var(--fr-colors-secondary-active-foreground)',surface:'var(--fr-colors-secondary-active-surface)'},focus:{background:'var(--fr-colors-secondary-focus-background)',border:'var(--fr-colors-secondary-focus-border)',foreground:'var(--fr-colors-secondary-focus-foreground)',surface:'var(--fr-colors-secondary-focus-surface)'},hover:{background:'var(--fr-colors-secondary-hover-background)',border:'var(--fr-colors-secondary-hover-border)',foreground:'var(--fr-colors-secondary-hover-foreground)',surface:'var(--fr-colors-secondary-hover-surface)'}}},fontFamilies:{'default':'var(--fr-fontFamilies-default)'},fontSizes:{xs:'var(--fr-fontSizes-xs)',sm:'var(--fr-fontSizes-sm)',md:'var(--fr-fontSizes-md)',lg:'var(--fr-fontSizes-lg)',xl:'var(--fr-fontSizes-xl)','2xl':'var(--fr-fontSizes-2xl)','3xl':'var(--fr-fontSizes-3xl)','4xl':'var(--fr-fontSizes-4xl)','5xl':'var(--fr-fontSizes-5xl)'},fontWeights:{regular:'var(--fr-fontWeights-regular)',demibold:'var(--fr-fontWeights-demibold)',bold:'var(--fr-fontWeights-bold)'},letterSpacings:{md:'var(--fr-letterSpacings-md)'},lineHeights:{xs:'var(--fr-lineHeights-xs)',sm:'var(--fr-lineHeights-sm)',md:'var(--fr-lineHeights-md)',lg:'var(--fr-lineHeights-lg)',xl:'var(--fr-lineHeights-xl)','2xl':'var(--fr-lineHeights-2xl)','3xl':'var(--fr-lineHeights-3xl)','4xl':'var(--fr-lineHeights-4xl)'},radii:{md:'var(--fr-radii-md)',lg:'var(--fr-radii-lg)',round:'var(--fr-radii-round)'},shadows:{md:'var(--fr-shadows-md)'},space:{'0':'var(--fr-space-0)','1':'var(--fr-space-1)','2':'var(--fr-space-2)','3':'var(--fr-space-3)','4':'var(--fr-space-4)','5':'var(--fr-space-5)','6':'var(--fr-space-6)','7':'var(--fr-space-7)','8':'var(--fr-space-8)','9':'var(--fr-space-9)','10':'var(--fr-space-10)','11':'var(--fr-space-11)','12':'var(--fr-space-12)','13':'var(--fr-space-13)','14':'var(--fr-space-14)','15':'var(--fr-space-15)','16':'var(--fr-space-16)','17':'var(--fr-space-17)','18':'var(--fr-space-18)','19':'var(--fr-space-19)','20':'var(--fr-space-20)','-20':'var(--fr-space--20)','-19':'var(--fr-space--19)','-18':'var(--fr-space--18)','-17':'var(--fr-space--17)','-16':'var(--fr-space--16)','-15':'var(--fr-space--15)','-14':'var(--fr-space--14)','-13':'var(--fr-space--13)','-12':'var(--fr-space--12)','-11':'var(--fr-space--11)','-10':'var(--fr-space--10)','-9':'var(--fr-space--9)','-8':'var(--fr-space--8)','-7':'var(--fr-space--7)','-6':'var(--fr-space--6)','-5':'var(--fr-space--5)','-4':'var(--fr-space--4)','-3':'var(--fr-space--3)','-2':'var(--fr-space--2)','-1':'var(--fr-space--1)','-0.5':'var(--fr-space--0-5)','0.5':'var(--fr-space-0-5)',auto:'var(--fr-space-auto)'}};","export function flattenObject(obj: Record<any, any>, path = '', separator = '.') {\n return Object.keys(obj).reduce((acc, k) => {\n const prefix = path.length ? `${path}${separator}` : ''\n const currentPath = `${prefix}${k}`\n const currentValue = obj[k]\n\n if (typeof currentValue === 'object' && currentValue !== null && !Array.isArray(currentValue)) {\n Object.assign(acc, flattenObject(currentValue, currentPath, separator))\n } else {\n acc[currentPath] = currentValue\n }\n\n return acc\n }, {})\n}\n","import { theme } from '../../shared/theme/themeContract.css'\nimport { flattenObject } from '../../shared/flattenObject'\n\nconst colorTokens: Record<string, unknown> = flattenObject(theme.colors)\n\n/*\n TODO:\n - top / right / bottom / left\n*/\n\nexport const styleProps = {\n color: colorTokens,\n backgroundColor: colorTokens,\n borderColor: colorTokens,\n border: theme.borders,\n borderRadius: theme.radii,\n borderWidth: theme.borderWidths,\n\n fontFamily: theme.fontFamilies,\n fontSize: theme.fontSizes,\n fontWeight: theme.fontWeights,\n\n gap: theme.space,\n\n lineHeight: theme.lineHeights,\n\n margin: theme.space,\n marginTop: theme.space,\n marginRight: theme.space,\n marginBottom: theme.space,\n marginLeft: theme.space,\n\n padding: theme.space,\n paddingTop: theme.space,\n paddingRight: theme.space,\n paddingBottom: theme.space,\n paddingLeft: theme.space,\n\n alignContent: [\n 'center',\n 'start',\n 'end',\n 'flex-start',\n 'flex-end',\n 'normal',\n 'baseline',\n 'first baseline',\n 'last baseline',\n 'space-between',\n 'space-around',\n 'space-evenly',\n 'stretch',\n 'safe center',\n 'unsafe center',\n 'inherit',\n 'initial',\n 'revert',\n 'revert-layer',\n 'unset',\n ],\n\n alignItems: [\n 'normal',\n 'stretch',\n 'center',\n 'start',\n 'end',\n 'flex-start',\n 'flex-end',\n 'self-start',\n 'self-end',\n 'baseline',\n 'first baseline',\n 'last baseline',\n 'safe center',\n 'unsafe center',\n 'inherit',\n 'initial',\n 'revert',\n 'revert-layer',\n 'unset',\n ],\n\n alignSelf: [\n 'auto',\n 'normal',\n 'center',\n 'start',\n 'end',\n 'self-start',\n 'self-end',\n 'flex-start',\n 'flex-end',\n 'baseline',\n 'first baseline',\n 'last baseline',\n 'stretch',\n 'safe center',\n 'unsafe center',\n 'inherit',\n 'initial',\n 'revert',\n 'revert-layer',\n 'unset',\n ],\n\n flexDirection: [\n 'row',\n 'row-reverse',\n 'column',\n 'column-reverse',\n 'inherit',\n 'initial',\n 'revert',\n 'revert-layer',\n 'unset',\n ],\n\n flexWrap: [\n 'nowrap',\n 'wrap',\n 'wrap-reverse',\n 'inherit',\n 'initial',\n 'revert',\n 'revert-layer',\n 'unset',\n ],\n\n justifyContent: [\n 'center',\n 'start',\n 'end',\n 'flex-start',\n 'flex-end',\n 'left',\n 'right',\n 'normal',\n 'space-between',\n 'space-around',\n 'space-evenly',\n 'stretch',\n 'safe center',\n 'unsafe center',\n 'inherit',\n 'initial',\n 'revert',\n 'revert-layer',\n 'unset',\n ],\n\n justifyItems: [\n 'normal',\n 'stretch',\n 'center',\n 'start',\n 'end',\n 'flex-start',\n 'flex-end',\n 'self-start',\n 'self-end',\n 'left',\n 'right',\n 'baseline',\n 'first baseline',\n 'last baseline',\n 'safe center',\n 'unsafe center',\n 'legacy right',\n 'legacy left',\n 'legacy center',\n 'inherit',\n 'initial',\n 'revert',\n 'revert-layer',\n 'unset',\n ],\n\n boxSizing: ['border-box', 'content-box', 'inherit', 'initial', 'revert', 'revert-layer', 'unset'],\n\n position: [\n 'static',\n 'relative',\n 'absolute',\n 'fixed',\n 'sticky',\n 'inherit',\n 'initial',\n 'revert',\n 'revert-layer',\n 'unset',\n ],\n\n display: [\n 'block',\n 'block flex',\n 'block flow',\n 'block flow-root',\n 'block grid',\n 'contents',\n 'flex',\n 'flow-root',\n 'grid',\n 'inherit',\n 'initial',\n 'inline',\n 'inline flex',\n 'inline flow',\n 'inline flow-root',\n 'inline grid',\n 'inline-block',\n 'inline-flex',\n 'inline-grid',\n 'list-item',\n 'none',\n 'revert',\n 'revert-layer',\n 'table',\n 'table-row-group',\n 'table-header-group',\n 'table-footer-group',\n 'table-row',\n 'table-cell',\n 'table-column-group',\n 'table-column',\n 'table-caption',\n 'unset',\n ],\n}\n\nexport const stylePropShorthands = {\n m: ['margin'],\n mt: ['marginTop'],\n mr: ['marginRight'],\n mb: ['marginBottom'],\n ml: ['marginLeft'],\n mx: ['marginLeft', 'marginRight'],\n my: ['marginTop', 'marginBottom'],\n\n p: ['padding'],\n pt: ['paddingTop'],\n pr: ['paddingRight'],\n pb: ['paddingBottom'],\n pl: ['paddingLeft'],\n px: ['paddingLeft', 'paddingRight'],\n py: ['paddingTop', 'paddingBottom'],\n}\n","import { styleProps, stylePropShorthands } from './styleProps'\n\nfunction prepValue(value) {\n if (Array.isArray(value)) {\n return new Map(value.map((v) => [v, v]))\n } else if (typeof value === 'object' && value !== null) {\n return new Map(Object.entries(value))\n } else if (['string', 'number'].includes(typeof value)) {\n return new Map([value, value])\n }\n\n throw new Error('Invalid entry in styleProps')\n}\n\nconst stylePropsMap = new Map(\n Object.entries(styleProps).map(([propName, value]) => {\n return [propName, prepValue(value)]\n })\n)\n\nconst stylePropShorthandsMap = new Map(\n Object.entries(stylePropShorthands).map(([shorthand, targetProps]) => {\n return [shorthand, new Set(targetProps)]\n })\n)\n\nexport function stylePropsToCss(props: Record<any, any>) {\n const unmatchedProps = Object.assign({}, props)\n const cssFromProps = {}\n\n // Convert shorthand styleProps to full versions\n Object.entries(unmatchedProps).forEach(([propName, propValue]) => {\n const matchedShorthand = stylePropShorthandsMap.get(propName)\n if (matchedShorthand != null) {\n matchedShorthand.forEach((propName) => {\n unmatchedProps[propName] = propValue\n })\n\n delete unmatchedProps[propName]\n }\n })\n\n // Convert styleProps to style object\n Object.entries(unmatchedProps).forEach(([propName, propValue]) => {\n const styleProp = stylePropsMap.get(propName)\n if (styleProp != null) {\n if (typeof propValue === 'string' && propValue.indexOf(' ') > -1) {\n // Split space-separated values out and process them individually\n const splitPropValues = propValue.split(' ')\n\n cssFromProps[propName] = splitPropValues\n .map((v) => styleProp.get(v.toString()) ?? v)\n .join(' ')\n\n delete unmatchedProps[propName]\n } else if (styleProp.has(propValue.toString())) {\n cssFromProps[propName] = styleProp.get(propValue.toString())\n delete unmatchedProps[propName]\n }\n }\n })\n\n return { cssFromProps, unmatchedProps }\n}\n","export const base = ({ fontFamilies }) => ({\n fontFamily: fontFamilies.default,\n margin: 0,\n})\n\nexport const Display1 = ({ fontSizes, fontWeights, lineHeights }) => [\n base,\n {\n fontSize: fontSizes['5xl'],\n fontWeight: fontWeights.bold,\n lineHeight: lineHeights['4xl'],\n },\n]\n\nexport const Display2 = ({ fontSizes, fontWeights, lineHeights }) => [\n base,\n {\n fontSize: fontSizes['4xl'],\n fontWeight: fontWeights.bold,\n lineHeight: lineHeights['3xl'],\n },\n]\n\nexport const H1 = ({ fontSizes, fontWeights, lineHeights }) => [\n base,\n {\n fontSize: fontSizes['3xl'],\n fontWeight: fontWeights.bold,\n lineHeight: lineHeights['2xl'],\n },\n]\n\nexport const H2 = ({ fontSizes, fontWeights, lineHeights }) => [\n base,\n {\n fontSize: fontSizes['2xl'],\n fontWeight: fontWeights.bold,\n lineHeight: lineHeights.xl,\n },\n]\n\nexport const H3 = ({ fontSizes, fontWeights, lineHeights }) => [\n base,\n {\n fontSize: fontSizes.xl,\n fontWeight: fontWeights.bold,\n lineHeight: lineHeights.lg,\n },\n]\n\nexport const H4 = ({ fontSizes, fontWeights, lineHeights }) => [\n base,\n {\n fontSize: fontSizes.lg,\n fontWeight: fontWeights.bold,\n lineHeight: lineHeights.md,\n },\n]\n\nexport const Body1 = ({ fontSizes, fontWeights, lineHeights }) => [\n base,\n {\n fontSize: fontSizes.md,\n fontWeight: fontWeights.regular,\n lineHeight: lineHeights.md,\n },\n]\n\nexport const Body2 = ({ fontSizes, fontWeights, lineHeights }) => [\n base,\n {\n fontSize: fontSizes.sm,\n fontWeight: fontWeights.regular,\n lineHeight: lineHeights.md,\n },\n]\n\nexport const Caption = ({ fontSizes, fontWeights, lineHeights }) => [\n base,\n {\n fontSize: fontSizes.xs,\n fontWeight: fontWeights.regular,\n lineHeight: lineHeights.sm,\n },\n]\n","import { Box, BoxProps } from '../Box'\n\nimport * as styles from './Text.styles'\n\ntype TextVariant =\n | 'Display1'\n | 'Display2'\n | 'H1'\n | 'H2'\n | 'H3'\n | 'H4'\n | 'Body1'\n | 'Body2'\n | 'Caption'\n\nexport interface TextProps extends BoxProps {\n variant?: TextVariant\n}\n\nfunction BaseText({ as = 'span', children, css, variant = 'Body1', ...props }: TextProps) {\n return (\n <Box as={as} css={[styles[variant], css]} {...props}>\n {children}\n </Box>\n )\n}\n\nconst textVariantNames: TextVariant[] = [\n 'Display1',\n 'Display2',\n 'H1',\n 'H2',\n 'H3',\n 'H4',\n 'Body1',\n 'Body2',\n 'Caption',\n]\n\nconst textVariantComponents = Object.fromEntries(\n textVariantNames.map((variant) => {\n const asProp = ['H1', 'H2', 'H3', 'H4'].includes(variant)\n ? (variant.toLowerCase() as 'h1' | 'h2' | 'h3' | 'h4')\n : undefined\n const component = (props: TextProps) => (\n <BaseText as={asProp} {...props} variant={variant}>\n {props.children}\n </BaseText>\n )\n\n component.displayName = `Text.${variant}`\n\n return [variant, component]\n })\n)\n\nexport const Text = Object.assign(BaseText, textVariantComponents)\n","export const base = ({ radii, space }) => ({\n borderWidth: 0,\n borderRadius: radii.md,\n padding: `${space[2]} ${space[4]}`,\n})\n\nexport const Primary = ({ colors }) => [\n base,\n {\n backgroundColor: colors.primary.surface,\n color: colors.primary.foreground,\n\n '&:hover': {\n backgroundColor: colors.primary.hover.surface,\n },\n },\n]\n\nexport const Secondary = ({ colors }) => [\n base,\n {\n backgroundColor: colors.secondary.surface,\n color: colors.secondary.foreground,\n\n '&:hover': {\n backgroundColor: colors.secondary.hover.surface,\n },\n },\n]\n\nexport const Link = ({ colors }) => [\n base,\n {\n backgroundColor: colors.transparent,\n color: colors.primary.surface,\n\n '&:hover': {\n color: colors.primary.hover.surface,\n },\n },\n]\n\nexport const Plain = ({ colors }) => [\n base,\n {\n backgroundColor: colors.transparent,\n color: colors.neutral.foreground,\n },\n]\n","import { Box, BoxProps } from '../Box'\nimport { Text } from '../Text'\n\nimport * as styles from './Button.styles'\n\n// TODO: Generate this type from buttonVariantNames\ntype ButtonVariant = 'Primary' | 'Secondary' | 'Link' | 'Plain'\n\nexport interface ButtonProps extends BoxProps {\n title?: string\n variant?: ButtonVariant\n}\n\nfunction BaseButton({ as, children, css = {}, title, variant = 'Primary', ...props }: ButtonProps) {\n return (\n <Box as={as ?? 'button'} css={[styles[variant], css]} {...props}>\n {children}\n {title && <Text.Body2 fontWeight=\"demibold\">{title}</Text.Body2>}\n </Box>\n )\n}\n\nconst buttonVariantNames: ButtonVariant[] = ['Primary', 'Secondary', 'Link', 'Plain']\n\nconst buttonVariantComponents = Object.fromEntries(\n buttonVariantNames.map((variant) => {\n const variantPart = variant.toLocaleLowerCase()\n\n const component = ({ part, ...props }: ButtonProps) => (\n <BaseButton part={[`button-${variantPart}`, part]} {...props} variant={variant}>\n {props.children}\n </BaseButton>\n )\n\n component.displayName = `Text.${variant}`\n\n return [variant, component]\n })\n)\n\nexport const Button = Object.assign(BaseButton, buttonVariantComponents)\n","import * as React from 'react'\nimport { Box, BoxProps } from '../Box'\n\nconst Row = React.forwardRef(({ children, css, ...props }: BoxProps, ref) => {\n return (\n <Box css={[{ display: 'flex', flexDirection: 'row' }, css]} {...props} ref={ref}>\n {children}\n </Box>\n )\n})\n\nconst Column = React.forwardRef(({ children, css, ...props }: BoxProps, ref) => {\n return (\n <Box css={[{ display: 'flex', flexDirection: 'column' }, css]} {...props} ref={ref}>\n {children}\n </Box>\n )\n})\n\nexport const Flex = {\n Column,\n Row,\n}\n","import { createContext } from 'react'\nimport { ThemeProvider } from '@emotion/react'\n\nimport { useThemeOverrides } from '../../hooks/useThemeOverrides'\nimport { theme as themeContract } from '../../shared/theme/themeContract.css'\n\nexport const FrigadeContext = createContext<{ apiKey: string; config: ProviderConfig }>({\n apiKey: '',\n config: {},\n})\n\n// TODO: type theme something like Partial<typeof themeContract>, but allow any value for those keys\nexport interface ProviderProps {\n apiKey: string\n children?: React.ReactNode\n config?: ProviderConfig\n theme?: Record<any, any>\n}\n\ninterface ProviderConfig {\n apiUrl?: string\n userId?: string\n}\n\nexport function Provider({ apiKey, children, config = {}, theme }: ProviderProps) {\n useThemeOverrides(theme)\n\n return (\n <FrigadeContext.Provider value={{ apiKey, config }}>\n <ThemeProvider theme={themeContract}>{children}</ThemeProvider>\n </FrigadeContext.Provider>\n )\n}\n","function getVarName(variable) {\n var matches = variable.match(/^var\\((.*)\\)$/);\n\n if (matches) {\n return matches[1];\n }\n\n return variable;\n}\n\nfunction get(obj, path) {\n var result = obj;\n\n for (var key of path) {\n if (!(key in result)) {\n throw new Error(\"Path \".concat(path.join(' -> '), \" does not exist in object\"));\n }\n\n result = result[key];\n }\n\n return result;\n}\n\nfunction walkObject(obj, fn) {\n var path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n var clone = obj.constructor();\n\n for (var key in obj) {\n var _value = obj[key];\n var currentPath = [...path, key];\n\n if (typeof _value === 'string' || typeof _value === 'number' || _value == null) {\n clone[key] = fn(_value, currentPath);\n } else if (typeof _value === 'object' && !Array.isArray(_value)) {\n clone[key] = walkObject(_value, fn, currentPath);\n } else {\n console.warn(\"Skipping invalid key \\\"\".concat(currentPath.join('.'), \"\\\". Should be a string, number, null or object. Received: \\\"\").concat(Array.isArray(_value) ? 'Array' : typeof _value, \"\\\"\"));\n }\n }\n\n return clone;\n}\n\nexport { get, getVarName, walkObject };\n","import { walkObject, get, getVarName } from '@vanilla-extract/private';\n\nfunction assignInlineVars(varsOrContract, tokens) {\n var styles = {};\n\n if (typeof tokens === 'object') {\n var _contract = varsOrContract;\n walkObject(tokens, (value, path) => {\n var varName = get(_contract, path);\n styles[getVarName(varName)] = String(value);\n });\n } else {\n var _vars = varsOrContract;\n\n for (var varName in _vars) {\n styles[getVarName(varName)] = _vars[varName];\n }\n }\n\n Object.defineProperty(styles, 'toString', {\n value: function value() {\n return Object.keys(this).map(key => \"\".concat(key, \":\").concat(this[key])).join(';');\n },\n writable: false\n });\n return styles;\n}\n\nfunction setVar(element, variable, value) {\n element.style.setProperty(getVarName(variable), value);\n}\n\nfunction setElementVars(element, varsOrContract, tokens) {\n if (typeof tokens === 'object') {\n var _contract = varsOrContract;\n walkObject(tokens, (value, path) => {\n setVar(element, get(_contract, path), String(value));\n });\n } else {\n var _vars = varsOrContract;\n\n for (var varName in _vars) {\n setVar(element, varName, _vars[varName]);\n }\n }\n}\n\nexport { assignInlineVars, setElementVars };\n","import { setElementVars } from '@vanilla-extract/dynamic'\nimport { useEffect } from 'react'\n\nimport { mapThemePropToThemeVars } from '../shared/mapThemePropToThemeVars'\n\nexport function useThemeOverrides(themeOverrides = {}, selector = ':root') {\n useEffect(() => {\n const mappedThemeVars = mapThemePropToThemeVars(themeOverrides)\n const root: HTMLElement = document.querySelector(selector)\n setElementVars(root, mappedThemeVars)\n }, [themeOverrides])\n}\n","import { theme } from './theme/themeContract.css'\n\n/*\n Given a theme contract that tells us which CSS variable to use:\n themeContract = {\n colors: {\n blue500: 'var(--fr-blue-500)'\n }\n }\n \n And a theme override prop that tells us which value to assign to that CSS variable:\n theme = {\n colors: {\n blue500: 'teal'\n }\n }\n\n Assign the override to the css variable like so:\n {\n 'var(--fr-blue-500)': 'teal'\n }\n*/\nexport function mapThemePropToThemeVars(themeLevel, contractLevel = theme) {\n return Object.keys(themeLevel).reduce((acc, key) => {\n const currentValue = themeLevel[key]\n\n if (\n typeof currentValue === 'object' &&\n currentValue !== null &&\n !Array.isArray(currentValue) &&\n key in themeLevel\n ) {\n Object.assign(acc, mapThemePropToThemeVars(currentValue, contractLevel[key]))\n } else {\n acc[contractLevel[key]] = themeLevel[key]\n }\n return acc\n }, {})\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport { clsx } from 'clsx'\n\nimport { XMarkIcon } from '@heroicons/react/24/solid'\nimport * as Popover from '@radix-ui/react-popover'\n\nimport { useBoundingClientRect } from '../../hooks/useBoundingClientRect'\nimport { Box } from '../Box'\nimport { Button, ButtonProps } from '../Button'\nimport { Dot } from './Dot'\nimport { Flex } from '../Flex/Flex'\nimport { Media, MediaProps } from '../Media'\nimport { Text, TextProps } from '../Text'\nimport { getDotPosition } from './getDotPosition'\nimport { mapTooltipPropsToRadixProps } from './mapTooltipPropsToPopoverProps'\n\ninterface MergedRadixPopoverProps\n extends Pick<Popover.PopoverProps, 'defaultOpen' | 'modal' | 'onOpenChange' | 'open'>,\n Omit<Popover.PopoverContentProps, 'align' | 'asChild'> {}\nexport interface TooltipProps extends MergedRadixPopoverProps {\n align?: Popover.PopoverContentProps['align'] | 'before' | 'after'\n anchor?: string\n spotlight?: boolean\n style?: React.CSSProperties\n}\n\nexport function Tooltip({\n anchor,\n children,\n css,\n spotlight = false,\n style,\n ...props\n}: TooltipProps) {\n const { node: contentNode, rect: contentRect, ref: contentRef } = useBoundingClientRect()\n const [alignAttr, setAlignAttr] = useState(props.align)\n const [sideAttr, setSideAttr] = useState(props.side)\n\n // Radix will update data attrs to let us know if Popover.Content has collided\n if (contentNode !== null) {\n const currentAlignAttr = contentNode.getAttribute('data-align')\n const currentSideAttr = contentNode.getAttribute('data-side')\n\n if (alignAttr !== currentAlignAttr) {\n setAlignAttr(currentAlignAttr)\n }\n\n if (sideAttr !== currentSideAttr) {\n setSideAttr(currentSideAttr)\n }\n }\n\n const { contentProps, rootProps } = mapTooltipPropsToRadixProps(props, contentRect)\n\n const anchorRef = useRef(null)\n const [anchorElementRef, setAnchorElementRef] = useState(null)\n\n useEffect(() => {\n const anchorQuery = document.querySelector(anchor)\n\n if (anchorQuery != null) {\n anchorRef.current = anchorQuery\n setAnchorElementRef(anchorRef)\n }\n }, [anchor])\n\n if (anchorElementRef == null) return null\n\n const anchorRect = anchorElementRef.current.getBoundingClientRect()\n\n let anchorRadius = '0'\n if (typeof window !== 'undefined') {\n anchorRadius = window.getComputedStyle(anchorElementRef.current).borderRadius\n }\n\n const dotPosition = getDotPosition({ props, alignAttr, sideAttr })\n\n return (\n <Popover.Root defaultOpen={true} {...rootProps}>\n <Popover.Anchor virtualRef={anchorElementRef} />\n <Popover.Portal>\n <div css={css}>\n {spotlight && (\n <Box\n borderRadius={anchorRadius}\n part=\"tooltip-spotlight\"\n position=\"absolute\"\n css={{\n boxShadow: '0 0 0 2000px rgb(0 0 0 / 0.5)',\n height: anchorRect.height,\n left: anchorRect.left,\n top: anchorRect.top,\n width: anchorRect.width,\n }}\n />\n )}\n <Popover.Content asChild {...contentProps} ref={contentRef}>\n <Flex.Column\n backgroundColor=\"white\"\n borderRadius=\"md\"\n p={5}\n part=\"tooltip-content\"\n position=\"relative\"\n css={{\n boxShadow: '0px 4px 20px rgba(0, 0, 0, 0.1)',\n width: '300px',\n ...style,\n }}\n >\n <Dot style={dotPosition} />\n\n {children}\n </Flex.Column>\n </Popover.Content>\n </div>\n </Popover.Portal>\n </Popover.Root>\n )\n}\n\nTooltip.Close = ({ css, ...props }: ButtonProps) => {\n return (\n <Popover.Close aria-label=\"Close\" asChild>\n <Button.Plain\n css={[\n {\n top: 0,\n right: 0,\n },\n css,\n ]}\n part=\"tooltip-close\"\n position=\"absolute\"\n {...props}\n >\n <XMarkIcon height=\"20\" fill=\"currentColor\" />\n </Button.Plain>\n </Popover.Close>\n )\n}\n\nTooltip.Media = ({ src, ...props }: MediaProps) => {\n if (src == null) return null\n\n return (\n <Media\n borderRadius=\"md md 0 0\"\n borderWidth=\"0\"\n css={{\n aspectRatio: '2',\n }}\n margin=\"-5 -5 5\"\n src={src}\n {...props}\n />\n )\n}\n\nTooltip.Primary = ({ onClick, title, ...props }: ButtonProps) => {\n if (title == null) return null\n\n return <Button.Primary title={title} onClick={onClick} {...props} />\n}\n\nTooltip.Progress = ({ children, ...props }: TextProps) => {\n if (children == null) return null\n\n return (\n <Text.Body2 fontWeight=\"demibold\" part=\"progress\" {...props}>\n {children}\n </Text.Body2>\n )\n}\n\nTooltip.Secondary = ({ onClick, title, ...props }: ButtonProps) => {\n if (title == null) return null\n\n return <Button.Secondary title={title} onClick={onClick} {...props} />\n}\n\nTooltip.Subtitle = ({ children, ...props }: TextProps) => {\n if (children == null) return null\n\n return (\n <Text.Body2 part=\"subtitle\" {...props}>\n {children}\n </Text.Body2>\n )\n}\n\nTooltip.Title = ({ children, ...props }: TextProps) => {\n if (children == null) return null\n\n return (\n <Text.Body1 fontWeight=\"bold\" mb={1} part=\"title\" {...props}>\n {children}\n </Text.Body1>\n )\n}\n","import { useCallback, useLayoutEffect, useState } from 'react'\n\nexport function useBoundingClientRect() {\n const initialRect =\n 'DOMRect' in globalThis\n ? new DOMRect()\n : {\n height: 0,\n width: 0,\n x: 0,\n y: 0,\n bottom: 0,\n top: 0,\n right: 0,\n left: 0,\n toJSON: () => {},\n }\n const [rect, setRect] = useState(initialRect)\n const [node, setNode] = useState(null)\n\n const ref = useCallback((node: HTMLElement) => {\n setNode(node)\n }, [])\n\n useLayoutEffect(() => {\n if (!node) return\n\n setRect(node.getBoundingClientRect())\n }, [node])\n\n return {\n node,\n rect,\n ref,\n }\n}\n","import 'src/components/Tooltip/Dot.css.ts.vanilla.css?source=QGtleWZyYW1lcyBfMTZ0ZDQyMCB7CiAgMCUgewogICAgb3BhY2l0eTogMC41OwogICAgdHJhbnNmb3JtOiBzY2FsZSgwLjUpOwogIH0KICA1MCUgewogICAgb3BhY2l0eTogMDsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgfQogIDEwMCUgewogICAgb3BhY2l0eTogMDsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgfQp9Ci5fMTZ0ZDQyMSB7CiAgYW5pbWF0aW9uOiAycyBlYXNlLW91dCBpbmZpbml0ZSBfMTZ0ZDQyMDsKfQ==';\nexport var animationPulse = '_16td421';","import { CSSProperties } from 'react'\nimport { Box, BoxProps } from '../Box'\n\nimport { animationPulse } from './Dot.css'\n\nexport interface DotProps extends BoxProps {}\n\nexport function Dot({ style = {}, part = '', ...props }: DotProps) {\n return (\n <Box\n part={`dot-wrapper ${part}`}\n style={{\n height: '48px',\n position: 'absolute',\n width: '48px',\n ...style,\n }}\n {...props}\n >\n <Box\n backgroundColor=\"primary.surface\"\n className={animationPulse}\n part=\"dot-pulse\"\n style={{\n borderRadius: '24px',\n height: '48px',\n left: 0,\n position: 'absolute',\n top: 0,\n transformOrigin: 'center center',\n width: '48px',\n }}\n />\n <Box\n backgroundColor=\"primary.surface\"\n part=\"dot\"\n style={{\n borderRadius: '12px',\n height: '24px',\n left: '12px',\n position: 'absolute',\n top: '12px',\n width: '24px',\n }}\n />\n </Box>\n )\n}\n","import { Box, BoxProps } from '../Box'\n\nexport interface ImageProps extends BoxProps {\n src: string\n}\n\nexport function Image({ part, src, ...props }: ImageProps) {\n return <Box as=\"img\" part={['image', part]} src={src} {...props} />\n}\n","import { Box, BoxProps } from '../Box'\n\nfunction getVideoEmbedSrc(videoUri: string) {\n if (videoUri.includes('youtube')) {\n const videoId = videoUri.split('v=')[1]?.split('&')[0]\n\n return `https://www.youtube.com/embed/${videoId}`\n } else if (videoUri.includes('vimeo')) {\n const videoId = videoUri.split('vimeo.com/')[1]?.split('&')[0]\n\n return `https://player.vimeo.com/video/${videoId}`\n } else if (videoUri.includes('wistia')) {\n const videoId = videoUri.split('wistia.com/medias/')[1]?.split('&')[0]\n\n return `https://fast.wistia.net/embed/iframe/${videoId}`\n }\n\n throw new Error('Could not map videoUri to a known provider (Youtube, Vimeo, Wistia).')\n}\n\nexport interface VideoProps extends BoxProps {\n src: string\n}\n\nexport function Video({ part, src, ...props }: VideoProps) {\n const videoEmbedSrc = getVideoEmbedSrc(src)\n\n // TODO: Add play button overtop?\n return (\n <Box\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n as=\"iframe\"\n backgroundColor=\"gray100\"\n borderWidth={0}\n part={['video', part]}\n src={videoEmbedSrc}\n {...props}\n ></Box>\n )\n}\n","import { Image } from './Image'\nimport { Video } from './Video'\nimport { BoxProps } from '../Box'\n\nexport interface MediaProps extends BoxProps {\n src: string\n type: 'image' | 'video'\n}\n\nexport function Media({ src, type, ...props }: MediaProps) {\n const Component = type === 'video' ? Video : Image\n\n return <Component src={src} {...props} />\n}\n","export function getDotPosition({ props, alignAttr, sideAttr }) {\n const currentSide = sideAttr ?? 'bottom'\n const dotProps = {}\n\n // Radix's collision system isn't aware of our custom before|after align\n const currentAlign = (() => {\n if (['after', 'before'].includes(props.align)) {\n if (alignAttr == 'start') {\n return 'before'\n } else if (alignAttr == 'end') {\n return 'after'\n }\n }\n\n return props.align\n })()\n\n const dotOffset = '-24px'\n\n const oppositeSides = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n }\n\n /* \n Rules:\n - Dot is opposite to side prop (e.g. side=left -> dot=right)\n - align=before|end -> Dot goes to highest extent (right/bottom) of align-axis\n - align=after|start -> Dot goes to lowest extent (left/top) of align-axis\n - align=center -> Dot goes to the center\n */\n\n dotProps[oppositeSides[currentSide]] = dotOffset\n\n if (['before', 'end'].includes(currentAlign)) {\n if (['top', 'bottom'].includes(currentSide)) {\n dotProps['right'] = dotOffset\n } else {\n dotProps['bottom'] = dotOffset\n }\n } else if (['after', 'start'].includes(currentAlign)) {\n if (['top', 'bottom'].includes(currentSide)) {\n dotProps['left'] = dotOffset\n } else {\n dotProps['top'] = dotOffset\n }\n } else {\n // The only option left is align=center\n if (['top', 'bottom'].includes(currentSide)) {\n dotProps['left'] = `calc(50% + ${dotOffset})`\n } else {\n dotProps['top'] = `calc(50% + ${dotOffset})`\n }\n }\n\n return dotProps\n}\n","import { TooltipProps } from '.'\n\nconst RADIX_PROPS = {\n content: [\n 'align',\n 'alignOffset',\n 'arrowPadding',\n 'avoidCollisions',\n 'collisionBoundary',\n 'collisionPadding',\n 'forceMount',\n 'hideWhenDetached',\n 'onCloseAutoFocus',\n 'onEscapeKeyDown',\n 'onFocusOutside',\n 'onInteractOutside',\n 'onOpenAutoFocus',\n 'onPointerDownOutside',\n 'side',\n 'sideOffset',\n 'sticky',\n ],\n root: ['defaultOpen', 'modal', 'onOpenChange', 'open'],\n}\n\nexport function mapTooltipPropsToRadixProps(props: TooltipProps, contentRect: DOMRect) {\n const contentProps = Object.fromEntries(\n RADIX_PROPS.content\n .map((propName) => [propName, props[propName]])\n .filter((propEntry) => propEntry[1] !== undefined)\n )\n const rootProps = Object.fromEntries(\n RADIX_PROPS.root\n .map((propName) => [propName, props[propName]])\n .filter((propEntry) => propEntry[1] !== undefined)\n )\n\n /*\n Here we're extending Popover.Content's align prop to accept 'before' and\n 'after' in addition to its existing values.\n\n TL;DR:\n 1. Use existing alignOffset prop to push Content to be before/after the\n corresponding edge of the element it's attached to.\n 2. Add a CSS margin to patch alignOffset back onto Content, as Popover\n has a bug that prevents alignOffset from extending past the edge of\n its Trigger/Anchor.\n\n SEE: https://github.com/radix-ui/primitives/issues/2457\n */\n if (['before', 'after'].includes(contentProps['align'])) {\n const mapToOriginalAlignValues = {\n after: 'end',\n before: 'start',\n }\n\n const mapAlignOffsetToMargin = (align, side) => {\n /*\n Translate alignOffset to CSS margin based on align and side props:\n bottom || top\n after: marginLeft\n before: marginRight\n left || right\n after: marginTop\n before: marginBottom\n */\n if (['top', 'bottom'].includes(side)) {\n if (align == 'after') {\n return 'marginLeft'\n } else {\n return 'marginRight'\n }\n } else {\n if (align == 'after') {\n return 'marginTop'\n } else {\n return 'marginBottom'\n }\n }\n }\n\n const originalOffset = contentProps['alignOffset'] ?? 0\n const originalStyleProp = contentProps['style'] ?? {}\n const currentSide = contentProps['side'] ?? 'bottom'\n const currentAlign = contentProps['align']\n\n // Copy alignOffset value to CSS margin\n contentProps['style'] = {\n ...originalStyleProp,\n [mapAlignOffsetToMargin(currentAlign, currentSide)]: originalOffset,\n }\n\n const lengthOfCurrentSide = ['top', 'bottom'].includes(currentSide)\n ? contentRect.width\n : contentRect.height\n\n // Change alignOffset to be at the end of the positioned side\n contentProps['alignOffset'] = (lengthOfCurrentSide + originalOffset) * -1\n\n // Flip align prop back to valid Radix option\n contentProps['align'] = mapToOriginalAlignValues[currentAlign]\n }\n\n return {\n contentProps,\n rootProps,\n }\n}\n","import { Frigade, Flow } from '@frigade/js'\nimport { useContext, useState } from 'react'\n\nimport { FrigadeContext } from '../components/Provider'\n\nexport function useFlow(flowId: string) {\n const [flow, setFlow] = useState<Flow>(null)\n const { apiKey, config } = useContext(FrigadeContext)\n\n async function fetchFlow() {\n const filteredConfig = Object.fromEntries(\n Object.entries(config).filter(([k, v]) => ['apiUrl', 'userId'].includes(k) && v != null)\n )\n\n const frigade = await new Frigade(apiKey, filteredConfig)\n\n const flowResponse: Flow = await frigade.getFlow(flowId)\n\n setFlow(flowResponse)\n }\n\n if (flow === null) {\n fetchFlow()\n }\n\n // TEMP: Expose a way to manually refresh the flow.\n // TODO: Automatically update state when something like step.complete() is called\n return { flow, fetchFlow }\n}\n","import { useFlow } from '../../hooks/useFlow'\n\nimport { Flex } from '../Flex/Flex'\nimport { Tooltip, TooltipProps } from '../Tooltip'\n\nexport interface TourProps extends TooltipProps {\n flowId: string\n}\n\nexport function Tour({ flowId, ...props }: TourProps) {\n const { flow, fetchFlow } = useFlow(flowId)\n\n if (flow == null || flow?.isCompleted || flow?.isSkipped) {\n return null\n }\n\n flow.start()\n\n const step = flow.getCurrentStep()\n\n step?.start()\n\n async function handleDismiss() {\n await flow.skip()\n\n // TEMP: Manually refreshing flow data until useFlow can handle it internally\n fetchFlow()\n }\n\n async function handlePrimary() {\n await step.complete()\n\n // TEMP: Manually refreshing flow data until useFlow can handle it internally\n fetchFlow()\n }\n\n const handleSecondary = handlePrimary\n\n return (\n <Tooltip\n align=\"after\"\n anchor={step.selector as string}\n onOpenAutoFocus={(e) => e.preventDefault()}\n onPointerDownOutside={(e) => e.preventDefault()}\n {...props}\n >\n <Tooltip.Close onClick={handleDismiss} />\n\n <Tooltip.Media\n src={step.videoUri ?? step.imageUri}\n type={step.videoUri ? 'video' : 'image'}\n />\n\n <Tooltip.Title>{step.title}</Tooltip.Title>\n <Tooltip.Subtitle>{step.subtitle}</Tooltip.Subtitle>\n\n <Flex.Row pt={4} alignItems=\"center\" justifyContent=\"space-between\">\n <Tooltip.Progress>\n {`${flow.getNumberOfCompletedSteps()}/${flow.steps.size}`}\n </Tooltip.Progress>\n\n <Flex.Row gap={3}>\n <Tooltip.Secondary title={step.secondaryButtonTitle} onClick={handleSecondary} />\n <Tooltip.Primary title={step.primaryButtonTitle} onClick={handlePrimary} />\n </Flex.Row>\n </Flex.Row>\n </Tooltip>\n )\n}\n"],"mappings":"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EAAIE,CAAW,EAAIC,EAGdH,CACT,EAAG,CAAC,CAAC,CACP,CCXA,IAAMI,EAAuCC,EAAcC,EAAM,MAAM,EAO1DC,GAAa,CACxB,MAAOH,EACP,gBAAiBA,EACjB,YAAaA,EACb,OAAQE,EAAM,QACd,aAAcA,EAAM,MACpB,YAAaA,EAAM,aAEnB,WAAYA,EAAM,aAClB,SAAUA,EAAM,UAChB,WAAYA,EAAM,YAElB,IAAKA,EAAM,MAEX,WAAYA,EAAM,YAElB,OAAQA,EAAM,MACd,UAAWA,EAAM,MACjB,YAAaA,EAAM,MACnB,aAAcA,EAAM,MACpB,WAAYA,EAAM,MAElB,QAASA,EAAM,MACf,WAAYA,EAAM,MAClB,aAAcA,EAAM,MACpB,cAAeA,EAAM,MACrB,YAAaA,EAAM,MAEnB,aAAc,CACZ,SACA,QACA,MACA,aACA,WACA,SACA,WACA,iBACA,gBACA,gBACA,eACA,eACA,UACA,cACA,gBACA,UACA,UACA,SACA,eACA,OACF,EAEA,WAAY,CACV,SACA,UACA,SACA,QACA,MACA,aACA,WACA,aACA,WACA,WACA,iBACA,gBACA,cACA,gBACA,UACA,UACA,SACA,eACA,OACF,EAEA,UAAW,CACT,OACA,SACA,SACA,QACA,MACA,aACA,WACA,aACA,WACA,WACA,iBACA,gBACA,UACA,cACA,gBACA,UACA,UACA,SACA,eACA,OACF,EAEA,cAAe,CACb,MACA,cACA,SACA,iBACA,UACA,UACA,SACA,eACA,OACF,EAEA,SAAU,CACR,SACA,OACA,eACA,UACA,UACA,SACA,eACA,OACF,EAEA,eAAgB,CACd,SACA,QACA,MACA,aACA,WACA,OACA,QACA,SACA,gBACA,eACA,eACA,UACA,cACA,gBACA,UACA,UACA,SACA,eACA,OACF,EAEA,aAAc,CACZ,SACA,UACA,SACA,QACA,MACA,aACA,WACA,aACA,WACA,OACA,QACA,WACA,iBACA,gBACA,cACA,gBACA,eACA,cACA,gBACA,UACA,UACA,SACA,eACA,OACF,EAEA,UAAW,CAAC,aAAc,cAAe,UAAW,UAAW,SAAU,eAAgB,OAAO,EAEhG,SAAU,CACR,SACA,WACA,WACA,QACA,SACA,UACA,UACA,SACA,eACA,OACF,EAEA,QAAS,CACP,QACA,aACA,aACA,kBACA,aACA,WACA,OACA,YACA,OACA,UACA,UACA,SACA,cACA,cACA,mBACA,cACA,eACA,cACA,cACA,YACA,OACA,SACA,eACA,QACA,kBACA,qBACA,qBACA,YACA,aACA,qBACA,eACA,gBACA,OACF,CACF,EAEaE,GAAsB,CACjC,EAAG,CAAC,QAAQ,EACZ,GAAI,CAAC,WAAW,EAChB,GAAI,CAAC,aAAa,EAClB,GAAI,CAAC,cAAc,EACnB,GAAI,CAAC,YAAY,EACjB,GAAI,CAAC,aAAc,aAAa,EAChC,GAAI,CAAC,YAAa,cAAc,EAEhC,EAAG,CAAC,SAAS,EACb,GAAI,CAAC,YAAY,EACjB,GAAI,CAAC,cAAc,EACnB,GAAI,CAAC,eAAe,EACpB,GAAI,CAAC,aAAa,EAClB,GAAI,CAAC,cAAe,cAAc,EAClC,GAAI,CAAC,aAAc,eAAe,CACpC,ECpPA,SAASC,GAAUC,EAAO,CACxB,GAAI,MAAM,QAAQA,CAAK,EACrB,OAAO,IAAI,IAAIA,EAAM,IAAKC,GAAM,CAACA,EAAGA,CAAC,CAAC,CAAC,EAClC,GAAI,OAAOD,GAAU,UAAYA,IAAU,KAChD,OAAO,IAAI,IAAI,OAAO,QAAQA,CAAK,CAAC,EAC/B,GAAI,CAAC,SAAU,QAAQ,EAAE,SAAS,OAAOA,CAAK,EACnD,OAAO,IAAI,IAAI,CAACA,EAAOA,CAAK,CAAC,EAG/B,MAAM,IAAI,MAAM,6BAA6B,CAC/C,CAEA,IAAME,GAAgB,IAAI,IACxB,OAAO,QAAQC,EAAU,EAAE,IAAI,CAAC,CAACC,EAAUJ,CAAK,IACvC,CAACI,EAAUL,GAAUC,CAAK,CAAC,CACnC,CACH,EAEMK,GAAyB,IAAI,IACjC,OAAO,QAAQC,EAAmB,EAAE,IAAI,CAAC,CAACC,EAAWC,CAAW,IACvD,CAACD,EAAW,IAAI,IAAIC,CAAW,CAAC,CACxC,CACH,EAEO,SAASC,GAAgBC,EAAyB,CACvD,IAAMC,EAAiB,OAAO,OAAO,CAAC,EAAGD,CAAK,EACxCE,EAAe,CAAC,EAGtB,cAAO,QAAQD,CAAc,EAAE,QAAQ,CAAC,CAACP,EAAUS,CAAS,IAAM,CAChE,IAAMC,EAAmBT,GAAuB,IAAID,CAAQ,EACxDU,GAAoB,OACtBA,EAAiB,QAASV,GAAa,CACrCO,EAAeP,CAAQ,EAAIS,CAC7B,CAAC,EAED,OAAOF,EAAeP,CAAQ,EAElC,CAAC,EAGD,OAAO,QAAQO,CAAc,EAAE,QAAQ,CAAC,CAACP,EAAUS,CAAS,IAAM,CAChE,IAAME,EAAYb,GAAc,IAAIE,CAAQ,EAC5C,GAAIW,GAAa,KACf,GAAI,OAAOF,GAAc,UAAYA,EAAU,QAAQ,GAAG,EAAI,GAAI,CAEhE,IAAMG,EAAkBH,EAAU,MAAM,GAAG,EAE3CD,EAAaR,CAAQ,EAAIY,EACtB,IAAKf,GAAG,CAnDnB,IAAAgB,EAmDsB,OAAAA,EAAAF,EAAU,IAAId,EAAE,SAAS,CAAC,IAA1B,KAAAgB,EAA+BhB,EAAC,EAC3C,KAAK,GAAG,EAEX,OAAOU,EAAeP,CAAQ,OACrBW,EAAU,IAAIF,EAAU,SAAS,CAAC,IAC3CD,EAAaR,CAAQ,EAAIW,EAAU,IAAIF,EAAU,SAAS,CAAC,EAC3D,OAAOF,EAAeP,CAAQ,EAGpC,CAAC,EAEM,CAAE,aAAAQ,EAAc,eAAAD,CAAe,CACxC,CJ7BI,cAAAO,OAAA,6BA5BJ,SAASC,GAAWC,EAA0B,CAC5C,OAAOA,GAAO,MAAMA,GACtB,CAEA,SAASC,GAAYD,EAAqC,CACxD,OAAKA,IAEE,MAAM,QAAQA,CAAI,EAAIA,EAAK,IAAKE,GAAMH,GAAWG,CAAC,CAAC,EAAE,KAAK,GAAG,EAAIH,GAAWC,CAAI,EACzF,CAOA,SAASG,GACPC,EACAC,EACA,CAFA,IAAAC,EAAAF,EAAE,IAAAG,EAAI,SAAAC,EAAU,UAAAC,EAAW,IAAAC,EAAK,KAAAV,CAtBlC,EAsBEM,EAAyCK,EAAAC,EAAzCN,EAAyC,CAAvC,KAAI,WAAU,YAAW,MAAK,SAGhC,IAAMO,EAAYN,GAAA,KAAAA,EAAM,MAElB,CAAE,aAAAO,EAAc,eAAAC,CAAe,EAAIC,GAAgBL,CAAK,EAExDM,EAAgBhB,GAAYD,CAAI,EAChCkB,EAAoBT,GAAaQ,EAAgBE,GAAKV,EAAWQ,CAAa,EAAI,OAExF,OAEEnB,GAACe,EAAAO,EAAAC,EAAA,CACC,UAAWH,EACX,IAAK,CAACG,IAAA,CAAE,UAAW,cAAiBP,GAAiBJ,EAAK,GACtDK,GAHL,CAIC,IAAKV,EAEJ,SAAAG,GACH,CAEJ,CAEO,IAAMc,EAAY,cAAWnB,EAAU,EK7C9C,IAAAoB,EAAA,GAAAC,GAAAD,EAAA,WAAAE,GAAA,UAAAC,GAAA,YAAAC,GAAA,aAAAC,GAAA,aAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAA,OAAAC,GAAA,SAAAC,IAAO,IAAMA,EAAO,CAAC,CAAE,aAAAC,CAAa,KAAO,CACzC,WAAYA,EAAa,QACzB,OAAQ,CACV,GAEaP,GAAW,CAAC,CAAE,UAAAQ,EAAW,YAAAC,EAAa,YAAAC,CAAY,IAAM,CACnEJ,EACA,CACE,SAAUE,EAAU,KAAK,EACzB,WAAYC,EAAY,KACxB,WAAYC,EAAY,KAAK,CAC/B,CACF,EAEaT,GAAW,CAAC,CAAE,UAAAO,EAAW,YAAAC,EAAa,YAAAC,CAAY,IAAM,CACnEJ,EACA,CACE,SAAUE,EAAU,KAAK,EACzB,WAAYC,EAAY,KACxB,WAAYC,EAAY,KAAK,CAC/B,CACF,EAEaR,GAAK,CAAC,CAAE,UAAAM,EAAW,YAAAC,EAAa,YAAAC,CAAY,IAAM,CAC7DJ,EACA,CACE,SAAUE,EAAU,KAAK,EACzB,WAAYC,EAAY,KACxB,WAAYC,EAAY,KAAK,CAC/B,CACF,EAEaP,GAAK,CAAC,CAAE,UAAAK,EAAW,YAAAC,EAAa,YAAAC,CAAY,IAAM,CAC7DJ,EACA,CACE,SAAUE,EAAU,KAAK,EACzB,WAAYC,EAAY,KACxB,WAAYC,EAAY,EAC1B,CACF,EAEaN,GAAK,CAAC,CAAE,UAAAI,EAAW,YAAAC,EAAa,YAAAC,CAAY,IAAM,CAC7DJ,EACA,CACE,SAAUE,EAAU,GACpB,WAAYC,EAAY,KACxB,WAAYC,EAAY,EAC1B,CACF,EAEaL,GAAK,CAAC,CAAE,UAAAG,EAAW,YAAAC,EAAa,YAAAC,CAAY,IAAM,CAC7DJ,EACA,CACE,SAAUE,EAAU,GACpB,WAAYC,EAAY,KACxB,WAAYC,EAAY,EAC1B,CACF,EAEab,GAAQ,CAAC,CAAE,UAAAW,EAAW,YAAAC,EAAa,YAAAC,CAAY,IAAM,CAChEJ,EACA,CACE,SAAUE,EAAU,GACpB,WAAYC,EAAY,QACxB,WAAYC,EAAY,EAC1B,CACF,EAEaZ,GAAQ,CAAC,CAAE,UAAAU,EAAW,YAAAC,EAAa,YAAAC,CAAY,IAAM,CAChEJ,EACA,CACE,SAAUE,EAAU,GACpB,WAAYC,EAAY,QACxB,WAAYC,EAAY,EAC1B,CACF,EAEaX,GAAU,CAAC,CAAE,UAAAS,EAAW,YAAAC,EAAa,YAAAC,CAAY,IAAM,CAClEJ,EACA,CACE,SAAUE,EAAU,GACpB,WAAYC,EAAY,QACxB,WAAYC,EAAY,EAC1B,CACF,EC/DI,cAAAC,OAAA,6BAFJ,SAASC,GAASC,EAAwE,CAAxE,IAAAC,EAAAD,EAAE,IAAAE,EAAK,OAAQ,SAAAC,EAAU,IAAAC,EAAK,QAAAC,EAAU,OAnB1D,EAmBkBJ,EAAoDK,EAAAC,EAApDN,EAAoD,CAAlD,KAAa,WAAU,MAAK,YAC9C,OACEH,GAACU,EAAAC,EAAAC,EAAA,CAAI,GAAIR,EAAI,IAAK,CAACS,EAAON,CAAO,EAAGD,CAAG,GAAOE,GAA7C,CACE,SAAAH,GACH,CAEJ,CAEA,IAAMS,GAAkC,CACtC,WACA,WACA,KACA,KACA,KACA,KACA,QACA,QACA,SACF,EAEMC,GAAwB,OAAO,YACnCD,GAAiB,IAAKP,GAAY,CAChC,IAAMS,EAAS,CAAC,KAAM,KAAM,KAAM,IAAI,EAAE,SAAST,CAAO,EACnDA,EAAQ,YAAY,EACrB,OACEU,EAAaT,GACjBR,GAACC,GAAAU,EAAAC,EAAA,CAAS,GAAII,GAAYR,GAAzB,CAAgC,QAASD,EACvC,SAAAC,EAAM,UACT,EAGF,OAAAS,EAAU,YAAc,QAAQV,IAEzB,CAACA,EAASU,CAAS,CAC5B,CAAC,CACH,EAEaC,EAAO,OAAO,OAAOjB,GAAUc,EAAqB,ECxDjE,IAAAI,EAAA,GAAAC,GAAAD,EAAA,UAAAE,GAAA,UAAAC,GAAA,YAAAC,GAAA,cAAAC,GAAA,SAAAC,IAAO,IAAMA,EAAO,CAAC,CAAE,MAAAC,EAAO,MAAAC,CAAM,KAAO,CACzC,YAAa,EACb,aAAcD,EAAM,GACpB,QAAS,GAAGC,EAAM,CAAC,KAAKA,EAAM,CAAC,GACjC,GAEaJ,GAAU,CAAC,CAAE,OAAAK,CAAO,IAAM,CACrCH,EACA,CACE,gBAAiBG,EAAO,QAAQ,QAChC,MAAOA,EAAO,QAAQ,WAEtB,UAAW,CACT,gBAAiBA,EAAO,QAAQ,MAAM,OACxC,CACF,CACF,EAEaJ,GAAY,CAAC,CAAE,OAAAI,CAAO,IAAM,CACvCH,EACA,CACE,gBAAiBG,EAAO,UAAU,QAClC,MAAOA,EAAO,UAAU,WAExB,UAAW,CACT,gBAAiBA,EAAO,UAAU,MAAM,OAC1C,CACF,CACF,EAEaP,GAAO,CAAC,CAAE,OAAAO,CAAO,IAAM,CAClCH,EACA,CACE,gBAAiBG,EAAO,YACxB,MAAOA,EAAO,QAAQ,QAEtB,UAAW,CACT,MAAOA,EAAO,QAAQ,MAAM,OAC9B,CACF,CACF,EAEaN,GAAQ,CAAC,CAAE,OAAAM,CAAO,IAAM,CACnCH,EACA,CACE,gBAAiBG,EAAO,YACxB,MAAOA,EAAO,QAAQ,UACxB,CACF,ECjCI,OAEY,OAAAC,GAFZ,QAAAC,OAAA,6BAFJ,SAASC,GAAWC,EAA+E,CAA/E,IAAAC,EAAAD,EAAE,IAAAE,EAAI,SAAAC,EAAU,IAAAC,EAAM,CAAC,EAAG,MAAAC,EAAO,QAAAC,EAAU,SAb/D,EAaoBL,EAAyDM,EAAAC,EAAzDP,EAAyD,CAAvD,KAAI,WAAU,MAAU,QAAO,YACnD,OACEH,GAACW,EAAAC,EAAAC,EAAA,CAAI,GAAIT,GAAA,KAAAA,EAAM,SAAU,IAAK,CAACU,EAAON,CAAO,EAAGF,CAAG,GAAOG,GAAzD,CACE,UAAAJ,EACAE,GAASR,GAACgB,EAAK,MAAL,CAAW,WAAW,WAAY,SAAAR,EAAM,IACrD,CAEJ,CAEA,IAAMS,GAAsC,CAAC,UAAW,YAAa,OAAQ,OAAO,EAE9EC,GAA0B,OAAO,YACrCD,GAAmB,IAAKR,GAAY,CAClC,IAAMU,EAAcV,EAAQ,kBAAkB,EAExCW,EAAajB,GAAiC,CAAjC,IAAAC,EAAAD,EAAE,MAAAkB,CA5BzB,EA4BuBjB,EAAWM,EAAAC,EAAXP,EAAW,CAAT,SACnB,OAAAJ,GAACE,GAAAW,EAAAC,EAAA,CAAW,KAAM,CAAC,UAAUK,IAAeE,CAAI,GAAOX,GAAtD,CAA6D,QAASD,EACpE,SAAAC,EAAM,UACT,GAGF,OAAAU,EAAU,YAAc,QAAQX,IAEzB,CAACA,EAASW,CAAS,CAC5B,CAAC,CACH,EAEaE,EAAS,OAAO,OAAOpB,GAAYgB,EAAuB,ECxCvE,UAAYK,MAAW,QAKnB,cAAAC,OAAA,6BAFJ,IAAMC,GAAY,aAAW,CAACC,EAAuCC,IAAQ,CAA/C,IAAAC,EAAAF,EAAE,UAAAG,EAAU,IAAAC,CAH1C,EAG8BF,EAAoBG,EAAAC,EAApBJ,EAAoB,CAAlB,WAAU,QACxC,OACEJ,GAACS,EAAAC,EAAAC,EAAA,CAAI,IAAK,CAAC,CAAE,QAAS,OAAQ,cAAe,KAAM,EAAGL,CAAG,GAAOC,GAA/D,CAAsE,IAAKJ,EACzE,SAAAE,GACH,CAEJ,CAAC,EAEKO,GAAe,aAAW,CAACV,EAAuCC,IAAQ,CAA/C,IAAAC,EAAAF,EAAE,UAAAG,EAAU,IAAAC,CAX7C,EAWiCF,EAAoBG,EAAAC,EAApBJ,EAAoB,CAAlB,WAAU,QAC3C,OACEJ,GAACS,EAAAC,EAAAC,EAAA,CAAI,IAAK,CAAC,CAAE,QAAS,OAAQ,cAAe,QAAS,EAAGL,CAAG,GAAOC,GAAlE,CAAyE,IAAKJ,EAC5E,SAAAE,GACH,CAEJ,CAAC,EAEYQ,EAAO,CAClB,OAAAD,GACA,IAAAX,EACF,ECtBA,OAAS,iBAAAa,OAAqB,QAC9B,OAAS,iBAAAC,OAAqB,iBCD9B,SAASC,GAAWC,EAAU,CAC5B,IAAIC,EAAUD,EAAS,MAAM,eAAe,EAE5C,OAAIC,EACKA,EAAQ,CAAC,EAGXD,CACT,CAEA,SAASE,GAAIC,EAAKC,EAAM,CACtB,IAAIC,EAASF,EAEb,QAASG,KAAOF,EAAM,CACpB,GAAI,EAAEE,KAAOD,GACX,MAAM,IAAI,MAAM,QAAQ,OAAOD,EAAK,KAAK,MAAM,EAAG,2BAA2B,CAAC,EAGhFC,EAASA,EAAOC,CAAG,EAGrB,OAAOD,CACT,CAEA,SAASE,EAAWJ,EAAKK,EAAI,CAC3B,IAAIJ,EAAO,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EAC5EK,EAAQN,EAAI,YAAY,EAE5B,QAASG,KAAOH,EAAK,CACnB,IAAIO,EAASP,EAAIG,CAAG,EAChBK,EAAc,CAAC,GAAGP,EAAME,CAAG,EAE3B,OAAOI,GAAW,UAAY,OAAOA,GAAW,UAAYA,GAAU,KACxED,EAAMH,CAAG,EAAIE,EAAGE,EAAQC,CAAW,EAC1B,OAAOD,GAAW,UAAY,CAAC,MAAM,QAAQA,CAAM,EAC5DD,EAAMH,CAAG,EAAIC,EAAWG,EAAQF,EAAIG,CAAW,EAE/C,QAAQ,KAAK,yBAA0B,OAAOA,EAAY,KAAK,GAAG,EAAG,4DAA8D,EAAE,OAAO,MAAM,QAAQD,CAAM,EAAI,QAAU,OAAOA,EAAQ,GAAI,CAAC,EAItM,OAAOD,CACT,CCdA,SAASG,GAAOC,EAASC,EAAUC,EAAO,CACxCF,EAAQ,MAAM,YAAYG,GAAWF,CAAQ,EAAGC,CAAK,CACvD,CAEA,SAASE,GAAeJ,EAASK,EAAgBC,EAAQ,CACvD,GAAI,OAAOA,GAAW,SAAU,CAC9B,IAAIC,EAAYF,EAChBG,EAAWF,EAAQ,CAACJ,EAAOO,IAAS,CAClCV,GAAOC,EAASU,GAAIH,EAAWE,CAAI,EAAG,OAAOP,CAAK,CAAC,CACrD,CAAC,MACI,CACL,IAAIS,EAAQN,EAEZ,QAASO,KAAWD,EAClBZ,GAAOC,EAASY,EAASD,EAAMC,CAAO,CAAC,EAG7C,CC5CA,OAAS,aAAAC,OAAiB,QCqBnB,SAASC,EAAwBC,EAAYC,EAAgBC,EAAO,CACzE,OAAO,OAAO,KAAKF,CAAU,EAAE,OAAO,CAACG,EAAKC,IAAQ,CAClD,IAAMC,EAAeL,EAAWI,CAAG,EAEnC,OACE,OAAOC,GAAiB,UACxBA,IAAiB,MACjB,CAAC,MAAM,QAAQA,CAAY,GAC3BD,KAAOJ,EAEP,OAAO,OAAOG,EAAKJ,EAAwBM,EAAcJ,EAAcG,CAAG,CAAC,CAAC,EAE5ED,EAAIF,EAAcG,CAAG,CAAC,EAAIJ,EAAWI,CAAG,EAEnCD,CACT,EAAG,CAAC,CAAC,CACP,CDjCO,SAASG,GAAkBC,EAAiB,CAAC,EAAGC,EAAW,QAAS,CACzEC,GAAU,IAAM,CACd,IAAMC,EAAkBC,EAAwBJ,CAAc,EACxDK,EAAoB,SAAS,cAAcJ,CAAQ,EACzDK,GAAeD,EAAMF,CAAe,CACtC,EAAG,CAACH,CAAc,CAAC,CACrB,CHkBM,cAAAO,OAAA,6BAvBC,IAAMC,EAAiBC,GAA0D,CACtF,OAAQ,GACR,OAAQ,CAAC,CACX,CAAC,EAeM,SAASC,GAAS,CAAE,OAAAC,EAAQ,SAAAC,EAAU,OAAAC,EAAS,CAAC,EAAG,MAAAC,CAAM,EAAkB,CAChF,OAAAC,GAAkBD,CAAK,EAGrBP,GAACC,EAAe,SAAf,CAAwB,MAAO,CAAE,OAAAG,EAAQ,OAAAE,CAAO,EAC/C,SAAAN,GAACS,GAAA,CAAc,MAAOF,EAAgB,SAAAF,EAAS,EACjD,CAEJ,CKhCA,OAAgB,aAAAK,GAAW,UAAAC,GAAQ,YAAAC,MAAgB,QAGnD,OAAS,aAAAC,OAAiB,4BAC1B,UAAYC,MAAa,0BCJzB,OAAS,eAAAC,GAAa,mBAAAC,GAAiB,YAAAC,OAAgB,QAEhD,SAASC,IAAwB,CACtC,IAAMC,EACJ,YAAa,WACT,IAAI,QACJ,CACE,OAAQ,EACR,MAAO,EACP,EAAG,EACH,EAAG,EACH,OAAQ,EACR,IAAK,EACL,MAAO,EACP,KAAM,EACN,OAAQ,IAAM,CAAC,CACjB,EACA,CAACC,EAAMC,CAAO,EAAIJ,GAASE,CAAW,EACtC,CAACG,EAAMC,CAAO,EAAIN,GAAS,IAAI,EAE/BO,EAAMT,GAAaO,GAAsB,CAC7CC,EAAQD,CAAI,CACd,EAAG,CAAC,CAAC,EAEL,OAAAN,GAAgB,IAAM,CACfM,GAELD,EAAQC,EAAK,sBAAsB,CAAC,CACtC,EAAG,CAACA,CAAI,CAAC,EAEF,CACL,KAAAA,EACA,KAAAF,EACA,IAAAI,CACF,CACF,CClCO,IAAIC,GAAiB,WCQxB,OAUE,OAAAC,GAVF,QAAAC,OAAA,6BAFG,SAASC,GAAIC,EAA+C,CAA/C,IAAAC,EAAAD,EAAE,OAAAE,EAAQ,CAAC,EAAG,KAAAC,EAAO,EAPzC,EAOoBF,EAA4BG,EAAAC,EAA5BJ,EAA4B,CAA1B,QAAY,SAChC,OACEH,GAACQ,EAAAC,EAAAC,EAAA,CACC,KAAM,eAAeL,IACrB,MAAOK,EAAA,CACL,OAAQ,OACR,SAAU,WACV,MAAO,QACJN,IAEDE,GARL,CAUC,UAAAP,GAACS,EAAA,CACC,gBAAgB,kBAChB,UAAWG,GACX,KAAK,YACL,MAAO,CACL,aAAc,OACd,OAAQ,OACR,KAAM,EACN,SAAU,WACV,IAAK,EACL,gBAAiB,gBACjB,MAAO,MACT,EACF,EACAZ,GAACS,EAAA,CACC,gBAAgB,kBAChB,KAAK,MACL,MAAO,CACL,aAAc,OACd,OAAQ,OACR,KAAM,OACN,SAAU,WACV,IAAK,OACL,MAAO,MACT,EACF,IACF,CAEJ,CCxCS,cAAAI,OAAA,6BADF,SAASC,EAAMC,EAAqC,CAArC,IAAAC,EAAAD,EAAE,MAAAE,EAAM,IAAAC,CAN9B,EAMsBF,EAAgBG,EAAAC,EAAhBJ,EAAgB,CAAd,OAAM,QAC5B,OAAOH,GAACQ,EAAAC,EAAA,CAAI,GAAG,MAAM,KAAM,CAAC,QAASL,CAAI,EAAG,IAAKC,GAASC,EAAO,CACnE,CCqBI,cAAAI,OAAA,6BA3BJ,SAASC,GAAiBC,EAAkB,CAF5C,IAAAC,EAAAC,EAAAC,EAGE,GAAIH,EAAS,SAAS,SAAS,EAG7B,MAAO,kCAFSC,EAAAD,EAAS,MAAM,IAAI,EAAE,CAAC,IAAtB,YAAAC,EAAyB,MAAM,KAAK,KAG/C,GAAID,EAAS,SAAS,OAAO,EAGlC,MAAO,mCAFSE,EAAAF,EAAS,MAAM,YAAY,EAAE,CAAC,IAA9B,YAAAE,EAAiC,MAAM,KAAK,KAGvD,GAAIF,EAAS,SAAS,QAAQ,EAGnC,MAAO,yCAFSG,EAAAH,EAAS,MAAM,oBAAoB,EAAE,CAAC,IAAtC,YAAAG,EAAyC,MAAM,KAAK,KAKtE,MAAM,IAAI,MAAM,sEAAsE,CACxF,CAMO,SAASC,EAAMH,EAAqC,CAArC,IAAAC,EAAAD,EAAE,MAAAI,EAAM,IAAAC,CAxB9B,EAwBsBJ,EAAgBK,EAAAC,EAAhBN,EAAgB,CAAd,OAAM,QAC5B,IAAMO,EAAgBV,GAAiBO,CAAG,EAG1C,OACER,GAACY,EAAAC,EAAA,CACC,MAAM,2FACN,gBAAe,GACf,GAAG,SACH,gBAAgB,UAChB,YAAa,EACb,KAAM,CAAC,QAASN,CAAI,EACpB,IAAKI,GACDF,EACL,CAEL,CC5BS,cAAAK,OAAA,6BAHF,SAASC,EAAMC,EAAqC,CAArC,IAAAC,EAAAD,EAAE,KAAAE,EAAK,KAAAC,CAT7B,EASsBF,EAAgBG,EAAAC,EAAhBJ,EAAgB,CAAd,MAAK,SAG3B,OAAOH,GAFWK,IAAS,QAAUG,EAAQC,EAErCC,EAAA,CAAU,IAAKN,GAASE,EAAO,CACzC,CCbO,SAASK,GAAe,CAAE,MAAAC,EAAO,UAAAC,EAAW,SAAAC,CAAS,EAAG,CAC7D,IAAMC,EAAcD,GAAA,KAAAA,EAAY,SAC1BE,EAAW,CAAC,EAGZC,GAAgB,IAAM,CAC1B,GAAI,CAAC,QAAS,QAAQ,EAAE,SAASL,EAAM,KAAK,EAAG,CAC7C,GAAIC,GAAa,QACf,MAAO,SACF,GAAIA,GAAa,MACtB,MAAO,QAIX,OAAOD,EAAM,KACf,GAAG,EAEGM,EAAY,QAEZC,EAAgB,CACpB,IAAK,SACL,MAAO,OACP,OAAQ,MACR,KAAM,OACR,EAUA,OAAAH,EAASG,EAAcJ,CAAW,CAAC,EAAIG,EAEnC,CAAC,SAAU,KAAK,EAAE,SAASD,CAAY,EACrC,CAAC,MAAO,QAAQ,EAAE,SAASF,CAAW,EACxCC,EAAS,MAAWE,EAEpBF,EAAS,OAAYE,EAEd,CAAC,QAAS,OAAO,EAAE,SAASD,CAAY,EAC7C,CAAC,MAAO,QAAQ,EAAE,SAASF,CAAW,EACxCC,EAAS,KAAUE,EAEnBF,EAAS,IAASE,EAIhB,CAAC,MAAO,QAAQ,EAAE,SAASH,CAAW,EACxCC,EAAS,KAAU,cAAcE,KAEjCF,EAAS,IAAS,cAAcE,KAI7BF,CACT,CCxDA,IAAMI,GAAc,CAClB,QAAS,CACP,QACA,cACA,eACA,kBACA,oBACA,mBACA,aACA,mBACA,mBACA,kBACA,iBACA,oBACA,kBACA,uBACA,OACA,aACA,QACF,EACA,KAAM,CAAC,cAAe,QAAS,eAAgB,MAAM,CACvD,EAEO,SAASC,GAA4BC,EAAqBC,EAAsB,CAzBvF,IAAAC,EAAAC,EAAAC,EA0BE,IAAMC,EAAe,OAAO,YAC1BP,GAAY,QACT,IAAKQ,GAAa,CAACA,EAAUN,EAAMM,CAAQ,CAAC,CAAC,EAC7C,OAAQC,GAAcA,EAAU,CAAC,IAAM,MAAS,CACrD,EACMC,EAAY,OAAO,YACvBV,GAAY,KACT,IAAKQ,GAAa,CAACA,EAAUN,EAAMM,CAAQ,CAAC,CAAC,EAC7C,OAAQC,GAAcA,EAAU,CAAC,IAAM,MAAS,CACrD,EAeA,GAAI,CAAC,SAAU,OAAO,EAAE,SAASF,EAAa,KAAQ,EAAG,CACvD,IAAMI,EAA2B,CAC/B,MAAO,MACP,OAAQ,OACV,EAEMC,EAAyB,CAACC,EAAOC,IAUjC,CAAC,MAAO,QAAQ,EAAE,SAASA,CAAI,EAC7BD,GAAS,QACJ,aAEA,cAGLA,GAAS,QACJ,YAEA,eAKPE,GAAiBX,EAAAG,EAAa,cAAb,KAAAH,EAA+B,EAChDY,GAAoBX,EAAAE,EAAa,QAAb,KAAAF,EAAyB,CAAC,EAC9CY,GAAcX,EAAAC,EAAa,OAAb,KAAAD,EAAwB,SACtCY,EAAeX,EAAa,MAGlCA,EAAa,MAAWY,EAAAC,EAAA,GACnBJ,GADmB,CAEtB,CAACJ,EAAuBM,EAAcD,CAAW,CAAC,EAAGF,CACvD,GAEA,IAAMM,EAAsB,CAAC,MAAO,QAAQ,EAAE,SAASJ,CAAW,EAC9Dd,EAAY,MACZA,EAAY,OAGhBI,EAAa,aAAkBc,EAAsBN,GAAkB,GAGvER,EAAa,MAAWI,EAAyBO,CAAY,EAG/D,MAAO,CACL,aAAAX,EACA,UAAAG,CACF,CACF,CR5BM,cAAAY,EAkBM,QAAAC,MAlBN,6BArDC,SAASC,EAAQC,EAOP,CAPO,IAAAC,EAAAD,EACtB,QAAAE,EACA,SAAAC,EACA,IAAAC,EACA,UAAAC,EAAY,GACZ,MAAAC,CA/BF,EA0BwBL,EAMnBM,EAAAC,EANmBP,EAMnB,CALH,SACA,WACA,MACA,YACA,UAGA,GAAM,CAAE,KAAMQ,EAAa,KAAMC,EAAa,IAAKC,CAAW,EAAIC,GAAsB,EAClF,CAACC,EAAWC,CAAY,EAAIC,EAASR,EAAM,KAAK,EAChD,CAACS,EAAUC,CAAW,EAAIF,EAASR,EAAM,IAAI,EAGnD,GAAIE,IAAgB,KAAM,CACxB,IAAMS,EAAmBT,EAAY,aAAa,YAAY,EACxDU,EAAkBV,EAAY,aAAa,WAAW,EAExDI,IAAcK,GAChBJ,EAAaI,CAAgB,EAG3BF,IAAaG,GACfF,EAAYE,CAAe,EAI/B,GAAM,CAAE,aAAAC,EAAc,UAAAC,EAAU,EAAIC,GAA4Bf,EAAOG,CAAW,EAE5Ea,EAAYC,GAAO,IAAI,EACvB,CAACC,EAAkBC,EAAmB,EAAIX,EAAS,IAAI,EAW7D,GATAY,GAAU,IAAM,CACd,IAAMC,EAAc,SAAS,cAAc1B,CAAM,EAE7C0B,GAAe,OACjBL,EAAU,QAAUK,EACpBF,GAAoBH,CAAS,EAEjC,EAAG,CAACrB,CAAM,CAAC,EAEPuB,GAAoB,KAAM,OAAO,KAErC,IAAMI,EAAaJ,EAAiB,QAAQ,sBAAsB,EAE9DK,EAAe,IACf,OAAO,QAAW,cACpBA,EAAe,OAAO,iBAAiBL,EAAiB,OAAO,EAAE,cAGnE,IAAMM,GAAcC,GAAe,CAAE,MAAAzB,EAAO,UAAAM,EAAW,SAAAG,CAAS,CAAC,EAEjE,OACElB,EAAS,OAARmC,EAAAC,EAAA,CAAa,YAAa,IAAUb,IAApC,CACC,UAAAxB,EAAS,SAAR,CAAe,WAAY4B,EAAkB,EAC9C5B,EAAS,SAAR,CACC,SAAAC,EAAC,OAAI,IAAKM,EACP,UAAAC,GACCR,EAACsC,EAAA,CACC,aAAcL,EACd,KAAK,oBACL,SAAS,WACT,IAAK,CACH,UAAW,gCACX,OAAQD,EAAW,OACnB,KAAMA,EAAW,KACjB,IAAKA,EAAW,IAChB,MAAOA,EAAW,KACpB,EACF,EAEFhC,EAAS,UAARoC,EAAAC,EAAA,CAAgB,QAAO,IAAKd,GAA5B,CAA0C,IAAKT,EAC9C,SAAAb,EAACsC,EAAK,OAAL,CACC,gBAAgB,QAChB,aAAa,KACb,EAAG,EACH,KAAK,kBACL,SAAS,WACT,IAAKF,EAAA,CACH,UAAW,kCACX,MAAO,SACJ5B,GAGL,UAAAT,EAACwC,GAAA,CAAI,MAAON,GAAa,EAExB5B,GACH,GACF,GACF,EACF,IACF,CAEJ,CAEAJ,EAAQ,MAASC,GAAmC,CAAnC,IAAAC,EAAAD,EAAE,KAAAI,CAxHnB,EAwHiBH,EAAUM,EAAAC,EAAVP,EAAU,CAAR,QACjB,OACEJ,EAAS,QAAR,CAAc,aAAW,QAAQ,QAAO,GACvC,SAAAA,EAACyC,EAAO,MAAPL,EAAAC,EAAA,CACC,IAAK,CACH,CACE,IAAK,EACL,MAAO,CACT,EACA9B,CACF,EACA,KAAK,gBACL,SAAS,YACLG,GAVL,CAYC,SAAAV,EAAC0C,GAAA,CAAU,OAAO,KAAK,KAAK,eAAe,GAC7C,EACF,CAEJ,EAEAxC,EAAQ,MAASC,GAAkC,CAAlC,IAAAC,EAAAD,EAAE,KAAAwC,CA7InB,EA6IiBvC,EAAUM,EAAAC,EAAVP,EAAU,CAAR,QACjB,OAAIuC,GAAO,KAAa,KAGtB3C,EAAC4C,EAAAP,EAAA,CACC,aAAa,YACb,YAAY,IACZ,IAAK,CACH,YAAa,GACf,EACA,OAAO,UACP,IAAKM,GACDjC,EACN,CAEJ,EAEAR,EAAQ,QAAWC,GAA8C,CAA9C,IAAAC,EAAAD,EAAE,SAAA0C,EAAS,MAAAC,CA9J9B,EA8JmB1C,EAAqBM,EAAAC,EAArBP,EAAqB,CAAnB,UAAS,UAC5B,OAAI0C,GAAS,KAAa,KAEnB9C,EAACyC,EAAO,QAAPJ,EAAA,CAAe,MAAOS,EAAO,QAASD,GAAanC,EAAO,CACpE,EAEAR,EAAQ,SAAYC,GAAsC,CAAtC,IAAAC,EAAAD,EAAE,UAAAG,CApKtB,EAoKoBF,EAAeM,EAAAC,EAAfP,EAAe,CAAb,aACpB,OAAIE,GAAY,KAAa,KAG3BN,EAAC+C,EAAK,MAALX,EAAAC,EAAA,CAAW,WAAW,WAAW,KAAK,YAAe3B,GAArD,CACE,SAAAJ,GACH,CAEJ,EAEAJ,EAAQ,UAAaC,GAA8C,CAA9C,IAAAC,EAAAD,EAAE,SAAA0C,EAAS,MAAAC,CA9KhC,EA8KqB1C,EAAqBM,EAAAC,EAArBP,EAAqB,CAAnB,UAAS,UAC9B,OAAI0C,GAAS,KAAa,KAEnB9C,EAACyC,EAAO,UAAPJ,EAAA,CAAiB,MAAOS,EAAO,QAASD,GAAanC,EAAO,CACtE,EAEAR,EAAQ,SAAYC,GAAsC,CAAtC,IAAAC,EAAAD,EAAE,UAAAG,CApLtB,EAoLoBF,EAAeM,EAAAC,EAAfP,EAAe,CAAb,aACpB,OAAIE,GAAY,KAAa,KAG3BN,EAAC+C,EAAK,MAALX,EAAAC,EAAA,CAAW,KAAK,YAAe3B,GAA/B,CACE,SAAAJ,GACH,CAEJ,EAEAJ,EAAQ,MAASC,GAAsC,CAAtC,IAAAC,EAAAD,EAAE,UAAAG,CA9LnB,EA8LiBF,EAAeM,EAAAC,EAAfP,EAAe,CAAb,aACjB,OAAIE,GAAY,KAAa,KAG3BN,EAAC+C,EAAK,MAALX,EAAAC,EAAA,CAAW,WAAW,OAAO,GAAI,EAAG,KAAK,SAAY3B,GAArD,CACE,SAAAJ,GACH,CAEJ,EStMA,OAAS,WAAA0C,OAAqB,cAC9B,OAAS,cAAAC,GAAY,YAAAC,OAAgB,QAI9B,SAASC,GAAQC,EAAgB,CACtC,GAAM,CAACC,EAAMC,CAAO,EAAIC,GAAe,IAAI,EACrC,CAAE,OAAAC,EAAQ,OAAAC,CAAO,EAAIC,GAAWC,CAAc,EAEpD,SAAeC,GAAY,QAAAC,EAAA,sBACzB,IAAMC,EAAiB,OAAO,YAC5B,OAAO,QAAQL,CAAM,EAAE,OAAO,CAAC,CAACM,EAAGC,CAAC,IAAM,CAAC,SAAU,QAAQ,EAAE,SAASD,CAAC,GAAKC,GAAK,IAAI,CACzF,EAIMC,EAAqB,MAFX,MAAM,IAAIC,GAAQV,EAAQM,CAAc,GAEf,QAAQV,CAAM,EAEvDE,EAAQW,CAAY,CACtB,GAEA,OAAIZ,IAAS,MACXO,EAAU,EAKL,CAAE,KAAAP,EAAM,UAAAO,CAAU,CAC3B,CCkBM,cAAAO,EAeE,QAAAC,MAfF,6BArCC,SAASC,GAAKC,EAAiC,CAAjC,IAAAC,EAAAD,EAAE,QAAAE,CATvB,EASqBD,EAAaE,EAAAC,EAAbH,EAAa,CAAX,WATvB,IAAAD,EAUE,GAAM,CAAE,KAAAK,EAAM,UAAAC,CAAU,EAAIC,GAAQL,CAAM,EAE1C,GAAIG,GAAQ,MAAQA,GAAA,MAAAA,EAAM,aAAeA,GAAA,MAAAA,EAAM,UAC7C,OAAO,KAGTA,EAAK,MAAM,EAEX,IAAMG,EAAOH,EAAK,eAAe,EAEjCG,GAAA,MAAAA,EAAM,QAEN,SAAeC,GAAgB,QAAAC,EAAA,sBAC7B,MAAML,EAAK,KAAK,EAGhBC,EAAU,CACZ,GAEA,SAAeK,GAAgB,QAAAD,EAAA,sBAC7B,MAAMF,EAAK,SAAS,EAGpBF,EAAU,CACZ,GAEA,IAAMM,EAAkBD,EAExB,OACEb,EAACe,EAAAC,EAAAC,EAAA,CACC,MAAM,QACN,OAAQP,EAAK,SACb,gBAAkBQ,GAAMA,EAAE,eAAe,EACzC,qBAAuBA,GAAMA,EAAE,eAAe,GAC1Cb,GALL,CAOC,UAAAN,EAACgB,EAAQ,MAAR,CAAc,QAASJ,EAAe,EAEvCZ,EAACgB,EAAQ,MAAR,CACC,KAAKb,EAAAQ,EAAK,WAAL,KAAAR,EAAiBQ,EAAK,SAC3B,KAAMA,EAAK,SAAW,QAAU,QAClC,EAEAX,EAACgB,EAAQ,MAAR,CAAe,SAAAL,EAAK,MAAM,EAC3BX,EAACgB,EAAQ,SAAR,CAAkB,SAAAL,EAAK,SAAS,EAEjCV,EAACmB,EAAK,IAAL,CAAS,GAAI,EAAG,WAAW,SAAS,eAAe,gBAClD,UAAApB,EAACgB,EAAQ,SAAR,CACE,YAAGR,EAAK,0BAA0B,KAAKA,EAAK,MAAM,OACrD,EAEAP,EAACmB,EAAK,IAAL,CAAS,IAAK,EACb,UAAApB,EAACgB,EAAQ,UAAR,CAAkB,MAAOL,EAAK,qBAAsB,QAASI,EAAiB,EAC/Ef,EAACgB,EAAQ,QAAR,CAAgB,MAAOL,EAAK,mBAAoB,QAASG,EAAe,GAC3E,GACF,IACF,CAEJ","names":["React","clsx","theme","flattenObject","obj","path","separator","acc","k","currentPath","currentValue","colorTokens","flattenObject","theme","styleProps","stylePropShorthands","prepValue","value","v","stylePropsMap","styleProps","propName","stylePropShorthandsMap","stylePropShorthands","shorthand","targetProps","stylePropsToCss","props","unmatchedProps","cssFromProps","propValue","matchedShorthand","styleProp","splitPropValues","_a","jsx","prefixPart","part","processPart","p","BoxWithRef","_a","ref","_b","as","children","className","css","props","__objRest","Component","cssFromProps","unmatchedProps","stylePropsToCss","processedPart","classNameWithPart","clsx","__spreadProps","__spreadValues","Box","Text_styles_exports","__export","Body1","Body2","Caption","Display1","Display2","H1","H2","H3","H4","base","fontFamilies","fontSizes","fontWeights","lineHeights","jsx","BaseText","_a","_b","as","children","css","variant","props","__objRest","Box","__spreadProps","__spreadValues","Text_styles_exports","textVariantNames","textVariantComponents","asProp","component","Text","Button_styles_exports","__export","Link","Plain","Primary","Secondary","base","radii","space","colors","jsx","jsxs","BaseButton","_a","_b","as","children","css","title","variant","props","__objRest","Box","__spreadProps","__spreadValues","Button_styles_exports","Text","buttonVariantNames","buttonVariantComponents","variantPart","component","part","Button","React","jsx","Row","_a","ref","_b","children","css","props","__objRest","Box","__spreadProps","__spreadValues","Column","Flex","createContext","ThemeProvider","getVarName","variable","matches","get","obj","path","result","key","walkObject","fn","clone","_value","currentPath","setVar","element","variable","value","getVarName","setElementVars","varsOrContract","tokens","_contract","walkObject","path","get","_vars","varName","useEffect","mapThemePropToThemeVars","themeLevel","contractLevel","theme","acc","key","currentValue","useThemeOverrides","themeOverrides","selector","useEffect","mappedThemeVars","mapThemePropToThemeVars","root","setElementVars","jsx","FrigadeContext","createContext","Provider","apiKey","children","config","theme","useThemeOverrides","ThemeProvider","useEffect","useRef","useState","XMarkIcon","Popover","useCallback","useLayoutEffect","useState","useBoundingClientRect","initialRect","rect","setRect","node","setNode","ref","animationPulse","jsx","jsxs","Dot","_a","_b","style","part","props","__objRest","Box","__spreadProps","__spreadValues","animationPulse","jsx","Image","_a","_b","part","src","props","__objRest","Box","__spreadValues","jsx","getVideoEmbedSrc","videoUri","_a","_b","_c","Video","part","src","props","__objRest","videoEmbedSrc","Box","__spreadValues","jsx","Media","_a","_b","src","type","props","__objRest","Video","Image","__spreadValues","getDotPosition","props","alignAttr","sideAttr","currentSide","dotProps","currentAlign","dotOffset","oppositeSides","RADIX_PROPS","mapTooltipPropsToRadixProps","props","contentRect","_a","_b","_c","contentProps","propName","propEntry","rootProps","mapToOriginalAlignValues","mapAlignOffsetToMargin","align","side","originalOffset","originalStyleProp","currentSide","currentAlign","__spreadProps","__spreadValues","lengthOfCurrentSide","jsx","jsxs","Tooltip","_a","_b","anchor","children","css","spotlight","style","props","__objRest","contentNode","contentRect","contentRef","useBoundingClientRect","alignAttr","setAlignAttr","useState","sideAttr","setSideAttr","currentAlignAttr","currentSideAttr","contentProps","rootProps","mapTooltipPropsToRadixProps","anchorRef","useRef","anchorElementRef","setAnchorElementRef","useEffect","anchorQuery","anchorRect","anchorRadius","dotPosition","getDotPosition","__spreadProps","__spreadValues","Box","Flex","Dot","Button","XMarkIcon","src","Media","onClick","title","Text","Frigade","useContext","useState","useFlow","flowId","flow","setFlow","useState","apiKey","config","useContext","FrigadeContext","fetchFlow","__async","filteredConfig","k","v","flowResponse","Frigade","jsx","jsxs","Tour","_a","_b","flowId","props","__objRest","flow","fetchFlow","useFlow","step","handleDismiss","__async","handlePrimary","handleSecondary","Tooltip","__spreadProps","__spreadValues","e","Flex"]}
1
+ {"version":3,"sources":["../src/components/Dialog/index.tsx","../src/components/Box/index.tsx","../src/components/Box/styleProps.ts","../src/shared/tokens/borders.ts","../src/shared/tokens/palette.ts","../src/shared/tokens/radii.ts","../src/shared/tokens/semantic.ts","../src/shared/tokens/shadows.ts","../src/shared/tokens/space.ts","../src/shared/tokens/typography.ts","../src/shared/tokens/index.ts","../src/shared/flattenObject.ts","../src/shared/theme/index.ts","../src/components/Box/stylePropsToCss.ts","../src/shared/sanitize.ts","../src/components/Text/Text.styles.ts","../src/components/Text/index.tsx","../src/components/Button/Button.styles.ts","../src/components/Button/index.tsx","../src/components/Card/index.tsx","../src/components/Flex/Flex.tsx","../src/components/Media/Image.tsx","../src/components/Media/Video.tsx","../src/components/Media/Media.tsx","../src/hooks/useFlow.ts","../src/components/Provider/index.tsx","../src/hooks/useFlowHandlers.ts","../src/hooks/useStepHandlers.ts","../src/components/Announcement/index.tsx","../src/components/Banner/index.tsx","../src/components/Tooltip/index.tsx","../src/hooks/useBoundingClientRect.ts","../src/components/Tooltip/Dot.tsx","../src/components/Tooltip/getDotPosition.ts","../src/components/Tooltip/mapTooltipPropsToPopoverProps.ts","../src/hooks/useModal.ts","../src/components/Tour/TourStep.tsx","../src/components/Tour/index.tsx","../src/hooks/useFrigade.ts"],"names":["RadixDialog","XMarkIcon","React","clsx","kcp","borders","palette","radii","colorVar","colorName","semantic","shadows","SPACE_UNIT","spaceValue","key","spaceKeys","space","typography","tokens","flattenObject","obj","path","separator","acc","k","currentPath","currentValue","createThemeVariables","mapTokensToThemeVariables","newObj","themeVariables","theme","omittedCSSProperties","filteredCSSProperties","prop","_","char","defaultCSSProperties","colorTokens","themedStyleProps","styleProps","stylePropShorthands","pseudoStyleProps","prepValue","value","v","stylePropsMap","propName","stylePropShorthandsMap","shorthand","targetProps","preservedProps","elementsWithPreservedProps","getPseudoClass","name","pseudo","stylePropsToCss","props","element","unmatchedProps","cssFromProps","getTargetObject","pseudoSelector","match","propValue","matchedShorthand","p","fullPropName","styleProp","splitPropValues","clippedPropName","DOMPurify","getWindow","JSDOM","sanitize","dirty","jsx","prefixPart","part","processPart","BoxWithRef","as","children","className","css","ref","Component","processedPart","classNameWithPart","cssProp","Box","Text_styles_exports","__export","Body1","Body2","Caption","Display1","Display2","H1","H2","H3","H4","base","BaseText","variant","textVariantNames","textVariantComponents","asProp","component","Text","Button_styles_exports","Link","Plain","Primary","Secondary","jsxs","BaseButton","title","variantPart","buttonVariantNames","buttonVariantComponents","Button","Row","Column","Flex","Card","Image","src","getVideoEmbedSrc","videoUri","_a","_b","_c","Video","videoEmbedSrc","Media","type","Dialog","e","onClick","current","total","dots","i","useContext","useEffect","useState","createContext","useRef","Global","ThemeProvider","Frigade","FrigadeContext","Provider","navigate","themeOverrides","modals","setModals","frigade","navigateHandler","url","target","useFlow","flowId","config","flow","setFlow","setRandomString","handler","updatedFlow","flowInstance","useCallback","useFlowHandlers","onComplete","onDismiss","lastCompleted","useStepHandlers","step","onPrimary","onSecondary","Announcement","variables","handleDismiss","handlePrimary","handleSecondary","Banner","Popover","useLayoutEffect","useBoundingClientRect","initialRect","rect","setRect","node","setNode","keyframes","pulse","Dot","style","getDotPosition","alignAttr","sideAttr","currentSide","dotProps","getCurrentAlign","dotOffset","oppositeSides","currentAlign","RADIX_PROPS","mapTooltipPropsToPopoverProps","contentRect","contentProps","propEntry","rootProps","mapToOriginalAlignValues","mapAlignOffsetToMargin","align","side","originalOffset","originalStyleProp","lengthOfCurrentSide","Tooltip","anchor","spotlight","contentNode","contentRef","setAlignAttr","setSideAttr","currentAlignAttr","currentSideAttr","anchorRef","anchorElementRef","setAnchorElementRef","anchorQuery","anchorRect","anchorRadius","dotPosition","useModal","isCurrentModal","setIsCurrentModal","newIsCurrentModal","TourStep","Tour","useFrigade"],"mappings":"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","sourcesContent":["import * as RadixDialog from '@radix-ui/react-dialog'\nimport { XMarkIcon } from '@heroicons/react/24/solid'\n\nimport { Box, type BoxProps } from '../Box'\nimport { Button, ButtonProps } from '../Button'\nimport { Card } from '../Card'\nimport { Media, MediaProps } from '../Media'\nimport { Text, TextProps } from '../Text'\n\nimport { theme } from '../../shared/theme'\n\nexport interface DialogProps extends BoxProps {}\n\n// TODO: Add any RadixDialog props we want to support here\nexport function Dialog({ children, ...props }: DialogProps) {\n return (\n <RadixDialog.Root defaultOpen={true} modal={true}>\n <RadixDialog.Portal>\n <RadixDialog.Overlay\n style={{ background: 'rgb(0 0 0 / 0.5)', position: 'fixed', inset: 0 }}\n />\n <RadixDialog.Content\n asChild\n onOpenAutoFocus={(e) => e.preventDefault()}\n onPointerDownOutside={(e) => e.preventDefault()}\n >\n <Card\n boxShadow=\"md\"\n css={{\n left: '50%',\n maxWidth: 430,\n top: '50%',\n transform: 'translate(-50%, -50%)',\n }}\n p={8}\n position=\"fixed\"\n textAlign=\"center\"\n {...props}\n >\n {children}\n </Card>\n </RadixDialog.Content>\n </RadixDialog.Portal>\n </RadixDialog.Root>\n )\n}\n\nDialog.Close = (props: ButtonProps) => {\n return (\n <RadixDialog.Close aria-label=\"Close\" asChild>\n <Button.Plain\n css={{\n top: '4px',\n right: '-4px',\n }}\n part=\"close\"\n position=\"absolute\"\n {...props}\n >\n <XMarkIcon height=\"24\" fill=\"currentColor\" />\n </Button.Plain>\n </RadixDialog.Close>\n )\n}\n\nDialog.Subtitle = ({ children, ...props }: TextProps) => {\n return (\n <RadixDialog.Description asChild>\n <Text.Body2 part=\"subtitle\" mb={5} {...props}>\n {children}\n </Text.Body2>\n </RadixDialog.Description>\n )\n}\n\nDialog.Media = ({ src, ...props }: MediaProps) => {\n if (src == null) return null\n\n return <Media borderRadius=\"md\" src={src} {...props} />\n}\n\nDialog.Primary = ({ onClick, title, ...props }: ButtonProps) => {\n if (title == null) return null\n\n return <Button.Primary title={title} onClick={onClick} {...props} />\n}\n\nDialog.ProgressDots = ({ current, total }: { current: number; total: number }) => {\n const dots = [...Array(total)].map((_, i) => {\n return (\n <circle\n key={i}\n r={4}\n cx={4 + 16 * i}\n cy=\"4px\"\n fill={current === i ? theme.colors.blue500 : theme.colors.blue800}\n />\n )\n })\n return (\n <Box\n as=\"svg\"\n width={16 * total - 8}\n height=\"8px\"\n viewBox={`0 0 ${16 * total - 8} 8`}\n margin=\"5 auto\"\n >\n {dots}\n </Box>\n )\n}\n\nDialog.Secondary = ({ onClick, title, ...props }: ButtonProps) => {\n if (title == null) return null\n\n return <Button.Secondary title={title} onClick={onClick} {...props} />\n}\n\nDialog.Title = ({ children, ...props }: TextProps) => {\n return (\n <RadixDialog.Title asChild>\n <Text.H3 mb={1} part=\"title\" {...props}>\n {children}\n </Text.H3>\n </RadixDialog.Title>\n )\n}\n","import * as React from 'react'\nimport { clsx } from 'clsx'\n\nimport { type StyleProps } from './styleProps'\nimport { stylePropsToCss } from './stylePropsToCss'\nimport { sanitize } from '../../shared/sanitize'\n\nfunction prefixPart(part: string | undefined) {\n return part ? `fr-${part}` : part\n}\n\nfunction processPart(part: Part | undefined) {\n if (!part) return part\n\n return Array.isArray(part) ? part.map((p) => processPart(p)).join(' ') : prefixPart(part)\n}\n\ntype Part = string | Part[]\n\nexport type BoxProps<T extends React.ElementType = React.ElementType> = {\n as?: T\n part?: Part\n} & StyleProps &\n React.ComponentPropsWithoutRef<T>\n\nfunction BoxWithRef<T extends React.ElementType = React.ElementType>(\n { as, children, className, css = {}, part, ...props }: BoxProps<T>,\n ref: React.ForwardedRef<HTMLDivElement>\n) {\n const Component = as ?? 'div'\n\n const { cssFromProps, unmatchedProps } = stylePropsToCss(props, Component)\n\n const processedPart = processPart(part)\n const classNameWithPart = className || processedPart ? clsx(className, processedPart) : undefined\n const cssProp = [{ boxSizing: 'border-box' }, cssFromProps, css]\n\n if (typeof children === 'string') {\n return (\n <Component\n className={classNameWithPart}\n css={cssProp}\n {...unmatchedProps}\n ref={ref}\n dangerouslySetInnerHTML={sanitize(children)}\n />\n )\n }\n\n return (\n <Component className={classNameWithPart} css={cssProp} {...unmatchedProps} ref={ref}>\n {children}\n </Component>\n )\n}\n\nexport const Box = React.forwardRef(BoxWithRef) as <\n T extends React.ElementType = React.ElementType\n>(\n props: BoxProps<T>\n) => React.ReactElement\n","import kcp from 'known-css-properties'\nimport type { CSSProperties } from 'react'\n\nimport { theme } from '../../shared/theme'\nimport { flattenObject } from '../../shared/flattenObject'\n\n// Don't use these as CSS props, pass them through to HTML\nconst omittedCSSProperties = new Set([\n 'alt', // Mozilla doesn't have this listed as a valid CSS property ¯\\_(ツ)_/¯\n 'size', // Only applies to @page, not used for styling components. Breaks <input>\n 'src', // Only applies to @font-face, not used for styling components. Breaks <img>, <video>, et al\n])\n\nconst filteredCSSProperties = kcp.all\n .filter((prop) => prop.indexOf('-') != 0 && !omittedCSSProperties.has(prop))\n .map((prop) => [prop.replace(/-([a-z])/g, (_, char) => char.toUpperCase()), null])\n\nconst defaultCSSProperties = Object.fromEntries(filteredCSSProperties)\n\n// Recursive type for flattened color names\n// SEE: https://stackoverflow.com/a/47058976\ntype PathsToStringProps<T> = T extends string\n ? []\n : {\n [K in Extract<keyof T, string>]: [K, ...PathsToStringProps<T[K]>]\n }[Extract<keyof T, string>]\n\ntype Join<T extends string[], D extends string> = T extends []\n ? never\n : T extends [infer F]\n ? F\n : T extends [infer F, ...infer R]\n ? F extends string\n ? `${F}${D}${Join<Extract<R, string[]>, D>}`\n : never\n : string\n\ntype ColorName = Join<PathsToStringProps<typeof theme.colors>, '.'>\n\nconst colorTokens = flattenObject(theme.colors) as Record<ColorName, string>\n\nconst themedStyleProps = {\n color: colorTokens,\n backgroundColor: colorTokens,\n borderColor: colorTokens,\n\n border: theme.borders,\n borderRadius: theme.radii,\n borderWidth: theme.borderWidths,\n boxShadow: theme.shadows,\n\n fontFamily: theme.fontFamilies,\n fontSize: theme.fontSizes,\n fontWeight: theme.fontWeights,\n\n gap: theme.space,\n\n lineHeight: theme.lineHeights,\n\n margin: theme.space,\n marginBottom: theme.space,\n marginLeft: theme.space,\n marginRight: theme.space,\n marginTop: theme.space,\n\n padding: theme.space,\n paddingBottom: theme.space,\n paddingLeft: theme.space,\n paddingRight: theme.space,\n paddingTop: theme.space,\n} as const\n\nexport const styleProps = {\n ...defaultCSSProperties,\n ...themedStyleProps,\n}\n\nexport const stylePropShorthands = {\n bg: ['backgroundColor'],\n\n m: ['margin'],\n mt: ['marginTop'],\n mr: ['marginRight'],\n mb: ['marginBottom'],\n ml: ['marginLeft'],\n mx: ['marginLeft', 'marginRight'],\n my: ['marginTop', 'marginBottom'],\n\n p: ['padding'],\n pt: ['paddingTop'],\n pr: ['paddingRight'],\n pb: ['paddingBottom'],\n pl: ['paddingLeft'],\n px: ['paddingLeft', 'paddingRight'],\n py: ['paddingTop', 'paddingBottom'],\n}\n\nexport const pseudoStyleProps = new Set(['active', 'focus', 'focusVisible', 'focusWithin', 'hover'])\n\ntype ThemedStyleProps = {\n [K in keyof typeof themedStyleProps]: keyof (typeof themedStyleProps)[K]\n}\n\ntype FilteredCSSProps = Omit<\n {\n [key in keyof CSSProperties]: CSSProperties[key]\n },\n | `-${string}`\n | `Moz${string}`\n | `ms${string}`\n | `Webkit${string}`\n | `Khtml${string}`\n | `O${string}`\n>\n\nexport type ThemedStyleProp<K extends keyof ThemedStyleProps> = ThemedStyleProps[K] | (string & {})\n\nexport interface StyleProps extends FilteredCSSProps {\n backgroundColor?: ThemedStyleProp<'backgroundColor'>\n border?: ThemedStyleProp<'border'>\n borderColor?: ThemedStyleProp<'borderColor'>\n borderRadius?: ThemedStyleProp<'borderRadius'>\n borderWidth?: ThemedStyleProp<'borderWidth'>\n boxShadow?: ThemedStyleProp<'boxShadow'>\n color?: ThemedStyleProp<'color'>\n fontFamily?: ThemedStyleProp<'fontFamily'>\n fontSize?: ThemedStyleProp<'fontSize'>\n fontWeight?: ThemedStyleProp<'fontWeight'>\n gap?: ThemedStyleProp<'gap'>\n lineHeight?: ThemedStyleProp<'lineHeight'>\n margin?: ThemedStyleProp<'margin'>\n marginBottom?: ThemedStyleProp<'marginBottom'>\n marginLeft?: ThemedStyleProp<'marginLeft'>\n marginRight?: ThemedStyleProp<'marginRight'>\n marginTop?: ThemedStyleProp<'marginTop'>\n padding?: ThemedStyleProp<'padding'>\n paddingBottom?: ThemedStyleProp<'paddingBottom'>\n paddingLeft?: ThemedStyleProp<'paddingLeft'>\n paddingRight?: ThemedStyleProp<'paddingRight'>\n paddingTop?: ThemedStyleProp<'paddingTop'>\n}\n","export const borders = {\n borders: {\n md: '1px solid',\n },\n borderWidths: {\n 0: '0',\n md: '1px',\n },\n}\n","export const palette = {\n black: '#000000',\n gray100: '#14161A',\n gray200: '#181B20',\n gray300: '#1F2329',\n gray400: '#2E343D',\n gray500: '#4C5766',\n gray600: '#5A6472',\n gray700: '#C5CBD3',\n gray800: '#E2E5E9',\n gray900: '#F1F2F4',\n white: '#ffffff',\n blue400: '#015AC6',\n blue500: '#0171F8',\n blue800: '#DBECFF',\n blue900: '#F5F9FF',\n green400: '#009E37',\n green500: '#00D149',\n green800: '#DBFFE8',\n transparent: '#FFFFFF00',\n inherit: 'inherit',\n\n // This color isn't in the Design System yet, but it's used in old components\n red500: '#c00000',\n}\n","export const radii = {\n md: '10px',\n lg: '20px',\n round: '50%',\n}\n","const colorVar = (colorName: string) => `var(--fr-colors-${colorName})`\n\nexport const semantic = {\n neutral: {\n background: colorVar('white'),\n border: colorVar('gray500'),\n foreground: colorVar('black'),\n surface: colorVar('gray700'),\n\n active: {\n background: colorVar('white'),\n border: colorVar('gray900'),\n foreground: colorVar('black'),\n surface: colorVar('gray700'),\n },\n focus: {\n background: colorVar('white'),\n border: colorVar('gray900'),\n foreground: colorVar('black'),\n surface: colorVar('gray700'),\n },\n hover: {\n background: colorVar('white'),\n border: colorVar('gray900'),\n foreground: colorVar('black'),\n surface: colorVar('gray700'),\n },\n },\n\n primary: {\n background: colorVar('blue500'),\n border: colorVar('blue500'),\n foreground: colorVar('white'),\n surface: colorVar('blue500'),\n\n active: {\n background: colorVar('blue400'),\n border: colorVar('blue400'),\n foreground: colorVar('white'),\n surface: colorVar('blue400'),\n },\n focus: {\n background: colorVar('blue500'),\n border: colorVar('blue500'),\n foreground: colorVar('white'),\n surface: colorVar('blue500'),\n },\n hover: {\n background: colorVar('blue400'),\n border: colorVar('blue400'),\n foreground: colorVar('white'),\n surface: colorVar('blue400'),\n },\n },\n\n secondary: {\n background: colorVar('gray900'),\n border: colorVar('gray900'),\n foreground: colorVar('black'),\n surface: colorVar('gray900'),\n\n active: {\n background: colorVar('gray800'),\n border: colorVar('gray800'),\n foreground: colorVar('black'),\n surface: colorVar('gray800'),\n },\n focus: {\n background: colorVar('gray900'),\n border: colorVar('gray900'),\n foreground: colorVar('black'),\n surface: colorVar('gray900'),\n },\n hover: {\n background: colorVar('gray800'),\n border: colorVar('gray800'),\n foreground: colorVar('black'),\n surface: colorVar('gray800'),\n },\n },\n}\n","export const shadows = {\n md: '0px 4px 20px rgba(0, 0, 0, 0.1)',\n}\n","const SPACE_VALUE = 4\nconst SPACE_UNIT = 'px'\n\nconst spaceValue = (key: SpaceKeys[any]) =>\n typeof key === 'number' ? `${SPACE_VALUE * key}${SPACE_UNIT}` : key\n\nconst spaceKeys = [\n -20,\n -19,\n -18,\n -17,\n -16,\n -15,\n -14,\n -13,\n -12,\n -11,\n -10,\n -9,\n -8,\n -7,\n -6,\n -5,\n -4,\n -3,\n -2,\n -1,\n -0.5,\n 0,\n 0.5,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 16,\n 17,\n 18,\n 19,\n 20,\n 'auto',\n] as const\n\ntype SpaceKeys = typeof spaceKeys\n\ntype SpaceTokens = {\n [K in SpaceKeys[any]]: string\n}\nexport const space = Object.fromEntries(\n spaceKeys.map((key) => [key, spaceValue(key)])\n) as SpaceTokens\n","export const typography = {\n fontFamilies: {\n default: 'TT Interphases Pro, sans-serif',\n },\n fontSizes: {\n xs: '12px',\n sm: '14px',\n md: '16px',\n lg: '18px',\n xl: '20px',\n '2xl': '24px',\n '3xl': '30px',\n '4xl': '36px',\n '5xl': '48px',\n },\n fontWeights: {\n thin: '100',\n extralight: '200',\n light: '300',\n regular: '400',\n medium: '500',\n demibold: '600',\n bold: '700',\n extrabold: '800',\n black: '900',\n },\n letterSpacings: {\n md: '0.02em',\n },\n lineHeights: {\n xs: '18px',\n sm: '22px',\n md: '24px',\n lg: '26px',\n xl: '30px',\n '2xl': '38px',\n '3xl': '46px',\n '4xl': '60px',\n },\n}\n","import { borders } from './borders'\nimport { palette } from './palette'\nimport { radii } from './radii'\nimport { semantic } from './semantic'\nimport { shadows } from './shadows'\nimport { space } from './space'\nimport { typography } from './typography'\n\n// Package up everything everywhere all at once for convenience\nexport const tokens = {\n ...borders,\n\n colors: {\n ...palette,\n ...semantic,\n },\n\n ...typography,\n\n radii,\n shadows,\n space,\n}\n\nexport type Tokens = typeof tokens\n","export function flattenObject(obj: Record<any, any>, path = '', separator = '.') {\n return Object.keys(obj).reduce((acc, k) => {\n const prefix = path.length ? `${path}${separator}` : ''\n const currentPath = `${prefix}${k}`\n const currentValue = obj[k]\n\n if (typeof currentValue === 'object' && currentValue !== null && !Array.isArray(currentValue)) {\n Object.assign(acc, flattenObject(currentValue, currentPath, separator))\n } else {\n acc[currentPath] = currentValue\n }\n\n return acc\n }, {})\n}\n","import { tokens, Tokens } from '../tokens'\nimport { flattenObject } from '../flattenObject'\n\nexport type Theme = Partial<Tokens>\n\n// Transform tokens to a flat list of CSS variables and values to inject into the page\n// IN: { colors: { black: '#000' } }, OUT: { '--fr-colors-black': '#000' }\nexport function createThemeVariables(tokens: Theme) {\n return flattenObject(tokens, '--fr', '-')\n}\n\n// Swap token values out and replace them with the CSS variables we defined\n// IN: { colors: { black: '#000' } }, OUT: { colors: { black: 'var(--fr-colors-black)' } }\nfunction mapTokensToThemeVariables(tokens: Tokens, path = '--fr'): Theme {\n const newObj: Theme = {}\n\n Object.keys(tokens).forEach((key) => {\n const currentValue = tokens[key]\n\n if (typeof currentValue === 'object' && currentValue !== null && !Array.isArray(currentValue)) {\n newObj[key] = mapTokensToThemeVariables(currentValue, `${path}-${key}`)\n } else {\n newObj[key] = `var(${path}-${key})`\n }\n })\n\n return newObj\n}\n\nexport const themeVariables = createThemeVariables(tokens)\n\nexport const theme = mapTokensToThemeVariables(tokens)\n","import { pseudoStyleProps, styleProps, stylePropShorthands } from './styleProps'\n\n/*\nPrefix these props to allow for usage in CSS & HTML:\n color\n - HTML: obsolete\n\n background\n - HTML: obsolete\n\n border\n - HTML: obsolete\n\n content\n - HTML: only used in <meta>, not relevant to components\n\n translate\n - used by both. Prefix _translate to force pass-through to HTML?\n\n\n height\n width\n - HTML: used by <canvas>, <embed>, <iframe>, <img>, <input>, <object>, <video>\n - Can automatically send these to both HTML and CSS for those elements and allow manual prefixing just in case (like if you want to set HTML width to something different that CSS width)\n\n*/\n\nfunction prepValue(value: any) {\n if (Array.isArray(value)) {\n return new Map(value.map((v) => [v, v]))\n } else if (typeof value === 'object' && value !== null) {\n return new Map(Object.entries(value))\n } else if (['string', 'number'].includes(typeof value)) {\n return new Map([value, value])\n }\n\n return new Map()\n}\n\nconst stylePropsMap = new Map(\n Object.entries(styleProps).map(([propName, value]) => {\n return [propName, prepValue(value)]\n })\n)\n\nconst stylePropShorthandsMap = new Map(\n Object.entries(stylePropShorthands).map(([shorthand, targetProps]) => {\n return [shorthand, new Set(targetProps)]\n })\n)\n\n// TL;DR: Replaced elements should always have width & height HTML attrs set because intrinsic height / width = aspect ratio\nconst preservedProps = new Set(['height', 'width'])\nconst elementsWithPreservedProps = new Set([\n 'canvas',\n 'embed',\n 'iframe',\n 'img',\n 'input',\n 'object',\n 'video',\n])\n\nfunction getPseudoClass(propName: string) {\n // We're intentionally only grabbing the initial name and first pseudo class for now\n // We can support styleProp:hover:focus easily enough by running through the whole array\n const [name, pseudo] = propName.split(':')\n\n return [name, pseudoStyleProps.has(pseudo) ? pseudo : null]\n}\n\nexport function stylePropsToCss(props: Record<any, any>, element: React.ElementType = 'div') {\n const unmatchedProps = Object.assign({}, props)\n const cssFromProps = {}\n\n function getTargetObject(pseudo: string | null) {\n if (pseudo == null) {\n return cssFromProps\n }\n\n const hyphenatedPseudo = pseudo.replace(/[A-Z]/g, (match) => `-${match.toLocaleLowerCase()}`)\n\n const pseudoSelector = `&:${hyphenatedPseudo}`\n\n if (cssFromProps[pseudoSelector] == null) {\n cssFromProps[pseudoSelector] = {}\n }\n\n return cssFromProps[pseudoSelector]\n }\n\n // Convert shorthand styleProps to full versions\n Object.entries(unmatchedProps).forEach(([propName, propValue]) => {\n const [name, pseudo] = getPseudoClass(propName)\n\n const matchedShorthand = stylePropShorthandsMap.get(name)\n if (matchedShorthand != null) {\n matchedShorthand.forEach((p) => {\n const fullPropName = `${p}${pseudo ? ':' + pseudo : ''}`\n unmatchedProps[fullPropName] = propValue\n })\n\n delete unmatchedProps[propName]\n }\n })\n\n // Convert styleProps to style object\n Object.entries(unmatchedProps).forEach(([fullPropName, propValue]) => {\n const [propName, pseudo] = getPseudoClass(fullPropName)\n const styleProp = stylePropsMap.get(propName)\n\n if (styleProp != null) {\n // Split space-separated values out and process them individually\n if (typeof propValue === 'string' && propValue.indexOf(' ') > -1) {\n const splitPropValues = propValue.split(' ')\n\n getTargetObject(pseudo)[propName] = splitPropValues\n .map((v) => styleProp.get(v.toString()) ?? v)\n .join(' ')\n }\n\n // Replace known token values (e.g. lineHeight=\"xl\")\n else if (styleProp.has(propValue.toString())) {\n getTargetObject(pseudo)[propName] = styleProp.get(propValue.toString())\n }\n\n // Pass value through, we trust TypeScript to catch invalid values, right?\n else {\n getTargetObject(pseudo)[propName] = propValue\n }\n\n // Don't delete the special props that get passed through to certain tags by default\n if (\n typeof element !== 'string' ||\n !elementsWithPreservedProps.has(element) ||\n !preservedProps.has(propName)\n ) {\n delete unmatchedProps[fullPropName]\n }\n }\n })\n\n // Remove prefix from prefixed style props and pass them through\n Object.keys(unmatchedProps).forEach((propName) => {\n const clippedPropName = propName.substring(1)\n\n if (propName.indexOf('_') === 0 && stylePropsMap.has(clippedPropName)) {\n unmatchedProps[clippedPropName] = unmatchedProps[propName]\n\n delete unmatchedProps[propName]\n }\n })\n\n return { cssFromProps, unmatchedProps }\n}\n","import DOMPurify from 'dompurify'\n\nfunction getWindow() {\n if (typeof window === 'undefined') {\n // NOTE: JSDOM is required inline because it has import side effects that depend on node\n const { JSDOM } = require('jsdom')\n return new JSDOM('<!DOCTYPE html>').window\n }\n\n return window\n}\n\nexport function sanitize(dirty?: string) {\n if (!dirty) {\n return { __html: '' }\n }\n\n return {\n __html: DOMPurify(getWindow()).sanitize(dirty, {\n ALLOWED_TAGS: [\n 'b',\n 'i',\n 'a',\n 'span',\n 'div',\n 'p',\n 'pre',\n 'u',\n 'br',\n 'img',\n 'code',\n 'li',\n 'ul',\n 'table',\n 'tbody',\n 'thead',\n 'tr',\n 'td',\n 'th',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'video',\n ],\n ALLOWED_ATTR: [\n 'style',\n 'class',\n 'target',\n 'id',\n 'href',\n 'alt',\n 'src',\n 'controls',\n 'autoplay',\n 'loop',\n 'muted',\n ],\n }),\n }\n}\n","const base = {\n color: 'neutral.foreground',\n fontFamily: 'default',\n margin: '0',\n}\n\nexport const Display1 = {\n ...base,\n fontSize: '5xl',\n fontWeight: 'bold',\n lineHeight: '4xl',\n}\n\nexport const Display2 = {\n ...base,\n fontSize: '4xl',\n fontWeight: 'bold',\n lineHeight: '3xl',\n}\n\nexport const H1 = {\n ...base,\n fontSize: '3xl',\n fontWeight: 'bold',\n lineHeight: '2xl',\n}\n\nexport const H2 = {\n ...base,\n fontSize: '2xl',\n fontWeight: 'bold',\n lineHeight: 'xl',\n}\n\nexport const H3 = {\n ...base,\n fontSize: 'xl',\n fontWeight: 'bold',\n lineHeight: 'lg',\n}\n\nexport const H4 = {\n ...base,\n fontSize: 'lg',\n fontWeight: 'bold',\n lineHeight: 'md',\n}\n\nexport const Body1 = {\n ...base,\n fontSize: 'md',\n fontWeight: 'regular',\n lineHeight: 'md',\n}\n\nexport const Body2 = {\n ...base,\n fontSize: 'sm',\n fontWeight: 'regular',\n lineHeight: 'md',\n}\n\nexport const Caption = {\n ...base,\n fontSize: 'xs',\n fontWeight: 'regular',\n lineHeight: 'sm',\n}\n","import { Box, BoxProps } from '../Box'\n\nimport * as styles from './Text.styles'\n\ntype TextVariant =\n | 'Display1'\n | 'Display2'\n | 'H1'\n | 'H2'\n | 'H3'\n | 'H4'\n | 'Body1'\n | 'Body2'\n | 'Caption'\n\nexport interface TextProps extends BoxProps {\n variant?: TextVariant\n}\n\nfunction BaseText({ as = 'span', children, variant = 'Body1', ...props }: TextProps) {\n return (\n <Box as={as} {...styles[variant]} {...props}>\n {children}\n </Box>\n )\n}\n\nconst textVariantNames: TextVariant[] = [\n 'Display1',\n 'Display2',\n 'H1',\n 'H2',\n 'H3',\n 'H4',\n 'Body1',\n 'Body2',\n 'Caption',\n]\n\nconst textVariantComponents = Object.fromEntries(\n textVariantNames.map((variant) => {\n const asProp = ['H1', 'H2', 'H3', 'H4'].includes(variant)\n ? (variant.toLowerCase() as 'h1' | 'h2' | 'h3' | 'h4')\n : undefined\n const component = (props: TextProps) => (\n <BaseText as={asProp} {...props} variant={variant}>\n {props.children}\n </BaseText>\n )\n\n component.displayName = `Text.${variant}`\n\n return [variant, component]\n })\n)\n\nexport const Text = Object.assign(BaseText, textVariantComponents)\n","const base = {\n borderWidth: '0',\n borderRadius: 'md',\n padding: '2 4',\n}\n\nexport const Primary = {\n ...base,\n backgroundColor: 'primary.surface',\n color: 'primary.foreground',\n\n 'backgroundColor:hover': 'primary.hover.surface',\n}\n\nexport const Secondary = {\n ...base,\n\n backgroundColor: 'secondary.surface',\n color: 'secondary.foreground',\n\n 'backgroundColor:hover': 'secondary.hover.surface',\n}\n\nexport const Link = {\n ...base,\n\n backgroundColor: 'transparent',\n color: 'primary.surface',\n\n 'color:hover': 'primary.hover.surface',\n}\n\nexport const Plain = {\n ...base,\n\n backgroundColor: 'transparent',\n color: 'neutral.foreground',\n}\n","import { Interpolation } from '@emotion/react'\nimport { Box, BoxProps } from '../Box'\nimport { Text } from '../Text'\n\nimport * as styles from './Button.styles'\n\n// TODO: Generate this type from buttonVariantNames\ntype ButtonVariant = 'Primary' | 'Secondary' | 'Link' | 'Plain'\n\nexport interface ButtonProps extends BoxProps {\n title?: string\n variant?: ButtonVariant\n}\n\nfunction BaseButton({ as, children, part, title, variant = 'Primary', ...props }: ButtonProps) {\n const variantPart = variant.toLocaleLowerCase()\n\n return (\n <Box as={as ?? 'button'} part={[`button-${variantPart}`, part]} {...styles[variant]} {...props}>\n {children}\n {title && (\n <Text.Body2 fontWeight=\"demibold\" color=\"inherit\">\n {title}\n </Text.Body2>\n )}\n </Box>\n )\n}\n\nconst buttonVariantNames: ButtonVariant[] = ['Primary', 'Secondary', 'Link', 'Plain']\n\nconst buttonVariantComponents = Object.fromEntries(\n buttonVariantNames.map((variant) => {\n const component = (props: ButtonProps) => {\n return (\n <BaseButton {...props} variant={variant}>\n {props.children}\n </BaseButton>\n )\n }\n\n component.displayName = `Text.${variant}`\n\n return [variant, component]\n })\n)\n\nexport const Button = Object.assign(BaseButton, buttonVariantComponents)\n","import * as React from 'react'\n\nimport { type BoxProps } from '../Box'\nimport { Flex } from '../Flex/Flex'\n\nexport const Card = React.forwardRef(({ as, children, ...props }: BoxProps, ref) => {\n const Component = as ?? Flex.Column\n return (\n <Component backgroundColor=\"neutral.background\" borderRadius=\"md\" p={5} {...props} ref={ref}>\n {children}\n </Component>\n )\n})\n","import * as React from 'react'\nimport { Box, BoxProps } from '../Box'\n\nconst Row = React.forwardRef(({ children, css, ...props }: BoxProps, ref) => {\n return (\n <Box css={[{ display: 'flex', flexDirection: 'row' }, css]} {...props} ref={ref}>\n {children}\n </Box>\n )\n})\n\nconst Column = React.forwardRef(({ children, css, ...props }: BoxProps, ref) => {\n return (\n <Box css={[{ display: 'flex', flexDirection: 'column' }, css]} {...props} ref={ref}>\n {children}\n </Box>\n )\n})\n\nexport const Flex = {\n Column,\n Row,\n}\n","import { Box, BoxProps } from '../Box'\n\nexport interface ImageProps extends BoxProps {\n src: string\n}\n\nexport function Image({ part, src, ...props }: ImageProps) {\n return <Box as=\"img\" part={['image', part]} src={src} {...props} />\n}\n","import { Box, BoxProps } from '../Box'\n\nfunction getVideoEmbedSrc(videoUri: string) {\n if (videoUri.includes('youtube')) {\n const videoId = videoUri.split('v=')[1]?.split('&')[0]\n\n return `https://www.youtube.com/embed/${videoId}`\n } else if (videoUri.includes('vimeo')) {\n const videoId = videoUri.split('vimeo.com/')[1]?.split('&')[0]\n\n return `https://player.vimeo.com/video/${videoId}`\n } else if (videoUri.includes('wistia')) {\n const videoId = videoUri.split('wistia.com/medias/')[1]?.split('&')[0]\n\n return `https://fast.wistia.net/embed/iframe/${videoId}`\n }\n\n throw new Error('Could not map videoUri to a known provider (Youtube, Vimeo, Wistia).')\n}\n\nexport interface VideoProps extends BoxProps {\n src: string\n}\n\nexport function Video({ part, src, ...props }: VideoProps) {\n const videoEmbedSrc = getVideoEmbedSrc(src)\n\n // TODO: Add play button overtop?\n return (\n <Box\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n as=\"iframe\"\n backgroundColor=\"gray100\"\n borderWidth={0}\n part={['video', part]}\n src={videoEmbedSrc}\n {...props}\n ></Box>\n )\n}\n","import { Image } from './Image'\nimport { Video } from './Video'\nimport { BoxProps } from '../Box'\n\nexport interface MediaProps extends BoxProps {\n src: string\n type?: 'image' | 'video'\n}\n\nexport function Media({ src, type, ...props }: MediaProps) {\n const Component = type === 'video' ? Video : Image\n\n return <Component src={src} {...props} />\n}\n","import { Flow } from '@frigade/js'\nimport { useContext, useEffect, useState } from 'react'\n\nimport { FrigadeContext } from '../components/Provider'\n\nexport interface FlowConfig {\n variables?: Record<string, any>\n}\n\nexport function useFlow(flowId: string, config?: FlowConfig) {\n const [flow, setFlow] = useState<Flow>()\n const [_, setRandomString] = useState<string>('')\n const { frigade } = useContext(FrigadeContext)\n\n const handler = (updatedFlow: Flow) => {\n if (updatedFlow.id !== flowId) {\n return\n }\n\n if (config?.variables) {\n updatedFlow.applyVariables(config.variables)\n }\n\n setFlow(updatedFlow)\n setRandomString(Math.random().toString())\n }\n\n useEffect(() => {\n ;(async () => {\n const flowInstance: Flow = await frigade.getFlow(flowId)\n if (!flowInstance || frigade.hasFailedToLoad()) {\n setFlow(undefined)\n return\n }\n if (config?.variables) {\n flowInstance.applyVariables(config.variables)\n }\n\n setFlow(flowInstance)\n })()\n\n frigade.onStateChange(handler)\n\n return () => {\n frigade.removeStateChangeHandler(handler)\n }\n }, [])\n\n return { flow }\n}\n","import { createContext, Dispatch, SetStateAction, useEffect, useRef, useState } from 'react'\nimport { Global, ThemeProvider } from '@emotion/react'\n\nimport {\n createThemeVariables,\n theme as themeTokens,\n type Theme,\n themeVariables,\n} from '../../shared/theme'\nimport { Frigade } from '@frigade/js'\n\ntype NavigateHandler = (url: string, target?: string) => void\n\n// TODO: type theme something like Partial<typeof themeTokens>, but allow any value for those keys\nexport interface ProviderProps {\n apiKey: string\n apiUrl?: string\n children?: React.ReactNode\n navigate?: NavigateHandler\n theme?: Theme\n userId?: string\n groupId?: string\n}\n\ninterface ProviderContext extends Omit<ProviderProps, 'children' | 'theme'> {\n modals: string[]\n setModals: Dispatch<SetStateAction<string[]>>\n frigade?: Frigade\n}\n\nexport const FrigadeContext = createContext<ProviderContext>({\n apiKey: '',\n modals: [],\n setModals: () => {},\n navigate: () => {},\n})\n\nexport function Provider({ children, navigate, theme, ...props }: ProviderProps) {\n const themeOverrides = theme ? createThemeVariables(theme) : {}\n const [modals, setModals] = useState([])\n const frigade = useRef<Frigade>(\n new Frigade(props.apiKey, {\n apiKey: props.apiKey,\n apiUrl: props.apiUrl,\n userId: props.userId,\n groupId: props.groupId,\n })\n )\n\n const navigateHandler =\n navigate ??\n ((url, target = '_self') => {\n window.open(url, target)\n })\n\n useEffect(() => {\n return () => {\n frigade.current?.destroy()\n }\n }, [])\n\n return (\n <FrigadeContext.Provider\n value={{\n modals,\n setModals,\n navigate: navigateHandler,\n ...props,\n frigade: frigade.current,\n }}\n >\n <Global styles={{ ':root': { ...themeVariables, ...themeOverrides } }} />\n <ThemeProvider theme={themeTokens}>{children}</ThemeProvider>\n </FrigadeContext.Provider>\n )\n}\n","import { MouseEvent, useCallback, useEffect, useRef } from 'react'\n\nimport { Flow } from '@frigade/js'\n\nexport type FlowHandler = (\n flow: Flow,\n event?: MouseEvent<unknown>\n) => Promise<boolean | void> | (boolean | void)\n\nexport interface StepHandlers {\n onComplete?: FlowHandler\n onDismiss?: FlowHandler\n}\n\nexport function useFlowHandlers(flow: Flow, { onComplete, onDismiss }: StepHandlers = {}) {\n const lastCompleted = useRef(null)\n\n useEffect(() => {\n if (flow == null) return\n\n if (flow.isCompleted && lastCompleted.current === false) {\n ;(async () => {\n await onComplete?.(flow)\n })()\n }\n\n lastCompleted.current = flow?.isCompleted\n }, [flow?.isCompleted])\n\n return {\n handleDismiss: useCallback(\n async (e: MouseEvent<unknown>) => {\n const continueDefault = await onDismiss?.(flow, e)\n\n if (continueDefault === false) {\n e.preventDefault()\n return false\n }\n\n await flow.skip()\n },\n [flow]\n ),\n }\n}\n","import { MouseEvent, useCallback, useContext } from 'react'\n\nimport type { FlowStep } from '@frigade/js'\n\nimport { FrigadeContext } from '../components/Provider'\n\nexport type StepHandler = (\n step: FlowStep,\n event?: MouseEvent<unknown>\n) => Promise<boolean | void> | (boolean | void)\n\nexport interface StepHandlers {\n onPrimary?: StepHandler\n onSecondary?: StepHandler\n}\n\nexport function useStepHandlers(step: FlowStep, { onPrimary, onSecondary }: StepHandlers = {}) {\n const { navigate } = useContext(FrigadeContext)\n\n return {\n handlePrimary: useCallback(\n async (e: MouseEvent<unknown>) => {\n const continueDefault = await onPrimary?.(step, e)\n\n if (continueDefault === false) {\n e.preventDefault()\n return false\n }\n\n await step.complete()\n\n if (step.primaryButtonUri != null) {\n navigate(step.primaryButtonUri, step.primaryButtonUriTarget)\n }\n },\n [step]\n ),\n\n handleSecondary: useCallback(\n async (e: MouseEvent<unknown>) => {\n const continueDefault = await onSecondary?.(step, e)\n\n if (continueDefault === false) {\n e.preventDefault()\n return false\n }\n\n // Should there be a step.skip method?\n await step.complete()\n\n if (step.secondaryButtonUri != null) {\n navigate(step.secondaryButtonUri, step.secondaryButtonUriTarget)\n }\n },\n [step]\n ),\n }\n}\n","import { Dialog, type DialogProps } from '../Dialog'\nimport { Flex } from '../Flex/Flex'\nimport { type FlowComponentProps } from '../../shared/types'\nimport { useFlow } from '../../hooks/useFlow'\nimport { useFlowHandlers } from '../../hooks/useFlowHandlers'\nimport { useStepHandlers } from '@/hooks/useStepHandlers'\n\nexport interface AnncouncementProps extends DialogProps, FlowComponentProps {}\n\nexport function Announcement({\n flowId,\n onComplete,\n onDismiss,\n onPrimary,\n onSecondary,\n variables,\n}: AnncouncementProps) {\n const { flow } = useFlow(flowId, {\n variables,\n })\n const step = flow?.getCurrentStep()\n\n const { handleDismiss } = useFlowHandlers(flow, {\n onComplete,\n onDismiss,\n })\n\n const { handlePrimary, handleSecondary } = useStepHandlers(step, {\n onPrimary,\n onSecondary,\n })\n\n if (flow == null || flow.isVisible === false) {\n return null\n }\n\n flow.start()\n\n step?.start()\n\n return (\n <Dialog>\n <Dialog.Close onClick={handleDismiss} />\n\n <Dialog.Title>{step.title}</Dialog.Title>\n <Dialog.Subtitle>{step.subtitle}</Dialog.Subtitle>\n\n <Dialog.Media\n src={step.imageUri}\n css={{ aspectRatio: '1.5', objectFit: 'cover', width: '100%' }}\n />\n\n <Dialog.ProgressDots\n current={flow.getNumberOfCompletedSteps()}\n total={flow.getNumberOfAvailableSteps()}\n />\n\n <Flex.Row\n css={{\n '& > button': {\n flexGrow: 1,\n },\n }}\n gap={3}\n >\n <Dialog.Secondary title=\"Secondary\" onClick={handleSecondary} />\n <Dialog.Primary title=\"Primary\" onClick={handlePrimary} />\n </Flex.Row>\n </Dialog>\n )\n}\n","import { type BoxProps } from '@/components/Box'\nimport { Button } from '@/components/Button'\nimport { Card } from '@/components/Card'\nimport { Flex } from '@/components/Flex/Flex'\nimport { Text } from '@/components/Text'\n\nimport { XMarkIcon } from '@heroicons/react/24/solid'\n\nimport { useFlow } from '@/hooks/useFlow'\nimport { useFlowHandlers } from '@/hooks/useFlowHandlers'\nimport { useStepHandlers } from '@/hooks/useStepHandlers'\n\nimport type { FlowComponentProps } from '@/shared/types'\n\ninterface BannerProps extends BoxProps, FlowComponentProps {}\n\nexport function Banner({\n flowId,\n onComplete,\n onDismiss,\n onPrimary,\n onSecondary,\n ...props\n}: BannerProps) {\n const { flow } = useFlow(flowId)\n const step = flow?.getCurrentStep()\n\n const { handleDismiss } = useFlowHandlers(flow, { onComplete, onDismiss })\n const { handlePrimary, handleSecondary } = useStepHandlers(step, { onPrimary, onSecondary })\n\n if (flow == null || flow.isVisible === false) {\n return null\n }\n\n flow.start()\n step?.start()\n\n return (\n <Card as={Flex.Row} border=\"md\" borderColor=\"gray900\" justifyContent=\"space-between\" {...props}>\n <Flex.Row gap={3}>\n <img src={step.imageUri} style={{ height: 40, width: 40, alignSelf: 'center' }} />\n <Flex.Column>\n <Text.H4 mb={1}>{step.title}</Text.H4>\n <Text.Body2>{step.subtitle}</Text.Body2>\n </Flex.Column>\n </Flex.Row>\n\n <Flex.Row alignItems=\"center\" gap={3}>\n <Button.Secondary title={step.secondaryButtonTitle} onClick={handleSecondary} />\n <Button.Primary title={step.primaryButtonTitle} onClick={handlePrimary} />\n <Button.Plain part=\"banner-close\" onClick={handleDismiss}>\n <XMarkIcon height=\"24\" fill=\"currentColor\" />\n </Button.Plain>\n </Flex.Row>\n </Card>\n )\n}\n","import React, { useEffect, useRef, useState } from 'react'\n\nimport { XMarkIcon } from '@heroicons/react/24/solid'\nimport * as Popover from '@radix-ui/react-popover'\n\nimport { useBoundingClientRect } from '../../hooks/useBoundingClientRect'\nimport { Box } from '../Box'\nimport { Button, ButtonProps } from '../Button'\nimport { Card } from '../Card'\nimport { Dot } from './Dot'\nimport { Media, MediaProps } from '../Media'\nimport { Text, TextProps } from '../Text'\nimport { getDotPosition } from './getDotPosition'\nimport { mapTooltipPropsToPopoverProps } from './mapTooltipPropsToPopoverProps'\n\ninterface MergedRadixPopoverProps\n extends Pick<Popover.PopoverProps, 'defaultOpen' | 'modal' | 'onOpenChange' | 'open'>,\n Omit<Popover.PopoverContentProps, 'align' | 'asChild'> {}\nexport interface TooltipProps extends MergedRadixPopoverProps {\n align?: Popover.PopoverContentProps['align'] | 'before' | 'after'\n anchor?: string\n spotlight?: boolean\n style?: React.CSSProperties\n}\n\nexport function Tooltip({\n anchor,\n children,\n className,\n spotlight = false,\n style,\n ...props\n}: TooltipProps) {\n const { node: contentNode, rect: contentRect, ref: contentRef } = useBoundingClientRect()\n const { contentProps, rootProps } = mapTooltipPropsToPopoverProps(props, contentRect)\n\n const [alignAttr, setAlignAttr] = useState(contentProps.align)\n const [sideAttr, setSideAttr] = useState(contentProps.side)\n\n // Radix will update data attrs to let us know if Popover.Content has collided\n if (contentNode !== null) {\n const currentAlignAttr = contentNode.getAttribute('data-align')\n const currentSideAttr = contentNode.getAttribute('data-side')\n\n if (alignAttr !== currentAlignAttr) {\n setAlignAttr(currentAlignAttr)\n }\n\n if (sideAttr !== currentSideAttr) {\n setSideAttr(currentSideAttr)\n }\n }\n\n const anchorRef = useRef(null)\n const [anchorElementRef, setAnchorElementRef] = useState(null)\n\n useEffect(() => {\n const anchorQuery = document.querySelector(anchor)\n\n if (anchorQuery != null) {\n anchorRef.current = anchorQuery\n setAnchorElementRef(anchorRef)\n }\n }, [anchor])\n\n if (anchorElementRef == null) return null\n\n const anchorRect = anchorElementRef.current.getBoundingClientRect()\n\n let anchorRadius = '0'\n if (typeof window !== 'undefined') {\n anchorRadius = window.getComputedStyle(anchorElementRef.current).borderRadius\n }\n\n const dotPosition = getDotPosition({ props, alignAttr, sideAttr })\n\n return (\n <Popover.Root defaultOpen={true} {...rootProps}>\n <Popover.Anchor virtualRef={anchorElementRef} />\n <Popover.Portal>\n <div\n className={className}\n css={{ bottom: 0, left: 0, position: 'absolute', right: 0, top: 0, zIndex: 9999 }}\n >\n {spotlight && (\n <Box\n part=\"tooltip-spotlight\"\n position=\"absolute\"\n css={{\n borderRadius: anchorRadius,\n boxShadow: '0 0 0 2000px rgb(0 0 0 / 0.5)',\n height: anchorRect.height,\n left: anchorRect.left,\n top: anchorRect.top,\n width: anchorRect.width,\n }}\n />\n )}\n <Popover.Content asChild {...contentProps} ref={contentRef}>\n <Card\n boxShadow=\"md\"\n part=\"tooltip-content\"\n position=\"relative\"\n css={{\n maxWidth: '360px',\n ...style,\n }}\n >\n <Dot style={dotPosition} />\n\n {children}\n </Card>\n </Popover.Content>\n </div>\n </Popover.Portal>\n </Popover.Root>\n )\n}\n\nTooltip.Close = (props: ButtonProps) => {\n return (\n <Popover.Close aria-label=\"Close\" asChild>\n <Button.Plain\n css={{\n top: '12px',\n right: '4px',\n }}\n part=\"close\"\n position=\"absolute\"\n {...props}\n >\n <XMarkIcon height=\"24\" fill=\"currentColor\" />\n </Button.Plain>\n </Popover.Close>\n )\n}\n\nTooltip.Media = ({ src, ...props }: MediaProps) => {\n if (src == null) return null\n\n return (\n <Media\n borderRadius=\"md md 0 0\"\n borderWidth=\"0\"\n css={{\n aspectRatio: '2',\n }}\n margin=\"-5 -5 5\"\n src={src}\n {...props}\n />\n )\n}\n\nTooltip.Primary = ({ onClick, title, ...props }: ButtonProps) => {\n if (title == null) return null\n\n return <Button.Primary title={title} onClick={onClick} {...props} />\n}\n\nTooltip.Progress = ({ children, ...props }: TextProps) => {\n if (children == null) return null\n\n return (\n <Text.Body2 fontWeight=\"demibold\" part=\"progress\" {...props}>\n {children}\n </Text.Body2>\n )\n}\n\nTooltip.Secondary = ({ onClick, title, ...props }: ButtonProps) => {\n if (title == null) return null\n\n return <Button.Secondary title={title} onClick={onClick} {...props} />\n}\n\nTooltip.Subtitle = ({ children, ...props }: TextProps) => {\n if (children == null) return null\n\n return (\n <Text.Body2 part=\"subtitle\" {...props}>\n {children}\n </Text.Body2>\n )\n}\n\nTooltip.Title = ({ children, ...props }: TextProps) => {\n if (children == null) return null\n\n return (\n <Text.Body1 fontWeight=\"bold\" mb={1} part=\"title\" {...props}>\n {children}\n </Text.Body1>\n )\n}\n","import { useCallback, useLayoutEffect, useState } from 'react'\n\nexport function useBoundingClientRect() {\n const initialRect =\n 'DOMRect' in globalThis\n ? new DOMRect()\n : {\n height: 0,\n width: 0,\n x: 0,\n y: 0,\n bottom: 0,\n top: 0,\n right: 0,\n left: 0,\n toJSON: () => {},\n }\n const [rect, setRect] = useState(initialRect)\n const [node, setNode] = useState(null)\n\n const ref = useCallback((node: HTMLElement) => {\n setNode(node)\n }, [])\n\n useLayoutEffect(() => {\n if (!node) return\n\n setRect(node.getBoundingClientRect())\n }, [node])\n\n return {\n node,\n rect,\n ref,\n }\n}\n","import { keyframes } from '@emotion/react'\nimport { Box, BoxProps } from '../Box'\n\nconst pulse = keyframes({\n '0%': {\n opacity: 0.5,\n transform: 'scale(0.5)',\n },\n '50%': {\n opacity: 0,\n transform: 'scale(1)',\n },\n '100%': {\n opacity: 0,\n transform: 'scale(1)',\n },\n})\n\nexport interface DotProps extends BoxProps {}\n\nexport function Dot({ style = {}, part = '', ...props }: DotProps) {\n return (\n <Box\n part={`dot-wrapper ${part}`}\n style={{\n height: '48px',\n position: 'absolute',\n width: '48px',\n ...style,\n }}\n {...props}\n >\n <Box\n backgroundColor=\"primary.surface\"\n part=\"dot-pulse\"\n css={{\n animation: `2s ease-out infinite ${pulse}`,\n borderRadius: '24px',\n height: '48px',\n left: 0,\n position: 'absolute',\n top: 0,\n transformOrigin: 'center center',\n width: '48px',\n }}\n />\n <Box\n backgroundColor=\"primary.surface\"\n part=\"dot\"\n style={{\n borderRadius: '12px',\n height: '24px',\n left: '12px',\n position: 'absolute',\n top: '12px',\n width: '24px',\n }}\n />\n </Box>\n )\n}\n","export function getDotPosition({ props, alignAttr, sideAttr }) {\n const currentSide = sideAttr ?? 'bottom'\n const dotProps = {}\n\n // Radix's collision system isn't aware of our custom before|after align\n const getCurrentAlign = () => {\n if (['after', 'before'].includes(props.align)) {\n if (alignAttr == 'start') {\n return 'before'\n } else if (alignAttr == 'end') {\n return 'after'\n }\n }\n\n return props.align ?? 'after'\n }\n\n const dotOffset = '-24px'\n\n const oppositeSides = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n }\n\n /* \n Rules:\n - Dot is opposite to side prop (e.g. side=left -> dot=right)\n - align=before|end -> Dot goes to highest extent (right/bottom) of align-axis\n - align=after|start -> Dot goes to lowest extent (left/top) of align-axis\n - align=center -> Dot goes to the center\n */\n\n dotProps[oppositeSides[currentSide]] = dotOffset\n\n const currentAlign = getCurrentAlign()\n\n if (['before', 'end'].includes(currentAlign)) {\n if (['top', 'bottom'].includes(currentSide)) {\n dotProps['right'] = dotOffset\n } else {\n dotProps['bottom'] = dotOffset\n }\n } else if (['after', 'start'].includes(currentAlign)) {\n if (['top', 'bottom'].includes(currentSide)) {\n dotProps['left'] = dotOffset\n } else {\n dotProps['top'] = dotOffset\n }\n } else {\n // The only option left is align=center\n if (['top', 'bottom'].includes(currentSide)) {\n dotProps['left'] = `calc(50% + ${dotOffset})`\n } else {\n dotProps['top'] = `calc(50% + ${dotOffset})`\n }\n }\n\n return dotProps\n}\n","import { TooltipProps } from '.'\n\nconst RADIX_PROPS = {\n content: [\n 'align',\n 'alignOffset',\n 'arrowPadding',\n 'avoidCollisions',\n 'collisionBoundary',\n 'collisionPadding',\n 'forceMount',\n 'hideWhenDetached',\n 'onCloseAutoFocus',\n 'onEscapeKeyDown',\n 'onFocusOutside',\n 'onInteractOutside',\n 'onOpenAutoFocus',\n 'onPointerDownOutside',\n 'side',\n 'sideOffset',\n 'sticky',\n ],\n root: ['defaultOpen', 'modal', 'onOpenChange', 'open'],\n}\n\nexport function mapTooltipPropsToPopoverProps(props: TooltipProps, contentRect: DOMRect) {\n const contentProps = Object.fromEntries(\n RADIX_PROPS.content\n .map((propName) => [propName, props[propName]])\n .filter((propEntry) => propEntry[1] !== undefined)\n )\n const rootProps = Object.fromEntries(\n RADIX_PROPS.root\n .map((propName) => [propName, props[propName]])\n .filter((propEntry) => propEntry[1] !== undefined)\n )\n\n // Default to align=after, side=bottom\n contentProps.align = contentProps.align ?? 'after'\n contentProps.side = contentProps.side ?? 'bottom'\n\n /*\n Here we're extending Popover.Content's align prop to accept 'before' and\n 'after' in addition to its existing values.\n\n TL;DR:\n 1. Use existing alignOffset prop to push Content to be before/after the\n corresponding edge of the element it's attached to.\n 2. Add a CSS margin to patch alignOffset back onto Content, as Popover\n has a bug that prevents alignOffset from extending past the edge of\n its Trigger/Anchor.\n\n SEE: https://github.com/radix-ui/primitives/issues/2457\n */\n if (['before', 'after'].includes(contentProps.align)) {\n const mapToOriginalAlignValues = {\n after: 'end',\n before: 'start',\n }\n\n const mapAlignOffsetToMargin = (align, side) => {\n /*\n Translate alignOffset to CSS margin based on align and side props:\n bottom || top\n after: marginLeft\n before: marginRight\n left || right\n after: marginTop\n before: marginBottom\n */\n if (['top', 'bottom'].includes(side)) {\n if (align == 'after') {\n return 'marginLeft'\n } else {\n return 'marginRight'\n }\n } else {\n if (align == 'after') {\n return 'marginTop'\n } else {\n return 'marginBottom'\n }\n }\n }\n\n const originalOffset = contentProps.alignOffset ?? 0\n const originalStyleProp = contentProps.style ?? {}\n const currentSide = contentProps.side ?? 'bottom'\n const currentAlign = contentProps.align\n\n // Copy alignOffset value to CSS margin\n contentProps['style'] = {\n ...originalStyleProp,\n [mapAlignOffsetToMargin(currentAlign, currentSide)]: originalOffset,\n }\n\n const lengthOfCurrentSide = ['top', 'bottom'].includes(currentSide)\n ? contentRect.width\n : contentRect.height\n\n // Change alignOffset to be at the end of the positioned side\n contentProps.alignOffset = (lengthOfCurrentSide + originalOffset) * -1\n\n // Flip align prop back to valid Radix option, or default to 'after'\n contentProps['align'] = mapToOriginalAlignValues[currentAlign]\n }\n\n return {\n contentProps,\n rootProps,\n }\n}\n","import { useContext, useEffect, useState } from 'react'\n\nimport { FrigadeContext } from '../components/Provider'\n\nexport function useModal(flowId: string) {\n const { modals, setModals } = useContext(FrigadeContext)\n const [isCurrentModal, setIsCurrentModal] = useState(false)\n\n useEffect(() => {\n setModals([...modals, flowId])\n\n return () => setModals(modals.filter((v) => v !== flowId))\n }, [])\n\n useEffect(() => {\n const newIsCurrentModal = modals[0] === flowId\n\n if (newIsCurrentModal !== isCurrentModal) {\n setIsCurrentModal(newIsCurrentModal)\n }\n }, [modals])\n\n return {\n isCurrentModal,\n }\n}\n","import type { Flow, FlowStep } from '@frigade/js'\n\nimport { TourProps } from '.'\nimport { useModal } from '../../hooks/useModal'\nimport { useFlowHandlers } from '../../hooks/useFlowHandlers'\nimport { useStepHandlers } from '../../hooks/useStepHandlers'\n\nimport { Flex } from '../Flex/Flex'\nimport { Tooltip } from '../Tooltip'\n\nexport interface TourStepProps extends Omit<TourProps, 'flowId'> {\n step: FlowStep\n flow: Flow\n}\n\nexport function TourStep({\n step,\n flow,\n onDismiss,\n onPrimary,\n onSecondary,\n ...props\n}: TourStepProps) {\n const { isCurrentModal } = useModal(`${flow.id}-${step.id}`)\n\n const { handleDismiss } = useFlowHandlers(flow, {\n onDismiss,\n })\n\n const { handlePrimary, handleSecondary } = useStepHandlers(step, {\n onPrimary,\n onSecondary,\n })\n\n if (!isCurrentModal) {\n return null\n }\n\n return (\n <Tooltip\n key={step.id}\n anchor={step.selector as string}\n onOpenAutoFocus={(e) => e.preventDefault()}\n onPointerDownOutside={(e) => e.preventDefault()}\n {...props}\n >\n <Tooltip.Close onClick={handleDismiss} />\n\n <Tooltip.Media\n src={step.videoUri ?? step.imageUri}\n type={step.videoUri ? 'video' : 'image'}\n />\n\n <Tooltip.Title>{step.title}</Tooltip.Title>\n <Tooltip.Subtitle>{step.subtitle}</Tooltip.Subtitle>\n\n <Flex.Row alignItems=\"center\" gap={3} justifyContent=\"flex-end\" part=\"tooltip-footer\" pt={4}>\n <Tooltip.Progress>{`${\n flow.getNumberOfCompletedSteps() + 1\n }/${flow.getNumberOfAvailableSteps()}`}</Tooltip.Progress>\n\n <Tooltip.Secondary\n marginLeft=\"auto\"\n title={step.secondaryButtonTitle}\n onClick={handleSecondary}\n />\n <Tooltip.Primary title={step.primaryButtonTitle} onClick={handlePrimary} />\n </Flex.Row>\n </Tooltip>\n )\n}\n","import { type FlowComponentProps } from '../../shared/types'\nimport { type TooltipProps } from '../Tooltip'\nimport { TourStep } from './TourStep'\nimport { useFlow } from '../../hooks/useFlow'\nimport { useFlowHandlers } from '../../hooks/useFlowHandlers'\n\nexport interface TourProps extends TooltipProps, FlowComponentProps {}\n\nexport function Tour({ flowId, onComplete, variables, ...props }: TourProps) {\n const { flow } = useFlow(flowId, {\n variables,\n })\n useFlowHandlers(flow, { onComplete })\n\n if (flow == null || flow.isVisible === false) {\n return null\n }\n\n flow.start()\n\n const step = flow.getCurrentStep()\n step?.start()\n\n return <TourStep step={step} flow={flow} {...props} />\n}\n","import { useContext } from 'react'\n\nimport { FrigadeContext } from '../components/Provider'\n\nexport function useFrigade() {\n const { frigade } = useContext(FrigadeContext)\n\n return { frigade }\n}\n"]}