@purpur/library 9.0.7 → 9.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/CHANGELOG.json +24 -0
  2. package/CHANGELOG.md +15 -1
  3. package/dist/{autocomplete-6qSqK3SI.js → autocomplete-B_OBQM2h.js} +2 -2
  4. package/dist/{autocomplete-6qSqK3SI.js.map → autocomplete-B_OBQM2h.js.map} +1 -1
  5. package/dist/{autocomplete-B4dZx9zF.mjs → autocomplete-DJ3zbA0m.mjs} +2 -2
  6. package/dist/{autocomplete-B4dZx9zF.mjs.map → autocomplete-DJ3zbA0m.mjs.map} +1 -1
  7. package/dist/autocomplete.cjs.js +1 -1
  8. package/dist/autocomplete.es.js +1 -1
  9. package/dist/button-BxdChrq-.js +2 -0
  10. package/dist/button-BxdChrq-.js.map +1 -0
  11. package/dist/button-D-BBdNhd.mjs +105 -0
  12. package/dist/button-D-BBdNhd.mjs.map +1 -0
  13. package/dist/button.cjs.js +1 -1
  14. package/dist/button.es.js +1 -1
  15. package/dist/{calendar-vALLklKV.mjs → calendar-9p_aA7KY.mjs} +2 -2
  16. package/dist/{calendar-vALLklKV.mjs.map → calendar-9p_aA7KY.mjs.map} +1 -1
  17. package/dist/{calendar-CxkJMONO.js → calendar-BSdvi_DA.js} +2 -2
  18. package/dist/{calendar-CxkJMONO.js.map → calendar-BSdvi_DA.js.map} +1 -1
  19. package/dist/calendar.cjs.js +1 -1
  20. package/dist/calendar.es.js +1 -1
  21. package/dist/components/button/src/button.d.ts +64 -4
  22. package/dist/components/button/src/button.d.ts.map +1 -1
  23. package/dist/{date-field-CTJB8O0e.mjs → date-field-Ch2lM7-P.mjs} +2 -2
  24. package/dist/{date-field-CTJB8O0e.mjs.map → date-field-Ch2lM7-P.mjs.map} +1 -1
  25. package/dist/{date-field-CORqon6B.js → date-field-DTI5mQkg.js} +2 -2
  26. package/dist/{date-field-CORqon6B.js.map → date-field-DTI5mQkg.js.map} +1 -1
  27. package/dist/date-field.cjs.js +1 -1
  28. package/dist/date-field.es.js +1 -1
  29. package/dist/{date-picker-CJcIJ5VL.mjs → date-picker-Bt3IaH23.mjs} +4 -4
  30. package/dist/{date-picker-CJcIJ5VL.mjs.map → date-picker-Bt3IaH23.mjs.map} +1 -1
  31. package/dist/{date-picker-Dv3W05Hf.js → date-picker-Dk39IXG5.js} +2 -2
  32. package/dist/{date-picker-Dv3W05Hf.js.map → date-picker-Dk39IXG5.js.map} +1 -1
  33. package/dist/date-picker.cjs.js +1 -1
  34. package/dist/date-picker.es.js +1 -1
  35. package/dist/{drawer-DSFZ61OH.mjs → drawer-B6j8nfAY.mjs} +2 -2
  36. package/dist/{drawer-DSFZ61OH.mjs.map → drawer-B6j8nfAY.mjs.map} +1 -1
  37. package/dist/{drawer-Ce5LNpU2.js → drawer-CJsLdd2x.js} +2 -2
  38. package/dist/{drawer-Ce5LNpU2.js.map → drawer-CJsLdd2x.js.map} +1 -1
  39. package/dist/drawer.cjs.js +1 -1
  40. package/dist/drawer.es.js +1 -1
  41. package/dist/{hero-banner-CkSSlxTW.mjs → hero-banner-B5HKmkXc.mjs} +2 -2
  42. package/dist/{hero-banner-CkSSlxTW.mjs.map → hero-banner-B5HKmkXc.mjs.map} +1 -1
  43. package/dist/{hero-banner-JFaqW20R.js → hero-banner-OnNSuxNT.js} +2 -2
  44. package/dist/{hero-banner-JFaqW20R.js.map → hero-banner-OnNSuxNT.js.map} +1 -1
  45. package/dist/hero-banner.cjs.js +1 -1
  46. package/dist/hero-banner.es.js +1 -1
  47. package/dist/library.cjs.js +1 -1
  48. package/dist/library.es.js +17 -17
  49. package/dist/{modal-2ymCXTup.mjs → modal-B1eJu9HN.mjs} +2 -2
  50. package/dist/{modal-2ymCXTup.mjs.map → modal-B1eJu9HN.mjs.map} +1 -1
  51. package/dist/{modal-CXi2xez5.js → modal-CQiJ98iI.js} +2 -2
  52. package/dist/{modal-CXi2xez5.js.map → modal-CQiJ98iI.js.map} +1 -1
  53. package/dist/modal.cjs.js +1 -1
  54. package/dist/modal.es.js +1 -1
  55. package/dist/{notification-BFSOuDp8.mjs → notification-BtcM7Ndu.mjs} +2 -2
  56. package/dist/{notification-BFSOuDp8.mjs.map → notification-BtcM7Ndu.mjs.map} +1 -1
  57. package/dist/{notification-DdnI2rOh.js → notification-Dsg3Vzfi.js} +2 -2
  58. package/dist/{notification-DdnI2rOh.js.map → notification-Dsg3Vzfi.js.map} +1 -1
  59. package/dist/{notification-banner-CT4ew8IQ.js → notification-banner-B0CUuKZn.js} +2 -2
  60. package/dist/{notification-banner-CT4ew8IQ.js.map → notification-banner-B0CUuKZn.js.map} +1 -1
  61. package/dist/{notification-banner-CQvBezAL.mjs → notification-banner-CbKcE7o4.mjs} +2 -2
  62. package/dist/{notification-banner-CQvBezAL.mjs.map → notification-banner-CbKcE7o4.mjs.map} +1 -1
  63. package/dist/notification-banner.cjs.js +1 -1
  64. package/dist/notification-banner.es.js +1 -1
  65. package/dist/notification.cjs.js +1 -1
  66. package/dist/notification.es.js +1 -1
  67. package/dist/{popover-ZeQKmyEb.mjs → popover-D3b2gHm-.mjs} +2 -2
  68. package/dist/{popover-ZeQKmyEb.mjs.map → popover-D3b2gHm-.mjs.map} +1 -1
  69. package/dist/{popover-D3qWbbU4.js → popover-D6k4-oO1.js} +2 -2
  70. package/dist/{popover-D3qWbbU4.js.map → popover-D6k4-oO1.js.map} +1 -1
  71. package/dist/popover.cjs.js +1 -1
  72. package/dist/popover.es.js +1 -1
  73. package/dist/purpur.css +1 -1
  74. package/dist/{quantity-selector-CjSAaj7d.js → quantity-selector-Bc-4Dnpc.js} +2 -2
  75. package/dist/{quantity-selector-CjSAaj7d.js.map → quantity-selector-Bc-4Dnpc.js.map} +1 -1
  76. package/dist/{quantity-selector-HvyYSKah.mjs → quantity-selector-Djf8APeL.mjs} +3 -3
  77. package/dist/{quantity-selector-HvyYSKah.mjs.map → quantity-selector-Djf8APeL.mjs.map} +1 -1
  78. package/dist/quantity-selector.cjs.js +1 -1
  79. package/dist/quantity-selector.es.js +1 -1
  80. package/dist/{search-field-CanOlkIY.js → search-field-0CBoxcNH.js} +2 -2
  81. package/dist/{search-field-CanOlkIY.js.map → search-field-0CBoxcNH.js.map} +1 -1
  82. package/dist/{search-field-BOmCVr5b.mjs → search-field-aP_i6Nr0.mjs} +3 -3
  83. package/dist/{search-field-BOmCVr5b.mjs.map → search-field-aP_i6Nr0.mjs.map} +1 -1
  84. package/dist/search-field.cjs.js +1 -1
  85. package/dist/search-field.es.js +1 -1
  86. package/dist/{stepper-DYjJgEHL.js → stepper-BaoOY4Ea.js} +2 -2
  87. package/dist/{stepper-DYjJgEHL.js.map → stepper-BaoOY4Ea.js.map} +1 -1
  88. package/dist/{stepper-D7T0wed7.mjs → stepper-CTdGj87I.mjs} +3 -3
  89. package/dist/{stepper-D7T0wed7.mjs.map → stepper-CTdGj87I.mjs.map} +1 -1
  90. package/dist/stepper.cjs.js +1 -1
  91. package/dist/stepper.es.js +1 -1
  92. package/dist/{table-B4pts_r4.mjs → table-D7qthqj_.mjs} +5 -5
  93. package/dist/{table-B4pts_r4.mjs.map → table-D7qthqj_.mjs.map} +1 -1
  94. package/dist/{table-Bv_BISXV.js → table-TdOPMFoP.js} +2 -2
  95. package/dist/{table-Bv_BISXV.js.map → table-TdOPMFoP.js.map} +1 -1
  96. package/dist/table.cjs.js +1 -1
  97. package/dist/table.es.js +1 -1
  98. package/dist/{text-field-5rIuW8gc.mjs → text-field-9zPmL99g.mjs} +2 -2
  99. package/dist/{text-field-5rIuW8gc.mjs.map → text-field-9zPmL99g.mjs.map} +1 -1
  100. package/dist/{text-field-Xt6T3zjO.js → text-field-CKCwxTJX.js} +2 -2
  101. package/dist/{text-field-Xt6T3zjO.js.map → text-field-CKCwxTJX.js.map} +1 -1
  102. package/dist/text-field.cjs.js +1 -1
  103. package/dist/text-field.es.js +1 -1
  104. package/dist/{tooltip-DkwyNxrQ.mjs → tooltip-BtGtu3ph.mjs} +2 -2
  105. package/dist/{tooltip-DkwyNxrQ.mjs.map → tooltip-BtGtu3ph.mjs.map} +1 -1
  106. package/dist/{tooltip-svlZkXBs.js → tooltip-eUP35j3v.js} +2 -2
  107. package/dist/{tooltip-svlZkXBs.js.map → tooltip-eUP35j3v.js.map} +1 -1
  108. package/dist/tooltip.cjs.js +1 -1
  109. package/dist/tooltip.es.js +1 -1
  110. package/package.json +20 -20
  111. package/dist/button-BfYKNBmC.mjs +0 -102
  112. package/dist/button-BfYKNBmC.mjs.map +0 -1
  113. package/dist/button-DDYGuqZ0.js +0 -2
  114. package/dist/button-DDYGuqZ0.js.map +0 -1
