@frigade/react 2.0.0-alpha.7 → 2.0.0-alpha.8

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.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var X = require('react');
3
+ var _ = require('react');
4
4
  var clsx = require('clsx');
5
5
  var jsxRuntime = require('@emotion/react/jsx-runtime');
6
6
  var react = require('@emotion/react');
@@ -26,17 +26,17 @@ function _interopNamespace(e) {
26
26
  return Object.freeze(n);
27
27
  }
28
28
 
29
- var X__namespace = /*#__PURE__*/_interopNamespace(X);
29
+ var ___namespace = /*#__PURE__*/_interopNamespace(_);
30
30
  var v__namespace = /*#__PURE__*/_interopNamespace(v);
31
31
 
32
- var ee=Object.defineProperty,Ie=Object.defineProperties;var Ve=Object.getOwnPropertyDescriptors;var $=Object.getOwnPropertySymbols;var te=Object.prototype.hasOwnProperty,oe=Object.prototype.propertyIsEnumerable;var Z=(e,t,o)=>t in e?ee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,s=(e,t)=>{for(var o in t||(t={}))te.call(t,o)&&Z(e,o,t[o]);if($)for(var o of $(t))oe.call(t,o)&&Z(e,o,t[o]);return e},p=(e,t)=>Ie(e,Ve(t));var f=(e,t)=>{var o={};for(var r in e)te.call(e,r)&&t.indexOf(r)<0&&(o[r]=e[r]);if(e!=null&&$)for(var r of $(e))t.indexOf(r)<0&&oe.call(e,r)&&(o[r]=e[r]);return o};var re=(e,t)=>{for(var o in t)ee(e,o,{get:t[o],enumerable:!0});};var T=(e,t,o)=>new Promise((r,n)=>{var i=u=>{try{d(o.next(u));}catch(c){n(c);}},l=u=>{try{d(o.throw(u));}catch(c){n(c);}},d=u=>u.done?r(u.value):Promise.resolve(u.value).then(i,l);d((o=o.apply(e,t)).next());});var We="px",$e=e=>typeof e=="number"?`${4*e}${We}`:e,je=[-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"],Le=Object.fromEntries(je.map(e=>[e,$e(e)])),ze={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"},L={borders:{md:"1px solid"},borderWidths:{0:"0",md:"1px"},colors:s({},ze),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"},radii:{md:"10px",lg:"20px",round:"50%"},shadows:{md:"0px 4px 20px rgba(0, 0, 0, 0.1)"},space:Le};var a=e=>`var(--fr-colors-${e})`,ne={neutral:{background:a("white"),border:a("gray500"),foreground:a("black"),surface:a("gray700"),active:{background:a("white"),border:a("gray900"),foreground:a("black"),surface:a("gray700")},focus:{background:a("white"),border:a("gray900"),foreground:a("black"),surface:a("gray700")},hover:{background:a("white"),border:a("gray900"),foreground:a("black"),surface:a("gray700")}},primary:{background:a("blue500"),border:a("blue500"),foreground:a("white"),surface:a("blue500"),active:{background:a("blue400"),border:a("blue400"),foreground:a("white"),surface:a("blue400")},focus:{background:a("blue500"),border:a("blue500"),foreground:a("white"),surface:a("blue500")},hover:{background:a("blue400"),border:a("blue400"),foreground:a("white"),surface:a("blue400")}},secondary:{background:a("gray900"),border:a("gray900"),foreground:a("black"),surface:a("gray900"),active:{background:a("gray800"),border:a("gray800"),foreground:a("black"),surface:a("gray800")},focus:{background:a("gray900"),border:a("gray900"),foreground:a("black"),surface:a("gray900")},hover:{background:a("gray800"),border:a("gray800"),foreground:a("black"),surface:a("gray800")}}};var z=p(s({},L),{colors:s(s({},L.colors),ne)});function k(e,t="",o="."){return Object.keys(e).reduce((r,n)=>{let l=`${t.length?`${t}${o}`:""}${n}`,d=e[n];return typeof d=="object"&&d!==null&&!Array.isArray(d)?Object.assign(r,k(d,l,o)):r[l]=d,r},{})}function K(e){return k(e,"--fr","-")}function ie(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]=ie(n,`${t}-${r}`):o[r]=`var(${t}-${r})`;}),o}var se=K(z),m=ie(z);var U=k(m.colors),ae={color:U,backgroundColor:U,borderColor:U,border:m.borders,borderRadius:m.radii,borderWidth:m.borderWidths,fontFamily:m.fontFamilies,fontSize:m.fontSizes,fontWeight:m.fontWeights,gap:m.space,lineHeight:m.lineHeights,margin:m.space,marginTop:m.space,marginRight:m.space,marginBottom:m.space,marginLeft:m.space,padding:m.space,paddingTop:m.space,paddingRight:m.space,paddingBottom:m.space,paddingLeft:m.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"]},le={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 Ke(e){if(Array.isArray(e))return new Map(e.map(t=>[t,t]));if(typeof e=="object"&&e!==null)return new Map(Object.entries(e));if(["string","number"].includes(typeof e))return new Map([e,e]);throw new Error("Invalid entry in styleProps")}var Ue=new Map(Object.entries(ae).map(([e,t])=>[e,Ke(t)])),Ne=new Map(Object.entries(le).map(([e,t])=>[e,new Set(t)]));function pe(e){let t=Object.assign({},e),o={};return Object.entries(t).forEach(([r,n])=>{let i=Ne.get(r);i!=null&&(i.forEach(l=>{t[l]=n;}),delete t[r]);}),Object.entries(t).forEach(([r,n])=>{let i=Ue.get(r);if(i!=null)if(typeof n=="string"&&n.indexOf(" ")>-1){let l=n.split(" ");o[r]=l.map(d=>{var u;return (u=i.get(d.toString()))!=null?u:d}).join(" "),delete t[r];}else i.has(n.toString())&&(o[r]=i.get(n.toString()),delete t[r]);}),{cssFromProps:o,unmatchedProps:t}}function ce(e){return e&&`fr-${e}`}function Xe(e){return e&&(Array.isArray(e)?e.map(t=>ce(t)).join(" "):ce(e))}function qe(l,i){var d=l,{as:e,children:t,className:o,part:r}=d,n=f(d,["as","children","className","part"]);let u=e!=null?e:"div",{cssFromProps:c,unmatchedProps:y}=pe(n),h=Xe(r),w=o||h?clsx.clsx(o,h):void 0;return jsxRuntime.jsx(u,p(s({className:w,css:[{boxSizing:"border-box"},c]},y),{ref:i,children:t}))}var g=X__namespace.forwardRef(qe);var N={};re(N,{Body1:()=>ot,Body2:()=>rt,Caption:()=>nt,Display1:()=>Je,Display2:()=>Qe,H1:()=>Ye,H2:()=>Ze,H3:()=>et,H4:()=>tt});var C={color:"neutral.foreground",fontFamily:"default",margin:0},Je=p(s({},C),{fontSize:"5xl",fontWeight:"bold",lineHeight:"4xl"}),Qe=p(s({},C),{fontSize:"4xl",fontWeight:"bold",lineHeight:"3xl"}),Ye=p(s({},C),{fontSize:"3xl",fontWeight:"bold",lineHeight:"2xl"}),Ze=p(s({},C),{fontSize:"2xl",fontWeight:"bold",lineHeight:"xl"}),et=p(s({},C),{fontSize:"xl",fontWeight:"bold",lineHeight:"lg"}),tt=p(s({},C),{fontSize:"lg",fontWeight:"bold",lineHeight:"md"}),ot=p(s({},C),{fontSize:"md",fontWeight:"regular",lineHeight:"md"}),rt=p(s({},C),{fontSize:"sm",fontWeight:"regular",lineHeight:"md"}),nt=p(s({},C),{fontSize:"xs",fontWeight:"regular",lineHeight:"sm"});function fe(n){var i=n,{as:e="span",children:t,variant:o="Body1"}=i,r=f(i,["as","children","variant"]);return jsxRuntime.jsx(g,p(s(s({as:e},N[o]),r),{children:t}))}var it=["Display1","Display2","H1","H2","H3","H4","Body1","Body2","Caption"],st=Object.fromEntries(it.map(e=>{let t=["H1","H2","H3","H4"].includes(e)?e.toLowerCase():void 0,o=r=>jsxRuntime.jsx(fe,p(s({as:t},r),{variant:e,children:r.children}));return o.displayName=`Text.${e}`,[e,o]})),S=Object.assign(fe,st);var _={};re(_,{Link:()=>pt,Plain:()=>ct,Primary:()=>at,Secondary:()=>lt,base:()=>O});var O=({radii:e,space:t})=>({borderWidth:0,borderRadius:e.md,padding:`${t[2]} ${t[4]}`}),at=({colors:e})=>[O,{backgroundColor:e.primary.surface,color:e.primary.foreground,"&:hover":{backgroundColor:e.primary.hover.surface}}],lt=({colors:e})=>[O,{backgroundColor:e.secondary.surface,color:e.secondary.foreground,"&:hover":{backgroundColor:e.secondary.hover.surface}}],pt=({colors:e})=>[O,{backgroundColor:e.transparent,color:e.primary.surface,"&:hover":{color:e.primary.hover.surface}}],ct=({colors:e})=>[O,{backgroundColor:e.transparent,color:e.neutral.foreground}];function me(i){var l=i,{as:e,children:t,title:o,variant:r="Primary"}=l,n=f(l,["as","children","title","variant"]);return jsxRuntime.jsxs(g,p(s({as:e!=null?e:"button",css:_[r]},n),{children:[t,o&&jsxRuntime.jsx(S.Body2,{fontWeight:"demibold",color:"inherit",children:o})]}))}var dt=["Primary","Secondary","Link","Plain"],ft=Object.fromEntries(dt.map(e=>{let t=e.toLocaleLowerCase(),o=i=>{var l=i,{part:r}=l,n=f(l,["part"]);return jsxRuntime.jsx(me,p(s({part:[`button-${t}`,r]},n),{variant:e,children:n.children}))};return o.displayName=`Text.${e}`,[e,o]})),H=Object.assign(me,ft);var mt=X__namespace.forwardRef((n,r)=>{var i=n,{children:e,css:t}=i,o=f(i,["children","css"]);return jsxRuntime.jsx(g,p(s({css:[{display:"flex",flexDirection:"row"},t]},o),{ref:r,children:e}))}),gt=X__namespace.forwardRef((n,r)=>{var i=n,{children:e,css:t}=i,o=f(i,["children","css"]);return jsxRuntime.jsx(g,p(s({css:[{display:"flex",flexDirection:"column"},t]},o),{ref:r,children:e}))}),E={Column:gt,Row:mt};var B=X.createContext({apiKey:"",config:{},modals:[],setModals:()=>{},navigate:()=>{}});function Pt({apiKey:e,children:t,config:o={},navigate:r,theme:n}){let i=n?K(n):{},[l,d]=X.useState([]),u=r!=null?r:(c,y="_self")=>{window.open(c,y);};return jsxRuntime.jsxs(B.Provider,{value:{apiKey:e,config:o,modals:l,setModals:d,navigate:u},children:[jsxRuntime.jsx(react.Global,{styles:{":root":s(s({},se),i)}}),jsxRuntime.jsx(react.ThemeProvider,{theme:m,children:t})]})}function he(){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]=X.useState(e),[r,n]=X.useState(null),i=X.useCallback(l=>{n(l);},[]);return X.useLayoutEffect(()=>{r&&o(r.getBoundingClientRect());},[r]),{node:r,rect:t,ref:i}}var St=react.keyframes({"0%":{opacity:.5,transform:"scale(0.5)"},"50%":{opacity:0,transform:"scale(1)"},"100%":{opacity:0,transform:"scale(1)"}});function ve(r){var n=r,{style:e={},part:t=""}=n,o=f(n,["style","part"]);return jsxRuntime.jsxs(g,p(s({part:`dot-wrapper ${t}`,style:s({height:"48px",position:"absolute",width:"48px"},e)},o),{children:[jsxRuntime.jsx(g,{backgroundColor:"primary.surface",part:"dot-pulse",css:{animation:`2s ease-out infinite ${St}`,borderRadius:"24px",height:"48px",left:0,position:"absolute",top:0,transformOrigin:"center center",width:"48px"}}),jsxRuntime.jsx(g,{backgroundColor:"primary.surface",part:"dot",style:{borderRadius:"12px",height:"24px",left:"12px",position:"absolute",top:"12px",width:"24px"}})]}))}function Ce(r){var n=r,{part:e,src:t}=n,o=f(n,["part","src"]);return jsxRuntime.jsx(g,s({as:"img",part:["image",e],src:t},o))}function Ft(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 we(r){var n=r,{part:e,src:t}=n,o=f(n,["part","src"]);let i=Ft(t);return jsxRuntime.jsx(g,s({allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowFullScreen:!0,as:"iframe",backgroundColor:"gray100",borderWidth:0,part:["video",e],src:i},o))}function q(r){var n=r,{src:e,type:t}=n,o=f(n,["src","type"]);return jsxRuntime.jsx(t==="video"?we:Ce,s({src:e},o))}function Te({props:e,alignAttr:t,sideAttr:o}){let r=o!=null?o:"bottom",n={},i=()=>{var c;if(["after","before"].includes(e.align)){if(t=="start")return "before";if(t=="end")return "after"}return (c=e.align)!=null?c:"after"},l="-24px",d={top:"bottom",right:"left",bottom:"top",left:"right"};n[d[r]]=l;let u=i();return ["before","end"].includes(u)?["top","bottom"].includes(r)?n.right=l:n.bottom=l:["after","start"].includes(u)?["top","bottom"].includes(r)?n.left=l:n.top=l:["top","bottom"].includes(r)?n.left=`calc(50% + ${l})`:n.top=`calc(50% + ${l})`,n}var Se={content:["align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPadding","forceMount","hideWhenDetached","onCloseAutoFocus","onEscapeKeyDown","onFocusOutside","onInteractOutside","onOpenAutoFocus","onPointerDownOutside","side","sideOffset","sticky"],root:["defaultOpen","modal","onOpenChange","open"]};function Be(e,t){var n,i,l,d,u;let o=Object.fromEntries(Se.content.map(c=>[c,e[c]]).filter(c=>c[1]!==void 0)),r=Object.fromEntries(Se.root.map(c=>[c,e[c]]).filter(c=>c[1]!==void 0));if(o.align=(n=o.align)!=null?n:"after",o.side=(i=o.side)!=null?i:"bottom",["before","after"].includes(o.align)){let c={after:"end",before:"start"},y=(A,I)=>["top","bottom"].includes(I)?A=="after"?"marginLeft":"marginRight":A=="after"?"marginTop":"marginBottom",h=(l=o.alignOffset)!=null?l:0,w=(d=o.style)!=null?d:{},P=(u=o.side)!=null?u:"bottom",M=o.align;o.style=p(s({},w),{[y(M,P)]:h});let D=["top","bottom"].includes(P)?t.width:t.height;o.alignOffset=(D+h)*-1,o.align=c[M];}return {contentProps:o,rootProps:r}}function x(l){var d=l,{anchor:e,children:t,className:o,spotlight:r=!1,style:n}=d,i=f(d,["anchor","children","className","spotlight","style"]);let{node:u,rect:c,ref:y}=he(),{contentProps:h,rootProps:w}=Be(i,c),[P,M]=X.useState(h.align),[D,A]=X.useState(h.side);if(u!==null){let F=u.getAttribute("data-align"),Y=u.getAttribute("data-side");P!==F&&M(F),D!==Y&&A(Y);}let I=X.useRef(null),[V,De]=X.useState(null);if(X.useEffect(()=>{let F=document.querySelector(e);F!=null&&(I.current=F,De(I));},[e]),V==null)return null;let W=V.current.getBoundingClientRect(),Q="0";typeof window!="undefined"&&(Q=window.getComputedStyle(V.current).borderRadius);let Ae=Te({props:i,alignAttr:P,sideAttr:D});return jsxRuntime.jsxs(v__namespace.Root,p(s({defaultOpen:!0},w),{children:[jsxRuntime.jsx(v__namespace.Anchor,{virtualRef:V}),jsxRuntime.jsx(v__namespace.Portal,{children:jsxRuntime.jsxs("div",{className:o,css:{position:"absolute",zIndex:9999},children:[r&&jsxRuntime.jsx(g,{borderRadius:Q,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}}),jsxRuntime.jsx(v__namespace.Content,p(s({asChild:!0},h),{ref:y,children:jsxRuntime.jsxs(E.Column,{backgroundColor:"neutral.background",borderRadius:"md",p:5,part:"tooltip-content",position:"relative",css:s({boxShadow:"0px 4px 20px rgba(0, 0, 0, 0.1)",maxWidth:"360px"},n),children:[jsxRuntime.jsx(ve,{style:Ae}),t]})}))]})})]}))}x.Close=e=>jsxRuntime.jsx(v__namespace.Close,{"aria-label":"Close",asChild:!0,children:jsxRuntime.jsx(H.Plain,p(s({css:{top:"12px",right:"4px"},part:"tooltip-close",position:"absolute"},e),{children:jsxRuntime.jsx(solid.XMarkIcon,{height:"24",fill:"currentColor"})}))});x.Media=o=>{var r=o,{src:e}=r,t=f(r,["src"]);return e==null?null:jsxRuntime.jsx(q,s({borderRadius:"md md 0 0",borderWidth:"0",css:{aspectRatio:"2"},margin:"-5 -5 5",src:e},t))};x.Primary=r=>{var n=r,{onClick:e,title:t}=n,o=f(n,["onClick","title"]);return t==null?null:jsxRuntime.jsx(H.Primary,s({title:t,onClick:e},o))};x.Progress=o=>{var r=o,{children:e}=r,t=f(r,["children"]);return e==null?null:jsxRuntime.jsx(S.Body2,p(s({fontWeight:"demibold",part:"progress"},t),{children:e}))};x.Secondary=r=>{var n=r,{onClick:e,title:t}=n,o=f(n,["onClick","title"]);return t==null?null:jsxRuntime.jsx(H.Secondary,s({title:t,onClick:e},o))};x.Subtitle=o=>{var r=o,{children:e}=r,t=f(r,["children"]);return e==null?null:jsxRuntime.jsx(S.Body2,p(s({part:"subtitle"},t),{children:e}))};x.Title=o=>{var r=o,{children:e}=r,t=f(r,["children"]);return e==null?null:jsxRuntime.jsx(S.Body1,p(s({fontWeight:"bold",mb:1,part:"title"},t),{children:e}))};function Re(e){let[t,o]=X.useState(),{apiKey:r,config:n}=X.useContext(B),i=Object.fromEntries(Object.entries(n).filter(([c,y])=>["apiUrl","userId"].includes(c)&&y!=null)),d=X.useRef(new js.Frigade(r,i)).current,u=c=>{if(c.id!==e)return;let y=Object.assign(Object.create(Object.getPrototypeOf(c)),c);o(y);};return X.useEffect(()=>(T(this,null,function*(){let c=yield d.getFlow(e);o(c);}),d.onStateChange(u),()=>{d.removeStateChangeHandler(u);}),[]),{flow:t}}function ke(e){let{modals:t,setModals:o}=X.useContext(B),[r,n]=X.useState(!1);return X.useEffect(()=>(o([...t,e]),()=>o(t.filter(i=>i!==e))),[]),X.useEffect(()=>{let i=t[0]===e;i!==r&&n(i);},[t]),{isCurrentModal:r}}function j(e,{onComplete:t,onDismiss:o}={}){let r=X.useRef(null);return X.useEffect(()=>{e!=null&&(e.isCompleted&&r.current===!1&&t(e),r.current=e==null?void 0:e.isCompleted);},[e==null?void 0:e.isCompleted]),{handleDismiss:X.useCallback(n=>T(this,null,function*(){if((o==null?void 0:o(e,n))===!1)return n.preventDefault(),!1;yield e.skip();}),[e])}}function He(e,{onPrimary:t,onSecondary:o}={}){let{navigate:r}=X.useContext(B);return {handlePrimary:X.useCallback(n=>T(this,null,function*(){if((t==null?void 0:t(e,n))===!1)return n.preventDefault(),!1;yield e.complete(),e.primaryButtonUri!=null&&r(e.primaryButtonUri,e.primaryButtonUriTarget);}),[e]),handleSecondary:X.useCallback(n=>T(this,null,function*(){if((o==null?void 0:o(e,n))===!1)return n.preventDefault(),!1;yield e.complete(),e.secondaryButtonUri!=null&&r(e.secondaryButtonUri,e.secondaryButtonUriTarget);}),[e])}}function Me(l){var d=l,{step:e,flow:t,onDismiss:o,onPrimary:r,onSecondary:n}=d,i=f(d,["step","flow","onDismiss","onPrimary","onSecondary"]);var w;let{isCurrentModal:u}=ke(`${t.id}-${e.id}`),{handleDismiss:c}=j(t,{onDismiss:o}),{handlePrimary:y,handleSecondary:h}=He(e,{onPrimary:r,onSecondary:n});return u?jsxRuntime.jsxs(x,p(s({anchor:e.selector,onOpenAutoFocus:P=>P.preventDefault(),onPointerDownOutside:P=>P.preventDefault()},i),{children:[jsxRuntime.jsx(x.Close,{onClick:c}),jsxRuntime.jsx(x.Media,{src:(w=e.videoUri)!=null?w:e.imageUri,type:e.videoUri?"video":"image"}),jsxRuntime.jsx(x.Title,{children:e.title}),jsxRuntime.jsx(x.Subtitle,{children:e.subtitle}),jsxRuntime.jsxs(E.Row,{alignItems:"center",gap:3,justifyContent:"flex-end",part:"tooltip-footer",pt:4,children:[jsxRuntime.jsx(x.Progress,{children:`${(e==null?void 0:e.order)+1}/${t.steps.size}`}),jsxRuntime.jsx(x.Secondary,{marginLeft:"auto",title:e.secondaryButtonTitle,onClick:h}),jsxRuntime.jsx(x.Primary,{title:e.primaryButtonTitle,onClick:y})]})]}),e.id):null}function Nt(r){var n=r,{flowId:e,onComplete:t}=n,o=f(n,["flowId","onComplete"]);let{flow:i}=Re(e);if(j(i,{onComplete:t}),i==null||i.isVisible===!1)return null;i.start();let l=i.getCurrentStep();return l==null||l.start(),jsxRuntime.jsx(Me,s({step:l,flow:i},o))}
32
+ var Z=Object.defineProperty,Le=Object.defineProperties;var ze=Object.getOwnPropertyDescriptors;var $=Object.getOwnPropertySymbols;var ee=Object.prototype.hasOwnProperty,te=Object.prototype.propertyIsEnumerable;var Y=(e,t,o)=>t in e?Z(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,s=(e,t)=>{for(var o in t||(t={}))ee.call(t,o)&&Y(e,o,t[o]);if($)for(var o of $(t))te.call(t,o)&&Y(e,o,t[o]);return e},p=(e,t)=>Le(e,ze(t));var f=(e,t)=>{var o={};for(var r in e)ee.call(e,r)&&t.indexOf(r)<0&&(o[r]=e[r]);if(e!=null&&$)for(var r of $(e))t.indexOf(r)<0&&te.call(e,r)&&(o[r]=e[r]);return o};var oe=(e,t)=>{for(var o in t)Z(e,o,{get:t[o],enumerable:!0});};var C=(e,t,o)=>new Promise((r,n)=>{var i=u=>{try{c(o.next(u));}catch(d){n(d);}},l=u=>{try{c(o.throw(u));}catch(d){n(d);}},c=u=>u.done?r(u.value):Promise.resolve(u.value).then(i,l);c((o=o.apply(e,t)).next());});var re={borders:{md:"1px solid"},borderWidths:{0:"0",md:"1px"}};var ne={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 ie={md:"10px",lg:"20px",round:"50%"};var a=e=>`var(--fr-colors-${e})`,se={neutral:{background:a("white"),border:a("gray500"),foreground:a("black"),surface:a("gray700"),active:{background:a("white"),border:a("gray900"),foreground:a("black"),surface:a("gray700")},focus:{background:a("white"),border:a("gray900"),foreground:a("black"),surface:a("gray700")},hover:{background:a("white"),border:a("gray900"),foreground:a("black"),surface:a("gray700")}},primary:{background:a("blue500"),border:a("blue500"),foreground:a("white"),surface:a("blue500"),active:{background:a("blue400"),border:a("blue400"),foreground:a("white"),surface:a("blue400")},focus:{background:a("blue500"),border:a("blue500"),foreground:a("white"),surface:a("blue500")},hover:{background:a("blue400"),border:a("blue400"),foreground:a("white"),surface:a("blue400")}},secondary:{background:a("gray900"),border:a("gray900"),foreground:a("black"),surface:a("gray900"),active:{background:a("gray800"),border:a("gray800"),foreground:a("black"),surface:a("gray800")},focus:{background:a("gray900"),border:a("gray900"),foreground:a("black"),surface:a("gray900")},hover:{background:a("gray800"),border:a("gray800"),foreground:a("black"),surface:a("gray800")}}};var ae={md:"0px 4px 20px rgba(0, 0, 0, 0.1)"};var Ke="px",Ue=e=>typeof e=="number"?`${4*e}${Ke}`:e,Ne=[-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"],le=Object.fromEntries(Ne.map(e=>[e,Ue(e)]));var pe={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 L=p(s(p(s({},re),{colors:s(s({},ne),se)}),pe),{radii:ie,shadows:ae,space:le});function F(e,t="",o="."){return Object.keys(e).reduce((r,n)=>{let l=`${t.length?`${t}${o}`:""}${n}`,c=e[n];return typeof c=="object"&&c!==null&&!Array.isArray(c)?Object.assign(r,F(c,l,o)):r[l]=c,r},{})}function z(e){return F(e,"--fr","-")}function ce(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]=ce(n,`${t}-${r}`):o[r]=`var(${t}-${r})`;}),o}var de=z(L),m=ce(L);var K=F(m.colors),fe={color:K,backgroundColor:K,borderColor:K,border:m.borders,borderRadius:m.radii,borderWidth:m.borderWidths,fontFamily:m.fontFamilies,fontSize:m.fontSizes,fontWeight:m.fontWeights,gap:m.space,lineHeight:m.lineHeights,margin:m.space,marginTop:m.space,marginRight:m.space,marginBottom:m.space,marginLeft:m.space,padding:m.space,paddingTop:m.space,paddingRight:m.space,paddingBottom:m.space,paddingLeft:m.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"]},ue={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 _e(e){if(Array.isArray(e))return new Map(e.map(t=>[t,t]));if(typeof e=="object"&&e!==null)return new Map(Object.entries(e));if(["string","number"].includes(typeof e))return new Map([e,e]);throw new Error("Invalid entry in styleProps")}var Xe=new Map(Object.entries(fe).map(([e,t])=>[e,_e(t)])),qe=new Map(Object.entries(ue).map(([e,t])=>[e,new Set(t)]));function me(e){let t=Object.assign({},e),o={};return Object.entries(t).forEach(([r,n])=>{let i=qe.get(r);i!=null&&(i.forEach(l=>{t[l]=n;}),delete t[r]);}),Object.entries(t).forEach(([r,n])=>{let i=Xe.get(r);if(i!=null)if(typeof n=="string"&&n.indexOf(" ")>-1){let l=n.split(" ");o[r]=l.map(c=>{var u;return (u=i.get(c.toString()))!=null?u:c}).join(" "),delete t[r];}else i.has(n.toString())&&(o[r]=i.get(n.toString()),delete t[r]);}),{cssFromProps:o,unmatchedProps:t}}function ge(e){return e&&`fr-${e}`}function Je(e){return e&&(Array.isArray(e)?e.map(t=>ge(t)).join(" "):ge(e))}function Qe(l,i){var c=l,{as:e,children:t,className:o,part:r}=c,n=f(c,["as","children","className","part"]);let u=e!=null?e:"div",{cssFromProps:d,unmatchedProps:h}=me(n),y=Je(r),w=o||y?clsx.clsx(o,y):void 0;return jsxRuntime.jsx(u,p(s({className:w,css:[{boxSizing:"border-box"},d]},h),{ref:i,children:t}))}var g=___namespace.forwardRef(Qe);var U={};oe(U,{Body1:()=>it,Body2:()=>st,Caption:()=>at,Display1:()=>Ze,Display2:()=>et,H1:()=>tt,H2:()=>ot,H3:()=>rt,H4:()=>nt});var T={color:"neutral.foreground",fontFamily:"default",margin:0},Ze=p(s({},T),{fontSize:"5xl",fontWeight:"bold",lineHeight:"4xl"}),et=p(s({},T),{fontSize:"4xl",fontWeight:"bold",lineHeight:"3xl"}),tt=p(s({},T),{fontSize:"3xl",fontWeight:"bold",lineHeight:"2xl"}),ot=p(s({},T),{fontSize:"2xl",fontWeight:"bold",lineHeight:"xl"}),rt=p(s({},T),{fontSize:"xl",fontWeight:"bold",lineHeight:"lg"}),nt=p(s({},T),{fontSize:"lg",fontWeight:"bold",lineHeight:"md"}),it=p(s({},T),{fontSize:"md",fontWeight:"regular",lineHeight:"md"}),st=p(s({},T),{fontSize:"sm",fontWeight:"regular",lineHeight:"md"}),at=p(s({},T),{fontSize:"xs",fontWeight:"regular",lineHeight:"sm"});function be(n){var i=n,{as:e="span",children:t,variant:o="Body1"}=i,r=f(i,["as","children","variant"]);return jsxRuntime.jsx(g,p(s(s({as:e},U[o]),r),{children:t}))}var lt=["Display1","Display2","H1","H2","H3","H4","Body1","Body2","Caption"],pt=Object.fromEntries(lt.map(e=>{let t=["H1","H2","H3","H4"].includes(e)?e.toLowerCase():void 0,o=r=>jsxRuntime.jsx(be,p(s({as:t},r),{variant:e,children:r.children}));return o.displayName=`Text.${e}`,[e,o]})),B=Object.assign(be,pt);var N={};oe(N,{Link:()=>ft,Plain:()=>ut,Primary:()=>ct,Secondary:()=>dt,base:()=>O});var O=({radii:e,space:t})=>({borderWidth:0,borderRadius:e.md,padding:`${t[2]} ${t[4]}`}),ct=({colors:e})=>[O,{backgroundColor:e.primary.surface,color:e.primary.foreground,"&:hover":{backgroundColor:e.primary.hover.surface}}],dt=({colors:e})=>[O,{backgroundColor:e.secondary.surface,color:e.secondary.foreground,"&:hover":{backgroundColor:e.secondary.hover.surface}}],ft=({colors:e})=>[O,{backgroundColor:e.transparent,color:e.primary.surface,"&:hover":{color:e.primary.hover.surface}}],ut=({colors:e})=>[O,{backgroundColor:e.transparent,color:e.neutral.foreground}];function he(i){var l=i,{as:e,children:t,title:o,variant:r="Primary"}=l,n=f(l,["as","children","title","variant"]);return jsxRuntime.jsxs(g,p(s({as:e!=null?e:"button",css:N[r]},n),{children:[t,o&&jsxRuntime.jsx(B.Body2,{fontWeight:"demibold",color:"inherit",children:o})]}))}var mt=["Primary","Secondary","Link","Plain"],gt=Object.fromEntries(mt.map(e=>{let t=e.toLocaleLowerCase(),o=i=>{var l=i,{part:r}=l,n=f(l,["part"]);return jsxRuntime.jsx(he,p(s({part:[`button-${t}`,r]},n),{variant:e,children:n.children}))};return o.displayName=`Text.${e}`,[e,o]})),H=Object.assign(he,gt);var bt=___namespace.forwardRef((n,r)=>{var i=n,{children:e,css:t}=i,o=f(i,["children","css"]);return jsxRuntime.jsx(g,p(s({css:[{display:"flex",flexDirection:"row"},t]},o),{ref:r,children:e}))}),yt=___namespace.forwardRef((n,r)=>{var i=n,{children:e,css:t}=i,o=f(i,["children","css"]);return jsxRuntime.jsx(g,p(s({css:[{display:"flex",flexDirection:"column"},t]},o),{ref:r,children:e}))}),E={Column:yt,Row:bt};var S=_.createContext({apiKey:"",modals:[],setModals:()=>{},navigate:()=>{}});function wt(n){var i=n,{children:e,navigate:t,theme:o}=i,r=f(i,["children","navigate","theme"]);let l=o?z(o):{},[c,u]=_.useState([]),d=t!=null?t:(h,y="_self")=>{window.open(h,y);};return jsxRuntime.jsxs(S.Provider,{value:s({modals:c,setModals:u,navigate:d},r),children:[jsxRuntime.jsx(react.Global,{styles:{":root":s(s({},de),l)}}),jsxRuntime.jsx(react.ThemeProvider,{theme:m,children:e})]})}function Ce(){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),i=_.useCallback(l=>{n(l);},[]);return _.useLayoutEffect(()=>{r&&o(r.getBoundingClientRect());},[r]),{node:r,rect:t,ref:i}}var kt=react.keyframes({"0%":{opacity:.5,transform:"scale(0.5)"},"50%":{opacity:0,transform:"scale(1)"},"100%":{opacity:0,transform:"scale(1)"}});function Se(r){var n=r,{style:e={},part:t=""}=n,o=f(n,["style","part"]);return jsxRuntime.jsxs(g,p(s({part:`dot-wrapper ${t}`,style:s({height:"48px",position:"absolute",width:"48px"},e)},o),{children:[jsxRuntime.jsx(g,{backgroundColor:"primary.surface",part:"dot-pulse",css:{animation:`2s ease-out infinite ${kt}`,borderRadius:"24px",height:"48px",left:0,position:"absolute",top:0,transformOrigin:"center center",width:"48px"}}),jsxRuntime.jsx(g,{backgroundColor:"primary.surface",part:"dot",style:{borderRadius:"12px",height:"24px",left:"12px",position:"absolute",top:"12px",width:"24px"}})]}))}function Re(r){var n=r,{part:e,src:t}=n,o=f(n,["part","src"]);return jsxRuntime.jsx(g,s({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 ke(r){var n=r,{part:e,src:t}=n,o=f(n,["part","src"]);let i=Ht(t);return jsxRuntime.jsx(g,s({allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowFullScreen:!0,as:"iframe",backgroundColor:"gray100",borderWidth:0,part:["video",e],src:i},o))}function X(r){var n=r,{src:e,type:t}=n,o=f(n,["src","type"]);return jsxRuntime.jsx(t==="video"?ke:Re,s({src:e},o))}function Fe({props:e,alignAttr:t,sideAttr:o}){let r=o!=null?o:"bottom",n={},i=()=>{var d;if(["after","before"].includes(e.align)){if(t=="start")return "before";if(t=="end")return "after"}return (d=e.align)!=null?d:"after"},l="-24px",c={top:"bottom",right:"left",bottom:"top",left:"right"};n[c[r]]=l;let u=i();return ["before","end"].includes(u)?["top","bottom"].includes(r)?n.right=l:n.bottom=l:["after","start"].includes(u)?["top","bottom"].includes(r)?n.left=l:n.top=l:["top","bottom"].includes(r)?n.left=`calc(50% + ${l})`:n.top=`calc(50% + ${l})`,n}var Oe={content:["align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPadding","forceMount","hideWhenDetached","onCloseAutoFocus","onEscapeKeyDown","onFocusOutside","onInteractOutside","onOpenAutoFocus","onPointerDownOutside","side","sideOffset","sticky"],root:["defaultOpen","modal","onOpenChange","open"]};function He(e,t){var n,i,l,c,u;let o=Object.fromEntries(Oe.content.map(d=>[d,e[d]]).filter(d=>d[1]!==void 0)),r=Object.fromEntries(Oe.root.map(d=>[d,e[d]]).filter(d=>d[1]!==void 0));if(o.align=(n=o.align)!=null?n:"after",o.side=(i=o.side)!=null?i:"bottom",["before","after"].includes(o.align)){let d={after:"end",before:"start"},h=(A,I)=>["top","bottom"].includes(I)?A=="after"?"marginLeft":"marginRight":A=="after"?"marginTop":"marginBottom",y=(l=o.alignOffset)!=null?l:0,w=(c=o.style)!=null?c:{},P=(u=o.side)!=null?u:"bottom",M=o.align;o.style=p(s({},w),{[h(M,P)]:y});let D=["top","bottom"].includes(P)?t.width:t.height;o.alignOffset=(D+y)*-1,o.align=d[M];}return {contentProps:o,rootProps:r}}function x(l){var c=l,{anchor:e,children:t,className:o,spotlight:r=!1,style:n}=c,i=f(c,["anchor","children","className","spotlight","style"]);let{node:u,rect:d,ref:h}=Ce(),{contentProps:y,rootProps:w}=He(i,d),[P,M]=_.useState(y.align),[D,A]=_.useState(y.side);if(u!==null){let k=u.getAttribute("data-align"),Q=u.getAttribute("data-side");P!==k&&M(k),D!==Q&&A(Q);}let I=_.useRef(null),[V,$e]=_.useState(null);if(_.useEffect(()=>{let k=document.querySelector(e);k!=null&&(I.current=k,$e(I));},[e]),V==null)return null;let W=V.current.getBoundingClientRect(),J="0";typeof window!="undefined"&&(J=window.getComputedStyle(V.current).borderRadius);let je=Fe({props:i,alignAttr:P,sideAttr:D});return jsxRuntime.jsxs(v__namespace.Root,p(s({defaultOpen:!0},w),{children:[jsxRuntime.jsx(v__namespace.Anchor,{virtualRef:V}),jsxRuntime.jsx(v__namespace.Portal,{children:jsxRuntime.jsxs("div",{className:o,css:{position:"absolute",zIndex:9999},children:[r&&jsxRuntime.jsx(g,{borderRadius:J,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}}),jsxRuntime.jsx(v__namespace.Content,p(s({asChild:!0},y),{ref:h,children:jsxRuntime.jsxs(E.Column,{backgroundColor:"neutral.background",borderRadius:"md",p:5,part:"tooltip-content",position:"relative",css:s({boxShadow:"0px 4px 20px rgba(0, 0, 0, 0.1)",maxWidth:"360px"},n),children:[jsxRuntime.jsx(Se,{style:je}),t]})}))]})})]}))}x.Close=e=>jsxRuntime.jsx(v__namespace.Close,{"aria-label":"Close",asChild:!0,children:jsxRuntime.jsx(H.Plain,p(s({css:{top:"12px",right:"4px"},part:"tooltip-close",position:"absolute"},e),{children:jsxRuntime.jsx(solid.XMarkIcon,{height:"24",fill:"currentColor"})}))});x.Media=o=>{var r=o,{src:e}=r,t=f(r,["src"]);return e==null?null:jsxRuntime.jsx(X,s({borderRadius:"md md 0 0",borderWidth:"0",css:{aspectRatio:"2"},margin:"-5 -5 5",src:e},t))};x.Primary=r=>{var n=r,{onClick:e,title:t}=n,o=f(n,["onClick","title"]);return t==null?null:jsxRuntime.jsx(H.Primary,s({title:t,onClick:e},o))};x.Progress=o=>{var r=o,{children:e}=r,t=f(r,["children"]);return e==null?null:jsxRuntime.jsx(B.Body2,p(s({fontWeight:"demibold",part:"progress"},t),{children:e}))};x.Secondary=r=>{var n=r,{onClick:e,title:t}=n,o=f(n,["onClick","title"]);return t==null?null:jsxRuntime.jsx(H.Secondary,s({title:t,onClick:e},o))};x.Subtitle=o=>{var r=o,{children:e}=r,t=f(r,["children"]);return e==null?null:jsxRuntime.jsx(B.Body2,p(s({part:"subtitle"},t),{children:e}))};x.Title=o=>{var r=o,{children:e}=r,t=f(r,["children"]);return e==null?null:jsxRuntime.jsx(B.Body1,p(s({fontWeight:"bold",mb:1,part:"title"},t),{children:e}))};function Ee(e){let[t,o]=_.useState(),{apiKey:r,apiUrl:n,userId:i}=_.useContext(S),c=_.useRef(new js.Frigade(r,{apiUrl:n,userId:i})).current,u=d=>{if(d.id!==e)return;let h=Object.assign(Object.create(Object.getPrototypeOf(d)),d);o(h);};return _.useEffect(()=>(C(this,null,function*(){let d=yield c.getFlow(e);o(d);}),c.onStateChange(u),()=>{c.removeStateChangeHandler(u);}),[]),{flow:t}}function De(e){let{modals:t,setModals:o}=_.useContext(S),[r,n]=_.useState(!1);return _.useEffect(()=>(o([...t,e]),()=>o(t.filter(i=>i!==e))),[]),_.useEffect(()=>{let i=t[0]===e;i!==r&&n(i);},[t]),{isCurrentModal:r}}function j(e,{onComplete:t,onDismiss:o}={}){let r=_.useRef(null);return _.useEffect(()=>{e!=null&&(e.isCompleted&&r.current===!1&&t(e),r.current=e==null?void 0:e.isCompleted);},[e==null?void 0:e.isCompleted]),{handleDismiss:_.useCallback(n=>C(this,null,function*(){if((o==null?void 0:o(e,n))===!1)return n.preventDefault(),!1;yield e.skip();}),[e])}}function Ie(e,{onPrimary:t,onSecondary:o}={}){let{navigate:r}=_.useContext(S);return {handlePrimary:_.useCallback(n=>C(this,null,function*(){if((t==null?void 0:t(e,n))===!1)return n.preventDefault(),!1;yield e.complete(),e.primaryButtonUri!=null&&r(e.primaryButtonUri,e.primaryButtonUriTarget);}),[e]),handleSecondary:_.useCallback(n=>C(this,null,function*(){if((o==null?void 0:o(e,n))===!1)return n.preventDefault(),!1;yield e.complete(),e.secondaryButtonUri!=null&&r(e.secondaryButtonUri,e.secondaryButtonUriTarget);}),[e])}}function We(l){var c=l,{step:e,flow:t,onDismiss:o,onPrimary:r,onSecondary:n}=c,i=f(c,["step","flow","onDismiss","onPrimary","onSecondary"]);var w;let{isCurrentModal:u}=De(`${t.id}-${e.id}`),{handleDismiss:d}=j(t,{onDismiss:o}),{handlePrimary:h,handleSecondary:y}=Ie(e,{onPrimary:r,onSecondary:n});return u?jsxRuntime.jsxs(x,p(s({anchor:e.selector,onOpenAutoFocus:P=>P.preventDefault(),onPointerDownOutside:P=>P.preventDefault()},i),{children:[jsxRuntime.jsx(x.Close,{onClick:d}),jsxRuntime.jsx(x.Media,{src:(w=e.videoUri)!=null?w:e.imageUri,type:e.videoUri?"video":"image"}),jsxRuntime.jsx(x.Title,{children:e.title}),jsxRuntime.jsx(x.Subtitle,{children:e.subtitle}),jsxRuntime.jsxs(E.Row,{alignItems:"center",gap:3,justifyContent:"flex-end",part:"tooltip-footer",pt:4,children:[jsxRuntime.jsx(x.Progress,{children:`${(e==null?void 0:e.order)+1}/${t.steps.size}`}),jsxRuntime.jsx(x.Secondary,{marginLeft:"auto",title:e.secondaryButtonTitle,onClick:y}),jsxRuntime.jsx(x.Primary,{title:e.primaryButtonTitle,onClick:h})]})]}),e.id):null}function qt(r){var n=r,{flowId:e,onComplete:t}=n,o=f(n,["flowId","onComplete"]);let{flow:i}=Ee(e);if(j(i,{onComplete:t}),i==null||i.isVisible===!1)return null;i.start();let l=i.getCurrentStep();return l==null||l.start(),jsxRuntime.jsx(We,s({step:l,flow:i},o))}
33
33
 
34
34
  exports.Box = g;
35
35
  exports.Button = H;
36
36
  exports.Flex = E;
37
- exports.Provider = Pt;
38
- exports.Text = S;
37
+ exports.Provider = wt;
38
+ exports.Text = B;
39
39
  exports.Tooltip = x;
40
- exports.Tour = Nt;
40
+ exports.Tour = qt;
41
41
  //# sourceMappingURL=out.js.map
42
42
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Box/index.tsx","../src/shared/tokens/scalarTokens.ts","../src/shared/tokens/semanticColors.ts","../src/shared/tokens/index.ts","../src/shared/flattenObject.ts","../src/shared/theme/index.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","../src/components/Tooltip/index.tsx","../src/hooks/useBoundingClientRect.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/hooks/useModal.ts","../src/hooks/useFlowHandlers.ts","../src/hooks/useStepHandlers.ts","../src/components/Tour/TourStep.tsx","../src/components/Tour/index.tsx"],"names":["React","clsx","SPACE_UNIT","spaceValue","key","spaceKeys","spaceScale","palette","scalarTokens","__spreadValues","colorVar","colorName","semanticColors","tokens","__spreadProps","flattenObject","obj","path","separator","acc","k","currentPath","currentValue","createThemeVariables","mapTokensToThemeVariables","newObj","themeVariables","theme","colorTokens","styleProps","stylePropShorthands","prepValue","value","v","stylePropsMap","propName","stylePropShorthandsMap","shorthand","targetProps","stylePropsToCss","props","unmatchedProps","cssFromProps","propValue","matchedShorthand","styleProp","splitPropValues","_a","jsx","prefixPart","part","processPart","p","BoxWithRef","ref","_b","as","children","className","__objRest","Component","processedPart","classNameWithPart","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","radii","space","colors","jsxs","BaseButton","title","buttonVariantNames","buttonVariantComponents","variantPart","Button","Row","css","Column","Flex","createContext","useState","Global","ThemeProvider","FrigadeContext","Provider","apiKey","config","navigate","themeOverrides","modals","setModals","navigateHandler","url","target","useEffect","useRef","XMarkIcon","Popover","useCallback","useLayoutEffect","useBoundingClientRect","initialRect","rect","setRect","node","setNode","keyframes","pulse","Dot","style","Image","src","getVideoEmbedSrc","videoUri","_c","Video","videoEmbedSrc","Media","type","getDotPosition","alignAttr","sideAttr","currentSide","dotProps","getCurrentAlign","dotOffset","oppositeSides","currentAlign","RADIX_PROPS","mapTooltipPropsToPopoverProps","contentRect","_d","_e","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","onClick","Frigade","useContext","useFlow","flowId","flow","setFlow","filteredConfig","frigade","handler","updatedFlow","clonedFlow","__async","flowResponse","useModal","isCurrentModal","setIsCurrentModal","newIsCurrentModal","useFlowHandlers","onComplete","onDismiss","lastCompleted","e","useStepHandlers","step","onPrimary","onSecondary","TourStep","handleDismiss","handlePrimary","handleSecondary","Tour"],"mappings":"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A,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,EAEaG,GAAsB,CACjC,EAAG,CAAC,QAAQ,EACZ,GAAI,CAAC,WAAW,EAChB,GAAI,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","sourcesContent":["import * as React from 'react'\nimport { clsx } from 'clsx'\n\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, 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 const cssProp = [{ boxSizing: 'border-box' }, cssFromProps]\n\n return (\n // @ts-ignore: TODO: ref types are yet again complaining\n <Component className={classNameWithPart} css={cssProp} {...unmatchedProps} ref={ref}>\n {children}\n </Component>\n )\n}\n\nexport const Box = React.forwardRef(BoxWithRef)\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 SpaceScale = {\n [K in SpaceKeys[any]]: string\n}\nconst spaceScale = Object.fromEntries(spaceKeys.map((key) => [key, spaceValue(key)])) as SpaceScale\n\nexport 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\n// Scalar = Tokens with literal values\nexport const scalarTokens = {\n borders: {\n md: '1px solid',\n },\n borderWidths: {\n 0: '0',\n md: '1px',\n },\n\n colors: {\n ...palette,\n },\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 radii: {\n md: '10px',\n lg: '20px',\n round: '50%',\n },\n shadows: {\n md: '0px 4px 20px rgba(0, 0, 0, 0.1)',\n },\n space: spaceScale,\n}\n","const colorVar = (colorName) => `var(--fr-colors-${colorName})`\n\n// Semantic = Tokens that reference Scalars & contextualize them according to how they're used\nexport const semanticColors = {\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","import { scalarTokens } from './scalarTokens'\nimport { semanticColors } from './semanticColors'\n\nexport { scalarTokens, semanticColors }\n\n// Package up everything everywhere all at once for convenience\nexport const tokens = {\n ...scalarTokens,\n colors: {\n ...scalarTokens.colors,\n ...semanticColors,\n },\n}\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 } from '../tokens'\nimport { flattenObject } from '../flattenObject'\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) {\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(obj, path = '--fr') {\n const newObj: Record<string, any> = {}\n\n Object.keys(obj).forEach((key) => {\n const currentValue = obj[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 { theme } from '../../shared/theme'\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","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","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 { 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, title, variant = 'Primary', ...props }: ButtonProps) {\n return (\n <Box as={as ?? 'button'} css={styles[variant] as Interpolation<any>} {...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 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, Dispatch, SetStateAction, useState } from 'react'\nimport { Global, ThemeProvider } from '@emotion/react'\n\nimport { createThemeVariables, theme as themeTokens, themeVariables } from '../../shared/theme'\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 children?: React.ReactNode\n config?: ProviderConfig\n navigate?: NavigateHandler\n theme?: Record<any, any>\n}\n\ninterface ProviderConfig {\n apiUrl?: string\n userId?: string\n}\n\ninterface ProviderContext {\n apiKey: string\n config: ProviderConfig\n modals: string[]\n setModals: Dispatch<SetStateAction<string[]>>\n navigate: NavigateHandler\n}\n\nexport const FrigadeContext = createContext<ProviderContext>({\n apiKey: '',\n config: {},\n modals: [],\n setModals: () => {},\n navigate: () => {},\n})\n\nexport function Provider({ apiKey, children, config = {}, navigate, theme }: ProviderProps) {\n const themeOverrides = theme ? createThemeVariables(theme) : {}\n const [modals, setModals] = useState([])\n\n const navigateHandler =\n navigate ??\n ((url, target = '_self') => {\n window.open(url, target)\n })\n\n return (\n <FrigadeContext.Provider\n value={{ apiKey, config, modals, setModals, navigate: navigateHandler }}\n >\n <Global styles={{ ':root': { ...themeVariables, ...themeOverrides } }} />\n <ThemeProvider theme={themeTokens}>{children}</ThemeProvider>\n </FrigadeContext.Provider>\n )\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport { Interpolation } from '@emotion/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 { Dot } from './Dot'\nimport { Flex } from '../Flex/Flex'\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 css?: Interpolation<Record<any, any>>\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 className={className} css={{ position: 'absolute', zIndex: 9999 }}>\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=\"neutral.background\"\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 maxWidth: '360px',\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 = (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=\"tooltip-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","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 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 { Flow, Frigade } from '@frigade/js'\nimport { useContext, useEffect, useRef, useState } from 'react'\n\nimport { FrigadeContext } from '../components/Provider'\n\nexport function useFlow(flowId: string) {\n const [flow, setFlow] = useState<Flow>()\n const { apiKey, config } = useContext(FrigadeContext)\n const filteredConfig = Object.fromEntries(\n Object.entries(config).filter(([k, v]) => ['apiUrl', 'userId'].includes(k) && v != null)\n )\n\n const frigadeRef = useRef(new Frigade(apiKey, filteredConfig))\n const frigade = frigadeRef.current\n\n const handler = (updatedFlow: Flow) => {\n if (updatedFlow.id !== flowId) {\n return\n }\n\n const clonedFlow = Object.assign(Object.create(Object.getPrototypeOf(updatedFlow)), updatedFlow)\n\n setFlow(clonedFlow)\n }\n\n useEffect(() => {\n ;(async () => {\n const flowResponse: Flow = await frigade.getFlow(flowId)\n\n setFlow(flowResponse)\n })()\n\n frigade.onStateChange(handler)\n\n return () => {\n frigade.removeStateChangeHandler(handler)\n }\n }, [])\n\n return { flow }\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 { MouseEvent, useCallback, useEffect, useRef } from 'react'\n\nimport { Flow } from '@frigade/js'\n\nexport type FlowHandler = (flow: Flow, event?: MouseEvent<unknown>) => 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 onComplete(flow)\n }\n\n lastCompleted.current = flow?.isCompleted\n }, [flow?.isCompleted])\n\n return {\n handleDismiss: useCallback(\n async (e: MouseEvent<unknown>) => {\n const continueDefault = 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 = (step: FlowStep, event?: MouseEvent<unknown>) => 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 = 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 = 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 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) return null\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>{`${step?.order + 1}/${flow.steps.size}`}</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 { Flow } from '@frigade/js'\n\nimport { useFlow } from '../../hooks/useFlow'\nimport { TooltipProps } from '../Tooltip'\nimport { TourStep } from './TourStep'\n\nimport { FlowHandler, useFlowHandlers } from '../../hooks/useFlowHandlers'\nimport { StepHandler } from '../../hooks/useStepHandlers'\n\nexport interface TourProps extends TooltipProps {\n flowId: string\n onComplete?: FlowHandler\n onDismiss?: FlowHandler\n onPrimary?: StepHandler\n onSecondary?: StepHandler\n}\n\nexport function Tour({ flowId, onComplete, ...props }: TourProps) {\n const { flow } = useFlow(flowId)\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"]}
1
+ {"version":3,"sources":["../src/components/Box/index.tsx","../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/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","../src/components/Tooltip/index.tsx","../src/hooks/useBoundingClientRect.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/hooks/useModal.ts","../src/hooks/useFlowHandlers.ts","../src/hooks/useStepHandlers.ts","../src/components/Tour/TourStep.tsx","../src/components/Tour/index.tsx"],"names":["React","clsx","borders","palette","radii","colorVar","colorName","semantic","shadows","SPACE_UNIT","spaceValue","key","spaceKeys","space","typography","tokens","__spreadProps","__spreadValues","flattenObject","obj","path","separator","acc","k","currentPath","currentValue","createThemeVariables","mapTokensToThemeVariables","newObj","themeVariables","theme","colorTokens","styleProps","stylePropShorthands","prepValue","value","v","stylePropsMap","propName","stylePropShorthandsMap","shorthand","targetProps","stylePropsToCss","props","unmatchedProps","cssFromProps","propValue","matchedShorthand","styleProp","splitPropValues","_a","jsx","prefixPart","part","processPart","p","BoxWithRef","ref","_b","as","children","className","__objRest","Component","processedPart","classNameWithPart","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","colors","jsxs","BaseButton","title","buttonVariantNames","buttonVariantComponents","variantPart","Button","Row","css","Column","Flex","createContext","useState","Global","ThemeProvider","FrigadeContext","Provider","navigate","themeOverrides","modals","setModals","navigateHandler","url","target","useEffect","useRef","XMarkIcon","Popover","useCallback","useLayoutEffect","useBoundingClientRect","initialRect","rect","setRect","node","setNode","keyframes","pulse","Dot","style","Image","src","getVideoEmbedSrc","videoUri","_c","Video","videoEmbedSrc","Media","type","getDotPosition","alignAttr","sideAttr","currentSide","dotProps","getCurrentAlign","dotOffset","oppositeSides","currentAlign","RADIX_PROPS","mapTooltipPropsToPopoverProps","contentRect","_d","_e","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","onClick","Frigade","useContext","useFlow","flowId","flow","setFlow","apiKey","apiUrl","userId","frigade","handler","updatedFlow","clonedFlow","__async","flowResponse","useModal","isCurrentModal","setIsCurrentModal","newIsCurrentModal","useFlowHandlers","onComplete","onDismiss","lastCompleted","e","useStepHandlers","step","onPrimary","onSecondary","TourStep","handleDismiss","handlePrimary","handleSecondary","Tour"],"mappings":"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AYA,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,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","sourcesContent":["import * as React from 'react'\nimport { clsx } from 'clsx'\n\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, 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 const cssProp = [{ boxSizing: 'border-box' }, cssFromProps]\n\n return (\n // @ts-ignore: TODO: ref types are yet again complaining\n <Component className={classNameWithPart} css={cssProp} {...unmatchedProps} ref={ref}>\n {children}\n </Component>\n )\n}\n\nexport const Box = React.forwardRef(BoxWithRef)\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 { theme } from '../../shared/theme'\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","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","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 { 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, title, variant = 'Primary', ...props }: ButtonProps) {\n return (\n <Box as={as ?? 'button'} css={styles[variant] as Interpolation<any>} {...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 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, Dispatch, SetStateAction, 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'\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}\n\ninterface ProviderContext extends Omit<ProviderProps, 'children' | 'theme'> {\n modals: string[]\n setModals: Dispatch<SetStateAction<string[]>>\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\n const navigateHandler =\n navigate ??\n ((url, target = '_self') => {\n window.open(url, target)\n })\n\n return (\n <FrigadeContext.Provider value={{ modals, setModals, navigate: navigateHandler, ...props }}>\n <Global styles={{ ':root': { ...themeVariables, ...themeOverrides } }} />\n <ThemeProvider theme={themeTokens}>{children}</ThemeProvider>\n </FrigadeContext.Provider>\n )\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport { Interpolation } from '@emotion/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 { Dot } from './Dot'\nimport { Flex } from '../Flex/Flex'\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 css?: Interpolation<Record<any, any>>\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 className={className} css={{ position: 'absolute', zIndex: 9999 }}>\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=\"neutral.background\"\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 maxWidth: '360px',\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 = (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=\"tooltip-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","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 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 { Flow, Frigade } from '@frigade/js'\nimport { useContext, useEffect, useRef, useState } from 'react'\n\nimport { FrigadeContext } from '../components/Provider'\n\nexport function useFlow(flowId: string) {\n const [flow, setFlow] = useState<Flow>()\n const { apiKey, apiUrl, userId } = useContext(FrigadeContext)\n\n const frigadeRef = useRef(new Frigade(apiKey, { apiUrl, userId }))\n const frigade = frigadeRef.current\n\n const handler = (updatedFlow: Flow) => {\n if (updatedFlow.id !== flowId) {\n return\n }\n\n const clonedFlow = Object.assign(Object.create(Object.getPrototypeOf(updatedFlow)), updatedFlow)\n\n setFlow(clonedFlow)\n }\n\n useEffect(() => {\n ;(async () => {\n const flowResponse: Flow = await frigade.getFlow(flowId)\n\n setFlow(flowResponse)\n })()\n\n frigade.onStateChange(handler)\n\n return () => {\n frigade.removeStateChangeHandler(handler)\n }\n }, [])\n\n return { flow }\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 { MouseEvent, useCallback, useEffect, useRef } from 'react'\n\nimport { Flow } from '@frigade/js'\n\nexport type FlowHandler = (flow: Flow, event?: MouseEvent<unknown>) => 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 onComplete(flow)\n }\n\n lastCompleted.current = flow?.isCompleted\n }, [flow?.isCompleted])\n\n return {\n handleDismiss: useCallback(\n async (e: MouseEvent<unknown>) => {\n const continueDefault = 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 = (step: FlowStep, event?: MouseEvent<unknown>) => 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 = 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 = 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 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) return null\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>{`${step?.order + 1}/${flow.steps.size}`}</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 { useFlow } from '../../hooks/useFlow'\nimport { TooltipProps } from '../Tooltip'\nimport { TourStep } from './TourStep'\n\nimport { FlowHandler, useFlowHandlers } from '../../hooks/useFlowHandlers'\nimport { StepHandler } from '../../hooks/useStepHandlers'\n\nexport interface TourProps extends TooltipProps {\n flowId: string\n onComplete?: FlowHandler\n onDismiss?: FlowHandler\n onPrimary?: StepHandler\n onSecondary?: StepHandler\n}\n\nexport function Tour({ flowId, onComplete, ...props }: TourProps) {\n const { flow } = useFlow(flowId)\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"]}