@@ -1,2 +1,2 @@
1
- "use strict";const a=require("react/jsx-runtime"),X=require("./button-DDYGuqZ0.js"),l=require("react"),dt=require("./variables-Buqm4JZc.js"),y=require("./index-DlMXYAr3.js"),U=require("./index-_XxjJPRD.js"),$=require("./index-kcwFA4Dv.js"),M=require("./index-DA01QPpC.js"),ft=require("./index-BtWPC8xc.js"),R=require("./floating-ui.react-dom-Cc_YSprQ.js"),ht=require("./index-DOFLOnao.js"),we=require("./index-CleLBinl.js"),gt=require("./close.es-VL3lKi1O.js"),xe=require("./paragraph-BsI53OR0.js"),H=require("./bind-DeUYJ6m9.js"),vt=require("./heading-drD5ugCC.js");function _t(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const g=_t(l),te=l.createContext(null),re=()=>{const e=l.useContext(te);if(!e)throw new Error("usePopoverFlow must be used within a PopoverFlow provider");return e},B=()=>l.useContext(te),mt=({children:e,initialStep:t=1,onComplete:r,onDismiss:o,separatorText:n,stepText:s,backLabel:i,nextLabel:c,finishLabel:p,openDelay:u=0})=>{const[v,d]=l.useState(t),[h,m]=l.useState(new Set),x=l.useCallback(w=>{m(C=>{const S=new Set(C);return S.add(w),S})},[]),f=l.useCallback(w=>{m(C=>{const S=new Set(C);return S.delete(w),S})},[]),O=l.useCallback(()=>{d(w=>{const C=w+1;return C>h.size?(r?.(),w):C})},[h.size,r]),j=l.useCallback(()=>{d(w=>Math.max(1,w-1))},[]),N=l.useCallback(()=>{d(0),o?.()},[o]),E=l.useMemo(()=>({currentStep:v,totalSteps:h.size,next:O,back:j,dismiss:N,registerStep:x,unregisterStep:f,separatorText:n,stepText:s,backLabel:i,nextLabel:c,finishLabel:p,openDelay:u}),[v,h.size,O,j,N,x,f,n,s,i,c,p,u]);return a.jsx(te.Provider,{value:E,children:e})},oe=l.createContext(null),K=()=>l.useContext(oe),Pe=l.createContext({negative:!1}),ne=()=>l.useContext(Pe),wt=150,_e={MAX_MD:`(max-width: ${dt.purpurBreakpointMd})`},se=()=>{const e=window.matchMedia(_e.MAX_MD);function t(){o(e.matches)}const[r,o]=l.useState(()=>typeof window>"u"?!1:window.matchMedia(_e.MAX_MD).matches),n=l.useCallback(()=>{let s;return()=>{clearTimeout(s),s=setTimeout(()=>t(),wt)}},[t]);return l.useEffect(()=>{if(!(typeof window>"u"))return window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)},[n]),{isMdOrSmaller:r}},ie=({children:e,onClick:t})=>{const{back:r}=re(),{negative:o}=ne(),{isMdOrSmaller:n}=se(),s=!o,i=()=>{t?.(),r()};return a.jsx(X.Button,{size:"sm",variant:"secondary",onClick:i,negative:s,fullWidth:n,children:e})};ie.displayName="PopoverBack";var xt="Arrow",Ce=g.forwardRef((e,t)=>{const{children:r,width:o=10,height:n=5,...s}=e;return a.jsx(y.Primitive.svg,{...s,ref:t,width:o,height:n,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?r:a.jsx("polygon",{points:"0,0 30,0 15,10"})})});Ce.displayName=xt;var Pt=Ce,ae="Popper",[Se,ye]=$.createContextScope(ae),[Ct,je]=Se(ae),Oe=e=>{const{__scopePopper:t,children:r}=e,[o,n]=g.useState(null);return a.jsx(Ct,{scope:t,anchor:o,onAnchorChange:n,children:r})};Oe.displayName=ae;var Re="PopperAnchor",be=g.forwardRef((e,t)=>{const{__scopePopper:r,virtualRef:o,...n}=e,s=je(Re,r),i=g.useRef(null),c=U.useComposedRefs(t,i),p=g.useRef(null);return g.useEffect(()=>{const u=p.current;p.current=o?.current||i.current,u!==p.current&&s.onAnchorChange(p.current)}),o?null:a.jsx(y.Primitive.div,{...n,ref:c})});be.displayName=Re;var ce="PopperContent",[St,yt]=Se(ce),Ae=g.forwardRef((e,t)=>{const{__scopePopper:r,side:o="bottom",sideOffset:n=0,align:s="center",alignOffset:i=0,arrowPadding:c=0,avoidCollisions:p=!0,collisionBoundary:u=[],collisionPadding:v=0,sticky:d="partial",hideWhenDetached:h=!1,updatePositionStrategy:m="optimized",onPlaced:x,...f}=e,O=je(ce,r),[j,N]=g.useState(null),E=U.useComposedRefs(t,I=>N(I)),[w,C]=g.useState(null),S=ht.useSize(w),V=S?.width??0,W=S?.height??0,Z=o+(s!=="center"?"-"+s:""),Q=typeof v=="number"?v:{top:0,right:0,bottom:0,left:0,...v},_=Array.isArray(u)?u:[u],P=_.length>0,k={padding:Q,boundary:_.filter(Ot),altBoundary:P},{refs:et,floatingStyles:fe,placement:tt,isPositioned:L,middlewareData:F}=R.useFloating({strategy:"fixed",placement:Z,whileElementsMounted:(...I)=>R.autoUpdate(...I,{animationFrame:m==="always"}),elements:{reference:O.anchor},middleware:[R.offset({mainAxis:n+W,alignmentAxis:i}),p&&R.shift({mainAxis:!0,crossAxis:!1,limiter:d==="partial"?R.limitShift():void 0,...k}),p&&R.flip({...k}),R.size({...k,apply:({elements:I,rects:ve,availableWidth:ct,availableHeight:pt})=>{const{width:lt,height:ut}=ve.reference,Y=I.floating.style;Y.setProperty("--radix-popper-available-width",`${ct}px`),Y.setProperty("--radix-popper-available-height",`${pt}px`),Y.setProperty("--radix-popper-anchor-width",`${lt}px`),Y.setProperty("--radix-popper-anchor-height",`${ut}px`)}}),w&&R.arrow({element:w,padding:c}),Rt({arrowWidth:V,arrowHeight:W}),h&&R.hide({strategy:"referenceHidden",...k})]}),[he,rt]=ke(tt),ge=$.useCallbackRef(x);$.useLayoutEffect2(()=>{L&&ge?.()},[L,ge]);const ot=F.arrow?.x,nt=F.arrow?.y,st=F.arrow?.centerOffset!==0,[it,at]=g.useState();return $.useLayoutEffect2(()=>{j&&at(window.getComputedStyle(j).zIndex)},[j]),a.jsx("div",{ref:et.setFloating,"data-radix-popper-content-wrapper":"",style:{...fe,transform:L?fe.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:it,"--radix-popper-transform-origin":[F.transformOrigin?.x,F.transformOrigin?.y].join(" "),...F.hide?.referenceHidden&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:a.jsx(St,{scope:r,placedSide:he,onArrowChange:C,arrowX:ot,arrowY:nt,shouldHideArrow:st,children:a.jsx(y.Primitive.div,{"data-side":he,"data-align":rt,...f,ref:E,style:{...f.style,animation:L?void 0:"none"}})})})});Ae.displayName=ce;var Ne="PopperArrow",jt={top:"bottom",right:"left",bottom:"top",left:"right"},Ee=g.forwardRef(function(t,r){const{__scopePopper:o,...n}=t,s=yt(Ne,o),i=jt[s.placedSide];return a.jsx("span",{ref:s.onArrowChange,style:{position:"absolute",left:s.arrowX,top:s.arrowY,[i]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[s.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[s.placedSide],visibility:s.shouldHideArrow?"hidden":void 0},children:a.jsx(Pt,{...n,ref:r,style:{...n.style,display:"block"}})})});Ee.displayName=Ne;function Ot(e){return e!==null}var Rt=e=>({name:"transformOrigin",options:e,fn(t){const{placement:r,rects:o,middlewareData:n}=t,i=n.arrow?.centerOffset!==0,c=i?0:e.arrowWidth,p=i?0:e.arrowHeight,[u,v]=ke(r),d={start:"0%",center:"50%",end:"100%"}[v],h=(n.arrow?.x??0)+c/2,m=(n.arrow?.y??0)+p/2;let x="",f="";return u==="bottom"?(x=i?d:`${h}px`,f=`${-p}px`):u==="top"?(x=i?d:`${h}px`,f=`${o.floating.height+p}px`):u==="right"?(x=`${-p}px`,f=i?d:`${m}px`):u==="left"&&(x=`${o.floating.width+p}px`,f=i?d:`${m}px`),{data:{x,y:f}}}});function ke(e){const[t,r="center"]=e.split("-");return[t,r]}var bt=Oe,Fe=be,At=Ae,Nt=Ee,G="Popover",[Te]=$.createContextScope(G,[ye]),z=ye(),[Et,A]=Te(G),Me=e=>{const{__scopePopover:t,children:r,open:o,defaultOpen:n,onOpenChange:s,modal:i=!1}=e,c=z(t),p=g.useRef(null),[u,v]=g.useState(!1),[d,h]=y.useControllableState({prop:o,defaultProp:n??!1,onChange:s,caller:G});return a.jsx(bt,{...c,children:a.jsx(Et,{scope:t,contentId:ft.useId(),triggerRef:p,open:d,onOpenChange:h,onOpenToggle:g.useCallback(()=>h(m=>!m),[h]),hasCustomAnchor:u,onCustomAnchorAdd:g.useCallback(()=>v(!0),[]),onCustomAnchorRemove:g.useCallback(()=>v(!1),[]),modal:i,children:r})})};Me.displayName=G;var De="PopoverAnchor",kt=g.forwardRef((e,t)=>{const{__scopePopover:r,...o}=e,n=A(De,r),s=z(r),{onCustomAnchorAdd:i,onCustomAnchorRemove:c}=n;return g.useEffect(()=>(i(),()=>c()),[i,c]),a.jsx(Fe,{...s,...o,ref:t})});kt.displayName=De;var Ie="PopoverTrigger",$e=g.forwardRef((e,t)=>{const{__scopePopover:r,...o}=e,n=A(Ie,r),s=z(r),i=U.useComposedRefs(t,n.triggerRef),c=a.jsx(y.Primitive.button,{type:"button","aria-haspopup":"dialog","aria-expanded":n.open,"aria-controls":n.contentId,"data-state":Ye(n.open),...o,ref:i,onClick:y.composeEventHandlers(e.onClick,n.onOpenToggle)});return n.hasCustomAnchor?c:a.jsx(Fe,{asChild:!0,...s,children:c})});$e.displayName=Ie;var pe="PopoverPortal",[Ft,Tt]=Te(pe,{forceMount:void 0}),He=e=>{const{__scopePopover:t,forceMount:r,children:o,container:n}=e,s=A(pe,t);return a.jsx(Ft,{scope:t,forceMount:r,children:a.jsx(we.Presence,{present:r||s.open,children:a.jsx(M.Portal,{asChild:!0,container:n,children:o})})})};He.displayName=pe;var D="PopoverContent",Be=g.forwardRef((e,t)=>{const r=Tt(D,e.__scopePopover),{forceMount:o=r.forceMount,...n}=e,s=A(D,e.__scopePopover);return a.jsx(we.Presence,{present:o||s.open,children:s.modal?a.jsx(Dt,{...n,ref:t}):a.jsx(It,{...n,ref:t})})});Be.displayName=D;var Mt=y.createSlot("PopoverContent.RemoveScroll"),Dt=g.forwardRef((e,t)=>{const r=A(D,e.__scopePopover),o=g.useRef(null),n=U.useComposedRefs(t,o),s=g.useRef(!1);return g.useEffect(()=>{const i=o.current;if(i)return M.hideOthers(i)},[]),a.jsx(M.ReactRemoveScroll,{as:Mt,allowPinchZoom:!0,children:a.jsx(ze,{...e,ref:n,trapFocus:r.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:y.composeEventHandlers(e.onCloseAutoFocus,i=>{i.preventDefault(),s.current||r.triggerRef.current?.focus()}),onPointerDownOutside:y.composeEventHandlers(e.onPointerDownOutside,i=>{const c=i.detail.originalEvent,p=c.button===0&&c.ctrlKey===!0,u=c.button===2||p;s.current=u},{checkForDefaultPrevented:!1}),onFocusOutside:y.composeEventHandlers(e.onFocusOutside,i=>i.preventDefault(),{checkForDefaultPrevented:!1})})})}),It=g.forwardRef((e,t)=>{const r=A(D,e.__scopePopover),o=g.useRef(!1),n=g.useRef(!1);return a.jsx(ze,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:s=>{e.onCloseAutoFocus?.(s),s.defaultPrevented||(o.current||r.triggerRef.current?.focus(),s.preventDefault()),o.current=!1,n.current=!1},onInteractOutside:s=>{e.onInteractOutside?.(s),s.defaultPrevented||(o.current=!0,s.detail.originalEvent.type==="pointerdown"&&(n.current=!0));const i=s.target;r.triggerRef.current?.contains(i)&&s.preventDefault(),s.detail.originalEvent.type==="focusin"&&n.current&&s.preventDefault()}})}),ze=g.forwardRef((e,t)=>{const{__scopePopover:r,trapFocus:o,onOpenAutoFocus:n,onCloseAutoFocus:s,disableOutsidePointerEvents:i,onEscapeKeyDown:c,onPointerDownOutside:p,onFocusOutside:u,onInteractOutside:v,...d}=e,h=A(D,r),m=z(r);return M.useFocusGuards(),a.jsx(M.FocusScope,{asChild:!0,loop:!0,trapped:o,onMountAutoFocus:n,onUnmountAutoFocus:s,children:a.jsx(M.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:i,onInteractOutside:v,onEscapeKeyDown:c,onPointerDownOutside:p,onFocusOutside:u,onDismiss:()=>h.onOpenChange(!1),children:a.jsx(At,{"data-state":Ye(h.open),role:"dialog",id:h.contentId,...m,...d,ref:t,style:{...d.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})}),qe="PopoverClose",We=g.forwardRef((e,t)=>{const{__scopePopover:r,...o}=e,n=A(qe,r);return a.jsx(y.Primitive.button,{type:"button",...o,ref:t,onClick:y.composeEventHandlers(e.onClick,()=>n.onOpenChange(!1))})});We.displayName=qe;var $t="PopoverArrow",Le=g.forwardRef((e,t)=>{const{__scopePopover:r,...o}=e,n=z(r);return a.jsx(Nt,{...n,...o,ref:t})});Le.displayName=$t;function Ye(e){return e?"open":"closed"}var Xe=Me,Ht=$e,Bt=He,zt=Be,Ue=We,qt=Le;const le=({children:e,asChild:t,onClick:r,variant:o="primary",dismiss:n=!0,fullWidth:s})=>{const i=B(),{isMdOrSmaller:c}=se(),{negative:p}=ne(),u=!p,v=()=>{r?.(),n&&i?.dismiss()},d=s??c,h=t?e:a.jsx(X.Button,{variant:o,size:"sm",fullWidth:d,negative:u,onClick:v,children:e});return n?a.jsx(Ue,{asChild:!0,children:h}):h};le.displayName="PopoverButton";const Wt="_highlightState1_1w9je_1",Lt="_fadeIn_1w9je_1",Yt="_slideFromTop_1w9je_1",Xt="_slideFromBottom_1w9je_1",Ut="_slideFromLeft_1w9je_1",Kt="_slideFromRight_1w9je_1",Gt="_fadeOut_1w9je_1",Vt="_slideToTop_1w9je_1",Zt="_slideToBottom_1w9je_1",Qt="_slideToLeft_1w9je_1",Jt="_slideToRight_1w9je_1",q={"purpur-popover__trigger":"_purpur-popover__trigger_1w9je_1","purpur-popover__trigger-highlight":"_purpur-popover__trigger-highlight_1w9je_5","purpur-popover__trigger-highlight--state1":"_purpur-popover__trigger-highlight--state1_1w9je_14",highlightState1:Wt,"purpur-popover__trigger-highlight--negative":"_purpur-popover__trigger-highlight--negative_1w9je_29","purpur-popover__trigger-highlight--state2":"_purpur-popover__trigger-highlight--state2_1w9je_33","purpur-popover__inner":"_purpur-popover__inner_1w9je_45","purpur-popover__content":"_purpur-popover__content_1w9je_52",fadeIn:Lt,slideFromTop:Yt,slideFromBottom:Xt,slideFromLeft:Ut,slideFromRight:Kt,fadeOut:Gt,slideToTop:Vt,slideToBottom:Zt,slideToLeft:Qt,slideToRight:Jt,"purpur-popover__arrow":"_purpur-popover__arrow_1w9je_103","purpur-popover__body":"_purpur-popover__body_1w9je_106","purpur-popover__icon":"_purpur-popover__icon_1w9je_107","purpur-popover__steps":"_purpur-popover__steps_1w9je_108","purpur-popover__title":"_purpur-popover__title_1w9je_109","purpur-popover__content--negative":"_purpur-popover__content--negative_1w9je_112","purpur-popover__header-content":"_purpur-popover__header-content_1w9je_124","purpur-popover__close":"_purpur-popover__close_1w9je_137","purpur-popover__footer":"_purpur-popover__footer_1w9je_142","purpur-popover__footer-button-group":"_purpur-popover__footer-button-group_1w9je_155"},er=H.c.bind(q),Ke=()=>{const e=re(),r=K()?.walkthroughStep||e.currentStep,{totalSteps:o,separatorText:n,stepText:s}=e;return a.jsx(a.Fragment,{children:a.jsxs(xe.Paragraph,{className:er("purpur-popover__steps"),role:"status","aria-live":"polite","aria-atomic":"true",children:[s," ",r," ",n," ",o]})})};Ke.displayName="PopoverSteps";const me=H.c.bind(q),ue=({children:e,className:t})=>{const r=B(),o=K(),n=r&&o&&o.walkthroughStep>0;return a.jsxs("div",{className:me("purpur-popover__footer",t),children:[n&&a.jsx(Ke,{}),a.jsx("div",{className:me("purpur-popover__footer-button-group"),children:e})]})};ue.displayName="PopoverFooter";const J=H.c.bind(q),Ge=l.forwardRef(({title:e,icon:t},r)=>a.jsxs("div",{ref:r,className:J("purpur-popover__header-content"),children:[t&&a.jsx("span",{className:J("purpur-popover__icon"),children:t}),a.jsx(vt.Heading,{tag:"h2",variant:"title-100",className:J("purpur-popover__title"),id:"popover-heading",children:e})]}));Ge.displayName="PopoverHeader";const de=({children:e,onClick:t})=>{const{next:r}=re(),{negative:o}=ne(),{isMdOrSmaller:n}=se(),s=!o,i=()=>{t?.(),r()};return a.jsx(X.Button,{size:"sm",variant:"primary",onClick:i,negative:s,fullWidth:n,children:e})};de.displayName="PopoverNext";const T=H.c.bind(q),Ve=l.forwardRef(({children:e,className:t,beakPosition:r="down",align:o="center",alignOffset:n=0,sideOffset:s=5,negative:i=!1,closeIconAriaLabel:c,title:p,icon:u,body:v,onAction:d,zIndex:h=210,...m},x)=>{const f=B(),O=K(),j=l.useRef(null),E={up:"bottom",right:"left",down:"top",left:"right",none:"bottom"}[r],w=r!=="none";let C=e;if(f&&!e){const _=O?.walkthroughStep||f.currentStep,P=_===1,k=_===f.totalSteps;C=a.jsxs(ue,{children:[!P&&a.jsx(ie,{onClick:()=>d?.({type:"back",step:_}),children:f.backLabel}),k?a.jsx(le,{onClick:()=>d?.({type:"finish",step:_}),dismiss:!0,children:f.finishLabel}):a.jsx(de,{onClick:()=>d?.({type:"next",step:_}),children:f.nextLabel})]})}const S=_=>{if(_.preventDefault(),f){const P=_.currentTarget;setTimeout(()=>{P.setAttribute("tabindex","-1"),P.focus()},0)}m.onOpenAutoFocus?.(_)},V=_=>{f&&_.preventDefault(),m.onCloseAutoFocus?.(_)},W=_=>{const P=window.matchMedia("(prefers-reduced-motion: reduce)").matches;f&&!P?(_.preventDefault(),setTimeout(()=>{d?.({type:"dismiss",step:f.currentStep}),f.dismiss()},200)):(d?.({type:"dismiss",step:f?.currentStep}),f?.dismiss())},Z=_=>{const P=window.matchMedia("(prefers-reduced-motion: reduce)").matches;f&&!P?(_.preventDefault(),setTimeout(()=>{d?.({type:"dismiss",step:f.currentStep}),f.dismiss()},200)):(d?.({type:"dismiss",step:f?.currentStep}),f?.dismiss())},Q=_=>{if(O?.disableClickOutside){_.preventDefault();return}if(f){const P=_.target;P.closest("[role='dialog']")||P.closest(".purpur-popover__trigger")||P.closest("button[aria-haspopup='dialog']")||(d?.({type:"dismiss",step:f.currentStep}),setTimeout(()=>{f.dismiss()},0))}};return a.jsx(Bt,{children:a.jsxs(zt,{"data-testid":"popover-content",role:"dialog","aria-modal":"true","aria-labelledby":m["aria-label"]?void 0:"popover-heading",ref:x,side:E,sideOffset:s,align:o,alignOffset:n,style:{"--popover-z-index":h},className:T("purpur-popover__content",{"purpur-popover__content--negative":i},t),onOpenAutoFocus:S,onCloseAutoFocus:V,onEscapeKeyDown:Z,onInteractOutside:Q,...m,children:[a.jsxs(Pe.Provider,{value:{negative:i},children:[a.jsxs("div",{className:T("purpur-popover__inner"),children:[a.jsx(Ge,{ref:j,title:p,icon:u}),a.jsx(xe.Paragraph,{className:T("purpur-popover__body"),children:v})]}),C,a.jsx(Ue,{asChild:!0,onClick:W,children:a.jsx(X.Button,{variant:i?"text":"tertiary-purple",size:"sm","aria-label":c,className:T("purpur-popover__close"),negative:!i,iconOnly:!0,children:a.jsx(gt.r,{size:"xs",className:T("purpur-popover__icon")})})})]}),w&&a.jsx(qt,{className:T("purpur-popover__arrow"),"aria-hidden":"true",tabIndex:-1})]})})});Ve.displayName="PopoverContent";const Ze=({children:e,open:t,defaultOpen:r=!1,onOpenChange:o,disableClickOutside:n,...s})=>{const[i,c]=l.useState(r),p=t!==void 0,u=p?t:i,v=d=>{p||c(d),o?.(d)};return a.jsx(Xe,{open:u,onOpenChange:v,...s,children:a.jsx(oe.Provider,{value:{isOpen:u,walkthroughStep:0,disableClickOutside:n},children:e})})};Ze.displayName="PopoverStandalone";const tr=e=>{const t=l.useRef(null),r=l.useCallback(()=>{t.current&&(cancelAnimationFrame(t.current),t.current=null)},[]);return{scrollToElement:l.useCallback((n,s=600)=>{const i=window.matchMedia("(prefers-reduced-motion: reduce)").matches,c=n.getBoundingClientRect(),p=c.top+window.pageYOffset,u=c.height,v=window.innerHeight;let d=p-v/2+u/2;const h=document.documentElement.scrollHeight,m=Math.max(0,h-v);if(d=Math.max(0,Math.min(d,m)),i){window.scrollTo(0,d),e?.();return}const x=window.pageYOffset,f=d-x,O=performance.now(),j=N=>{const E=N-O,w=Math.min(E/s,1),C=w<.5?2*w*w:1-Math.pow(-2*w+2,2)/2,S=x+f*C;window.scrollTo(0,S),w<1?t.current=requestAnimationFrame(j):(t.current=null,e?.())};r(),t.current=requestAnimationFrame(j)},[e,r]),cancelScroll:r}};function rr(e){const t=l.useRef(null),r=K(),o=B(),n=l.useRef(!1),{scrollToElement:s,cancelScroll:i}=tr(r?.onScrollComplete);return l.useEffect(()=>{typeof e=="function"?e(t.current):e&&(e.current=t.current)},[e]),l.useEffect(()=>{if(o&&r?.walkthroughStep!==void 0&&o.currentStep===r.walkthroughStep&&t.current&&!n.current){const p=t.current,u=p.getBoundingClientRect(),v=100;u.top>=-v&&u.bottom<=window.innerHeight+v&&u.left>=-v&&u.right<=window.innerWidth+v?r?.onScrollComplete?.():(r?.onScrollStart?.(),s(p)),n.current=!0}else o?.currentStep!==r?.walkthroughStep&&(n.current=!1,i())},[o?.currentStep,r?.walkthroughStep,o,s,i,r]),l.useEffect(()=>i,[i]),{triggerRef:t,context:r}}const ee=H.c.bind(q),Qe=l.forwardRef(({children:e,className:t,highlight:r=!0,negative:o=!1,...n},s)=>{const{triggerRef:i,context:c}=rr(s);return a.jsxs("div",{className:ee("purpur-popover__trigger",{"purpur-popover__trigger--highlight":c?.isOpen&&r},t),children:[c?.isOpen&&r&&a.jsxs(a.Fragment,{children:[a.jsx("div",{className:ee("purpur-popover__trigger-highlight","purpur-popover__trigger-highlight--state1",{"purpur-popover__trigger-highlight--negative":o}),"aria-hidden":"true"}),a.jsx("div",{className:ee("purpur-popover__trigger-highlight","purpur-popover__trigger-highlight--state2",{"purpur-popover__trigger-highlight--negative":o}),"aria-hidden":"true"})]}),a.jsx(Ht,{ref:i,asChild:!0,"aria-expanded":c?.isOpen??!1,"aria-haspopup":"dialog",...n,children:e})]})});Qe.displayName="PopoverTrigger";function or(e){const t=B(),[r,o]=l.useState(!1),[n,s]=l.useState(!1),i=l.useRef(null),c=l.useRef(0);l.useEffect(()=>t?(t.registerStep(e),()=>t.unregisterStep(e)):()=>{},[t,e]);const p=t?.currentStep===e,u=l.useCallback(()=>{s(!0)},[]),v=l.useCallback(()=>{if(s(!1),p){const h=t.openDelay;i.current=window.setTimeout(()=>{o(!0),c.current=Date.now()},h)}},[p,t]);l.useEffect(()=>{if(i.current&&(clearTimeout(i.current),i.current=null),p){if(!n){const h=t.openDelay;i.current=window.setTimeout(()=>{o(!0),c.current=Date.now()},h)}}else o(!1),s(!1),c.current=0;return()=>{i.current&&(clearTimeout(i.current),i.current=null)}},[p,n,t]);const d=l.useCallback((h,m)=>{if(m?.(h),!h&&r&&t&&t.currentStep===e){if(Date.now()-c.current<10||i.current!==null)return;t.dismiss()}},[r,t,e]);return{actuallyOpen:r,onScrollStart:u,onScrollComplete:v,handleOpenChange:d}}const Je=({children:e,step:t,onOpenChange:r,disableClickOutside:o=!0,...n})=>{const{actuallyOpen:s,onScrollStart:i,onScrollComplete:c,handleOpenChange:p}=or(t);return a.jsx(Xe,{open:s,onOpenChange:u=>p(u,r),...n,children:a.jsx(oe.Provider,{value:{isOpen:s,walkthroughStep:t,onScrollStart:i,onScrollComplete:c,disableClickOutside:o},children:e})})};Je.displayName="PopoverWalkthrough";const b=e=>{const{multistep:t=!1,disableClickOutside:r,...o}=e;return t?a.jsx(Je,{...o,disableClickOutside:r??!0}):a.jsx(Ze,{...o,disableClickOutside:r})};b.Back=ie;b.Button=le;b.Content=Ve;b.Flow=mt;b.Footer=ue;b.Next=de;b.Trigger=Qe;b.displayName="Popover";exports.Popover=b;
2
- //# sourceMappingURL=popover-D3qWbbU4.js.map
1
+ "use strict";const a=require("react/jsx-runtime"),X=require("./button-BxdChrq-.js"),l=require("react"),dt=require("./variables-Buqm4JZc.js"),y=require("./index-DlMXYAr3.js"),U=require("./index-_XxjJPRD.js"),$=require("./index-kcwFA4Dv.js"),M=require("./index-DA01QPpC.js"),ft=require("./index-BtWPC8xc.js"),R=require("./floating-ui.react-dom-Cc_YSprQ.js"),ht=require("./index-DOFLOnao.js"),we=require("./index-CleLBinl.js"),gt=require("./close.es-VL3lKi1O.js"),xe=require("./paragraph-BsI53OR0.js"),H=require("./bind-DeUYJ6m9.js"),vt=require("./heading-drD5ugCC.js");function _t(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const g=_t(l),te=l.createContext(null),re=()=>{const e=l.useContext(te);if(!e)throw new Error("usePopoverFlow must be used within a PopoverFlow provider");return e},B=()=>l.useContext(te),mt=({children:e,initialStep:t=1,onComplete:r,onDismiss:o,separatorText:n,stepText:s,backLabel:i,nextLabel:c,finishLabel:p,openDelay:u=0})=>{const[v,d]=l.useState(t),[h,m]=l.useState(new Set),x=l.useCallback(w=>{m(C=>{const S=new Set(C);return S.add(w),S})},[]),f=l.useCallback(w=>{m(C=>{const S=new Set(C);return S.delete(w),S})},[]),O=l.useCallback(()=>{d(w=>{const C=w+1;return C>h.size?(r?.(),w):C})},[h.size,r]),j=l.useCallback(()=>{d(w=>Math.max(1,w-1))},[]),N=l.useCallback(()=>{d(0),o?.()},[o]),E=l.useMemo(()=>({currentStep:v,totalSteps:h.size,next:O,back:j,dismiss:N,registerStep:x,unregisterStep:f,separatorText:n,stepText:s,backLabel:i,nextLabel:c,finishLabel:p,openDelay:u}),[v,h.size,O,j,N,x,f,n,s,i,c,p,u]);return a.jsx(te.Provider,{value:E,children:e})},oe=l.createContext(null),K=()=>l.useContext(oe),Pe=l.createContext({negative:!1}),ne=()=>l.useContext(Pe),wt=150,_e={MAX_MD:`(max-width: ${dt.purpurBreakpointMd})`},se=()=>{const e=window.matchMedia(_e.MAX_MD);function t(){o(e.matches)}const[r,o]=l.useState(()=>typeof window>"u"?!1:window.matchMedia(_e.MAX_MD).matches),n=l.useCallback(()=>{let s;return()=>{clearTimeout(s),s=setTimeout(()=>t(),wt)}},[t]);return l.useEffect(()=>{if(!(typeof window>"u"))return window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)},[n]),{isMdOrSmaller:r}},ie=({children:e,onClick:t})=>{const{back:r}=re(),{negative:o}=ne(),{isMdOrSmaller:n}=se(),s=!o,i=()=>{t?.(),r()};return a.jsx(X.Button,{size:"sm",variant:"secondary",onClick:i,negative:s,fullWidth:n,children:e})};ie.displayName="PopoverBack";var xt="Arrow",Ce=g.forwardRef((e,t)=>{const{children:r,width:o=10,height:n=5,...s}=e;return a.jsx(y.Primitive.svg,{...s,ref:t,width:o,height:n,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?r:a.jsx("polygon",{points:"0,0 30,0 15,10"})})});Ce.displayName=xt;var Pt=Ce,ae="Popper",[Se,ye]=$.createContextScope(ae),[Ct,je]=Se(ae),Oe=e=>{const{__scopePopper:t,children:r}=e,[o,n]=g.useState(null);return a.jsx(Ct,{scope:t,anchor:o,onAnchorChange:n,children:r})};Oe.displayName=ae;var Re="PopperAnchor",be=g.forwardRef((e,t)=>{const{__scopePopper:r,virtualRef:o,...n}=e,s=je(Re,r),i=g.useRef(null),c=U.useComposedRefs(t,i),p=g.useRef(null);return g.useEffect(()=>{const u=p.current;p.current=o?.current||i.current,u!==p.current&&s.onAnchorChange(p.current)}),o?null:a.jsx(y.Primitive.div,{...n,ref:c})});be.displayName=Re;var ce="PopperContent",[St,yt]=Se(ce),Ae=g.forwardRef((e,t)=>{const{__scopePopper:r,side:o="bottom",sideOffset:n=0,align:s="center",alignOffset:i=0,arrowPadding:c=0,avoidCollisions:p=!0,collisionBoundary:u=[],collisionPadding:v=0,sticky:d="partial",hideWhenDetached:h=!1,updatePositionStrategy:m="optimized",onPlaced:x,...f}=e,O=je(ce,r),[j,N]=g.useState(null),E=U.useComposedRefs(t,I=>N(I)),[w,C]=g.useState(null),S=ht.useSize(w),V=S?.width??0,W=S?.height??0,Z=o+(s!=="center"?"-"+s:""),Q=typeof v=="number"?v:{top:0,right:0,bottom:0,left:0,...v},_=Array.isArray(u)?u:[u],P=_.length>0,k={padding:Q,boundary:_.filter(Ot),altBoundary:P},{refs:et,floatingStyles:fe,placement:tt,isPositioned:L,middlewareData:F}=R.useFloating({strategy:"fixed",placement:Z,whileElementsMounted:(...I)=>R.autoUpdate(...I,{animationFrame:m==="always"}),elements:{reference:O.anchor},middleware:[R.offset({mainAxis:n+W,alignmentAxis:i}),p&&R.shift({mainAxis:!0,crossAxis:!1,limiter:d==="partial"?R.limitShift():void 0,...k}),p&&R.flip({...k}),R.size({...k,apply:({elements:I,rects:ve,availableWidth:ct,availableHeight:pt})=>{const{width:lt,height:ut}=ve.reference,Y=I.floating.style;Y.setProperty("--radix-popper-available-width",`${ct}px`),Y.setProperty("--radix-popper-available-height",`${pt}px`),Y.setProperty("--radix-popper-anchor-width",`${lt}px`),Y.setProperty("--radix-popper-anchor-height",`${ut}px`)}}),w&&R.arrow({element:w,padding:c}),Rt({arrowWidth:V,arrowHeight:W}),h&&R.hide({strategy:"referenceHidden",...k})]}),[he,rt]=ke(tt),ge=$.useCallbackRef(x);$.useLayoutEffect2(()=>{L&&ge?.()},[L,ge]);const ot=F.arrow?.x,nt=F.arrow?.y,st=F.arrow?.centerOffset!==0,[it,at]=g.useState();return $.useLayoutEffect2(()=>{j&&at(window.getComputedStyle(j).zIndex)},[j]),a.jsx("div",{ref:et.setFloating,"data-radix-popper-content-wrapper":"",style:{...fe,transform:L?fe.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:it,"--radix-popper-transform-origin":[F.transformOrigin?.x,F.transformOrigin?.y].join(" "),...F.hide?.referenceHidden&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:a.jsx(St,{scope:r,placedSide:he,onArrowChange:C,arrowX:ot,arrowY:nt,shouldHideArrow:st,children:a.jsx(y.Primitive.div,{"data-side":he,"data-align":rt,...f,ref:E,style:{...f.style,animation:L?void 0:"none"}})})})});Ae.displayName=ce;var Ne="PopperArrow",jt={top:"bottom",right:"left",bottom:"top",left:"right"},Ee=g.forwardRef(function(t,r){const{__scopePopper:o,...n}=t,s=yt(Ne,o),i=jt[s.placedSide];return a.jsx("span",{ref:s.onArrowChange,style:{position:"absolute",left:s.arrowX,top:s.arrowY,[i]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[s.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[s.placedSide],visibility:s.shouldHideArrow?"hidden":void 0},children:a.jsx(Pt,{...n,ref:r,style:{...n.style,display:"block"}})})});Ee.displayName=Ne;function Ot(e){return e!==null}var Rt=e=>({name:"transformOrigin",options:e,fn(t){const{placement:r,rects:o,middlewareData:n}=t,i=n.arrow?.centerOffset!==0,c=i?0:e.arrowWidth,p=i?0:e.arrowHeight,[u,v]=ke(r),d={start:"0%",center:"50%",end:"100%"}[v],h=(n.arrow?.x??0)+c/2,m=(n.arrow?.y??0)+p/2;let x="",f="";return u==="bottom"?(x=i?d:`${h}px`,f=`${-p}px`):u==="top"?(x=i?d:`${h}px`,f=`${o.floating.height+p}px`):u==="right"?(x=`${-p}px`,f=i?d:`${m}px`):u==="left"&&(x=`${o.floating.width+p}px`,f=i?d:`${m}px`),{data:{x,y:f}}}});function ke(e){const[t,r="center"]=e.split("-");return[t,r]}var bt=Oe,Fe=be,At=Ae,Nt=Ee,G="Popover",[Te]=$.createContextScope(G,[ye]),z=ye(),[Et,A]=Te(G),Me=e=>{const{__scopePopover:t,children:r,open:o,defaultOpen:n,onOpenChange:s,modal:i=!1}=e,c=z(t),p=g.useRef(null),[u,v]=g.useState(!1),[d,h]=y.useControllableState({prop:o,defaultProp:n??!1,onChange:s,caller:G});return a.jsx(bt,{...c,children:a.jsx(Et,{scope:t,contentId:ft.useId(),triggerRef:p,open:d,onOpenChange:h,onOpenToggle:g.useCallback(()=>h(m=>!m),[h]),hasCustomAnchor:u,onCustomAnchorAdd:g.useCallback(()=>v(!0),[]),onCustomAnchorRemove:g.useCallback(()=>v(!1),[]),modal:i,children:r})})};Me.displayName=G;var De="PopoverAnchor",kt=g.forwardRef((e,t)=>{const{__scopePopover:r,...o}=e,n=A(De,r),s=z(r),{onCustomAnchorAdd:i,onCustomAnchorRemove:c}=n;return g.useEffect(()=>(i(),()=>c()),[i,c]),a.jsx(Fe,{...s,...o,ref:t})});kt.displayName=De;var Ie="PopoverTrigger",$e=g.forwardRef((e,t)=>{const{__scopePopover:r,...o}=e,n=A(Ie,r),s=z(r),i=U.useComposedRefs(t,n.triggerRef),c=a.jsx(y.Primitive.button,{type:"button","aria-haspopup":"dialog","aria-expanded":n.open,"aria-controls":n.contentId,"data-state":Ye(n.open),...o,ref:i,onClick:y.composeEventHandlers(e.onClick,n.onOpenToggle)});return n.hasCustomAnchor?c:a.jsx(Fe,{asChild:!0,...s,children:c})});$e.displayName=Ie;var pe="PopoverPortal",[Ft,Tt]=Te(pe,{forceMount:void 0}),He=e=>{const{__scopePopover:t,forceMount:r,children:o,container:n}=e,s=A(pe,t);return a.jsx(Ft,{scope:t,forceMount:r,children:a.jsx(we.Presence,{present:r||s.open,children:a.jsx(M.Portal,{asChild:!0,container:n,children:o})})})};He.displayName=pe;var D="PopoverContent",Be=g.forwardRef((e,t)=>{const r=Tt(D,e.__scopePopover),{forceMount:o=r.forceMount,...n}=e,s=A(D,e.__scopePopover);return a.jsx(we.Presence,{present:o||s.open,children:s.modal?a.jsx(Dt,{...n,ref:t}):a.jsx(It,{...n,ref:t})})});Be.displayName=D;var Mt=y.createSlot("PopoverContent.RemoveScroll"),Dt=g.forwardRef((e,t)=>{const r=A(D,e.__scopePopover),o=g.useRef(null),n=U.useComposedRefs(t,o),s=g.useRef(!1);return g.useEffect(()=>{const i=o.current;if(i)return M.hideOthers(i)},[]),a.jsx(M.ReactRemoveScroll,{as:Mt,allowPinchZoom:!0,children:a.jsx(ze,{...e,ref:n,trapFocus:r.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:y.composeEventHandlers(e.onCloseAutoFocus,i=>{i.preventDefault(),s.current||r.triggerRef.current?.focus()}),onPointerDownOutside:y.composeEventHandlers(e.onPointerDownOutside,i=>{const c=i.detail.originalEvent,p=c.button===0&&c.ctrlKey===!0,u=c.button===2||p;s.current=u},{checkForDefaultPrevented:!1}),onFocusOutside:y.composeEventHandlers(e.onFocusOutside,i=>i.preventDefault(),{checkForDefaultPrevented:!1})})})}),It=g.forwardRef((e,t)=>{const r=A(D,e.__scopePopover),o=g.useRef(!1),n=g.useRef(!1);return a.jsx(ze,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:s=>{e.onCloseAutoFocus?.(s),s.defaultPrevented||(o.current||r.triggerRef.current?.focus(),s.preventDefault()),o.current=!1,n.current=!1},onInteractOutside:s=>{e.onInteractOutside?.(s),s.defaultPrevented||(o.current=!0,s.detail.originalEvent.type==="pointerdown"&&(n.current=!0));const i=s.target;r.triggerRef.current?.contains(i)&&s.preventDefault(),s.detail.originalEvent.type==="focusin"&&n.current&&s.preventDefault()}})}),ze=g.forwardRef((e,t)=>{const{__scopePopover:r,trapFocus:o,onOpenAutoFocus:n,onCloseAutoFocus:s,disableOutsidePointerEvents:i,onEscapeKeyDown:c,onPointerDownOutside:p,onFocusOutside:u,onInteractOutside:v,...d}=e,h=A(D,r),m=z(r);return M.useFocusGuards(),a.jsx(M.FocusScope,{asChild:!0,loop:!0,trapped:o,onMountAutoFocus:n,onUnmountAutoFocus:s,children:a.jsx(M.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:i,onInteractOutside:v,onEscapeKeyDown:c,onPointerDownOutside:p,onFocusOutside:u,onDismiss:()=>h.onOpenChange(!1),children:a.jsx(At,{"data-state":Ye(h.open),role:"dialog",id:h.contentId,...m,...d,ref:t,style:{...d.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})}),qe="PopoverClose",We=g.forwardRef((e,t)=>{const{__scopePopover:r,...o}=e,n=A(qe,r);return a.jsx(y.Primitive.button,{type:"button",...o,ref:t,onClick:y.composeEventHandlers(e.onClick,()=>n.onOpenChange(!1))})});We.displayName=qe;var $t="PopoverArrow",Le=g.forwardRef((e,t)=>{const{__scopePopover:r,...o}=e,n=z(r);return a.jsx(Nt,{...n,...o,ref:t})});Le.displayName=$t;function Ye(e){return e?"open":"closed"}var Xe=Me,Ht=$e,Bt=He,zt=Be,Ue=We,qt=Le;const le=({children:e,asChild:t,onClick:r,variant:o="primary",dismiss:n=!0,fullWidth:s})=>{const i=B(),{isMdOrSmaller:c}=se(),{negative:p}=ne(),u=!p,v=()=>{r?.(),n&&i?.dismiss()},d=s??c,h=t?e:a.jsx(X.Button,{variant:o,size:"sm",fullWidth:d,negative:u,onClick:v,children:e});return n?a.jsx(Ue,{asChild:!0,children:h}):h};le.displayName="PopoverButton";const Wt="_highlightState1_1w9je_1",Lt="_fadeIn_1w9je_1",Yt="_slideFromTop_1w9je_1",Xt="_slideFromBottom_1w9je_1",Ut="_slideFromLeft_1w9je_1",Kt="_slideFromRight_1w9je_1",Gt="_fadeOut_1w9je_1",Vt="_slideToTop_1w9je_1",Zt="_slideToBottom_1w9je_1",Qt="_slideToLeft_1w9je_1",Jt="_slideToRight_1w9je_1",q={"purpur-popover__trigger":"_purpur-popover__trigger_1w9je_1","purpur-popover__trigger-highlight":"_purpur-popover__trigger-highlight_1w9je_5","purpur-popover__trigger-highlight--state1":"_purpur-popover__trigger-highlight--state1_1w9je_14",highlightState1:Wt,"purpur-popover__trigger-highlight--negative":"_purpur-popover__trigger-highlight--negative_1w9je_29","purpur-popover__trigger-highlight--state2":"_purpur-popover__trigger-highlight--state2_1w9je_33","purpur-popover__inner":"_purpur-popover__inner_1w9je_45","purpur-popover__content":"_purpur-popover__content_1w9je_52",fadeIn:Lt,slideFromTop:Yt,slideFromBottom:Xt,slideFromLeft:Ut,slideFromRight:Kt,fadeOut:Gt,slideToTop:Vt,slideToBottom:Zt,slideToLeft:Qt,slideToRight:Jt,"purpur-popover__arrow":"_purpur-popover__arrow_1w9je_103","purpur-popover__body":"_purpur-popover__body_1w9je_106","purpur-popover__icon":"_purpur-popover__icon_1w9je_107","purpur-popover__steps":"_purpur-popover__steps_1w9je_108","purpur-popover__title":"_purpur-popover__title_1w9je_109","purpur-popover__content--negative":"_purpur-popover__content--negative_1w9je_112","purpur-popover__header-content":"_purpur-popover__header-content_1w9je_124","purpur-popover__close":"_purpur-popover__close_1w9je_137","purpur-popover__footer":"_purpur-popover__footer_1w9je_142","purpur-popover__footer-button-group":"_purpur-popover__footer-button-group_1w9je_155"},er=H.c.bind(q),Ke=()=>{const e=re(),r=K()?.walkthroughStep||e.currentStep,{totalSteps:o,separatorText:n,stepText:s}=e;return a.jsx(a.Fragment,{children:a.jsxs(xe.Paragraph,{className:er("purpur-popover__steps"),role:"status","aria-live":"polite","aria-atomic":"true",children:[s," ",r," ",n," ",o]})})};Ke.displayName="PopoverSteps";const me=H.c.bind(q),ue=({children:e,className:t})=>{const r=B(),o=K(),n=r&&o&&o.walkthroughStep>0;return a.jsxs("div",{className:me("purpur-popover__footer",t),children:[n&&a.jsx(Ke,{}),a.jsx("div",{className:me("purpur-popover__footer-button-group"),children:e})]})};ue.displayName="PopoverFooter";const J=H.c.bind(q),Ge=l.forwardRef(({title:e,icon:t},r)=>a.jsxs("div",{ref:r,className:J("purpur-popover__header-content"),children:[t&&a.jsx("span",{className:J("purpur-popover__icon"),children:t}),a.jsx(vt.Heading,{tag:"h2",variant:"title-100",className:J("purpur-popover__title"),id:"popover-heading",children:e})]}));Ge.displayName="PopoverHeader";const de=({children:e,onClick:t})=>{const{next:r}=re(),{negative:o}=ne(),{isMdOrSmaller:n}=se(),s=!o,i=()=>{t?.(),r()};return a.jsx(X.Button,{size:"sm",variant:"primary",onClick:i,negative:s,fullWidth:n,children:e})};de.displayName="PopoverNext";const T=H.c.bind(q),Ve=l.forwardRef(({children:e,className:t,beakPosition:r="down",align:o="center",alignOffset:n=0,sideOffset:s=5,negative:i=!1,closeIconAriaLabel:c,title:p,icon:u,body:v,onAction:d,zIndex:h=210,...m},x)=>{const f=B(),O=K(),j=l.useRef(null),E={up:"bottom",right:"left",down:"top",left:"right",none:"bottom"}[r],w=r!=="none";let C=e;if(f&&!e){const _=O?.walkthroughStep||f.currentStep,P=_===1,k=_===f.totalSteps;C=a.jsxs(ue,{children:[!P&&a.jsx(ie,{onClick:()=>d?.({type:"back",step:_}),children:f.backLabel}),k?a.jsx(le,{onClick:()=>d?.({type:"finish",step:_}),dismiss:!0,children:f.finishLabel}):a.jsx(de,{onClick:()=>d?.({type:"next",step:_}),children:f.nextLabel})]})}const S=_=>{if(_.preventDefault(),f){const P=_.currentTarget;setTimeout(()=>{P.setAttribute("tabindex","-1"),P.focus()},0)}m.onOpenAutoFocus?.(_)},V=_=>{f&&_.preventDefault(),m.onCloseAutoFocus?.(_)},W=_=>{const P=window.matchMedia("(prefers-reduced-motion: reduce)").matches;f&&!P?(_.preventDefault(),setTimeout(()=>{d?.({type:"dismiss",step:f.currentStep}),f.dismiss()},200)):(d?.({type:"dismiss",step:f?.currentStep}),f?.dismiss())},Z=_=>{const P=window.matchMedia("(prefers-reduced-motion: reduce)").matches;f&&!P?(_.preventDefault(),setTimeout(()=>{d?.({type:"dismiss",step:f.currentStep}),f.dismiss()},200)):(d?.({type:"dismiss",step:f?.currentStep}),f?.dismiss())},Q=_=>{if(O?.disableClickOutside){_.preventDefault();return}if(f){const P=_.target;P.closest("[role='dialog']")||P.closest(".purpur-popover__trigger")||P.closest("button[aria-haspopup='dialog']")||(d?.({type:"dismiss",step:f.currentStep}),setTimeout(()=>{f.dismiss()},0))}};return a.jsx(Bt,{children:a.jsxs(zt,{"data-testid":"popover-content",role:"dialog","aria-modal":"true","aria-labelledby":m["aria-label"]?void 0:"popover-heading",ref:x,side:E,sideOffset:s,align:o,alignOffset:n,style:{"--popover-z-index":h},className:T("purpur-popover__content",{"purpur-popover__content--negative":i},t),onOpenAutoFocus:S,onCloseAutoFocus:V,onEscapeKeyDown:Z,onInteractOutside:Q,...m,children:[a.jsxs(Pe.Provider,{value:{negative:i},children:[a.jsxs("div",{className:T("purpur-popover__inner"),children:[a.jsx(Ge,{ref:j,title:p,icon:u}),a.jsx(xe.Paragraph,{className:T("purpur-popover__body"),children:v})]}),C,a.jsx(Ue,{asChild:!0,onClick:W,children:a.jsx(X.Button,{variant:i?"text":"tertiary-purple",size:"sm","aria-label":c,className:T("purpur-popover__close"),negative:!i,iconOnly:!0,children:a.jsx(gt.r,{size:"xs",className:T("purpur-popover__icon")})})})]}),w&&a.jsx(qt,{className:T("purpur-popover__arrow"),"aria-hidden":"true",tabIndex:-1})]})})});Ve.displayName="PopoverContent";const Ze=({children:e,open:t,defaultOpen:r=!1,onOpenChange:o,disableClickOutside:n,...s})=>{const[i,c]=l.useState(r),p=t!==void 0,u=p?t:i,v=d=>{p||c(d),o?.(d)};return a.jsx(Xe,{open:u,onOpenChange:v,...s,children:a.jsx(oe.Provider,{value:{isOpen:u,walkthroughStep:0,disableClickOutside:n},children:e})})};Ze.displayName="PopoverStandalone";const tr=e=>{const t=l.useRef(null),r=l.useCallback(()=>{t.current&&(cancelAnimationFrame(t.current),t.current=null)},[]);return{scrollToElement:l.useCallback((n,s=600)=>{const i=window.matchMedia("(prefers-reduced-motion: reduce)").matches,c=n.getBoundingClientRect(),p=c.top+window.pageYOffset,u=c.height,v=window.innerHeight;let d=p-v/2+u/2;const h=document.documentElement.scrollHeight,m=Math.max(0,h-v);if(d=Math.max(0,Math.min(d,m)),i){window.scrollTo(0,d),e?.();return}const x=window.pageYOffset,f=d-x,O=performance.now(),j=N=>{const E=N-O,w=Math.min(E/s,1),C=w<.5?2*w*w:1-Math.pow(-2*w+2,2)/2,S=x+f*C;window.scrollTo(0,S),w<1?t.current=requestAnimationFrame(j):(t.current=null,e?.())};r(),t.current=requestAnimationFrame(j)},[e,r]),cancelScroll:r}};function rr(e){const t=l.useRef(null),r=K(),o=B(),n=l.useRef(!1),{scrollToElement:s,cancelScroll:i}=tr(r?.onScrollComplete);return l.useEffect(()=>{typeof e=="function"?e(t.current):e&&(e.current=t.current)},[e]),l.useEffect(()=>{if(o&&r?.walkthroughStep!==void 0&&o.currentStep===r.walkthroughStep&&t.current&&!n.current){const p=t.current,u=p.getBoundingClientRect(),v=100;u.top>=-v&&u.bottom<=window.innerHeight+v&&u.left>=-v&&u.right<=window.innerWidth+v?r?.onScrollComplete?.():(r?.onScrollStart?.(),s(p)),n.current=!0}else o?.currentStep!==r?.walkthroughStep&&(n.current=!1,i())},[o?.currentStep,r?.walkthroughStep,o,s,i,r]),l.useEffect(()=>i,[i]),{triggerRef:t,context:r}}const ee=H.c.bind(q),Qe=l.forwardRef(({children:e,className:t,highlight:r=!0,negative:o=!1,...n},s)=>{const{triggerRef:i,context:c}=rr(s);return a.jsxs("div",{className:ee("purpur-popover__trigger",{"purpur-popover__trigger--highlight":c?.isOpen&&r},t),children:[c?.isOpen&&r&&a.jsxs(a.Fragment,{children:[a.jsx("div",{className:ee("purpur-popover__trigger-highlight","purpur-popover__trigger-highlight--state1",{"purpur-popover__trigger-highlight--negative":o}),"aria-hidden":"true"}),a.jsx("div",{className:ee("purpur-popover__trigger-highlight","purpur-popover__trigger-highlight--state2",{"purpur-popover__trigger-highlight--negative":o}),"aria-hidden":"true"})]}),a.jsx(Ht,{ref:i,asChild:!0,"aria-expanded":c?.isOpen??!1,"aria-haspopup":"dialog",...n,children:e})]})});Qe.displayName="PopoverTrigger";function or(e){const t=B(),[r,o]=l.useState(!1),[n,s]=l.useState(!1),i=l.useRef(null),c=l.useRef(0);l.useEffect(()=>t?(t.registerStep(e),()=>t.unregisterStep(e)):()=>{},[t,e]);const p=t?.currentStep===e,u=l.useCallback(()=>{s(!0)},[]),v=l.useCallback(()=>{if(s(!1),p){const h=t.openDelay;i.current=window.setTimeout(()=>{o(!0),c.current=Date.now()},h)}},[p,t]);l.useEffect(()=>{if(i.current&&(clearTimeout(i.current),i.current=null),p){if(!n){const h=t.openDelay;i.current=window.setTimeout(()=>{o(!0),c.current=Date.now()},h)}}else o(!1),s(!1),c.current=0;return()=>{i.current&&(clearTimeout(i.current),i.current=null)}},[p,n,t]);const d=l.useCallback((h,m)=>{if(m?.(h),!h&&r&&t&&t.currentStep===e){if(Date.now()-c.current<10||i.current!==null)return;t.dismiss()}},[r,t,e]);return{actuallyOpen:r,onScrollStart:u,onScrollComplete:v,handleOpenChange:d}}const Je=({children:e,step:t,onOpenChange:r,disableClickOutside:o=!0,...n})=>{const{actuallyOpen:s,onScrollStart:i,onScrollComplete:c,handleOpenChange:p}=or(t);return a.jsx(Xe,{open:s,onOpenChange:u=>p(u,r),...n,children:a.jsx(oe.Provider,{value:{isOpen:s,walkthroughStep:t,onScrollStart:i,onScrollComplete:c,disableClickOutside:o},children:e})})};Je.displayName="PopoverWalkthrough";const b=e=>{const{multistep:t=!1,disableClickOutside:r,...o}=e;return t?a.jsx(Je,{...o,disableClickOutside:r??!0}):a.jsx(Ze,{...o,disableClickOutside:r})};b.Back=ie;b.Button=le;b.Content=Ve;b.Flow=mt;b.Footer=ue;b.Next=de;b.Trigger=Qe;b.displayName="Popover";exports.Popover=b;
2
+ //# sourceMappingURL=popover-D6k4-oO1.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"popover-D3qWbbU4.js","sources":["../../../components/popover/src/popover-flow.tsx","../../../components/popover/src/popover-internal-context.tsx","../../../components/popover/src/use-screen-size.hook.ts","../../../components/popover/src/popover-back.tsx","../../../common/temp/node_modules/.pnpm/@radix-ui+react-arrow@1.1.7_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@_e05f2c19a58a99fddf374207b5e3778c/node_modules/@radix-ui/react-arrow/dist/index.mjs","../../../common/temp/node_modules/.pnpm/@radix-ui+react-popper@1.2.8_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_13e0521d8aea7ebfbfb8bee1fb615c05/node_modules/@radix-ui/react-popper/dist/index.mjs","../../../common/temp/node_modules/.pnpm/@radix-ui+react-popover@1.1.15_@types+react-dom@19.2.3_@types+react@19.2.14__@types+rea_8b5332f8e883134e9d9ab2856fc4395d/node_modules/@radix-ui/react-popover/dist/index.mjs","../../../components/popover/src/popover-button.tsx","../../../components/popover/src/popover-steps.tsx","../../../components/popover/src/popover-footer.tsx","../../../components/popover/src/popover-header.tsx","../../../components/popover/src/popover-next.tsx","../../../components/popover/src/popover-content.tsx","../../../components/popover/src/popover-standalone.tsx","../../../components/popover/src/use-smooth-scroll.ts","../../../components/popover/src/usePopoverTrigger.ts","../../../components/popover/src/popover-trigger.tsx","../../../components/popover/src/usePopoverWalkthrough.ts","../../../components/popover/src/popover-walkthrough.tsx","../../../components/popover/src/popover.tsx"],"sourcesContent":["import React, {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useMemo,\n useState,\n} from \"react\";\n\ntype PopoverFlowContextType = {\n currentStep: number;\n totalSteps: number;\n next: () => void;\n back: () => void;\n dismiss: () => void;\n registerStep: (step: number) => void;\n unregisterStep: (step: number) => void;\n separatorText: string;\n stepText: string;\n backLabel: string;\n nextLabel: string;\n finishLabel: string;\n openDelay: number;\n};\n\nconst PopoverFlowContext = createContext<PopoverFlowContextType | null>(null);\n\nexport const usePopoverFlow = () => {\n const context = useContext(PopoverFlowContext);\n if (!context) {\n throw new Error(\"usePopoverFlow must be used within a PopoverFlow provider\");\n }\n return context;\n};\n\nexport const useOptionalPopoverFlow = (): PopoverFlowContextType | null => {\n return useContext(PopoverFlowContext);\n};\n\nexport type PopoverFlowProps = {\n /**\n * Child components, typically multiple Popover components with step numbers.\n */\n children: ReactNode;\n /**\n * The step number to show when the flow starts.\n * @default 1\n */\n initialStep?: number;\n /**\n * Callback fired when the user completes the last step of the flow.\n */\n onComplete?: () => void;\n /**\n * Callback fired when the user dismisses the flow before completing it.\n */\n onDismiss?: () => void;\n /**\n * Text used as separator in the step indicator (e.g., \"of\" in \"1 of 3\").\n */\n separatorText: string;\n /**\n * Text label for \"Step\" in the step indicator.\n */\n stepText: string;\n /**\n * Label for the back navigation button.\n */\n backLabel: string;\n /**\n * Label for the next navigation button.\n */\n nextLabel: string;\n /**\n * Label for the finish button on the last step.\n */\n finishLabel: string;\n /**\n * Delay in milliseconds before opening the next popover in the flow.\n * @default 0\n */\n openDelay?: number;\n};\n\nexport const PopoverFlow = ({\n children,\n initialStep = 1,\n onComplete,\n onDismiss,\n separatorText,\n stepText,\n backLabel,\n nextLabel,\n finishLabel,\n openDelay = 0,\n}: PopoverFlowProps) => {\n const [currentStep, setCurrentStep] = useState(initialStep);\n const [registeredSteps, setRegisteredSteps] = useState<Set<number>>(new Set());\n\n const registerStep = useCallback((step: number) => {\n setRegisteredSteps((prev) => {\n const next = new Set(prev);\n next.add(step);\n return next;\n });\n }, []);\n\n const unregisterStep = useCallback((step: number) => {\n setRegisteredSteps((prev) => {\n const next = new Set(prev);\n next.delete(step);\n return next;\n });\n }, []);\n\n const next = useCallback(() => {\n setCurrentStep((prev) => {\n const nextStep = prev + 1;\n if (nextStep > registeredSteps.size) {\n onComplete?.();\n return prev;\n }\n return nextStep;\n });\n }, [registeredSteps.size, onComplete]);\n\n const back = useCallback(() => {\n setCurrentStep((prev) => Math.max(1, prev - 1));\n }, []);\n\n const dismiss = useCallback(() => {\n setCurrentStep(0);\n onDismiss?.();\n }, [onDismiss]);\n\n const value = useMemo(\n () => ({\n currentStep,\n totalSteps: registeredSteps.size,\n next,\n back,\n dismiss,\n registerStep,\n unregisterStep,\n separatorText,\n stepText,\n backLabel,\n nextLabel,\n finishLabel,\n openDelay,\n }),\n [\n currentStep,\n registeredSteps.size,\n next,\n back,\n dismiss,\n registerStep,\n unregisterStep,\n separatorText,\n stepText,\n backLabel,\n nextLabel,\n finishLabel,\n openDelay,\n ]\n );\n\n return <PopoverFlowContext.Provider value={value}>{children}</PopoverFlowContext.Provider>;\n};\n","import { createContext, useContext } from \"react\";\n\nexport type PopoverInternalContextValue = {\n isOpen: boolean;\n walkthroughStep: number;\n onScrollComplete?: () => void;\n onScrollStart?: () => void;\n disableClickOutside?: boolean;\n};\n\nexport const PopoverInternalContext = createContext<PopoverInternalContextValue | null>(null);\n\nexport const usePopoverInternal = () => {\n const context = useContext(PopoverInternalContext);\n return context;\n};\n\n// Separate context for UI-specific props that are set at the Content level\nexport type PopoverNegativeContextValue = {\n negative: boolean;\n};\n\nexport const PopoverNegativeContext = createContext<PopoverNegativeContextValue>({ negative: false });\n\nexport const usePopoverNegative = () => {\n const context = useContext(PopoverNegativeContext);\n return context;\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport { purpurBreakpointMd } from \"@purpur/tokens\";\n\nconst DEBOUNCE_DELAY = 150;\n\nexport const SCREEN_MEDIA_QUERY = {\n MAX_MD: `(max-width: ${purpurBreakpointMd})`,\n} as const;\n\nexport const useScreenSize = () => {\n const maxMediumScreen = window.matchMedia(SCREEN_MEDIA_QUERY.MAX_MD);\n function updateSize() {\n setIsMdOrSmaller(maxMediumScreen.matches);\n }\n\n const [isMdOrSmaller, setIsMdOrSmaller] = useState(() => {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(SCREEN_MEDIA_QUERY.MAX_MD).matches;\n });\n\n const handleResize = useCallback(() => {\n let timeoutId: ReturnType<typeof setTimeout>;\n\n return () => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => updateSize(), DEBOUNCE_DELAY);\n };\n }, [updateSize]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => window.removeEventListener(\"resize\", handleResize);\n }, [handleResize]);\n\n return { isMdOrSmaller };\n};\n","import React, { type ReactNode } from \"react\";\nimport { Button } from \"@purpur/button\";\n\nimport { usePopoverFlow } from \"./popover-flow\";\nimport { usePopoverNegative } from \"./popover-internal-context\";\nimport { useScreenSize } from \"./use-screen-size.hook\";\n\nexport const PopoverBack = ({\n children,\n onClick,\n}: {\n children: ReactNode;\n onClick?: () => void;\n}) => {\n const { back } = usePopoverFlow();\n const { negative: isNegative } = usePopoverNegative();\n const { isMdOrSmaller } = useScreenSize();\n\n // Invert negative: if popover is negative (light), buttons should be normal (dark)\n const negative = isNegative ? false : true;\n\n const handleClick = () => {\n onClick?.();\n back();\n };\n\n return (\n <Button\n size=\"sm\"\n variant=\"secondary\"\n onClick={handleClick}\n negative={negative}\n fullWidth={isMdOrSmaller}\n >\n {children}\n </Button>\n );\n};\n\nPopoverBack.displayName = \"PopoverBack\";\n","// src/arrow.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Arrow\";\nvar Arrow = React.forwardRef((props, forwardedRef) => {\n const { children, width = 10, height = 5, ...arrowProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.svg,\n {\n ...arrowProps,\n ref: forwardedRef,\n width,\n height,\n viewBox: \"0 0 30 10\",\n preserveAspectRatio: \"none\",\n children: props.asChild ? children : /* @__PURE__ */ jsx(\"polygon\", { points: \"0,0 30,0 15,10\" })\n }\n );\n});\nArrow.displayName = NAME;\nvar Root = Arrow;\nexport {\n Arrow,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/popper.tsx\nimport * as React from \"react\";\nimport {\n useFloating,\n autoUpdate,\n offset,\n shift,\n limitShift,\n hide,\n arrow as floatingUIarrow,\n flip,\n size\n} from \"@floating-ui/react-dom\";\nimport * as ArrowPrimitive from \"@radix-ui/react-arrow\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SIDE_OPTIONS = [\"top\", \"right\", \"bottom\", \"left\"];\nvar ALIGN_OPTIONS = [\"start\", \"center\", \"end\"];\nvar POPPER_NAME = \"Popper\";\nvar [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\nvar [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);\nvar Popper = (props) => {\n const { __scopePopper, children } = props;\n const [anchor, setAnchor] = React.useState(null);\n return /* @__PURE__ */ jsx(PopperProvider, { scope: __scopePopper, anchor, onAnchorChange: setAnchor, children });\n};\nPopper.displayName = POPPER_NAME;\nvar ANCHOR_NAME = \"PopperAnchor\";\nvar PopperAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopper, virtualRef, ...anchorProps } = props;\n const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const anchorRef = React.useRef(null);\n React.useEffect(() => {\n const previousAnchor = anchorRef.current;\n anchorRef.current = virtualRef?.current || ref.current;\n if (previousAnchor !== anchorRef.current) {\n context.onAnchorChange(anchorRef.current);\n }\n });\n return virtualRef ? null : /* @__PURE__ */ jsx(Primitive.div, { ...anchorProps, ref: composedRefs });\n }\n);\nPopperAnchor.displayName = ANCHOR_NAME;\nvar CONTENT_NAME = \"PopperContent\";\nvar [PopperContentProvider, useContentContext] = createPopperContext(CONTENT_NAME);\nvar PopperContent = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopePopper,\n side = \"bottom\",\n sideOffset = 0,\n align = \"center\",\n alignOffset = 0,\n arrowPadding = 0,\n avoidCollisions = true,\n collisionBoundary = [],\n collisionPadding: collisionPaddingProp = 0,\n sticky = \"partial\",\n hideWhenDetached = false,\n updatePositionStrategy = \"optimized\",\n onPlaced,\n ...contentProps\n } = props;\n const context = usePopperContext(CONTENT_NAME, __scopePopper);\n const [content, setContent] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const [arrow, setArrow] = React.useState(null);\n const arrowSize = useSize(arrow);\n const arrowWidth = arrowSize?.width ?? 0;\n const arrowHeight = arrowSize?.height ?? 0;\n const desiredPlacement = side + (align !== \"center\" ? \"-\" + align : \"\");\n const collisionPadding = typeof collisionPaddingProp === \"number\" ? collisionPaddingProp : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };\n const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];\n const hasExplicitBoundaries = boundary.length > 0;\n const detectOverflowOptions = {\n padding: collisionPadding,\n boundary: boundary.filter(isNotNull),\n // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n altBoundary: hasExplicitBoundaries\n };\n const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({\n // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n strategy: \"fixed\",\n placement: desiredPlacement,\n whileElementsMounted: (...args) => {\n const cleanup = autoUpdate(...args, {\n animationFrame: updatePositionStrategy === \"always\"\n });\n return cleanup;\n },\n elements: {\n reference: context.anchor\n },\n middleware: [\n offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),\n avoidCollisions && shift({\n mainAxis: true,\n crossAxis: false,\n limiter: sticky === \"partial\" ? limitShift() : void 0,\n ...detectOverflowOptions\n }),\n avoidCollisions && flip({ ...detectOverflowOptions }),\n size({\n ...detectOverflowOptions,\n apply: ({ elements, rects, availableWidth, availableHeight }) => {\n const { width: anchorWidth, height: anchorHeight } = rects.reference;\n const contentStyle = elements.floating.style;\n contentStyle.setProperty(\"--radix-popper-available-width\", `${availableWidth}px`);\n contentStyle.setProperty(\"--radix-popper-available-height\", `${availableHeight}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-width\", `${anchorWidth}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-height\", `${anchorHeight}px`);\n }\n }),\n arrow && floatingUIarrow({ element: arrow, padding: arrowPadding }),\n transformOrigin({ arrowWidth, arrowHeight }),\n hideWhenDetached && hide({ strategy: \"referenceHidden\", ...detectOverflowOptions })\n ]\n });\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const handlePlaced = useCallbackRef(onPlaced);\n useLayoutEffect(() => {\n if (isPositioned) {\n handlePlaced?.();\n }\n }, [isPositioned, handlePlaced]);\n const arrowX = middlewareData.arrow?.x;\n const arrowY = middlewareData.arrow?.y;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const [contentZIndex, setContentZIndex] = React.useState();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n return /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: refs.setFloating,\n \"data-radix-popper-content-wrapper\": \"\",\n style: {\n ...floatingStyles,\n transform: isPositioned ? floatingStyles.transform : \"translate(0, -200%)\",\n // keep off the page when measuring\n minWidth: \"max-content\",\n zIndex: contentZIndex,\n [\"--radix-popper-transform-origin\"]: [\n middlewareData.transformOrigin?.x,\n middlewareData.transformOrigin?.y\n ].join(\" \"),\n // hide the content if using the hide middleware and should be hidden\n // set visibility to hidden and disable pointer events so the UI behaves\n // as if the PopperContent isn't there at all\n ...middlewareData.hide?.referenceHidden && {\n visibility: \"hidden\",\n pointerEvents: \"none\"\n }\n },\n dir: props.dir,\n children: /* @__PURE__ */ jsx(\n PopperContentProvider,\n {\n scope: __scopePopper,\n placedSide,\n onArrowChange: setArrow,\n arrowX,\n arrowY,\n shouldHideArrow: cannotCenterArrow,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-side\": placedSide,\n \"data-align\": placedAlign,\n ...contentProps,\n ref: composedRefs,\n style: {\n ...contentProps.style,\n // if the PopperContent hasn't been placed yet (not all measurements done)\n // we prevent animations so that users's animation don't kick in too early referring wrong sides\n animation: !isPositioned ? \"none\" : void 0\n }\n }\n )\n }\n )\n }\n );\n }\n);\nPopperContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"PopperArrow\";\nvar OPPOSITE_SIDE = {\n top: \"bottom\",\n right: \"left\",\n bottom: \"top\",\n left: \"right\"\n};\nvar PopperArrow = React.forwardRef(function PopperArrow2(props, forwardedRef) {\n const { __scopePopper, ...arrowProps } = props;\n const contentContext = useContentContext(ARROW_NAME, __scopePopper);\n const baseSide = OPPOSITE_SIDE[contentContext.placedSide];\n return (\n // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)\n // doesn't report size as we'd expect on SVG elements.\n // it reports their bounding box which is effectively the largest path inside the SVG.\n /* @__PURE__ */ jsx(\n \"span\",\n {\n ref: contentContext.onArrowChange,\n style: {\n position: \"absolute\",\n left: contentContext.arrowX,\n top: contentContext.arrowY,\n [baseSide]: 0,\n transformOrigin: {\n top: \"\",\n right: \"0 0\",\n bottom: \"center 0\",\n left: \"100% 0\"\n }[contentContext.placedSide],\n transform: {\n top: \"translateY(100%)\",\n right: \"translateY(50%) rotate(90deg) translateX(-50%)\",\n bottom: `rotate(180deg)`,\n left: \"translateY(50%) rotate(-90deg) translateX(50%)\"\n }[contentContext.placedSide],\n visibility: contentContext.shouldHideArrow ? \"hidden\" : void 0\n },\n children: /* @__PURE__ */ jsx(\n ArrowPrimitive.Root,\n {\n ...arrowProps,\n ref: forwardedRef,\n style: {\n ...arrowProps.style,\n // ensures the element can be measured correctly (mostly for if SVG)\n display: \"block\"\n }\n }\n )\n }\n )\n );\n});\nPopperArrow.displayName = ARROW_NAME;\nfunction isNotNull(value) {\n return value !== null;\n}\nvar transformOrigin = (options) => ({\n name: \"transformOrigin\",\n options,\n fn(data) {\n const { placement, rects, middlewareData } = data;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const isArrowHidden = cannotCenterArrow;\n const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const noArrowAlign = { start: \"0%\", center: \"50%\", end: \"100%\" }[placedAlign];\n const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n let x = \"\";\n let y = \"\";\n if (placedSide === \"bottom\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${-arrowHeight}px`;\n } else if (placedSide === \"top\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${rects.floating.height + arrowHeight}px`;\n } else if (placedSide === \"right\") {\n x = `${-arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n } else if (placedSide === \"left\") {\n x = `${rects.floating.width + arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n }\n return { data: { x, y } };\n }\n});\nfunction getSideAndAlignFromPlacement(placement) {\n const [side, align = \"center\"] = placement.split(\"-\");\n return [side, align];\n}\nvar Root2 = Popper;\nvar Anchor = PopperAnchor;\nvar Content = PopperContent;\nvar Arrow = PopperArrow;\nexport {\n ALIGN_OPTIONS,\n Anchor,\n Arrow,\n Content,\n Popper,\n PopperAnchor,\n PopperArrow,\n PopperContent,\n Root2 as Root,\n SIDE_OPTIONS,\n createPopperScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/popover.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { jsx } from \"react/jsx-runtime\";\nvar POPOVER_NAME = \"Popover\";\nvar [createPopoverContext, createPopoverScope] = createContextScope(POPOVER_NAME, [\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar [PopoverProvider, usePopoverContext] = createPopoverContext(POPOVER_NAME);\nvar Popover = (props) => {\n const {\n __scopePopover,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = false\n } = props;\n const popperScope = usePopperScope(__scopePopover);\n const triggerRef = React.useRef(null);\n const [hasCustomAnchor, setHasCustomAnchor] = React.useState(false);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: POPOVER_NAME\n });\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n PopoverProvider,\n {\n scope: __scopePopover,\n contentId: useId(),\n triggerRef,\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n hasCustomAnchor,\n onCustomAnchorAdd: React.useCallback(() => setHasCustomAnchor(true), []),\n onCustomAnchorRemove: React.useCallback(() => setHasCustomAnchor(false), []),\n modal,\n children\n }\n ) });\n};\nPopover.displayName = POPOVER_NAME;\nvar ANCHOR_NAME = \"PopoverAnchor\";\nvar PopoverAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...anchorProps } = props;\n const context = usePopoverContext(ANCHOR_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n const { onCustomAnchorAdd, onCustomAnchorRemove } = context;\n React.useEffect(() => {\n onCustomAnchorAdd();\n return () => onCustomAnchorRemove();\n }, [onCustomAnchorAdd, onCustomAnchorRemove]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });\n }\n);\nPopoverAnchor.displayName = ANCHOR_NAME;\nvar TRIGGER_NAME = \"PopoverTrigger\";\nvar PopoverTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...triggerProps } = props;\n const context = usePopoverContext(TRIGGER_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n const trigger = /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.contentId,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n return context.hasCustomAnchor ? trigger : /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: trigger });\n }\n);\nPopoverTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"PopoverPortal\";\nvar [PortalProvider, usePortalContext] = createPopoverContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar PopoverPortal = (props) => {\n const { __scopePopover, forceMount, children, container } = props;\n const context = usePopoverContext(PORTAL_NAME, __scopePopover);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopePopover, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nPopoverPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"PopoverContent\";\nvar PopoverContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopePopover);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(PopoverContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(PopoverContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }\n);\nPopoverContent.displayName = CONTENT_NAME;\nvar Slot = createSlot(\"PopoverContent.RemoveScroll\");\nvar PopoverContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n const isRightClickOutsideRef = React.useRef(false);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(\n PopoverContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: true,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n if (!isRightClickOutsideRef.current) context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(\n props.onPointerDownOutside,\n (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n isRightClickOutsideRef.current = isRightClick;\n },\n { checkForDefaultPrevented: false }\n ),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nvar PopoverContentNonModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n PopoverContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }\n);\nvar PopoverContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopePopover,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n ...contentProps\n } = props;\n const context = usePopoverContext(CONTENT_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n useFocusGuards();\n return /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents,\n onInteractOutside,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onDismiss: () => context.onOpenChange(false),\n children: /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n \"data-state\": getState(context.open),\n role: \"dialog\",\n id: context.contentId,\n ...popperScope,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...contentProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-popover-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-popover-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-popover-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-popover-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-popover-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n )\n }\n )\n }\n );\n }\n);\nvar CLOSE_NAME = \"PopoverClose\";\nvar PopoverClose = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...closeProps } = props;\n const context = usePopoverContext(CLOSE_NAME, __scopePopover);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }\n);\nPopoverClose.displayName = CLOSE_NAME;\nvar ARROW_NAME = \"PopoverArrow\";\nvar PopoverArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopePopover);\n return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }\n);\nPopoverArrow.displayName = ARROW_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar Root2 = Popover;\nvar Anchor2 = PopoverAnchor;\nvar Trigger = PopoverTrigger;\nvar Portal = PopoverPortal;\nvar Content2 = PopoverContent;\nvar Close = PopoverClose;\nvar Arrow2 = PopoverArrow;\nexport {\n Anchor2 as Anchor,\n Arrow2 as Arrow,\n Close,\n Content2 as Content,\n Popover,\n PopoverAnchor,\n PopoverArrow,\n PopoverClose,\n PopoverContent,\n PopoverPortal,\n PopoverTrigger,\n Portal,\n Root2 as Root,\n Trigger,\n createPopoverScope\n};\n//# sourceMappingURL=index.mjs.map\n","import React, { type ReactNode } from \"react\";\nimport { Button, type ButtonProps } from \"@purpur/button\";\nimport * as RadixPopover from \"@radix-ui/react-popover\";\n\nimport { useOptionalPopoverFlow } from \"./popover-flow\";\nimport { usePopoverNegative } from \"./popover-internal-context\";\nimport { useScreenSize } from \"./use-screen-size.hook\";\n\nexport type PopoverButtonProps = RadixPopover.PopoverCloseProps & {\n /**\n * Button label or content.\n */\n children: ReactNode;\n /**\n * Whether to use the child element as the button instead of wrapping in a Button component.\n * @default false\n */\n asChild?: boolean;\n /**\n * Click handler called when the button is clicked.\n */\n onClick?: () => void;\n /**\n * Visual variant of the button.\n * @default \"primary\"\n */\n variant?: ButtonProps[\"variant\"];\n /**\n * Whether clicking the button should dismiss/close the popover.\n * @default true\n */\n dismiss?: boolean;\n /**\n * Whether the button should take full width. If not specified, defaults to true on mobile (md or smaller).\n */\n fullWidth?: boolean;\n};\n\nexport const PopoverButton = ({\n children,\n asChild,\n onClick,\n variant = \"primary\",\n dismiss = true,\n fullWidth,\n}: PopoverButtonProps) => {\n const flow = useOptionalPopoverFlow();\n const { isMdOrSmaller } = useScreenSize();\n const { negative: isNegative } = usePopoverNegative();\n // Invert negative: if popover is negative (light), buttons should be normal (dark)\n const negative = isNegative ? false : true;\n\n const handleClick = () => {\n onClick?.();\n if (dismiss) {\n flow?.dismiss();\n }\n };\n\n const isFullWidth = fullWidth ?? isMdOrSmaller;\n\n const content = asChild ? (\n children\n ) : (\n <Button\n variant={variant}\n size=\"sm\"\n fullWidth={isFullWidth}\n negative={negative}\n onClick={handleClick}\n >\n {children}\n </Button>\n );\n\n // Always wrap with RadixPopover.Close for proper dismiss behavior\n if (dismiss) {\n return <RadixPopover.Close asChild>{content}</RadixPopover.Close>;\n }\n\n return content;\n};\n\nPopoverButton.displayName = \"PopoverButton\";\n","import React from \"react\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./popover.module.scss\";\nimport { usePopoverFlow } from \"./popover-flow\";\nimport { usePopoverInternal } from \"./popover-internal-context\";\n\nconst cx = c.bind(styles);\n\nexport const PopoverSteps = () => {\n const flow = usePopoverFlow();\n const context = usePopoverInternal();\n\n // Use walkthroughStep from context (each popover knows its own step number)\n const currentStep = context?.walkthroughStep || flow.currentStep;\n const { totalSteps, separatorText, stepText } = flow;\n return (\n <>\n <Paragraph\n className={cx(\"purpur-popover__steps\")}\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {stepText} {currentStep} {separatorText} {totalSteps}\n </Paragraph>\n </>\n );\n};\n\nPopoverSteps.displayName = \"PopoverSteps\";\n","import React, { type ReactNode } from \"react\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./popover.module.scss\";\nimport { useOptionalPopoverFlow } from \"./popover-flow\";\nimport { usePopoverInternal } from \"./popover-internal-context\";\nimport { PopoverSteps } from \"./popover-steps\";\n\nconst cx = c.bind(styles);\n\nexport type PopoverFooterProps = {\n /**\n * Footer content, typically navigation buttons like PopoverButton, PopoverNext, or PopoverBack.\n */\n children: ReactNode;\n /**\n * Optional CSS class name for custom styling.\n */\n className?: string;\n};\n\nexport const PopoverFooter = ({ children, className }: PopoverFooterProps) => {\n const flow = useOptionalPopoverFlow();\n const internal = usePopoverInternal();\n\n // Only show steps if we have a flow context AND this popover is part of the flow (walkthroughStep > 0)\n const showSteps = flow && internal && internal.walkthroughStep > 0;\n\n return (\n <div className={cx(\"purpur-popover__footer\", className)}>\n {showSteps && <PopoverSteps />}\n <div className={cx(\"purpur-popover__footer-button-group\")}>{children}</div>\n </div>\n );\n};\n\nPopoverFooter.displayName = \"PopoverFooter\";\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport { Heading } from \"@purpur/heading\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./popover.module.scss\";\n\nconst cx = c.bind(styles);\n\nexport type PopoverHeaderProps = {\n title: string;\n icon?: ReactNode;\n};\n\nexport const PopoverHeader = forwardRef<HTMLDivElement, PopoverHeaderProps>(\n ({ title, icon }, ref) => {\n return (\n <div ref={ref} className={cx(\"purpur-popover__header-content\")}>\n {icon && <span className={cx(\"purpur-popover__icon\")}>{icon}</span>}\n <Heading\n tag=\"h2\"\n variant=\"title-100\"\n className={cx(\"purpur-popover__title\")}\n id=\"popover-heading\"\n >\n {title}\n </Heading>\n </div>\n );\n }\n);\n\nPopoverHeader.displayName = \"PopoverHeader\";\n","import React, { type ReactNode } from \"react\";\nimport { Button } from \"@purpur/button\";\n\nimport { usePopoverFlow } from \"./popover-flow\";\nimport { usePopoverNegative } from \"./popover-internal-context\";\nimport { useScreenSize } from \"./use-screen-size.hook\";\n\nexport const PopoverNext = ({\n children,\n onClick,\n}: {\n children: ReactNode;\n onClick?: () => void;\n}) => {\n const { next } = usePopoverFlow();\n const { negative: isNegative } = usePopoverNegative();\n const { isMdOrSmaller } = useScreenSize();\n\n // Invert negative: if popover is negative (light), buttons should be normal (dark)\n const negative = isNegative ? false : true;\n\n const handleClick = () => {\n onClick?.();\n next();\n };\n\n return (\n <Button\n size=\"sm\"\n variant=\"primary\"\n onClick={handleClick}\n negative={negative}\n fullWidth={isMdOrSmaller}\n >\n {children}\n </Button>\n );\n};\n\nPopoverNext.displayName = \"PopoverNext\";\n","import React, { forwardRef, type ReactNode, useRef } from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconClose } from \"@purpur/icon/close\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport * as RadixPopover from \"@radix-ui/react-popover\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./popover.module.scss\";\nimport { PopoverBack } from \"./popover-back\";\nimport { PopoverButton } from \"./popover-button\";\nimport { useOptionalPopoverFlow } from \"./popover-flow\";\nimport { PopoverFooter } from \"./popover-footer\";\nimport { PopoverHeader } from \"./popover-header\";\nimport { PopoverNegativeContext, usePopoverInternal } from \"./popover-internal-context\";\nimport { PopoverNext } from \"./popover-next\";\n\nconst cx = c.bind(styles);\n\nexport type PopoverAction = {\n type: \"next\" | \"back\" | \"finish\" | \"dismiss\";\n step?: number;\n};\n\nexport type PopoverContentProps = RadixPopover.PopoverContentProps & {\n /**\n * Position of the arrow/beak pointing to the trigger element.\n * Set to \"none\" to hide the arrow.\n * @default \"down\"\n */\n beakPosition?: \"up\" | \"right\" | \"down\" | \"left\" | \"none\";\n /**\n * Whether to use negative (light) styling for the popover content.\n * @default false\n */\n negative?: boolean;\n /**\n * Accessible label for the close button icon.\n */\n closeIconAriaLabel: string;\n /**\n * Main title text displayed in the popover header.\n */\n title: string;\n /**\n * Optional icon displayed in the popover header next to the title.\n */\n icon?: ReactNode;\n /**\n * Main body text content of the popover.\n */\n body: string;\n /**\n * Custom footer content. If not provided and used within PopoverFlow,\n * default navigation buttons will be rendered.\n */\n children?: ReactNode;\n /**\n * Callback fired when user interacts with navigation buttons (next, back, finish, dismiss).\n */\n onAction?: (action: PopoverAction) => void;\n /**\n * CSS z-index value for the popover content.\n * @default 210\n */\n zIndex?: number;\n};\n\nexport const PopoverContent = forwardRef<HTMLDivElement, PopoverContentProps>(\n (\n {\n children,\n className,\n beakPosition = \"down\",\n align = \"center\",\n alignOffset = 0,\n sideOffset = 5, // How close or far the popover is from the trigger\n negative = false,\n closeIconAriaLabel,\n title,\n icon,\n body,\n onAction,\n zIndex = 210,\n ...props\n },\n ref\n ) => {\n const flow = useOptionalPopoverFlow();\n const context = usePopoverInternal();\n const headerRef = useRef<HTMLDivElement>(null);\n\n // Map beakPosition to Radix side values\n const beakPositionMap: Record<\n \"up\" | \"right\" | \"down\" | \"left\" | \"none\",\n \"bottom\" | \"left\" | \"top\" | \"right\"\n > = {\n up: \"bottom\",\n right: \"left\",\n down: \"top\",\n left: \"right\",\n none: \"bottom\", // Default position when no arrow\n };\n\n const radixSide = beakPositionMap[beakPosition];\n const shouldShowArrow = beakPosition !== \"none\";\n\n let footerContent = children;\n\n if (flow && !children) {\n // Use walkthroughStep from context (0 for standalone, actual step for walkthrough)\n const currentStep = context?.walkthroughStep || flow.currentStep;\n const isFirstStep = currentStep === 1;\n const isLastStep = currentStep === flow.totalSteps;\n\n footerContent = (\n <PopoverFooter>\n {!isFirstStep && (\n <PopoverBack onClick={() => onAction?.({ type: \"back\", step: currentStep })}>\n {flow.backLabel}\n </PopoverBack>\n )}\n {isLastStep ? (\n <PopoverButton\n onClick={() => onAction?.({ type: \"finish\", step: currentStep })}\n dismiss\n >\n {flow.finishLabel}\n </PopoverButton>\n ) : (\n <PopoverNext onClick={() => onAction?.({ type: \"next\", step: currentStep })}>\n {flow.nextLabel}\n </PopoverNext>\n )}\n </PopoverFooter>\n );\n }\n\n const handleOpenAutoFocus = (event: Event) => {\n event.preventDefault();\n\n if (flow) {\n const contentElement = event.currentTarget as HTMLElement;\n // Focus the content element for better accessibility\n // Use setTimeout to ensure the DOM has fully rendered\n setTimeout(() => {\n contentElement.setAttribute(\"tabindex\", \"-1\");\n contentElement.focus();\n }, 0);\n }\n\n props.onOpenAutoFocus?.(event);\n };\n\n const handleCloseAutoFocus = (event: Event) => {\n // Prevent focus from returning to trigger in walkthrough flow\n // This allows the next popover to manage focus properly\n if (flow) {\n event.preventDefault();\n }\n\n props.onCloseAutoFocus?.(event);\n };\n\n const handleClose = (event: React.MouseEvent) => {\n const prefersReducedMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\n if (flow && !prefersReducedMotion) {\n event.preventDefault();\n setTimeout(() => {\n onAction?.({ type: \"dismiss\", step: flow.currentStep });\n flow.dismiss();\n }, 200);\n } else {\n onAction?.({ type: \"dismiss\", step: flow?.currentStep });\n flow?.dismiss();\n }\n };\n\n const handleEscapeKey = (event: KeyboardEvent) => {\n const prefersReducedMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\n if (flow && !prefersReducedMotion) {\n event.preventDefault();\n setTimeout(() => {\n onAction?.({ type: \"dismiss\", step: flow.currentStep });\n flow.dismiss();\n }, 200);\n } else {\n onAction?.({ type: \"dismiss\", step: flow?.currentStep });\n flow?.dismiss();\n }\n };\n\n const handleInteractOutside = (event: Event) => {\n if (context?.disableClickOutside) {\n event.preventDefault();\n return;\n }\n\n if (flow) {\n const target = event.target as HTMLElement;\n const isPopoverInteraction =\n target.closest(\"[role='dialog']\") ||\n target.closest(\".purpur-popover__trigger\") ||\n target.closest(\"button[aria-haspopup='dialog']\");\n\n if (!isPopoverInteraction) {\n onAction?.({ type: \"dismiss\", step: flow.currentStep });\n setTimeout(() => {\n flow.dismiss();\n }, 0);\n }\n }\n };\n\n return (\n <RadixPopover.Portal>\n <RadixPopover.Content\n data-testid=\"popover-content\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={props[\"aria-label\"] ? undefined : \"popover-heading\"}\n ref={ref}\n side={radixSide}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n style={\n {\n \"--popover-z-index\": zIndex,\n } as React.CSSProperties\n }\n className={cx(\n \"purpur-popover__content\",\n { \"purpur-popover__content--negative\": negative },\n className\n )}\n onOpenAutoFocus={handleOpenAutoFocus}\n onCloseAutoFocus={handleCloseAutoFocus}\n onEscapeKeyDown={handleEscapeKey}\n onInteractOutside={handleInteractOutside}\n {...props}\n >\n <PopoverNegativeContext.Provider value={{ negative }}>\n <div className={cx(\"purpur-popover__inner\")}>\n <PopoverHeader ref={headerRef} title={title} icon={icon} />\n <Paragraph className={cx(\"purpur-popover__body\")}>{body}</Paragraph>\n </div>\n {footerContent}\n\n <RadixPopover.Close asChild onClick={handleClose}>\n <Button\n variant={negative ? \"text\" : \"tertiary-purple\"}\n size=\"sm\"\n aria-label={closeIconAriaLabel}\n className={cx(\"purpur-popover__close\")}\n negative={!negative}\n iconOnly\n >\n <IconClose size=\"xs\" className={cx(\"purpur-popover__icon\")} />\n </Button>\n </RadixPopover.Close>\n </PopoverNegativeContext.Provider>\n {shouldShowArrow && (\n <RadixPopover.Arrow\n className={cx(\"purpur-popover__arrow\")}\n aria-hidden=\"true\"\n tabIndex={-1}\n />\n )}\n </RadixPopover.Content>\n </RadixPopover.Portal>\n );\n }\n);\n\nPopoverContent.displayName = \"PopoverContent\";\n","import React, { type ReactNode, useState } from \"react\";\nimport * as RadixPopover from \"@radix-ui/react-popover\";\n\nimport { PopoverInternalContext } from \"./popover-internal-context\";\n\nexport type PopoverStandaloneProps = RadixPopover.PopoverProps & {\n children: ReactNode;\n className?: string;\n disableClickOutside?: boolean;\n};\n\nexport const PopoverStandalone = ({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n disableClickOutside,\n ...props\n}: PopoverStandaloneProps) => {\n // Internal state for uncontrolled mode\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const handleOpenChange = (newOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n };\n\n return (\n <RadixPopover.Root open={isOpen} onOpenChange={handleOpenChange} {...props}>\n <PopoverInternalContext.Provider\n value={{\n isOpen,\n walkthroughStep: 0,\n disableClickOutside,\n }}\n >\n {children}\n </PopoverInternalContext.Provider>\n </RadixPopover.Root>\n );\n};\n\nPopoverStandalone.displayName = \"PopoverStandalone\";\n","import { useCallback, useRef } from \"react\";\n\nexport const useSmoothScroll = (onComplete?: () => void) => {\n const scrollAnimationId = useRef<number | null>(null);\n\n const cancelScroll = useCallback(() => {\n if (scrollAnimationId.current) {\n cancelAnimationFrame(scrollAnimationId.current);\n scrollAnimationId.current = null;\n }\n }, []);\n\n const scrollToElement = useCallback(\n (element: HTMLElement, duration: number = 600) => {\n const prefersReducedMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n const rect = element.getBoundingClientRect();\n const absoluteTop = rect.top + window.pageYOffset;\n const elementHeight = rect.height;\n const viewportHeight = window.innerHeight;\n\n let targetY = absoluteTop - viewportHeight / 2 + elementHeight / 2;\n const documentHeight = document.documentElement.scrollHeight;\n const maxScroll = Math.max(0, documentHeight - viewportHeight);\n targetY = Math.max(0, Math.min(targetY, maxScroll));\n\n if (prefersReducedMotion) {\n window.scrollTo(0, targetY);\n onComplete?.();\n return;\n }\n\n const startY = window.pageYOffset;\n const distance = targetY - startY;\n const startTime = performance.now();\n\n const animateScroll = (currentTime: number) => {\n const elapsed = currentTime - startTime;\n const progress = Math.min(elapsed / duration, 1);\n\n const easeInOut =\n progress < 0.5 ? 2 * progress * progress : 1 - Math.pow(-2 * progress + 2, 2) / 2;\n\n const currentY = startY + distance * easeInOut;\n window.scrollTo(0, currentY);\n\n if (progress < 1) {\n scrollAnimationId.current = requestAnimationFrame(animateScroll);\n } else {\n scrollAnimationId.current = null;\n onComplete?.();\n }\n };\n\n cancelScroll();\n\n scrollAnimationId.current = requestAnimationFrame(animateScroll);\n },\n [onComplete, cancelScroll]\n );\n\n return { scrollToElement, cancelScroll };\n};\n","import { useEffect, useRef } from \"react\";\n\nimport { useOptionalPopoverFlow } from \"./popover-flow\";\nimport { usePopoverInternal } from \"./popover-internal-context\";\nimport { useSmoothScroll } from \"./use-smooth-scroll\";\n\nexport function usePopoverTrigger(ref: React.Ref<HTMLButtonElement>) {\n const triggerRef = useRef<HTMLButtonElement>(null);\n const context = usePopoverInternal();\n const flow = useOptionalPopoverFlow();\n const hasScrolled = useRef(false);\n const { scrollToElement, cancelScroll } = useSmoothScroll(context?.onScrollComplete);\n\n // Forward ref\n useEffect(() => {\n if (typeof ref === \"function\") {\n ref(triggerRef.current);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLButtonElement | null>).current = triggerRef.current;\n }\n }, [ref]);\n\n // Walkthrough scroll logic\n useEffect(() => {\n const isActiveStep =\n flow &&\n context?.walkthroughStep !== undefined &&\n flow.currentStep === context.walkthroughStep &&\n triggerRef.current &&\n !hasScrolled.current;\n\n if (isActiveStep) {\n const element = triggerRef.current!;\n const rect = element.getBoundingClientRect();\n const buffer = 100;\n const isVisible =\n rect.top >= -buffer &&\n rect.bottom <= window.innerHeight + buffer &&\n rect.left >= -buffer &&\n rect.right <= window.innerWidth + buffer;\n\n if (isVisible) {\n context?.onScrollComplete?.();\n } else {\n context?.onScrollStart?.();\n scrollToElement(element);\n }\n hasScrolled.current = true;\n } else if (flow?.currentStep !== context?.walkthroughStep) {\n hasScrolled.current = false;\n cancelScroll();\n }\n }, [flow?.currentStep, context?.walkthroughStep, flow, scrollToElement, cancelScroll, context]);\n\n // Cancel scroll on unmount\n useEffect(() => cancelScroll, [cancelScroll]);\n\n return { triggerRef, context };\n}\n","import React, { forwardRef } from \"react\";\nimport * as RadixPopover from \"@radix-ui/react-popover\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./popover.module.scss\";\nimport { usePopoverTrigger } from \"./usePopoverTrigger\";\n\nconst cx = c.bind(styles);\n\nexport type PopoverTriggerProps = RadixPopover.PopoverTriggerProps & {\n /**\n * Whether to show visual highlight effect around the trigger when popover is open.\n * @default true\n */\n highlight?: boolean;\n /**\n * Whether to use negative (light) styling for the highlight effect.\n * @default false\n */\n negative?: boolean;\n};\n\nexport const PopoverTrigger = forwardRef<HTMLButtonElement, PopoverTriggerProps>(\n ({ children, className, highlight = true, negative = false, ...props }, ref) => {\n const { triggerRef, context } = usePopoverTrigger(ref);\n\n return (\n <div\n className={cx(\n \"purpur-popover__trigger\",\n { \"purpur-popover__trigger--highlight\": context?.isOpen && highlight },\n className\n )}\n >\n {context?.isOpen && highlight && (\n <>\n {/* State 1: Outer glow effect */}\n <div\n className={cx(\n \"purpur-popover__trigger-highlight\",\n \"purpur-popover__trigger-highlight--state1\",\n { \"purpur-popover__trigger-highlight--negative\": negative }\n )}\n aria-hidden=\"true\"\n />\n {/* State 2: Inner border only */}\n <div\n className={cx(\n \"purpur-popover__trigger-highlight\",\n \"purpur-popover__trigger-highlight--state2\",\n { \"purpur-popover__trigger-highlight--negative\": negative }\n )}\n aria-hidden=\"true\"\n />\n </>\n )}\n <RadixPopover.Trigger\n ref={triggerRef}\n asChild\n aria-expanded={context?.isOpen ?? false}\n aria-haspopup=\"dialog\"\n {...props}\n >\n {children}\n </RadixPopover.Trigger>\n </div>\n );\n }\n);\n\nPopoverTrigger.displayName = \"PopoverTrigger\";\n","import { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { useOptionalPopoverFlow } from \"./popover-flow\";\n\nexport function usePopoverWalkthrough(step: number) {\n const flow = useOptionalPopoverFlow();\n const [actuallyOpen, setActuallyOpen] = useState(false);\n const [waitingForScroll, setWaitingForScroll] = useState(false);\n const timeoutRef = useRef<number | null>(null);\n const openedAtRef = useRef<number>(0);\n\n useEffect(() => {\n if (flow) {\n flow.registerStep(step);\n return () => flow.unregisterStep(step);\n }\n return () => {};\n }, [flow, step]);\n\n const shouldBeOpen = flow?.currentStep === step;\n\n const onScrollStart = useCallback(() => {\n setWaitingForScroll(true);\n }, []);\n\n const onScrollComplete = useCallback(() => {\n setWaitingForScroll(false);\n if (shouldBeOpen) {\n const delay = flow.openDelay;\n timeoutRef.current = window.setTimeout(() => {\n setActuallyOpen(true);\n openedAtRef.current = Date.now();\n }, delay);\n }\n }, [shouldBeOpen, flow]);\n\n useEffect(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n\n if (shouldBeOpen) {\n if (!waitingForScroll) {\n const delay = flow.openDelay;\n timeoutRef.current = window.setTimeout(() => {\n setActuallyOpen(true);\n openedAtRef.current = Date.now();\n }, delay);\n }\n } else {\n setActuallyOpen(false);\n setWaitingForScroll(false);\n openedAtRef.current = 0;\n }\n\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n };\n }, [shouldBeOpen, waitingForScroll, flow]);\n\n const handleOpenChange = useCallback(\n (open: boolean, consumerOnOpenChange?: (open: boolean) => void) => {\n consumerOnOpenChange?.(open);\n if (!open && actuallyOpen && flow && flow.currentStep === step) {\n const timeSinceOpen = Date.now() - openedAtRef.current;\n if (timeSinceOpen < 10 || timeoutRef.current !== null) {\n return;\n }\n flow.dismiss();\n }\n },\n [actuallyOpen, flow, step]\n );\n\n return {\n actuallyOpen,\n onScrollStart,\n onScrollComplete,\n handleOpenChange,\n };\n}\n","import React, { type ReactNode } from \"react\";\nimport * as RadixPopover from \"@radix-ui/react-popover\";\n\nimport { PopoverInternalContext } from \"./popover-internal-context\";\nimport { usePopoverWalkthrough } from \"./usePopoverWalkthrough\";\n\nexport type PopoverWalkthroughProps = RadixPopover.PopoverProps & {\n children: ReactNode;\n step: number;\n className?: string;\n disableClickOutside?: boolean;\n};\n\nexport const PopoverWalkthrough = ({\n children,\n step,\n onOpenChange: consumerOnOpenChange,\n disableClickOutside = true,\n ...props\n}: PopoverWalkthroughProps) => {\n const { actuallyOpen, onScrollStart, onScrollComplete, handleOpenChange } =\n usePopoverWalkthrough(step);\n\n return (\n <RadixPopover.Root\n open={actuallyOpen}\n onOpenChange={(open) => handleOpenChange(open, consumerOnOpenChange)}\n {...props}\n >\n <PopoverInternalContext.Provider\n value={{\n isOpen: actuallyOpen,\n walkthroughStep: step,\n onScrollStart,\n onScrollComplete,\n disableClickOutside,\n }}\n >\n {children}\n </PopoverInternalContext.Provider>\n </RadixPopover.Root>\n );\n};\n\nPopoverWalkthrough.displayName = \"PopoverWalkthrough\";\n","import React, { type ReactNode } from \"react\";\nimport type * as RadixPopover from \"@radix-ui/react-popover\";\n\nimport { PopoverBack } from \"./popover-back\";\nimport { PopoverButton } from \"./popover-button\";\nimport { type PopoverAction,PopoverContent } from \"./popover-content\";\nimport { PopoverFlow } from \"./popover-flow\";\nimport { PopoverFooter } from \"./popover-footer\";\nimport { PopoverNext } from \"./popover-next\";\nimport { PopoverStandalone } from \"./popover-standalone\";\nimport { PopoverTrigger } from \"./popover-trigger\";\nimport { PopoverWalkthrough } from \"./popover-walkthrough\";\n\nexport type { PopoverAction };\n\n// Base props shared by both variants\ntype BasePopoverProps = RadixPopover.PopoverProps & {\n children: ReactNode;\n className?: string;\n};\n\n// Standalone variant props\ntype StandalonePopoverProps = BasePopoverProps & {\n multistep?: false;\n step?: never;\n disableClickOutside?: boolean;\n};\n\n// Walkthrough variant props\ntype WalkthroughPopoverProps = BasePopoverProps & {\n multistep: true;\n step: number;\n disableClickOutside?: boolean;\n};\n\nexport type PopoverProps = StandalonePopoverProps | WalkthroughPopoverProps;\n\ntype PopoverCmp<P> = React.FunctionComponent<P> & {\n Back: typeof PopoverBack;\n Button: typeof PopoverButton;\n Content: typeof PopoverContent;\n Flow: typeof PopoverFlow;\n Footer: typeof PopoverFooter;\n Next: typeof PopoverNext;\n Trigger: typeof PopoverTrigger;\n};\n\nexport const Popover: PopoverCmp<PopoverProps> = (props) => {\n const { multistep = false, disableClickOutside, ...restProps } = props;\n\n if (multistep) {\n return (\n <PopoverWalkthrough\n {...(restProps as WalkthroughPopoverProps)}\n disableClickOutside={disableClickOutside ?? true}\n />\n );\n }\n\n return (\n <PopoverStandalone\n {...(restProps as StandalonePopoverProps)}\n disableClickOutside={disableClickOutside}\n />\n );\n};\n\nPopover.Back = PopoverBack;\nPopover.Button = PopoverButton;\nPopover.Content = PopoverContent;\nPopover.Flow = PopoverFlow;\nPopover.Footer = PopoverFooter;\nPopover.Next = PopoverNext;\nPopover.Trigger = PopoverTrigger;\n\nPopover.displayName = \"Popover\";\n"],"names":["PopoverFlowContext","createContext","usePopoverFlow","context","useContext","useOptionalPopoverFlow","PopoverFlow","children","initialStep","onComplete","onDismiss","separatorText","stepText","backLabel","nextLabel","finishLabel","openDelay","currentStep","setCurrentStep","useState","registeredSteps","setRegisteredSteps","registerStep","useCallback","step","prev","next","unregisterStep","nextStep","back","dismiss","value","useMemo","jsx","PopoverInternalContext","usePopoverInternal","PopoverNegativeContext","usePopoverNegative","DEBOUNCE_DELAY","SCREEN_MEDIA_QUERY","purpurBreakpointMd","useScreenSize","maxMediumScreen","updateSize","setIsMdOrSmaller","isMdOrSmaller","handleResize","timeoutId","useEffect","PopoverBack","onClick","isNegative","negative","handleClick","Button","NAME","Arrow","React","props","forwardedRef","width","height","arrowProps","Primitive","Root","POPPER_NAME","createPopperContext","createPopperScope","createContextScope","PopperProvider","usePopperContext","Popper","__scopePopper","anchor","setAnchor","ANCHOR_NAME","PopperAnchor","virtualRef","anchorProps","ref","composedRefs","useComposedRefs","anchorRef","previousAnchor","CONTENT_NAME","PopperContentProvider","useContentContext","PopperContent","side","sideOffset","align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPaddingProp","sticky","hideWhenDetached","updatePositionStrategy","onPlaced","contentProps","content","setContent","node","arrow","setArrow","arrowSize","useSize","arrowWidth","arrowHeight","desiredPlacement","collisionPadding","boundary","hasExplicitBoundaries","detectOverflowOptions","isNotNull","refs","floatingStyles","placement","isPositioned","middlewareData","useFloating","args","autoUpdate","offset","shift","limitShift","flip","size","elements","rects","availableWidth","availableHeight","anchorWidth","anchorHeight","contentStyle","floatingUIarrow","transformOrigin","hide","placedSide","placedAlign","getSideAndAlignFromPlacement","handlePlaced","useCallbackRef","useLayoutEffect","arrowX","arrowY","cannotCenterArrow","contentZIndex","setContentZIndex","ARROW_NAME","OPPOSITE_SIDE","PopperArrow","contentContext","baseSide","ArrowPrimitive.Root","options","data","isArrowHidden","noArrowAlign","arrowXCenter","arrowYCenter","y","Root2","Anchor","Content","POPOVER_NAME","createPopoverContext","usePopperScope","PopoverProvider","usePopoverContext","Popover","__scopePopover","openProp","defaultOpen","onOpenChange","modal","popperScope","triggerRef","hasCustomAnchor","setHasCustomAnchor","open","setOpen","useControllableState","PopperPrimitive.Root","useId","prevOpen","PopoverAnchor","onCustomAnchorAdd","onCustomAnchorRemove","PopperPrimitive.Anchor","TRIGGER_NAME","PopoverTrigger","triggerProps","composedTriggerRef","trigger","getState","composeEventHandlers","PORTAL_NAME","PortalProvider","usePortalContext","PopoverPortal","forceMount","container","Presence","PortalPrimitive","PopoverContent","portalContext","PopoverContentModal","PopoverContentNonModal","Slot","createSlot","contentRef","isRightClickOutsideRef","hideOthers","RemoveScroll","PopoverContentImpl","event","originalEvent","ctrlLeftClick","isRightClick","hasInteractedOutsideRef","hasPointerDownOutsideRef","target","trapFocus","onOpenAutoFocus","onCloseAutoFocus","disableOutsidePointerEvents","onEscapeKeyDown","onPointerDownOutside","onFocusOutside","onInteractOutside","useFocusGuards","FocusScope","DismissableLayer","PopperPrimitive.Content","CLOSE_NAME","PopoverClose","closeProps","PopoverArrow","PopperPrimitive.Arrow","Trigger","Portal","Content2","Close","Arrow2","PopoverButton","asChild","variant","fullWidth","flow","isFullWidth","RadixPopover.Close","cx","c","styles","PopoverSteps","totalSteps","Fragment","jsxs","Paragraph","PopoverFooter","className","internal","showSteps","PopoverHeader","forwardRef","title","icon","Heading","PopoverNext","beakPosition","closeIconAriaLabel","body","onAction","zIndex","headerRef","useRef","radixSide","shouldShowArrow","footerContent","isFirstStep","isLastStep","handleOpenAutoFocus","contentElement","handleCloseAutoFocus","handleClose","prefersReducedMotion","handleEscapeKey","handleInteractOutside","RadixPopover.Portal","RadixPopover.Content","IconClose","RadixPopover.Arrow","PopoverStandalone","controlledOpen","disableClickOutside","internalOpen","setInternalOpen","isControlled","isOpen","handleOpenChange","newOpen","RadixPopover.Root","useSmoothScroll","scrollAnimationId","cancelScroll","element","duration","rect","absoluteTop","elementHeight","viewportHeight","targetY","documentHeight","maxScroll","startY","distance","startTime","animateScroll","currentTime","elapsed","progress","easeInOut","currentY","usePopoverTrigger","hasScrolled","scrollToElement","buffer","highlight","RadixPopover.Trigger","usePopoverWalkthrough","actuallyOpen","setActuallyOpen","waitingForScroll","setWaitingForScroll","timeoutRef","openedAtRef","shouldBeOpen","onScrollStart","onScrollComplete","delay","consumerOnOpenChange","PopoverWalkthrough","multistep","restProps"],"mappings":"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","x_google_ignoreList":[4,5,6]}
1
+ {"version":3,"file":"popover-D6k4-oO1.js","sources":["../../../components/popover/src/popover-flow.tsx","../../../components/popover/src/popover-internal-context.tsx","../../../components/popover/src/use-screen-size.hook.ts","../../../components/popover/src/popover-back.tsx","../../../common/temp/node_modules/.pnpm/@radix-ui+react-arrow@1.1.7_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react@_e05f2c19a58a99fddf374207b5e3778c/node_modules/@radix-ui/react-arrow/dist/index.mjs","../../../common/temp/node_modules/.pnpm/@radix-ui+react-popper@1.2.8_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_13e0521d8aea7ebfbfb8bee1fb615c05/node_modules/@radix-ui/react-popper/dist/index.mjs","../../../common/temp/node_modules/.pnpm/@radix-ui+react-popover@1.1.15_@types+react-dom@19.2.3_@types+react@19.2.14__@types+rea_8b5332f8e883134e9d9ab2856fc4395d/node_modules/@radix-ui/react-popover/dist/index.mjs","../../../components/popover/src/popover-button.tsx","../../../components/popover/src/popover-steps.tsx","../../../components/popover/src/popover-footer.tsx","../../../components/popover/src/popover-header.tsx","../../../components/popover/src/popover-next.tsx","../../../components/popover/src/popover-content.tsx","../../../components/popover/src/popover-standalone.tsx","../../../components/popover/src/use-smooth-scroll.ts","../../../components/popover/src/usePopoverTrigger.ts","../../../components/popover/src/popover-trigger.tsx","../../../components/popover/src/usePopoverWalkthrough.ts","../../../components/popover/src/popover-walkthrough.tsx","../../../components/popover/src/popover.tsx"],"sourcesContent":["import React, {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useMemo,\n useState,\n} from \"react\";\n\ntype PopoverFlowContextType = {\n currentStep: number;\n totalSteps: number;\n next: () => void;\n back: () => void;\n dismiss: () => void;\n registerStep: (step: number) => void;\n unregisterStep: (step: number) => void;\n separatorText: string;\n stepText: string;\n backLabel: string;\n nextLabel: string;\n finishLabel: string;\n openDelay: number;\n};\n\nconst PopoverFlowContext = createContext<PopoverFlowContextType | null>(null);\n\nexport const usePopoverFlow = () => {\n const context = useContext(PopoverFlowContext);\n if (!context) {\n throw new Error(\"usePopoverFlow must be used within a PopoverFlow provider\");\n }\n return context;\n};\n\nexport const useOptionalPopoverFlow = (): PopoverFlowContextType | null => {\n return useContext(PopoverFlowContext);\n};\n\nexport type PopoverFlowProps = {\n /**\n * Child components, typically multiple Popover components with step numbers.\n */\n children: ReactNode;\n /**\n * The step number to show when the flow starts.\n * @default 1\n */\n initialStep?: number;\n /**\n * Callback fired when the user completes the last step of the flow.\n */\n onComplete?: () => void;\n /**\n * Callback fired when the user dismisses the flow before completing it.\n */\n onDismiss?: () => void;\n /**\n * Text used as separator in the step indicator (e.g., \"of\" in \"1 of 3\").\n */\n separatorText: string;\n /**\n * Text label for \"Step\" in the step indicator.\n */\n stepText: string;\n /**\n * Label for the back navigation button.\n */\n backLabel: string;\n /**\n * Label for the next navigation button.\n */\n nextLabel: string;\n /**\n * Label for the finish button on the last step.\n */\n finishLabel: string;\n /**\n * Delay in milliseconds before opening the next popover in the flow.\n * @default 0\n */\n openDelay?: number;\n};\n\nexport const PopoverFlow = ({\n children,\n initialStep = 1,\n onComplete,\n onDismiss,\n separatorText,\n stepText,\n backLabel,\n nextLabel,\n finishLabel,\n openDelay = 0,\n}: PopoverFlowProps) => {\n const [currentStep, setCurrentStep] = useState(initialStep);\n const [registeredSteps, setRegisteredSteps] = useState<Set<number>>(new Set());\n\n const registerStep = useCallback((step: number) => {\n setRegisteredSteps((prev) => {\n const next = new Set(prev);\n next.add(step);\n return next;\n });\n }, []);\n\n const unregisterStep = useCallback((step: number) => {\n setRegisteredSteps((prev) => {\n const next = new Set(prev);\n next.delete(step);\n return next;\n });\n }, []);\n\n const next = useCallback(() => {\n setCurrentStep((prev) => {\n const nextStep = prev + 1;\n if (nextStep > registeredSteps.size) {\n onComplete?.();\n return prev;\n }\n return nextStep;\n });\n }, [registeredSteps.size, onComplete]);\n\n const back = useCallback(() => {\n setCurrentStep((prev) => Math.max(1, prev - 1));\n }, []);\n\n const dismiss = useCallback(() => {\n setCurrentStep(0);\n onDismiss?.();\n }, [onDismiss]);\n\n const value = useMemo(\n () => ({\n currentStep,\n totalSteps: registeredSteps.size,\n next,\n back,\n dismiss,\n registerStep,\n unregisterStep,\n separatorText,\n stepText,\n backLabel,\n nextLabel,\n finishLabel,\n openDelay,\n }),\n [\n currentStep,\n registeredSteps.size,\n next,\n back,\n dismiss,\n registerStep,\n unregisterStep,\n separatorText,\n stepText,\n backLabel,\n nextLabel,\n finishLabel,\n openDelay,\n ]\n );\n\n return <PopoverFlowContext.Provider value={value}>{children}</PopoverFlowContext.Provider>;\n};\n","import { createContext, useContext } from \"react\";\n\nexport type PopoverInternalContextValue = {\n isOpen: boolean;\n walkthroughStep: number;\n onScrollComplete?: () => void;\n onScrollStart?: () => void;\n disableClickOutside?: boolean;\n};\n\nexport const PopoverInternalContext = createContext<PopoverInternalContextValue | null>(null);\n\nexport const usePopoverInternal = () => {\n const context = useContext(PopoverInternalContext);\n return context;\n};\n\n// Separate context for UI-specific props that are set at the Content level\nexport type PopoverNegativeContextValue = {\n negative: boolean;\n};\n\nexport const PopoverNegativeContext = createContext<PopoverNegativeContextValue>({ negative: false });\n\nexport const usePopoverNegative = () => {\n const context = useContext(PopoverNegativeContext);\n return context;\n};\n","import { useCallback, useEffect, useState } from \"react\";\nimport { purpurBreakpointMd } from \"@purpur/tokens\";\n\nconst DEBOUNCE_DELAY = 150;\n\nexport const SCREEN_MEDIA_QUERY = {\n MAX_MD: `(max-width: ${purpurBreakpointMd})`,\n} as const;\n\nexport const useScreenSize = () => {\n const maxMediumScreen = window.matchMedia(SCREEN_MEDIA_QUERY.MAX_MD);\n function updateSize() {\n setIsMdOrSmaller(maxMediumScreen.matches);\n }\n\n const [isMdOrSmaller, setIsMdOrSmaller] = useState(() => {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(SCREEN_MEDIA_QUERY.MAX_MD).matches;\n });\n\n const handleResize = useCallback(() => {\n let timeoutId: ReturnType<typeof setTimeout>;\n\n return () => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => updateSize(), DEBOUNCE_DELAY);\n };\n }, [updateSize]);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n window.addEventListener(\"resize\", handleResize);\n\n return () => window.removeEventListener(\"resize\", handleResize);\n }, [handleResize]);\n\n return { isMdOrSmaller };\n};\n","import React, { type ReactNode } from \"react\";\nimport { Button } from \"@purpur/button\";\n\nimport { usePopoverFlow } from \"./popover-flow\";\nimport { usePopoverNegative } from \"./popover-internal-context\";\nimport { useScreenSize } from \"./use-screen-size.hook\";\n\nexport const PopoverBack = ({\n children,\n onClick,\n}: {\n children: ReactNode;\n onClick?: () => void;\n}) => {\n const { back } = usePopoverFlow();\n const { negative: isNegative } = usePopoverNegative();\n const { isMdOrSmaller } = useScreenSize();\n\n // Invert negative: if popover is negative (light), buttons should be normal (dark)\n const negative = isNegative ? false : true;\n\n const handleClick = () => {\n onClick?.();\n back();\n };\n\n return (\n <Button\n size=\"sm\"\n variant=\"secondary\"\n onClick={handleClick}\n negative={negative}\n fullWidth={isMdOrSmaller}\n >\n {children}\n </Button>\n );\n};\n\nPopoverBack.displayName = \"PopoverBack\";\n","// src/arrow.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Arrow\";\nvar Arrow = React.forwardRef((props, forwardedRef) => {\n const { children, width = 10, height = 5, ...arrowProps } = props;\n return /* @__PURE__ */ jsx(\n Primitive.svg,\n {\n ...arrowProps,\n ref: forwardedRef,\n width,\n height,\n viewBox: \"0 0 30 10\",\n preserveAspectRatio: \"none\",\n children: props.asChild ? children : /* @__PURE__ */ jsx(\"polygon\", { points: \"0,0 30,0 15,10\" })\n }\n );\n});\nArrow.displayName = NAME;\nvar Root = Arrow;\nexport {\n Arrow,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/popper.tsx\nimport * as React from \"react\";\nimport {\n useFloating,\n autoUpdate,\n offset,\n shift,\n limitShift,\n hide,\n arrow as floatingUIarrow,\n flip,\n size\n} from \"@floating-ui/react-dom\";\nimport * as ArrowPrimitive from \"@radix-ui/react-arrow\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SIDE_OPTIONS = [\"top\", \"right\", \"bottom\", \"left\"];\nvar ALIGN_OPTIONS = [\"start\", \"center\", \"end\"];\nvar POPPER_NAME = \"Popper\";\nvar [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\nvar [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);\nvar Popper = (props) => {\n const { __scopePopper, children } = props;\n const [anchor, setAnchor] = React.useState(null);\n return /* @__PURE__ */ jsx(PopperProvider, { scope: __scopePopper, anchor, onAnchorChange: setAnchor, children });\n};\nPopper.displayName = POPPER_NAME;\nvar ANCHOR_NAME = \"PopperAnchor\";\nvar PopperAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopper, virtualRef, ...anchorProps } = props;\n const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const anchorRef = React.useRef(null);\n React.useEffect(() => {\n const previousAnchor = anchorRef.current;\n anchorRef.current = virtualRef?.current || ref.current;\n if (previousAnchor !== anchorRef.current) {\n context.onAnchorChange(anchorRef.current);\n }\n });\n return virtualRef ? null : /* @__PURE__ */ jsx(Primitive.div, { ...anchorProps, ref: composedRefs });\n }\n);\nPopperAnchor.displayName = ANCHOR_NAME;\nvar CONTENT_NAME = \"PopperContent\";\nvar [PopperContentProvider, useContentContext] = createPopperContext(CONTENT_NAME);\nvar PopperContent = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopePopper,\n side = \"bottom\",\n sideOffset = 0,\n align = \"center\",\n alignOffset = 0,\n arrowPadding = 0,\n avoidCollisions = true,\n collisionBoundary = [],\n collisionPadding: collisionPaddingProp = 0,\n sticky = \"partial\",\n hideWhenDetached = false,\n updatePositionStrategy = \"optimized\",\n onPlaced,\n ...contentProps\n } = props;\n const context = usePopperContext(CONTENT_NAME, __scopePopper);\n const [content, setContent] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const [arrow, setArrow] = React.useState(null);\n const arrowSize = useSize(arrow);\n const arrowWidth = arrowSize?.width ?? 0;\n const arrowHeight = arrowSize?.height ?? 0;\n const desiredPlacement = side + (align !== \"center\" ? \"-\" + align : \"\");\n const collisionPadding = typeof collisionPaddingProp === \"number\" ? collisionPaddingProp : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };\n const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];\n const hasExplicitBoundaries = boundary.length > 0;\n const detectOverflowOptions = {\n padding: collisionPadding,\n boundary: boundary.filter(isNotNull),\n // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n altBoundary: hasExplicitBoundaries\n };\n const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({\n // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n strategy: \"fixed\",\n placement: desiredPlacement,\n whileElementsMounted: (...args) => {\n const cleanup = autoUpdate(...args, {\n animationFrame: updatePositionStrategy === \"always\"\n });\n return cleanup;\n },\n elements: {\n reference: context.anchor\n },\n middleware: [\n offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),\n avoidCollisions && shift({\n mainAxis: true,\n crossAxis: false,\n limiter: sticky === \"partial\" ? limitShift() : void 0,\n ...detectOverflowOptions\n }),\n avoidCollisions && flip({ ...detectOverflowOptions }),\n size({\n ...detectOverflowOptions,\n apply: ({ elements, rects, availableWidth, availableHeight }) => {\n const { width: anchorWidth, height: anchorHeight } = rects.reference;\n const contentStyle = elements.floating.style;\n contentStyle.setProperty(\"--radix-popper-available-width\", `${availableWidth}px`);\n contentStyle.setProperty(\"--radix-popper-available-height\", `${availableHeight}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-width\", `${anchorWidth}px`);\n contentStyle.setProperty(\"--radix-popper-anchor-height\", `${anchorHeight}px`);\n }\n }),\n arrow && floatingUIarrow({ element: arrow, padding: arrowPadding }),\n transformOrigin({ arrowWidth, arrowHeight }),\n hideWhenDetached && hide({ strategy: \"referenceHidden\", ...detectOverflowOptions })\n ]\n });\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const handlePlaced = useCallbackRef(onPlaced);\n useLayoutEffect(() => {\n if (isPositioned) {\n handlePlaced?.();\n }\n }, [isPositioned, handlePlaced]);\n const arrowX = middlewareData.arrow?.x;\n const arrowY = middlewareData.arrow?.y;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const [contentZIndex, setContentZIndex] = React.useState();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n return /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: refs.setFloating,\n \"data-radix-popper-content-wrapper\": \"\",\n style: {\n ...floatingStyles,\n transform: isPositioned ? floatingStyles.transform : \"translate(0, -200%)\",\n // keep off the page when measuring\n minWidth: \"max-content\",\n zIndex: contentZIndex,\n [\"--radix-popper-transform-origin\"]: [\n middlewareData.transformOrigin?.x,\n middlewareData.transformOrigin?.y\n ].join(\" \"),\n // hide the content if using the hide middleware and should be hidden\n // set visibility to hidden and disable pointer events so the UI behaves\n // as if the PopperContent isn't there at all\n ...middlewareData.hide?.referenceHidden && {\n visibility: \"hidden\",\n pointerEvents: \"none\"\n }\n },\n dir: props.dir,\n children: /* @__PURE__ */ jsx(\n PopperContentProvider,\n {\n scope: __scopePopper,\n placedSide,\n onArrowChange: setArrow,\n arrowX,\n arrowY,\n shouldHideArrow: cannotCenterArrow,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-side\": placedSide,\n \"data-align\": placedAlign,\n ...contentProps,\n ref: composedRefs,\n style: {\n ...contentProps.style,\n // if the PopperContent hasn't been placed yet (not all measurements done)\n // we prevent animations so that users's animation don't kick in too early referring wrong sides\n animation: !isPositioned ? \"none\" : void 0\n }\n }\n )\n }\n )\n }\n );\n }\n);\nPopperContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"PopperArrow\";\nvar OPPOSITE_SIDE = {\n top: \"bottom\",\n right: \"left\",\n bottom: \"top\",\n left: \"right\"\n};\nvar PopperArrow = React.forwardRef(function PopperArrow2(props, forwardedRef) {\n const { __scopePopper, ...arrowProps } = props;\n const contentContext = useContentContext(ARROW_NAME, __scopePopper);\n const baseSide = OPPOSITE_SIDE[contentContext.placedSide];\n return (\n // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)\n // doesn't report size as we'd expect on SVG elements.\n // it reports their bounding box which is effectively the largest path inside the SVG.\n /* @__PURE__ */ jsx(\n \"span\",\n {\n ref: contentContext.onArrowChange,\n style: {\n position: \"absolute\",\n left: contentContext.arrowX,\n top: contentContext.arrowY,\n [baseSide]: 0,\n transformOrigin: {\n top: \"\",\n right: \"0 0\",\n bottom: \"center 0\",\n left: \"100% 0\"\n }[contentContext.placedSide],\n transform: {\n top: \"translateY(100%)\",\n right: \"translateY(50%) rotate(90deg) translateX(-50%)\",\n bottom: `rotate(180deg)`,\n left: \"translateY(50%) rotate(-90deg) translateX(50%)\"\n }[contentContext.placedSide],\n visibility: contentContext.shouldHideArrow ? \"hidden\" : void 0\n },\n children: /* @__PURE__ */ jsx(\n ArrowPrimitive.Root,\n {\n ...arrowProps,\n ref: forwardedRef,\n style: {\n ...arrowProps.style,\n // ensures the element can be measured correctly (mostly for if SVG)\n display: \"block\"\n }\n }\n )\n }\n )\n );\n});\nPopperArrow.displayName = ARROW_NAME;\nfunction isNotNull(value) {\n return value !== null;\n}\nvar transformOrigin = (options) => ({\n name: \"transformOrigin\",\n options,\n fn(data) {\n const { placement, rects, middlewareData } = data;\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const isArrowHidden = cannotCenterArrow;\n const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const noArrowAlign = { start: \"0%\", center: \"50%\", end: \"100%\" }[placedAlign];\n const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n let x = \"\";\n let y = \"\";\n if (placedSide === \"bottom\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${-arrowHeight}px`;\n } else if (placedSide === \"top\") {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${rects.floating.height + arrowHeight}px`;\n } else if (placedSide === \"right\") {\n x = `${-arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n } else if (placedSide === \"left\") {\n x = `${rects.floating.width + arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n }\n return { data: { x, y } };\n }\n});\nfunction getSideAndAlignFromPlacement(placement) {\n const [side, align = \"center\"] = placement.split(\"-\");\n return [side, align];\n}\nvar Root2 = Popper;\nvar Anchor = PopperAnchor;\nvar Content = PopperContent;\nvar Arrow = PopperArrow;\nexport {\n ALIGN_OPTIONS,\n Anchor,\n Arrow,\n Content,\n Popper,\n PopperAnchor,\n PopperArrow,\n PopperContent,\n Root2 as Root,\n SIDE_OPTIONS,\n createPopperScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/popover.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { jsx } from \"react/jsx-runtime\";\nvar POPOVER_NAME = \"Popover\";\nvar [createPopoverContext, createPopoverScope] = createContextScope(POPOVER_NAME, [\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar [PopoverProvider, usePopoverContext] = createPopoverContext(POPOVER_NAME);\nvar Popover = (props) => {\n const {\n __scopePopover,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = false\n } = props;\n const popperScope = usePopperScope(__scopePopover);\n const triggerRef = React.useRef(null);\n const [hasCustomAnchor, setHasCustomAnchor] = React.useState(false);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: POPOVER_NAME\n });\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n PopoverProvider,\n {\n scope: __scopePopover,\n contentId: useId(),\n triggerRef,\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n hasCustomAnchor,\n onCustomAnchorAdd: React.useCallback(() => setHasCustomAnchor(true), []),\n onCustomAnchorRemove: React.useCallback(() => setHasCustomAnchor(false), []),\n modal,\n children\n }\n ) });\n};\nPopover.displayName = POPOVER_NAME;\nvar ANCHOR_NAME = \"PopoverAnchor\";\nvar PopoverAnchor = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...anchorProps } = props;\n const context = usePopoverContext(ANCHOR_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n const { onCustomAnchorAdd, onCustomAnchorRemove } = context;\n React.useEffect(() => {\n onCustomAnchorAdd();\n return () => onCustomAnchorRemove();\n }, [onCustomAnchorAdd, onCustomAnchorRemove]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });\n }\n);\nPopoverAnchor.displayName = ANCHOR_NAME;\nvar TRIGGER_NAME = \"PopoverTrigger\";\nvar PopoverTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...triggerProps } = props;\n const context = usePopoverContext(TRIGGER_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n const trigger = /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.contentId,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n return context.hasCustomAnchor ? trigger : /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: trigger });\n }\n);\nPopoverTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"PopoverPortal\";\nvar [PortalProvider, usePortalContext] = createPopoverContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar PopoverPortal = (props) => {\n const { __scopePopover, forceMount, children, container } = props;\n const context = usePopoverContext(PORTAL_NAME, __scopePopover);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopePopover, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nPopoverPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"PopoverContent\";\nvar PopoverContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopePopover);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(PopoverContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(PopoverContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }\n);\nPopoverContent.displayName = CONTENT_NAME;\nvar Slot = createSlot(\"PopoverContent.RemoveScroll\");\nvar PopoverContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n const isRightClickOutsideRef = React.useRef(false);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(\n PopoverContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: true,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n if (!isRightClickOutsideRef.current) context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(\n props.onPointerDownOutside,\n (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n isRightClickOutsideRef.current = isRightClick;\n },\n { checkForDefaultPrevented: false }\n ),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault(),\n { checkForDefaultPrevented: false }\n )\n }\n ) });\n }\n);\nvar PopoverContentNonModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n PopoverContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }\n);\nvar PopoverContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopePopover,\n trapFocus,\n onOpenAutoFocus,\n onCloseAutoFocus,\n disableOutsidePointerEvents,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n ...contentProps\n } = props;\n const context = usePopoverContext(CONTENT_NAME, __scopePopover);\n const popperScope = usePopperScope(__scopePopover);\n useFocusGuards();\n return /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents,\n onInteractOutside,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onDismiss: () => context.onOpenChange(false),\n children: /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n \"data-state\": getState(context.open),\n role: \"dialog\",\n id: context.contentId,\n ...popperScope,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...contentProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-popover-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-popover-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-popover-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-popover-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-popover-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n )\n }\n )\n }\n );\n }\n);\nvar CLOSE_NAME = \"PopoverClose\";\nvar PopoverClose = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...closeProps } = props;\n const context = usePopoverContext(CLOSE_NAME, __scopePopover);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }\n);\nPopoverClose.displayName = CLOSE_NAME;\nvar ARROW_NAME = \"PopoverArrow\";\nvar PopoverArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopePopover, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopePopover);\n return /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }\n);\nPopoverArrow.displayName = ARROW_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar Root2 = Popover;\nvar Anchor2 = PopoverAnchor;\nvar Trigger = PopoverTrigger;\nvar Portal = PopoverPortal;\nvar Content2 = PopoverContent;\nvar Close = PopoverClose;\nvar Arrow2 = PopoverArrow;\nexport {\n Anchor2 as Anchor,\n Arrow2 as Arrow,\n Close,\n Content2 as Content,\n Popover,\n PopoverAnchor,\n PopoverArrow,\n PopoverClose,\n PopoverContent,\n PopoverPortal,\n PopoverTrigger,\n Portal,\n Root2 as Root,\n Trigger,\n createPopoverScope\n};\n//# sourceMappingURL=index.mjs.map\n","import React, { type ReactNode } from \"react\";\nimport { Button, type ButtonProps } from \"@purpur/button\";\nimport * as RadixPopover from \"@radix-ui/react-popover\";\n\nimport { useOptionalPopoverFlow } from \"./popover-flow\";\nimport { usePopoverNegative } from \"./popover-internal-context\";\nimport { useScreenSize } from \"./use-screen-size.hook\";\n\nexport type PopoverButtonProps = RadixPopover.PopoverCloseProps & {\n /**\n * Button label or content.\n */\n children: ReactNode;\n /**\n * Whether to use the child element as the button instead of wrapping in a Button component.\n * @default false\n */\n asChild?: boolean;\n /**\n * Click handler called when the button is clicked.\n */\n onClick?: () => void;\n /**\n * Visual variant of the button.\n * @default \"primary\"\n */\n variant?: ButtonProps[\"variant\"];\n /**\n * Whether clicking the button should dismiss/close the popover.\n * @default true\n */\n dismiss?: boolean;\n /**\n * Whether the button should take full width. If not specified, defaults to true on mobile (md or smaller).\n */\n fullWidth?: boolean;\n};\n\nexport const PopoverButton = ({\n children,\n asChild,\n onClick,\n variant = \"primary\",\n dismiss = true,\n fullWidth,\n}: PopoverButtonProps) => {\n const flow = useOptionalPopoverFlow();\n const { isMdOrSmaller } = useScreenSize();\n const { negative: isNegative } = usePopoverNegative();\n // Invert negative: if popover is negative (light), buttons should be normal (dark)\n const negative = isNegative ? false : true;\n\n const handleClick = () => {\n onClick?.();\n if (dismiss) {\n flow?.dismiss();\n }\n };\n\n const isFullWidth = fullWidth ?? isMdOrSmaller;\n\n const content = asChild ? (\n children\n ) : (\n <Button\n variant={variant}\n size=\"sm\"\n fullWidth={isFullWidth}\n negative={negative}\n onClick={handleClick}\n >\n {children}\n </Button>\n );\n\n // Always wrap with RadixPopover.Close for proper dismiss behavior\n if (dismiss) {\n return <RadixPopover.Close asChild>{content}</RadixPopover.Close>;\n }\n\n return content;\n};\n\nPopoverButton.displayName = \"PopoverButton\";\n","import React from \"react\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./popover.module.scss\";\nimport { usePopoverFlow } from \"./popover-flow\";\nimport { usePopoverInternal } from \"./popover-internal-context\";\n\nconst cx = c.bind(styles);\n\nexport const PopoverSteps = () => {\n const flow = usePopoverFlow();\n const context = usePopoverInternal();\n\n // Use walkthroughStep from context (each popover knows its own step number)\n const currentStep = context?.walkthroughStep || flow.currentStep;\n const { totalSteps, separatorText, stepText } = flow;\n return (\n <>\n <Paragraph\n className={cx(\"purpur-popover__steps\")}\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n {stepText} {currentStep} {separatorText} {totalSteps}\n </Paragraph>\n </>\n );\n};\n\nPopoverSteps.displayName = \"PopoverSteps\";\n","import React, { type ReactNode } from \"react\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./popover.module.scss\";\nimport { useOptionalPopoverFlow } from \"./popover-flow\";\nimport { usePopoverInternal } from \"./popover-internal-context\";\nimport { PopoverSteps } from \"./popover-steps\";\n\nconst cx = c.bind(styles);\n\nexport type PopoverFooterProps = {\n /**\n * Footer content, typically navigation buttons like PopoverButton, PopoverNext, or PopoverBack.\n */\n children: ReactNode;\n /**\n * Optional CSS class name for custom styling.\n */\n className?: string;\n};\n\nexport const PopoverFooter = ({ children, className }: PopoverFooterProps) => {\n const flow = useOptionalPopoverFlow();\n const internal = usePopoverInternal();\n\n // Only show steps if we have a flow context AND this popover is part of the flow (walkthroughStep > 0)\n const showSteps = flow && internal && internal.walkthroughStep > 0;\n\n return (\n <div className={cx(\"purpur-popover__footer\", className)}>\n {showSteps && <PopoverSteps />}\n <div className={cx(\"purpur-popover__footer-button-group\")}>{children}</div>\n </div>\n );\n};\n\nPopoverFooter.displayName = \"PopoverFooter\";\n","import React, { forwardRef, type ReactNode } from \"react\";\nimport { Heading } from \"@purpur/heading\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./popover.module.scss\";\n\nconst cx = c.bind(styles);\n\nexport type PopoverHeaderProps = {\n title: string;\n icon?: ReactNode;\n};\n\nexport const PopoverHeader = forwardRef<HTMLDivElement, PopoverHeaderProps>(\n ({ title, icon }, ref) => {\n return (\n <div ref={ref} className={cx(\"purpur-popover__header-content\")}>\n {icon && <span className={cx(\"purpur-popover__icon\")}>{icon}</span>}\n <Heading\n tag=\"h2\"\n variant=\"title-100\"\n className={cx(\"purpur-popover__title\")}\n id=\"popover-heading\"\n >\n {title}\n </Heading>\n </div>\n );\n }\n);\n\nPopoverHeader.displayName = \"PopoverHeader\";\n","import React, { type ReactNode } from \"react\";\nimport { Button } from \"@purpur/button\";\n\nimport { usePopoverFlow } from \"./popover-flow\";\nimport { usePopoverNegative } from \"./popover-internal-context\";\nimport { useScreenSize } from \"./use-screen-size.hook\";\n\nexport const PopoverNext = ({\n children,\n onClick,\n}: {\n children: ReactNode;\n onClick?: () => void;\n}) => {\n const { next } = usePopoverFlow();\n const { negative: isNegative } = usePopoverNegative();\n const { isMdOrSmaller } = useScreenSize();\n\n // Invert negative: if popover is negative (light), buttons should be normal (dark)\n const negative = isNegative ? false : true;\n\n const handleClick = () => {\n onClick?.();\n next();\n };\n\n return (\n <Button\n size=\"sm\"\n variant=\"primary\"\n onClick={handleClick}\n negative={negative}\n fullWidth={isMdOrSmaller}\n >\n {children}\n </Button>\n );\n};\n\nPopoverNext.displayName = \"PopoverNext\";\n","import React, { forwardRef, type ReactNode, useRef } from \"react\";\nimport { Button } from \"@purpur/button\";\nimport { IconClose } from \"@purpur/icon/close\";\nimport { Paragraph } from \"@purpur/paragraph\";\nimport * as RadixPopover from \"@radix-ui/react-popover\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./popover.module.scss\";\nimport { PopoverBack } from \"./popover-back\";\nimport { PopoverButton } from \"./popover-button\";\nimport { useOptionalPopoverFlow } from \"./popover-flow\";\nimport { PopoverFooter } from \"./popover-footer\";\nimport { PopoverHeader } from \"./popover-header\";\nimport { PopoverNegativeContext, usePopoverInternal } from \"./popover-internal-context\";\nimport { PopoverNext } from \"./popover-next\";\n\nconst cx = c.bind(styles);\n\nexport type PopoverAction = {\n type: \"next\" | \"back\" | \"finish\" | \"dismiss\";\n step?: number;\n};\n\nexport type PopoverContentProps = RadixPopover.PopoverContentProps & {\n /**\n * Position of the arrow/beak pointing to the trigger element.\n * Set to \"none\" to hide the arrow.\n * @default \"down\"\n */\n beakPosition?: \"up\" | \"right\" | \"down\" | \"left\" | \"none\";\n /**\n * Whether to use negative (light) styling for the popover content.\n * @default false\n */\n negative?: boolean;\n /**\n * Accessible label for the close button icon.\n */\n closeIconAriaLabel: string;\n /**\n * Main title text displayed in the popover header.\n */\n title: string;\n /**\n * Optional icon displayed in the popover header next to the title.\n */\n icon?: ReactNode;\n /**\n * Main body text content of the popover.\n */\n body: string;\n /**\n * Custom footer content. If not provided and used within PopoverFlow,\n * default navigation buttons will be rendered.\n */\n children?: ReactNode;\n /**\n * Callback fired when user interacts with navigation buttons (next, back, finish, dismiss).\n */\n onAction?: (action: PopoverAction) => void;\n /**\n * CSS z-index value for the popover content.\n * @default 210\n */\n zIndex?: number;\n};\n\nexport const PopoverContent = forwardRef<HTMLDivElement, PopoverContentProps>(\n (\n {\n children,\n className,\n beakPosition = \"down\",\n align = \"center\",\n alignOffset = 0,\n sideOffset = 5, // How close or far the popover is from the trigger\n negative = false,\n closeIconAriaLabel,\n title,\n icon,\n body,\n onAction,\n zIndex = 210,\n ...props\n },\n ref\n ) => {\n const flow = useOptionalPopoverFlow();\n const context = usePopoverInternal();\n const headerRef = useRef<HTMLDivElement>(null);\n\n // Map beakPosition to Radix side values\n const beakPositionMap: Record<\n \"up\" | \"right\" | \"down\" | \"left\" | \"none\",\n \"bottom\" | \"left\" | \"top\" | \"right\"\n > = {\n up: \"bottom\",\n right: \"left\",\n down: \"top\",\n left: \"right\",\n none: \"bottom\", // Default position when no arrow\n };\n\n const radixSide = beakPositionMap[beakPosition];\n const shouldShowArrow = beakPosition !== \"none\";\n\n let footerContent = children;\n\n if (flow && !children) {\n // Use walkthroughStep from context (0 for standalone, actual step for walkthrough)\n const currentStep = context?.walkthroughStep || flow.currentStep;\n const isFirstStep = currentStep === 1;\n const isLastStep = currentStep === flow.totalSteps;\n\n footerContent = (\n <PopoverFooter>\n {!isFirstStep && (\n <PopoverBack onClick={() => onAction?.({ type: \"back\", step: currentStep })}>\n {flow.backLabel}\n </PopoverBack>\n )}\n {isLastStep ? (\n <PopoverButton\n onClick={() => onAction?.({ type: \"finish\", step: currentStep })}\n dismiss\n >\n {flow.finishLabel}\n </PopoverButton>\n ) : (\n <PopoverNext onClick={() => onAction?.({ type: \"next\", step: currentStep })}>\n {flow.nextLabel}\n </PopoverNext>\n )}\n </PopoverFooter>\n );\n }\n\n const handleOpenAutoFocus = (event: Event) => {\n event.preventDefault();\n\n if (flow) {\n const contentElement = event.currentTarget as HTMLElement;\n // Focus the content element for better accessibility\n // Use setTimeout to ensure the DOM has fully rendered\n setTimeout(() => {\n contentElement.setAttribute(\"tabindex\", \"-1\");\n contentElement.focus();\n }, 0);\n }\n\n props.onOpenAutoFocus?.(event);\n };\n\n const handleCloseAutoFocus = (event: Event) => {\n // Prevent focus from returning to trigger in walkthrough flow\n // This allows the next popover to manage focus properly\n if (flow) {\n event.preventDefault();\n }\n\n props.onCloseAutoFocus?.(event);\n };\n\n const handleClose = (event: React.MouseEvent) => {\n const prefersReducedMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\n if (flow && !prefersReducedMotion) {\n event.preventDefault();\n setTimeout(() => {\n onAction?.({ type: \"dismiss\", step: flow.currentStep });\n flow.dismiss();\n }, 200);\n } else {\n onAction?.({ type: \"dismiss\", step: flow?.currentStep });\n flow?.dismiss();\n }\n };\n\n const handleEscapeKey = (event: KeyboardEvent) => {\n const prefersReducedMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\n if (flow && !prefersReducedMotion) {\n event.preventDefault();\n setTimeout(() => {\n onAction?.({ type: \"dismiss\", step: flow.currentStep });\n flow.dismiss();\n }, 200);\n } else {\n onAction?.({ type: \"dismiss\", step: flow?.currentStep });\n flow?.dismiss();\n }\n };\n\n const handleInteractOutside = (event: Event) => {\n if (context?.disableClickOutside) {\n event.preventDefault();\n return;\n }\n\n if (flow) {\n const target = event.target as HTMLElement;\n const isPopoverInteraction =\n target.closest(\"[role='dialog']\") ||\n target.closest(\".purpur-popover__trigger\") ||\n target.closest(\"button[aria-haspopup='dialog']\");\n\n if (!isPopoverInteraction) {\n onAction?.({ type: \"dismiss\", step: flow.currentStep });\n setTimeout(() => {\n flow.dismiss();\n }, 0);\n }\n }\n };\n\n return (\n <RadixPopover.Portal>\n <RadixPopover.Content\n data-testid=\"popover-content\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={props[\"aria-label\"] ? undefined : \"popover-heading\"}\n ref={ref}\n side={radixSide}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n style={\n {\n \"--popover-z-index\": zIndex,\n } as React.CSSProperties\n }\n className={cx(\n \"purpur-popover__content\",\n { \"purpur-popover__content--negative\": negative },\n className\n )}\n onOpenAutoFocus={handleOpenAutoFocus}\n onCloseAutoFocus={handleCloseAutoFocus}\n onEscapeKeyDown={handleEscapeKey}\n onInteractOutside={handleInteractOutside}\n {...props}\n >\n <PopoverNegativeContext.Provider value={{ negative }}>\n <div className={cx(\"purpur-popover__inner\")}>\n <PopoverHeader ref={headerRef} title={title} icon={icon} />\n <Paragraph className={cx(\"purpur-popover__body\")}>{body}</Paragraph>\n </div>\n {footerContent}\n\n <RadixPopover.Close asChild onClick={handleClose}>\n <Button\n variant={negative ? \"text\" : \"tertiary-purple\"}\n size=\"sm\"\n aria-label={closeIconAriaLabel}\n className={cx(\"purpur-popover__close\")}\n negative={!negative}\n iconOnly\n >\n <IconClose size=\"xs\" className={cx(\"purpur-popover__icon\")} />\n </Button>\n </RadixPopover.Close>\n </PopoverNegativeContext.Provider>\n {shouldShowArrow && (\n <RadixPopover.Arrow\n className={cx(\"purpur-popover__arrow\")}\n aria-hidden=\"true\"\n tabIndex={-1}\n />\n )}\n </RadixPopover.Content>\n </RadixPopover.Portal>\n );\n }\n);\n\nPopoverContent.displayName = \"PopoverContent\";\n","import React, { type ReactNode, useState } from \"react\";\nimport * as RadixPopover from \"@radix-ui/react-popover\";\n\nimport { PopoverInternalContext } from \"./popover-internal-context\";\n\nexport type PopoverStandaloneProps = RadixPopover.PopoverProps & {\n children: ReactNode;\n className?: string;\n disableClickOutside?: boolean;\n};\n\nexport const PopoverStandalone = ({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n disableClickOutside,\n ...props\n}: PopoverStandaloneProps) => {\n // Internal state for uncontrolled mode\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : internalOpen;\n\n const handleOpenChange = (newOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(newOpen);\n }\n onOpenChange?.(newOpen);\n };\n\n return (\n <RadixPopover.Root open={isOpen} onOpenChange={handleOpenChange} {...props}>\n <PopoverInternalContext.Provider\n value={{\n isOpen,\n walkthroughStep: 0,\n disableClickOutside,\n }}\n >\n {children}\n </PopoverInternalContext.Provider>\n </RadixPopover.Root>\n );\n};\n\nPopoverStandalone.displayName = \"PopoverStandalone\";\n","import { useCallback, useRef } from \"react\";\n\nexport const useSmoothScroll = (onComplete?: () => void) => {\n const scrollAnimationId = useRef<number | null>(null);\n\n const cancelScroll = useCallback(() => {\n if (scrollAnimationId.current) {\n cancelAnimationFrame(scrollAnimationId.current);\n scrollAnimationId.current = null;\n }\n }, []);\n\n const scrollToElement = useCallback(\n (element: HTMLElement, duration: number = 600) => {\n const prefersReducedMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n const rect = element.getBoundingClientRect();\n const absoluteTop = rect.top + window.pageYOffset;\n const elementHeight = rect.height;\n const viewportHeight = window.innerHeight;\n\n let targetY = absoluteTop - viewportHeight / 2 + elementHeight / 2;\n const documentHeight = document.documentElement.scrollHeight;\n const maxScroll = Math.max(0, documentHeight - viewportHeight);\n targetY = Math.max(0, Math.min(targetY, maxScroll));\n\n if (prefersReducedMotion) {\n window.scrollTo(0, targetY);\n onComplete?.();\n return;\n }\n\n const startY = window.pageYOffset;\n const distance = targetY - startY;\n const startTime = performance.now();\n\n const animateScroll = (currentTime: number) => {\n const elapsed = currentTime - startTime;\n const progress = Math.min(elapsed / duration, 1);\n\n const easeInOut =\n progress < 0.5 ? 2 * progress * progress : 1 - Math.pow(-2 * progress + 2, 2) / 2;\n\n const currentY = startY + distance * easeInOut;\n window.scrollTo(0, currentY);\n\n if (progress < 1) {\n scrollAnimationId.current = requestAnimationFrame(animateScroll);\n } else {\n scrollAnimationId.current = null;\n onComplete?.();\n }\n };\n\n cancelScroll();\n\n scrollAnimationId.current = requestAnimationFrame(animateScroll);\n },\n [onComplete, cancelScroll]\n );\n\n return { scrollToElement, cancelScroll };\n};\n","import { useEffect, useRef } from \"react\";\n\nimport { useOptionalPopoverFlow } from \"./popover-flow\";\nimport { usePopoverInternal } from \"./popover-internal-context\";\nimport { useSmoothScroll } from \"./use-smooth-scroll\";\n\nexport function usePopoverTrigger(ref: React.Ref<HTMLButtonElement>) {\n const triggerRef = useRef<HTMLButtonElement>(null);\n const context = usePopoverInternal();\n const flow = useOptionalPopoverFlow();\n const hasScrolled = useRef(false);\n const { scrollToElement, cancelScroll } = useSmoothScroll(context?.onScrollComplete);\n\n // Forward ref\n useEffect(() => {\n if (typeof ref === \"function\") {\n ref(triggerRef.current);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLButtonElement | null>).current = triggerRef.current;\n }\n }, [ref]);\n\n // Walkthrough scroll logic\n useEffect(() => {\n const isActiveStep =\n flow &&\n context?.walkthroughStep !== undefined &&\n flow.currentStep === context.walkthroughStep &&\n triggerRef.current &&\n !hasScrolled.current;\n\n if (isActiveStep) {\n const element = triggerRef.current!;\n const rect = element.getBoundingClientRect();\n const buffer = 100;\n const isVisible =\n rect.top >= -buffer &&\n rect.bottom <= window.innerHeight + buffer &&\n rect.left >= -buffer &&\n rect.right <= window.innerWidth + buffer;\n\n if (isVisible) {\n context?.onScrollComplete?.();\n } else {\n context?.onScrollStart?.();\n scrollToElement(element);\n }\n hasScrolled.current = true;\n } else if (flow?.currentStep !== context?.walkthroughStep) {\n hasScrolled.current = false;\n cancelScroll();\n }\n }, [flow?.currentStep, context?.walkthroughStep, flow, scrollToElement, cancelScroll, context]);\n\n // Cancel scroll on unmount\n useEffect(() => cancelScroll, [cancelScroll]);\n\n return { triggerRef, context };\n}\n","import React, { forwardRef } from \"react\";\nimport * as RadixPopover from \"@radix-ui/react-popover\";\nimport c from \"classnames/bind\";\n\nimport styles from \"./popover.module.scss\";\nimport { usePopoverTrigger } from \"./usePopoverTrigger\";\n\nconst cx = c.bind(styles);\n\nexport type PopoverTriggerProps = RadixPopover.PopoverTriggerProps & {\n /**\n * Whether to show visual highlight effect around the trigger when popover is open.\n * @default true\n */\n highlight?: boolean;\n /**\n * Whether to use negative (light) styling for the highlight effect.\n * @default false\n */\n negative?: boolean;\n};\n\nexport const PopoverTrigger = forwardRef<HTMLButtonElement, PopoverTriggerProps>(\n ({ children, className, highlight = true, negative = false, ...props }, ref) => {\n const { triggerRef, context } = usePopoverTrigger(ref);\n\n return (\n <div\n className={cx(\n \"purpur-popover__trigger\",\n { \"purpur-popover__trigger--highlight\": context?.isOpen && highlight },\n className\n )}\n >\n {context?.isOpen && highlight && (\n <>\n {/* State 1: Outer glow effect */}\n <div\n className={cx(\n \"purpur-popover__trigger-highlight\",\n \"purpur-popover__trigger-highlight--state1\",\n { \"purpur-popover__trigger-highlight--negative\": negative }\n )}\n aria-hidden=\"true\"\n />\n {/* State 2: Inner border only */}\n <div\n className={cx(\n \"purpur-popover__trigger-highlight\",\n \"purpur-popover__trigger-highlight--state2\",\n { \"purpur-popover__trigger-highlight--negative\": negative }\n )}\n aria-hidden=\"true\"\n />\n </>\n )}\n <RadixPopover.Trigger\n ref={triggerRef}\n asChild\n aria-expanded={context?.isOpen ?? false}\n aria-haspopup=\"dialog\"\n {...props}\n >\n {children}\n </RadixPopover.Trigger>\n </div>\n );\n }\n);\n\nPopoverTrigger.displayName = \"PopoverTrigger\";\n","import { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { useOptionalPopoverFlow } from \"./popover-flow\";\n\nexport function usePopoverWalkthrough(step: number) {\n const flow = useOptionalPopoverFlow();\n const [actuallyOpen, setActuallyOpen] = useState(false);\n const [waitingForScroll, setWaitingForScroll] = useState(false);\n const timeoutRef = useRef<number | null>(null);\n const openedAtRef = useRef<number>(0);\n\n useEffect(() => {\n if (flow) {\n flow.registerStep(step);\n return () => flow.unregisterStep(step);\n }\n return () => {};\n }, [flow, step]);\n\n const shouldBeOpen = flow?.currentStep === step;\n\n const onScrollStart = useCallback(() => {\n setWaitingForScroll(true);\n }, []);\n\n const onScrollComplete = useCallback(() => {\n setWaitingForScroll(false);\n if (shouldBeOpen) {\n const delay = flow.openDelay;\n timeoutRef.current = window.setTimeout(() => {\n setActuallyOpen(true);\n openedAtRef.current = Date.now();\n }, delay);\n }\n }, [shouldBeOpen, flow]);\n\n useEffect(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n\n if (shouldBeOpen) {\n if (!waitingForScroll) {\n const delay = flow.openDelay;\n timeoutRef.current = window.setTimeout(() => {\n setActuallyOpen(true);\n openedAtRef.current = Date.now();\n }, delay);\n }\n } else {\n setActuallyOpen(false);\n setWaitingForScroll(false);\n openedAtRef.current = 0;\n }\n\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n };\n }, [shouldBeOpen, waitingForScroll, flow]);\n\n const handleOpenChange = useCallback(\n (open: boolean, consumerOnOpenChange?: (open: boolean) => void) => {\n consumerOnOpenChange?.(open);\n if (!open && actuallyOpen && flow && flow.currentStep === step) {\n const timeSinceOpen = Date.now() - openedAtRef.current;\n if (timeSinceOpen < 10 || timeoutRef.current !== null) {\n return;\n }\n flow.dismiss();\n }\n },\n [actuallyOpen, flow, step]\n );\n\n return {\n actuallyOpen,\n onScrollStart,\n onScrollComplete,\n handleOpenChange,\n };\n}\n","import React, { type ReactNode } from \"react\";\nimport * as RadixPopover from \"@radix-ui/react-popover\";\n\nimport { PopoverInternalContext } from \"./popover-internal-context\";\nimport { usePopoverWalkthrough } from \"./usePopoverWalkthrough\";\n\nexport type PopoverWalkthroughProps = RadixPopover.PopoverProps & {\n children: ReactNode;\n step: number;\n className?: string;\n disableClickOutside?: boolean;\n};\n\nexport const PopoverWalkthrough = ({\n children,\n step,\n onOpenChange: consumerOnOpenChange,\n disableClickOutside = true,\n ...props\n}: PopoverWalkthroughProps) => {\n const { actuallyOpen, onScrollStart, onScrollComplete, handleOpenChange } =\n usePopoverWalkthrough(step);\n\n return (\n <RadixPopover.Root\n open={actuallyOpen}\n onOpenChange={(open) => handleOpenChange(open, consumerOnOpenChange)}\n {...props}\n >\n <PopoverInternalContext.Provider\n value={{\n isOpen: actuallyOpen,\n walkthroughStep: step,\n onScrollStart,\n onScrollComplete,\n disableClickOutside,\n }}\n >\n {children}\n </PopoverInternalContext.Provider>\n </RadixPopover.Root>\n );\n};\n\nPopoverWalkthrough.displayName = \"PopoverWalkthrough\";\n","import React, { type ReactNode } from \"react\";\nimport type * as RadixPopover from \"@radix-ui/react-popover\";\n\nimport { PopoverBack } from \"./popover-back\";\nimport { PopoverButton } from \"./popover-button\";\nimport { type PopoverAction,PopoverContent } from \"./popover-content\";\nimport { PopoverFlow } from \"./popover-flow\";\nimport { PopoverFooter } from \"./popover-footer\";\nimport { PopoverNext } from \"./popover-next\";\nimport { PopoverStandalone } from \"./popover-standalone\";\nimport { PopoverTrigger } from \"./popover-trigger\";\nimport { PopoverWalkthrough } from \"./popover-walkthrough\";\n\nexport type { PopoverAction };\n\n// Base props shared by both variants\ntype BasePopoverProps = RadixPopover.PopoverProps & {\n children: ReactNode;\n className?: string;\n};\n\n// Standalone variant props\ntype StandalonePopoverProps = BasePopoverProps & {\n multistep?: false;\n step?: never;\n disableClickOutside?: boolean;\n};\n\n// Walkthrough variant props\ntype WalkthroughPopoverProps = BasePopoverProps & {\n multistep: true;\n step: number;\n disableClickOutside?: boolean;\n};\n\nexport type PopoverProps = StandalonePopoverProps | WalkthroughPopoverProps;\n\ntype PopoverCmp<P> = React.FunctionComponent<P> & {\n Back: typeof PopoverBack;\n Button: typeof PopoverButton;\n Content: typeof PopoverContent;\n Flow: typeof PopoverFlow;\n Footer: typeof PopoverFooter;\n Next: typeof PopoverNext;\n Trigger: typeof PopoverTrigger;\n};\n\nexport const Popover: PopoverCmp<PopoverProps> = (props) => {\n const { multistep = false, disableClickOutside, ...restProps } = props;\n\n if (multistep) {\n return (\n <PopoverWalkthrough\n {...(restProps as WalkthroughPopoverProps)}\n disableClickOutside={disableClickOutside ?? true}\n />\n );\n }\n\n return (\n <PopoverStandalone\n {...(restProps as StandalonePopoverProps)}\n disableClickOutside={disableClickOutside}\n />\n );\n};\n\nPopover.Back = PopoverBack;\nPopover.Button = PopoverButton;\nPopover.Content = PopoverContent;\nPopover.Flow = PopoverFlow;\nPopover.Footer = PopoverFooter;\nPopover.Next = PopoverNext;\nPopover.Trigger = PopoverTrigger;\n\nPopover.displayName = \"Popover\";\n"],"names":["PopoverFlowContext","createContext","usePopoverFlow","context","useContext","useOptionalPopoverFlow","PopoverFlow","children","initialStep","onComplete","onDismiss","separatorText","stepText","backLabel","nextLabel","finishLabel","openDelay","currentStep","setCurrentStep","useState","registeredSteps","setRegisteredSteps","registerStep","useCallback","step","prev","next","unregisterStep","nextStep","back","dismiss","value","useMemo","jsx","PopoverInternalContext","usePopoverInternal","PopoverNegativeContext","usePopoverNegative","DEBOUNCE_DELAY","SCREEN_MEDIA_QUERY","purpurBreakpointMd","useScreenSize","maxMediumScreen","updateSize","setIsMdOrSmaller","isMdOrSmaller","handleResize","timeoutId","useEffect","PopoverBack","onClick","isNegative","negative","handleClick","Button","NAME","Arrow","React","props","forwardedRef","width","height","arrowProps","Primitive","Root","POPPER_NAME","createPopperContext","createPopperScope","createContextScope","PopperProvider","usePopperContext","Popper","__scopePopper","anchor","setAnchor","ANCHOR_NAME","PopperAnchor","virtualRef","anchorProps","ref","composedRefs","useComposedRefs","anchorRef","previousAnchor","CONTENT_NAME","PopperContentProvider","useContentContext","PopperContent","side","sideOffset","align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPaddingProp","sticky","hideWhenDetached","updatePositionStrategy","onPlaced","contentProps","content","setContent","node","arrow","setArrow","arrowSize","useSize","arrowWidth","arrowHeight","desiredPlacement","collisionPadding","boundary","hasExplicitBoundaries","detectOverflowOptions","isNotNull","refs","floatingStyles","placement","isPositioned","middlewareData","useFloating","args","autoUpdate","offset","shift","limitShift","flip","size","elements","rects","availableWidth","availableHeight","anchorWidth","anchorHeight","contentStyle","floatingUIarrow","transformOrigin","hide","placedSide","placedAlign","getSideAndAlignFromPlacement","handlePlaced","useCallbackRef","useLayoutEffect","arrowX","arrowY","cannotCenterArrow","contentZIndex","setContentZIndex","ARROW_NAME","OPPOSITE_SIDE","PopperArrow","contentContext","baseSide","ArrowPrimitive.Root","options","data","isArrowHidden","noArrowAlign","arrowXCenter","arrowYCenter","y","Root2","Anchor","Content","POPOVER_NAME","createPopoverContext","usePopperScope","PopoverProvider","usePopoverContext","Popover","__scopePopover","openProp","defaultOpen","onOpenChange","modal","popperScope","triggerRef","hasCustomAnchor","setHasCustomAnchor","open","setOpen","useControllableState","PopperPrimitive.Root","useId","prevOpen","PopoverAnchor","onCustomAnchorAdd","onCustomAnchorRemove","PopperPrimitive.Anchor","TRIGGER_NAME","PopoverTrigger","triggerProps","composedTriggerRef","trigger","getState","composeEventHandlers","PORTAL_NAME","PortalProvider","usePortalContext","PopoverPortal","forceMount","container","Presence","PortalPrimitive","PopoverContent","portalContext","PopoverContentModal","PopoverContentNonModal","Slot","createSlot","contentRef","isRightClickOutsideRef","hideOthers","RemoveScroll","PopoverContentImpl","event","originalEvent","ctrlLeftClick","isRightClick","hasInteractedOutsideRef","hasPointerDownOutsideRef","target","trapFocus","onOpenAutoFocus","onCloseAutoFocus","disableOutsidePointerEvents","onEscapeKeyDown","onPointerDownOutside","onFocusOutside","onInteractOutside","useFocusGuards","FocusScope","DismissableLayer","PopperPrimitive.Content","CLOSE_NAME","PopoverClose","closeProps","PopoverArrow","PopperPrimitive.Arrow","Trigger","Portal","Content2","Close","Arrow2","PopoverButton","asChild","variant","fullWidth","flow","isFullWidth","RadixPopover.Close","cx","c","styles","PopoverSteps","totalSteps","Fragment","jsxs","Paragraph","PopoverFooter","className","internal","showSteps","PopoverHeader","forwardRef","title","icon","Heading","PopoverNext","beakPosition","closeIconAriaLabel","body","onAction","zIndex","headerRef","useRef","radixSide","shouldShowArrow","footerContent","isFirstStep","isLastStep","handleOpenAutoFocus","contentElement","handleCloseAutoFocus","handleClose","prefersReducedMotion","handleEscapeKey","handleInteractOutside","RadixPopover.Portal","RadixPopover.Content","IconClose","RadixPopover.Arrow","PopoverStandalone","controlledOpen","disableClickOutside","internalOpen","setInternalOpen","isControlled","isOpen","handleOpenChange","newOpen","RadixPopover.Root","useSmoothScroll","scrollAnimationId","cancelScroll","element","duration","rect","absoluteTop","elementHeight","viewportHeight","targetY","documentHeight","maxScroll","startY","distance","startTime","animateScroll","currentTime","elapsed","progress","easeInOut","currentY","usePopoverTrigger","hasScrolled","scrollToElement","buffer","highlight","RadixPopover.Trigger","usePopoverWalkthrough","actuallyOpen","setActuallyOpen","waitingForScroll","setWaitingForScroll","timeoutRef","openedAtRef","shouldBeOpen","onScrollStart","onScrollComplete","delay","consumerOnOpenChange","PopoverWalkthrough","multistep","restProps"],"mappings":"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","x_google_ignoreList":[4,5,6]}