gotcha-feedback 1.1.10 → 1.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/screenshot.ts","../src/constants.ts","../src/utils/localStorage.ts","../src/utils/generateId.ts","../src/utils/anonymous.ts","../src/utils/errorBuffer.ts","../src/utils/contextCollector.ts","../src/utils/offlineQueue.ts","../src/api/client.ts","../src/utils/deepMerge.ts","../src/theme/tokens.ts","../src/theme/resolveTheme.ts","../src/theme/styles.ts","../src/components/GotchaProvider.tsx","../src/hooks/useSubmit.ts","../src/hooks/useHideAfterSubmit.ts","../src/hooks/useTriggerConditions.ts","../src/utils/cn.ts","../src/utils/device.ts","../src/components/GotchaButton.tsx","../src/components/Spinner.tsx","../src/components/ScreenshotPreview.tsx","../src/components/modes/FeedbackMode.tsx","../src/components/modes/VoteMode.tsx","../src/components/modes/PollMode.tsx","../src/components/modes/NpsMode.tsx","../src/components/FollowUpPrompt.tsx","../src/components/GotchaModal.tsx","../src/components/Gotcha.tsx","../src/hooks/useScore.ts","../src/components/GotchaScore.tsx","../src/hooks/useGotcha.ts","../src/hooks/useGotchaTrigger.ts"],"names":["screenshot_exports","__export","captureScreenshot","html2canvas","canvas","compressCanvas","track","bitmap","ctx","dataUrl","smaller","init_screenshot","__esmMin","API_BASE_URL","STORAGE_KEYS","DEFAULTS","RETRY_CONFIG","safeGetItem","key","safeSetItem","value","generateId","c","r","getAnonymousId","stored","id","buffer","listening","pushError","message","source","entry","handleError","event","handleRejection","startErrorCapture","stopErrorCapture","getRecentErrors","collectContext","MAX_QUEUE_SIZE","MAX_AGE_MS","readQueue","raw","items","now","item","writeQueue","enqueue","payload","type","dequeue","getQueuedItems","getQueueLength","incrementRetries","DEFAULT_RETRY_CONFIG","fetchWithRetry","url","options","config","debug","lastError","attempt","response","error","delay","resolve","createApiClient","apiKey","baseUrl","flushing","headers","request","method","endpoint","body","idempotencyKey","data","user","fullPayload","err","elementId","userId","responseId","updatePayload","UNSAFE_KEYS","deepMerge","base","override","result","val","NPS_COLORS","LIGHT_TOKENS","DARK_TOKENS","createTheme","overrides","resolveTheme","theme","systemTheme","providerConfig","resolved","STYLE_ID","FONT_ID","FONT_FACE_ID","CARTER_ONE_FONT_FACE","injectFontFace","style","sanitizeCSS","generateStyleTag","easing","duration","fontFamily","textDisabled","borderColor","injectStyles","preconnect","preconnectStatic","link","styleEl","GotchaContext","createContext","EMPTY_USER","GotchaProvider","children","disabled","defaultUser","themeConfig","activeModalId","setActiveModalId","useState","client","useMemo","stableDefaultUser","useEffect","handleOnline","openModal","useCallback","closeModal","jsx","useGotchaContext","context","useContext","isResponseExpired","createdAt","cooldownDays","createdTime","ageMs","cooldownMs","useSubmit","isLoading","setIsLoading","isCheckingExisting","setIsCheckingExisting","setError","existingResponse","setExistingResponse","cancelled","existing","errorMessage","getStorageKey","checkIsHidden","resolvedUserId","hideAfterSubmitDays","hiddenUntilStr","useHideAfterSubmit","isHidden","setIsHidden","markHidden","hiddenUntil","getVisitKey","useTriggerConditions","showAfterSeconds","showAfterScrollPercent","showAfterVisits","hasConditions","timeMet","setTimeMet","scrollMet","setScrollMet","visitsMet","next","start","targetMs","check","timer","checkScroll","scrollHeight","viewportHeight","cn","classes","isTouchDevice","getResponsiveSize","size","isTouch","sizes","getInitialSystemTheme","GotchaButton","customStyles","showOnHover","touchBehavior","onClick","isOpen","isParentHovered","animated","queuedCount","setIsTouch","tapRevealed","setTapRevealed","setSystemTheme","isHovered","setIsHovered","isPressed","setIsPressed","hasPopped","setHasPopped","darkQuery","handler","e","shouldShow","handleClick","buttonSize","t","getTransform","baseStyles","jsxs","GotchaIcon","mounted","setMounted","Spinner","color","ScreenshotPreview","src","onRemove","FeedbackMode","placeholder","submitText","onSubmit","initialValues","isEditing","showText","showRating","enableBugFlag","bugFlagLabel","enableScreenshot","content","setContent","rating","setRating","isBug","setIsBug","screenshot","setScreenshot","capturingScreenshot","setCapturingScreenshot","canSubmit","handleScreenshotCapture","handleSubmit","inputStyles","buttonStyles","StarRating","onChange","large","hovered","setHovered","pulsing","setPulsing","pulseTimerRef","useRef","starSize","buttonPadding","star","isFilled","VoteMode","initialVote","labels","activeVote","setActiveVote","previousVote","setPreviousVote","handleVote","vote","getButtonStyles","voteType","isSelected","surface","border","iconSize","Fragment","ThumbsUpIcon","ThumbsDownIcon","PollMode","allowMultiple","initialSelected","selected","setSelected","handleToggle","option","prev","o","getOptionStyles","index","NpsMode","showFollowUp","followUpPlaceholder","lowLabel","highLabel","score","setScore","hoveredScore","setHoveredScore","npsColors","_","i","FollowUpPrompt","promptText","GotchaModal","mode","thankYouMessage","isSubmitted","phase","followUpConfig","followUpLoading","onFollowUpSubmit","voteLabels","npsQuestion","npsFollowUp","npsFollowUpPlaceholder","npsLowLabel","npsHighLabel","onClose","anchorRect","useFixedPosition","modalRef","firstFocusableRef","onCloseRef","isMobile","setIsMobile","showAbove","modal","handleKeyDown","focusableElements","firstElement","lastElement","defaultPrompt","modalPadding","modalWidth","animationClass","modalStyles","viewportWidth","edgePadding","idealLeft","fadeUpStyle","isDefaultThankYou","Gotcha","onePerUser","followUp","position","visible","onOpen","onError","conditionsMet","setPhase","lastResponseId","setLastResponseId","setFollowUpLoading","setQueuedCount","setIsParentHovered","setAnchorRect","hasMounted","setHasMounted","containerRef","autoCloseTimerRef","lastSubmitDataRef","container","parent","handleMouseEnter","handleMouseLeave","submit","handleOpen","button","handleClose","handleFollowUpSubmit","effectiveSubmitText","positionStyles","modalProps","createPortal","useScore","refreshInterval","fetchScore","intervalId","SIZE_MAP","Stars","filledColor","emptyColor","clipId","stars","fill","PositiveBar","rate","height","trackColor","ThumbIcon","GotchaScore","variant","showCount","mq","s","ratingColor","mutedColor","starFilled","starEmpty","positiveColor","positiveTrack","baseStyle","countText","n","singular","label","voteCount","positiveRate","total","averageRating","totalResponses","displayRating","useGotcha","useGotchaTrigger","open","close"],"mappings":"kPAAA,IAAAA,EAAAA,CAAA,EAAA,CAAAC,EAAAA,CAAAD,EAAAA,CAAA,CAAA,iBAAA,CAAA,IAAAE,EAAAA,CAAAA,CAAAA,CAOA,eAAsBA,EAAAA,EAA4C,CAEhE,GAAI,CAEF,IAAMC,CAAAA,CAAAA,CAAe,MAAO,IAAI,QAAA,CAAS,8BAA8B,CAAA,EAAG,EAAG,OAAA,CACvEC,CAAAA,CAAS,MAAMD,CAAAA,CAAY,QAAA,CAAS,IAAA,CAAM,CAC9C,OAAA,CAAS,CAAA,CAAA,CACT,OAAA,CAAS,GACT,KAAA,CAAO,CAAA,CACP,KAAA,CAAO,MAAA,CAAO,UAAA,CACd,MAAA,CAAQ,MAAA,CAAO,WAAA,CACf,WAAA,CAAa,MAAA,CAAO,UAAA,CACpB,YAAA,CAAc,MAAA,CAAO,WACvB,CAAC,CAAA,CACD,OAAOE,EAAAA,CAAeD,CAAM,CAC9B,CAAA,KAAQ,CAER,CAGA,GAAI,CACF,GAAI,CAAC,SAAA,CAAU,YAAA,EAAc,eAAA,EAAmB,OAAO,YAAA,CAAiB,GAAA,CAAa,OAAO,IAAA,CAM5F,IAAME,CAAAA,CAAAA,CAJS,MAAM,SAAA,CAAU,YAAA,CAAa,eAAA,CAAgB,CAC1D,KAAA,CAAO,CAAE,cAAA,CAAgB,SAAU,CACrC,CAAC,CAAA,EAEoB,cAAA,EAAe,CAAE,CAAC,CAAA,CAEjCC,CAAAA,CAAS,MADM,IAAI,YAAA,CAAaD,CAAK,CAAA,CACT,SAAA,EAAU,CAC5CA,CAAAA,CAAM,IAAA,EAAK,CAEX,IAAMF,CAAAA,CAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA,CAC9CA,CAAAA,CAAO,KAAA,CAAQG,CAAAA,CAAO,KAAA,CACtBH,CAAAA,CAAO,MAAA,CAASG,CAAAA,CAAO,MAAA,CACvB,IAAMC,CAAAA,CAAMJ,CAAAA,CAAO,UAAA,CAAW,IAAI,CAAA,CAClC,OAAKI,CAAAA,EACLA,CAAAA,CAAI,SAAA,CAAUD,CAAAA,CAAQ,CAAA,CAAG,CAAC,CAAA,CAEnBF,EAAAA,CAAeD,CAAM,CAAA,EAHX,IAInB,CAAA,KAAQ,CACN,OAAO,IACT,CACF,CAEA,SAASC,EAAAA,CAAeD,CAAAA,CAAmC,CAEzD,IAAIK,CAAAA,CAAUL,CAAAA,CAAO,SAAA,CAAU,YAAA,CAAc,EAAG,CAAA,CAQhD,GALIK,CAAAA,CAAQ,MAAA,CAAS,OAAA,GACnBA,CAAAA,CAAUL,CAAAA,CAAO,SAAA,CAAU,YAAA,CAAc,EAAG,CAAA,CAAA,CAI1CK,CAAAA,CAAQ,OAAS,OAAA,CAAgB,CAEnC,IAAMC,CAAAA,CAAU,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA,CAC/CA,CAAAA,CAAQ,KAAA,CAAQN,CAAAA,CAAO,KAAA,CAAQ,EAAA,CAC/BM,CAAAA,CAAQ,MAAA,CAASN,CAAAA,CAAO,MAAA,CAAS,EAAA,CACjC,IAAMI,CAAAA,CAAME,CAAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,CAC/BF,CAAAA,GACFA,CAAAA,CAAI,SAAA,CAAUJ,CAAAA,CAAQ,CAAA,CAAG,CAAA,CAAGM,EAAQ,KAAA,CAAOA,CAAAA,CAAQ,MAAM,CAAA,CACzDD,CAAAA,CAAUC,CAAAA,CAAQ,SAAA,CAAU,YAAA,CAAc,EAAG,CAAA,EAEjD,CAEA,OAAOD,CACT,CA3EA,IAAAE,EAAAA,CAAAC,EAAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CCCO,IAAMC,EAAAA,CAAe,0BAAA,CAcrB,IAAMC,CAAAA,CAAe,CAC1B,YAAA,CAAc,qBAAA,CACd,aAAA,CAAe,sBAAA,CACf,YAAA,CAAc,eAAA,CACd,WAAA,CAAa,eACf,CAAA,CAGaC,CAAAA,CAAW,CACtB,QAAA,CAAU,WAAA,CACV,IAAA,CAAM,IAAA,CACN,KAAA,CAAO,OAAA,CACP,aAAA,CAAe,IAAA,CACf,cAAA,CAAgB,gBAAA,CAChB,WAAA,CAAa,QAAA,CACb,iBAAA,CAAmB,SACrB,CAAA,CAGaC,EAAAA,CAAe,CAC1B,WAAA,CAAa,CAAA,CACb,aAAA,CAAe,GAAA,CACf,YAAA,CAAc,GAChB,CAAA,CCtCO,SAASC,CAAAA,CAAYC,CAAAA,CAA4B,CACtD,GAAI,OAAO,MAAA,CAAW,GAAA,CAAa,OAAO,IAAA,CAC1C,GAAI,CACF,OAAO,YAAA,CAAa,OAAA,CAAQA,CAAG,CACjC,CAAA,KAAQ,CACN,OAAO,IACT,CACF,CAEO,SAASC,EAAAA,CAAYD,CAAAA,CAAaE,CAAAA,CAAqB,CAC5D,GAAI,EAAA,OAAO,MAAA,CAAW,GAAA,CAAA,CACtB,GAAI,CACF,YAAA,CAAa,OAAA,CAAQF,CAAAA,CAAKE,CAAK,EACjC,CAAA,KAAQ,CAER,CACF,CCZO,SAASC,EAAAA,EAAqB,CACnC,OAAI,OAAO,MAAA,CAAW,GAAA,EAAe,MAAA,CAAO,WACnC,MAAA,CAAO,UAAA,EAAW,CAEpB,sCAAA,CAAuC,OAAA,CAAQ,OAAA,CAAUC,CAAAA,EAAM,CACpE,IAAMC,CAAAA,CAAK,IAAA,CAAK,MAAA,EAAO,CAAI,EAAA,CAAM,CAAA,CACjC,OAAA,CAAQD,CAAAA,GAAM,GAAA,CAAMC,CAAAA,CAAKA,CAAAA,CAAI,CAAA,CAAO,CAAA,EAAK,QAAA,CAAS,EAAE,CACtD,CAAC,CACH,CCJO,SAASC,EAAAA,EAAyB,CACvC,IAAMC,CAAAA,CAASR,CAAAA,CAAYH,CAAAA,CAAa,YAAY,CAAA,CACpD,GAAIW,CAAAA,CAAQ,OAAOA,CAAAA,CAEnB,IAAMC,CAAAA,CAAK,CAAA,KAAA,EAAQL,EAAAA,EAAY,CAAA,CAAA,CAC/B,OAAAF,EAAAA,CAAYL,CAAAA,CAAa,YAAA,CAAcY,CAAE,CAAA,CAClCA,CACT,CCNA,IAAIC,EAAAA,CAA0B,EAAC,CAC3BC,EAAAA,CAAY,KAAA,CAEhB,SAASC,GAAUC,CAAAA,CAAiBC,CAAAA,CAAiB,CACnD,IAAMC,CAAAA,CAAuB,CAC3B,OAAA,CAASF,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAAG,GAAkB,CAAA,CAC5C,MAAA,CAAQC,CAAAA,EAAQ,KAAA,CAAM,CAAA,CAAG,GAAkB,CAAA,CAC3C,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,CAAA,CACAJ,EAAAA,CAAO,IAAA,CAAKK,CAAK,CAAA,CACbL,EAAAA,CAAO,MAAA,CAAS,EAAA,EAClBA,GAAO,KAAA,GAEX,CAEA,SAASM,EAAAA,CAAYC,CAAAA,CAAmB,CACtCL,EAAAA,CAAUK,CAAAA,CAAM,OAAA,CAASA,CAAAA,CAAM,QAAQ,EACzC,CAEA,SAASC,EAAAA,CAAgBD,CAAAA,CAA8B,CACrD,IAAMJ,CAAAA,CAAUI,CAAAA,CAAM,MAAA,YAAkB,KAAA,CACpCA,CAAAA,CAAM,MAAA,CAAO,OAAA,CACb,MAAA,CAAOA,CAAAA,CAAM,MAAM,CAAA,CACvBL,GAAUC,CAAO,EACnB,CAEO,SAASM,EAAAA,EAA0B,CACpC,OAAO,MAAA,CAAW,GAAA,EAAeR,EAAAA,GACrC,MAAA,CAAO,gBAAA,CAAiB,OAAA,CAASK,EAAW,CAAA,CAC5C,MAAA,CAAO,gBAAA,CAAiB,oBAAA,CAAsBE,EAAe,CAAA,CAC7DP,EAAAA,CAAY,IAAA,EACd,CAEO,SAASS,EAAAA,EAAyB,CACnC,OAAO,MAAA,CAAW,GAAA,EAAe,CAACT,EAAAA,GACtC,MAAA,CAAO,mBAAA,CAAoB,OAAA,CAASK,EAAW,CAAA,CAC/C,MAAA,CAAO,mBAAA,CAAoB,oBAAA,CAAsBE,EAAe,CAAA,CAChEP,EAAAA,CAAY,KAAA,EACd,CAEO,SAASU,EAAAA,EAAmC,CACjD,OAAO,CAAC,GAAGX,EAAM,CAAA,CAAE,OAAA,EACrB,CChDO,SAASY,EAAAA,EAAoC,CAClD,OAAI,OAAO,MAAA,CAAW,GAAA,CAAoB,EAAC,CAEpC,CACL,GAAA,CAAK,MAAA,CAAO,QAAA,CAAS,MAAA,CAAS,MAAA,CAAO,QAAA,CAAS,QAAA,CAC9C,SAAA,CAAW,SAAA,CAAU,SAAA,CACrB,QAAA,CAAU,CAAE,KAAA,CAAO,MAAA,CAAO,UAAA,CAAY,MAAA,CAAQ,MAAA,CAAO,WAAY,CAAA,CACjE,QAAA,CAAU,SAAA,CAAU,QAAA,CACpB,QAAA,CAAU,IAAA,CAAK,cAAA,EAAe,CAAE,eAAA,EAAgB,CAAE,SAClD,gBAAA,CAAkB,CAAE,KAAA,CAAO,MAAA,CAAO,KAAA,CAAO,MAAA,CAAQ,MAAA,CAAO,MAAO,CAAA,CAC/D,YAAA,CAAcD,EAAAA,EAChB,CACF,CCXA,IAAME,EAAAA,CAAiB,EAAA,CACjBC,EAAAA,CAAa,KAAA,CAAc,EAAA,CAAK,GAAA,CAUtC,SAASC,EAAAA,EAAgC,CACvC,IAAMC,CAAAA,CAAM1B,CAAAA,CAAYH,CAAAA,CAAa,aAAa,CAAA,CAClD,GAAI,CAAC6B,CAAAA,CAAK,OAAO,EAAC,CAClB,GAAI,CACF,IAAMC,CAAAA,CAAQ,IAAA,CAAK,KAAA,CAAMD,CAAG,CAAA,CAEtBE,CAAAA,CAAM,IAAA,CAAK,GAAA,EAAI,CACrB,OAAOD,CAAAA,CAAM,MAAA,CAAOE,CAAAA,EAAQD,CAAAA,CAAMC,CAAAA,CAAK,QAAA,CAAWL,EAAU,CAC9D,CAAA,KAAQ,CACN,OAAO,EACT,CACF,CAEA,SAASM,EAAAA,CAAWH,CAAAA,CAAiC,CACnDzB,EAAAA,CAAYL,CAAAA,CAAa,aAAA,CAAe,IAAA,CAAK,SAAA,CAAU8B,CAAK,CAAC,EAC/D,CAEO,SAASI,EAAAA,CAAQC,CAAAA,CAAkCC,CAAAA,CAA4B,QAAA,CAAgB,CACpG,IAAMN,CAAAA,CAAQF,EAAAA,EAAU,CACpBE,CAAAA,CAAM,MAAA,EAAUJ,EAAAA,GACpBI,CAAAA,CAAM,IAAA,CAAK,CACT,GAAIvB,EAAAA,EAAW,CACf,OAAA,CAAA4B,CAAAA,CACA,IAAA,CAAAC,CAAAA,CACA,QAAA,CAAU,IAAA,CAAK,GAAA,EAAI,CACnB,OAAA,CAAS,CACX,CAAC,CAAA,CACDH,EAAAA,CAAWH,CAAK,CAAA,EAClB,CAEO,SAASO,EAAAA,CAAQzB,CAAAA,CAAkB,CACxC,IAAMkB,CAAAA,CAAQF,EAAAA,EAAU,CAAE,MAAA,CAAOI,CAAAA,EAAQA,CAAAA,CAAK,EAAA,GAAOpB,CAAE,CAAA,CACvDqB,EAAAA,CAAWH,CAAK,EAClB,CAEO,SAASQ,EAAAA,EAAqC,CACnD,OAAOV,EAAAA,EACT,CAEO,SAASW,EAAAA,EAAyB,CACvC,OAAOX,EAAAA,EAAU,CAAE,MACrB,CAEO,SAASY,EAAAA,CAAiB5B,CAAAA,CAAkB,CACjD,IAAMkB,CAAAA,CAAQF,EAAAA,EAAU,CAAE,GAAA,CAAII,CAAAA,EAC5BA,EAAK,EAAA,GAAOpB,CAAAA,CAAK,CAAE,GAAGoB,CAAAA,CAAM,OAAA,CAASA,CAAAA,CAAK,OAAA,CAAU,CAAE,CAAA,CAAIA,CAC5D,CAAA,CAEAC,EAAAA,CAAWH,CAAAA,CAAM,MAAA,CAAOE,CAAAA,EAAQA,CAAAA,CAAK,OAAA,EAAW,CAAC,CAAC,EACpD,CC7CA,IAAMS,EAAAA,CAAoC,CACxC,UAAA,CAAYvC,EAAAA,CAAa,WAAA,CACzB,WAAA,CAAaA,EAAAA,CAAa,aAAA,CAC1B,UAAA,CAAYA,EAAAA,CAAa,YAC3B,CAAA,CAKA,eAAewC,EAAAA,CACbC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CAAsBJ,EAAAA,CACtBK,CAAAA,CAAiB,KAAA,CACE,CACnB,IAAIC,CAAAA,CAA0B,IAAA,CAE9B,IAAA,IAASC,CAAAA,CAAU,CAAA,CAAGA,CAAAA,EAAWH,CAAAA,CAAO,UAAA,CAAYG,CAAAA,EAAAA,CAAW,CAC7D,GAAI,CACEF,CAAAA,EAASE,CAAAA,CAAU,CAAA,EACrB,OAAA,CAAQ,GAAA,CAAI,0BAA0BA,CAAO,CAAA,CAAA,EAAIH,CAAAA,CAAO,UAAU,CAAA,CAAE,CAAA,CAGtE,IAAMI,CAAAA,CAAW,MAAM,KAAA,CAAMN,CAAAA,CAAKC,CAAO,CAAA,CAQzC,GALIK,CAAAA,CAAS,MAAA,EAAU,GAAA,EAAOA,CAAAA,CAAS,MAAA,CAAS,GAAA,EAAOA,CAAAA,CAAS,MAAA,GAAW,GAAA,EAKvEA,CAAAA,CAAS,EAAA,CACX,OAAOA,CAAAA,CAGTF,CAAAA,CAAY,IAAI,KAAA,CAAM,QAAQE,CAAAA,CAAS,MAAM,CAAA,CAAE,EACjD,CAAA,MAASC,CAAAA,CAAO,CAEdH,CAAAA,CAAYG,CAAAA,CACRJ,CAAAA,EACF,OAAA,CAAQ,GAAA,CAAI,CAAA,wBAAA,EAA2BC,CAAAA,CAAU,OAAO,CAAA,CAAE,EAE9D,CAGA,GAAIC,CAAAA,CAAUH,CAAAA,CAAO,UAAA,CAAY,CAC/B,IAAMM,CAAAA,CAAQ,IAAA,CAAK,GAAA,CACjBN,CAAAA,CAAO,WAAA,CAAc,IAAA,CAAK,IAAI,CAAA,CAAGG,CAAO,CAAA,CACxCH,CAAAA,CAAO,UACT,CAAA,CACA,MAAM,IAAI,OAAA,CAASO,CAAAA,EAAY,UAAA,CAAWA,CAAAA,CAASD,CAAK,CAAC,EAC3D,CACF,CAEA,MAAMJ,CACR,CAEO,SAASM,EAAAA,CAAgBR,CAAAA,CAAyB,CACvD,GAAM,CAAE,MAAA,CAAAS,CAAAA,CAAQ,OAAA,CAAAC,CAAAA,CAAUxD,EAAAA,CAAc,KAAA,CAAA+C,CAAAA,CAAQ,KAAM,CAAA,CAAID,CAAAA,CAEtDW,CAAAA,CAAW,KAAA,CAETC,CAAAA,CAAU,CACd,cAAA,CAAgB,kBAAA,CAChB,aAAA,CAAe,CAAA,OAAA,EAAUH,CAAM,CAAA,CACjC,CAAA,CAEA,eAAeI,CAAAA,CACbC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACY,CACZ,IAAMlB,CAAAA,CAAM,CAAA,EAAGY,CAAO,CAAA,EAAGK,CAAQ,CAAA,CAAA,CAC3BE,CAAAA,CAAiBvD,EAAAA,GAEnBuC,CAAAA,EACF,OAAA,CAAQ,GAAA,CAAI,CAAA,SAAA,EAAYa,CAAM,CAAA,CAAA,EAAIC,CAAQ,CAAA,CAAA,CAAIC,CAAI,CAAA,CAGpD,IAAMZ,CAAAA,CAAW,MAAMP,EAAAA,CACrBC,CAAAA,CACA,CACE,MAAA,CAAAgB,CAAAA,CACA,OAAA,CAAS,CACP,GAAGF,CAAAA,CACH,iBAAA,CAAmBK,CACrB,CAAA,CACA,IAAA,CAAMD,CAAAA,CAAO,IAAA,CAAK,SAAA,CAAUA,CAAI,EAAI,MACtC,CAAA,CACApB,EAAAA,CACAK,CACF,CAAA,CAEIiB,CAAAA,CACJ,GAAI,CACFA,CAAAA,CAAO,MAAMd,CAAAA,CAAS,IAAA,GACxB,CAAA,KAAQ,CACN,MAAM,CAAE,IAAA,CAAM,aAAA,CAAe,OAAA,CAAS,8BAAA,CAAgC,MAAA,CAAQA,CAAAA,CAAS,MAAO,CAChG,CAEA,GAAI,CAACA,CAAAA,CAAS,EAAA,CAAI,CAChB,IAAMC,CAAAA,CAAQa,CAAAA,CAAK,KAAA,CACnB,MAAIjB,CAAAA,EACF,OAAA,CAAQ,KAAA,CAAM,CAAA,gBAAA,EAAmBI,CAAAA,CAAM,IAAI,CAAA,GAAA,EAAMA,CAAAA,CAAM,OAAO,CAAA,CAAE,CAAA,CAE5DA,CACR,CAEA,OAAIJ,CAAAA,EACF,OAAA,CAAQ,GAAA,CAAI,oBAAA,CAAsBiB,CAAI,CAAA,CAGjCA,CACT,CAEA,OAAO,CAIL,MAAM,cAAA,CACJ5B,CAAAA,CACyB,CAEzB,IAAM6B,CAAAA,CAAO7B,CAAAA,CAAQ,IAAA,EAAQ,EAAC,CACzB6B,CAAAA,CAAK,EAAA,GACRA,CAAAA,CAAK,EAAA,CAAKtD,EAAAA,EAAe,CAAA,CAG3B,IAAMuD,CAAAA,CAAqC,CACzC,GAAG9B,CAAAA,CACH,IAAA,CAAA6B,CAAAA,CACA,OAAA,CAASvC,EAAAA,EAAe,CAExB,GAAIU,CAAAA,CAAQ,KAAA,CAAQ,CAAE,KAAA,CAAO,IAAK,CAAA,CAAI,EACxC,CAAA,CAGA,GAAI,OAAO,SAAA,CAAc,GAAA,EAAe,CAAC,SAAA,CAAU,MAAA,CACjD,OAAAD,EAAAA,CAAQ+B,CAAAA,CAAmD,QAAQ,CAAA,CAC5D,CACL,EAAA,CAAI1D,EAAAA,EAAW,CACf,MAAA,CAAQ,QAAA,CACR,SAAA,CAAW,IAAI,IAAA,EAAK,CAAE,WAAA,EACxB,CAAA,CAGF,GAAI,CACF,OAAO,MAAMmD,CAAAA,CAAwB,MAAA,CAAQ,YAAA,CAAcO,CAAW,CACxE,CAAA,MAASC,CAAAA,CAAK,CAEZ,GAAIA,CAAAA,YAAe,SAAA,EAAa,OAAO,SAAA,CAAc,GAAA,EAAe,CAAC,SAAA,CAAU,MAAA,CAC7E,OAAAhC,EAAAA,CAAQ+B,CAAAA,CAAmD,QAAQ,CAAA,CAC5D,CACL,EAAA,CAAI1D,EAAAA,EAAW,CACf,MAAA,CAAQ,QAAA,CACR,SAAA,CAAW,IAAI,MAAK,CAAE,WAAA,EACxB,CAAA,CAEF,MAAM2D,CACR,CACF,CAAA,CAKA,MAAM,qBAAA,CACJC,CAAAA,CACAC,CAAAA,CACkC,CAClC,IAAMzB,CAAAA,CAAM,CAAA,EAAGY,CAAO,CAAA,2BAAA,EAA8B,kBAAA,CAAmBY,CAAS,CAAC,CAAA,QAAA,EAAW,kBAAA,CAAmBC,CAAM,CAAC,CAAA,CAAA,CAElHtB,CAAAA,EACF,OAAA,CAAQ,GAAA,CAAI,+BAA+B,CAAA,CAG7C,IAAMG,CAAAA,CAAW,MAAMP,EAAAA,CACrBC,CAAAA,CACA,CACE,MAAA,CAAQ,KAAA,CACR,OAAA,CAAAc,CACF,CAAA,CACAhB,EAAAA,CACAK,CACF,CAAA,CAEMiB,CAAAA,CAAO,MAAMd,CAAAA,CAAS,IAAA,EAAK,CAEjC,GAAI,CAACA,CAAAA,CAAS,EAAA,CAAI,CAChB,IAAMC,CAAAA,CAAQa,CAAAA,CAAK,KAAA,CACnB,MAAIjB,CAAAA,EACF,OAAA,CAAQ,MAAM,CAAA,gBAAA,EAAmBI,CAAAA,CAAM,IAAI,CAAA,GAAA,EAAMA,CAAAA,CAAM,OAAO,CAAA,CAAE,CAAA,CAE5DA,CACR,CAEA,OAAIa,CAAAA,CAAK,MAAA,EACHjB,CAAAA,EACF,OAAA,CAAQ,GAAA,CAAI,mCAAA,CAAqCiB,CAAAA,CAAK,QAAQ,CAAA,CAEzDA,CAAAA,CAAK,QAAA,EAGP,IACT,CAAA,CAKA,MAAM,cAAA,CACJnD,CAAAA,CACAuB,CAAAA,CAOAiC,CAAAA,CACyB,CACzB,IAAMzB,CAAAA,CAAM,CAAA,EAAGY,CAAO,CAAA,WAAA,EAAc3C,CAAE,CAAA,EAAGwD,CAAAA,CAAS,CAAA,QAAA,EAAW,kBAAA,CAAmBA,CAAM,CAAC,CAAA,CAAA,CAAK,EAAE,CAAA,CAAA,CAE1FtB,CAAAA,EACF,OAAA,CAAQ,GAAA,CAAI,CAAA,0BAAA,EAA6BlC,CAAE,CAAA,CAAA,CAAIuB,CAAO,CAAA,CAGxD,IAAMc,CAAAA,CAAW,MAAMP,EAAAA,CACrBC,CAAAA,CACA,CACE,MAAA,CAAQ,OAAA,CACR,QAAAc,CAAAA,CACA,IAAA,CAAM,IAAA,CAAK,SAAA,CAAUtB,CAAO,CAC9B,CAAA,CACAM,EAAAA,CACAK,CACF,CAAA,CAEMiB,CAAAA,CAAO,MAAMd,CAAAA,CAAS,IAAA,EAAK,CAEjC,GAAI,CAACA,CAAAA,CAAS,EAAA,CAAI,CAChB,IAAMC,CAAAA,CAAQa,CAAAA,CAAK,KAAA,CACnB,MAAIjB,CAAAA,EACF,OAAA,CAAQ,KAAA,CAAM,CAAA,gBAAA,EAAmBI,CAAAA,CAAM,IAAI,CAAA,GAAA,EAAMA,CAAAA,CAAM,OAAO,CAAA,CAAE,CAAA,CAE5DA,CACR,CAEA,OAAIJ,CAAAA,EACF,OAAA,CAAQ,GAAA,CAAI,4BAAA,CAA8BiB,CAAI,CAAA,CAGzCA,CACT,CAAA,CAKA,MAAM,QAAA,CAASI,CAAAA,CAAuC,CACpD,IAAMxB,CAAAA,CAAM,CAAA,EAAGY,CAAO,CAAA,QAAA,EAAW,kBAAA,CAAmBY,CAAS,CAAC,CAAA,CAAA,CAE1DrB,CAAAA,EACF,OAAA,CAAQ,IAAI,CAAA,qBAAA,EAAwBqB,CAAS,CAAA,CAAE,CAAA,CAGjD,IAAMlB,CAAAA,CAAW,MAAMP,EAAAA,CACrBC,CAAAA,CACA,CACE,MAAA,CAAQ,KAAA,CACR,OAAA,CAAAc,CACF,CAAA,CACAhB,EAAAA,CACAK,CACF,CAAA,CAEMiB,CAAAA,CAAO,MAAMd,CAAAA,CAAS,IAAA,EAAK,CAEjC,GAAI,CAACA,CAAAA,CAAS,EAAA,CAAI,CAChB,IAAMC,CAAAA,CAAQa,EAAK,KAAA,CACnB,MAAIjB,CAAAA,EACF,OAAA,CAAQ,KAAA,CAAM,CAAA,gBAAA,EAAmBI,CAAAA,CAAM,IAAI,CAAA,GAAA,EAAMA,CAAAA,CAAM,OAAO,CAAA,CAAE,CAAA,CAE5DA,CACR,CAEA,OAAIJ,CAAAA,EACF,OAAA,CAAQ,GAAA,CAAI,iBAAA,CAAmBiB,CAAI,CAAA,CAG9BA,CACT,CAAA,CAKA,MAAM,SAAA,CAAUM,CAAAA,CAAmE,CACjF,IAAM1B,CAAAA,CAAM,GAAGY,CAAO,CAAA,WAAA,EAAc,kBAAA,CAAmBc,CAAU,CAAC,CAAA,IAAA,CAAA,CAE9DvB,CAAAA,EACF,OAAA,CAAQ,GAAA,CAAI,CAAA,yBAAA,EAA4BuB,CAAU,CAAA,IAAA,CAAM,CAAA,CAG1D,IAAMpB,CAAAA,CAAW,MAAMP,EAAAA,CACrBC,CAAAA,CACA,CACE,MAAA,CAAQ,MAAA,CACR,OAAA,CAAAc,CACF,CAAA,CACAhB,EAAAA,CACAK,CACF,CAAA,CAEMiB,CAAAA,CAAO,MAAMd,CAAAA,CAAS,IAAA,EAAK,CAEjC,GAAI,CAACA,CAAAA,CAAS,EAAA,CAAI,CAChB,IAAMC,CAAAA,CAAQa,CAAAA,CAAK,KAAA,CACnB,MAAIjB,CAAAA,EACF,OAAA,CAAQ,KAAA,CAAM,CAAA,gBAAA,EAAmBI,CAAAA,CAAM,IAAI,CAAA,GAAA,EAAMA,CAAAA,CAAM,OAAO,CAAA,CAAE,CAAA,CAE5DA,CACR,CAEA,OAAIJ,CAAAA,EACF,OAAA,CAAQ,GAAA,CAAI,uBAAA,CAAyBiB,CAAI,CAAA,CAGpCA,CACT,CAAA,CAKA,MAAM,UAAA,EAA4B,CAChC,GAAI,CAAAP,CAAAA,CACJ,CAAAA,CAAAA,CAAW,IAAA,CACX,GAAI,CACF,IAAM1B,CAAAA,CAAQQ,EAAAA,EAAe,CAC7B,IAAA,IAAWN,CAAAA,IAAQF,CAAAA,CACjB,GAAI,CACF,GAAIE,CAAAA,CAAK,IAAA,GAAS,QAAA,EAAYA,CAAAA,CAAK,OAAA,CAAQ,UAAA,CAAY,CACrD,GAAM,CAAE,UAAA,CAAAqC,CAAAA,CAAY,GAAGC,CAAc,CAAA,CAAItC,CAAAA,CAAK,OAAA,CAC9C,MAAM0B,CAAAA,CAAQ,OAAA,CAAS,CAAA,WAAA,EAAcW,CAAU,CAAA,CAAA,CAAIC,CAAa,EAClE,CAAA,KACE,MAAMZ,CAAAA,CAAQ,MAAA,CAAQ,YAAA,CAAc1B,CAAAA,CAAK,OAAO,CAAA,CAElDK,EAAAA,CAAQL,CAAAA,CAAK,EAAE,EACjB,CAAA,KAAQ,CACNQ,EAAAA,CAAiBR,EAAK,EAAE,EAC1B,CAEJ,CAAA,OAAE,CACAwB,CAAAA,CAAW,MACb,CAAA,CACF,CAAA,CAKA,cAAA,CAAAjB,EAAAA,CAKA,UAAA,EAAqB,CACnB,OAAOgB,CACT,CACF,CACF,CChYA,IAAMgB,EAAAA,CAAc,IAAI,GAAA,CAAI,CAAC,WAAA,CAAa,aAAA,CAAe,WAAW,CAAC,CAAA,CAG9D,SAASC,EAAAA,CAAUC,CAAAA,CAAWC,CAAAA,CAAoB,CACvD,IAAMC,CAAAA,CAAS,CAAE,GAAGF,CAAK,CAAA,CACzB,IAAA,IAAWrE,CAAAA,IAAO,MAAA,CAAO,IAAA,CAAKsE,CAAQ,CAAA,CAAG,CACvC,GAAIH,EAAAA,CAAY,GAAA,CAAInE,CAAG,CAAA,CAAG,SAC1B,IAAMwE,CAAAA,CAAMF,CAAAA,CAAStE,CAAG,CAAA,CACCwE,CAAAA,EAAQ,IAAA,EAAQ,OAAOA,CAAAA,EAAQ,QAAA,EAAY,CAAC,KAAA,CAAM,OAAA,CAAQA,CAAG,CAAA,CACpFD,CAAAA,CAAOvE,CAAG,CAAA,CAAIoE,EAAAA,CAAUC,CAAAA,CAAKrE,CAAG,CAAA,EAAK,EAAC,CAAGwE,CAAG,CAAA,CACnCA,CAAAA,GAAQ,MAAA,GACjBD,CAAAA,CAAOvE,CAAG,CAAA,CAAIwE,CAAAA,EAElB,CACA,OAAOD,CACT,CCsHA,IAAME,EAAAA,CAAa,CACjB,SAAA,CAAW,SAAA,CAAW,UAAW,SAAA,CAAW,SAAA,CAC5C,SAAA,CAAW,SAAA,CAAW,SAAA,CAAW,SAAA,CAAW,SAAA,CAAW,SACzD,CAAA,CAGaC,EAAAA,CAA8B,CACzC,MAAA,CAAQ,CACN,OAAA,CAAS,SAAA,CACT,YAAA,CAAc,SAAA,CACd,WAAA,CAAa,SAAA,CACb,UAAA,CAAY,SAAA,CACZ,kBAAA,CAAoB,mDAAA,CACpB,OAAA,CAAS,SAAA,CACT,YAAA,CAAc,SAAA,CACd,IAAA,CAAM,SAAA,CACN,aAAA,CAAe,UACf,YAAA,CAAc,SAAA,CACd,MAAA,CAAQ,SAAA,CACR,WAAA,CAAa,SAAA,CACb,OAAA,CAAS,SAAA,CACT,cAAA,CAAgB,sBAAA,CAChB,KAAA,CAAO,SAAA,CACP,YAAA,CAAc,SAAA,CACd,WAAA,CAAa,qBAAA,CACb,OAAA,CAAS,SAAA,CACT,aAAA,CAAe,SAAA,CACf,cAAA,CAAgB,uBAAA,CAChB,aAAA,CAAe,sBAAA,CACf,UAAA,CAAY,SAAA,CACZ,SAAA,CAAW,SAAA,CACX,MAAA,CAAQ,SAAA,CACR,aAAA,CAAe,uBAAA,CACf,YAAA,CAAc,uBAAA,CACd,QAAA,CAAU,SAAA,CACV,eAAA,CAAiB,sBAAA,CACjB,cAAA,CAAgB,sBAAA,CAChB,SAAA,CAAWD,EAAAA,CACX,gBAAA,CAAkB,SAAA,CAClB,qBAAA,CAAuB,SAAA,CACvB,wBAAA,CAA0B,SAAA,CAC1B,WAAA,CAAa,SAAA,CACb,mBAAA,CAAqB,SAAA,CACrB,YAAA,CAAc,MAAA,CACd,YAAA,CAAc,MAAA,CACd,aAAA,CAAe,iBAAA,CACf,WAAA,CAAa,SAAA,CACb,gBAAA,CAAkB,SAAA,CAClB,cAAe,kBAAA,CACf,eAAA,CAAiB,0GAAA,CACjB,WAAA,CAAa,MAAA,CACb,UAAA,CAAY,kBAAA,CACZ,WAAA,CAAa,sDAAA,CACb,gBAAA,CAAkB,uDAAA,CAClB,eAAA,CAAiB,SAAA,CACjB,oBAAA,CAAsB,SAAA,CACtB,WAAA,CAAa,SAAA,CACb,gBAAA,CAAkB,SAAA,CAClB,cAAA,CAAgB,qBAAA,CAChB,UAAA,CAAY,SAAA,CACZ,kBAAA,CAAoB,qBAAA,CACpB,cAAA,CAAgB,SAAA,CAChB,sBAAA,CAAwB,qBAAA,CACxB,SAAA,CAAW,UACX,iBAAA,CAAmB,SAAA,CACnB,eAAA,CAAiB,SAAA,CACjB,uBAAA,CAAyB,SAAA,CACzB,mBAAA,CAAqB,SACvB,CAAA,CACA,UAAA,CAAY,CACV,UAAA,CAAY,8EAAA,CACZ,QAAA,CAAU,CAAE,EAAA,CAAI,EAAA,CAAI,EAAA,CAAI,EAAA,CAAI,EAAA,CAAI,EAAA,CAAI,EAAA,CAAI,EAAG,CAAA,CAC3C,UAAA,CAAY,CAAE,MAAA,CAAQ,GAAA,CAAK,MAAA,CAAQ,GAAA,CAAK,SAAU,GAAA,CAAK,IAAA,CAAM,GAAI,CACnE,CAAA,CACA,OAAA,CAAS,CACP,MAAA,CAAQ,CAAE,EAAA,CAAI,CAAA,CAAG,EAAA,CAAI,EAAA,CAAI,EAAA,CAAI,EAAA,CAAI,IAAA,CAAM,KAAM,CAAA,CAC7C,KAAA,CAAO,CACT,CAAA,CACA,OAAA,CAAS,CACP,EAAA,CAAI,4BAAA,CACJ,EAAA,CAAI,6BAAA,CACJ,EAAA,CAAI,8BAAA,CACJ,KAAA,CAAO,qHAAA,CACP,MAAA,CAAQ,4BACV,CAAA,CACA,SAAA,CAAW,CACT,QAAA,CAAU,CAAE,IAAA,CAAM,OAAA,CAAS,MAAA,CAAQ,OAAA,CAAS,IAAA,CAAM,MAAO,CAAA,CACzD,MAAA,CAAQ,CACN,OAAA,CAAS,8BAAA,CACT,MAAA,CAAQ,mCACV,CACF,CACF,CAAA,CAGaE,EAAAA,CAA6B,CACxC,MAAA,CAAQ,CACN,OAAA,CAAS,SAAA,CACT,YAAA,CAAc,SAAA,CACd,YAAa,SAAA,CACb,UAAA,CAAY,SAAA,CACZ,kBAAA,CAAoB,mDAAA,CACpB,OAAA,CAAS,oBAAA,CACT,YAAA,CAAc,oBAAA,CACd,IAAA,CAAM,SAAA,CACN,aAAA,CAAe,SAAA,CACf,YAAA,CAAc,SAAA,CACd,MAAA,CAAQ,wBAAA,CACR,WAAA,CAAa,uBAAA,CACb,OAAA,CAAS,SAAA,CACT,cAAA,CAAgB,sBAAA,CAChB,KAAA,CAAO,SAAA,CACP,YAAA,CAAc,qBAAA,CACd,WAAA,CAAa,uBAAA,CACb,OAAA,CAAS,UACT,aAAA,CAAe,SAAA,CACf,cAAA,CAAgB,uBAAA,CAChB,aAAA,CAAe,sBAAA,CACf,UAAA,CAAY,SAAA,CACZ,SAAA,CAAW,wBAAA,CACX,MAAA,CAAQ,SAAA,CACR,aAAA,CAAe,uBAAA,CACf,YAAA,CAAc,sBAAA,CACd,QAAA,CAAU,SAAA,CACV,eAAA,CAAiB,sBAAA,CACjB,cAAA,CAAgB,qBAAA,CAChB,SAAA,CAAWF,EAAAA,CACX,gBAAA,CAAkB,SAAA,CAClB,qBAAA,CAAuB,SAAA,CACvB,wBAAA,CAA0B,SAAA,CAC1B,YAAa,SAAA,CACb,mBAAA,CAAqB,SAAA,CACrB,YAAA,CAAc,MAAA,CACd,YAAA,CAAc,MAAA,CACd,aAAA,CAAe,iBAAA,CACf,WAAA,CAAa,SAAA,CACb,gBAAA,CAAkB,SAAA,CAClB,aAAA,CAAe,wBAAA,CACf,eAAA,CAAiB,uGAAA,CACjB,WAAA,CAAa,kCAAA,CACb,UAAA,CAAY,wBAAA,CACZ,WAAA,CAAa,yDAAA,CACb,gBAAA,CAAkB,wDAAA,CAClB,eAAA,CAAiB,oBAAA,CACjB,oBAAA,CAAsB,oBAAA,CACtB,WAAA,CAAa,wBAAA,CACb,gBAAA,CAAkB,uBAAA,CAClB,cAAA,CAAgB,wBAAA,CAChB,UAAA,CAAY,wBAAA,CACZ,kBAAA,CAAoB,wBAAA,CACpB,cAAA,CAAgB,oBAAA,CAChB,sBAAA,CAAwB,wBAAA,CACxB,SAAA,CAAW,SAAA,CACX,iBAAA,CAAmB,SAAA,CACnB,eAAA,CAAiB,uBAAA,CACjB,uBAAA,CAAyB,SAAA,CACzB,mBAAA,CAAqB,SACvB,CAAA,CACA,UAAA,CAAY,CACV,UAAA,CAAY,8EAAA,CACZ,QAAA,CAAU,CAAE,EAAA,CAAI,EAAA,CAAI,GAAI,EAAA,CAAI,EAAA,CAAI,EAAA,CAAI,EAAA,CAAI,EAAG,CAAA,CAC3C,UAAA,CAAY,CAAE,MAAA,CAAQ,GAAA,CAAK,MAAA,CAAQ,GAAA,CAAK,QAAA,CAAU,GAAA,CAAK,IAAA,CAAM,GAAI,CACnE,CAAA,CACA,OAAA,CAAS,CACP,MAAA,CAAQ,CAAE,EAAA,CAAI,CAAA,CAAG,EAAA,CAAI,EAAA,CAAI,EAAA,CAAI,EAAA,CAAI,IAAA,CAAM,KAAM,EAC7C,KAAA,CAAO,CACT,CAAA,CACA,OAAA,CAAS,CACP,EAAA,CAAI,2BAAA,CACJ,EAAA,CAAI,4BAAA,CACJ,EAAA,CAAI,6BAAA,CACJ,KAAA,CAAO,kHAAA,CACP,MAAA,CAAQ,4BACV,CAAA,CACA,SAAA,CAAW,CACT,QAAA,CAAU,CAAE,IAAA,CAAM,OAAA,CAAS,MAAA,CAAQ,OAAA,CAAS,IAAA,CAAM,MAAO,CAAA,CACzD,MAAA,CAAQ,CACN,OAAA,CAAS,+BACT,MAAA,CAAQ,mCACV,CACF,CACF,CAAA,CAOO,SAASG,EAAAA,CACdP,CAAAA,CACAQ,CAAAA,CACmB,CAEnB,OAAOT,EAAAA,CADQC,CAAAA,GAAS,MAAA,CAASM,EAAAA,CAAcD,EAAAA,CACtBG,CAAS,CACpC,CChUO,SAASC,EAAAA,CACdC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACe,CAEf,IAAIC,CAAAA,CAAAA,CADmBH,CAAAA,GAAU,MAAA,EAAUA,CAAAA,GAAU,QAAA,CAAWC,CAAAA,CAAcD,CAAAA,IAC7B,MAAA,CAC7CX,EAAAA,CAAU,EAAC,CAAGO,EAAW,CAAA,CACzBP,EAAAA,CAAU,EAAC,CAAGM,EAAY,CAAA,CAE9B,OAAIO,CAAAA,GACFC,CAAAA,CAAWd,EAAAA,CAAUc,CAAAA,CAAUD,CAAc,CAAA,CAAA,CAGxCC,CACT,CCpBA,IAAMC,EAAAA,CAAW,eAAA,CACXC,EAAAA,CAAU,gBAAA,CACVC,EAAAA,CAAe,mBAAA,CAOfC,EAAAA,CAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAAA,CAQ1B,IAAA,GAOH,SAASC,EAAAA,EAAuB,CAE9B,GADI,OAAO,SAAa,GAAA,EACpB,QAAA,CAAS,eAAeF,EAAY,CAAA,CAAG,OAE3C,IAAMG,CAAAA,CAAQ,SAAS,aAAA,CAAc,OAAO,EAC5CA,CAAAA,CAAM,EAAA,CAAKH,GACXG,CAAAA,CAAM,WAAA,CAAcF,GACpB,QAAA,CAAS,IAAA,CAAK,YAAYE,CAAK,EACjC,CAGAD,EAAAA,EAAe,CAGf,SAASE,EAAAA,CAAYvF,CAAAA,CAAuB,CAC1C,OAAOA,CAAAA,CAAM,QAAQ,aAAA,CAAe,EAAE,CACxC,CAKO,SAASwF,EAAAA,CAAiBX,EAA8B,CAC7D,IAAMY,EAAS,CACb,OAAA,CAASF,GAAYV,CAAAA,CAAM,SAAA,CAAU,OAAO,OAAO,CAAA,CACnD,OAAQU,EAAAA,CAAYV,CAAAA,CAAM,UAAU,MAAA,CAAO,MAAM,CACnD,CAAA,CACMa,CAAAA,CAAW,CACf,MAAA,CAAQH,EAAAA,CAAYV,CAAAA,CAAM,UAAU,QAAA,CAAS,MAAM,CACrD,CAAA,CACMc,CAAAA,CAAaJ,GAAYV,CAAAA,CAAM,UAAA,CAAW,UAAU,CAAA,CACpDe,CAAAA,CAAeL,GAAYV,CAAAA,CAAM,MAAA,CAAO,YAAY,CAAA,CACpDgB,CAAAA,CAAcN,GAAYV,CAAAA,CAAM,MAAA,CAAO,MAAM,CAAA,CAEnD,OAAO;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,eAAA,EAiGQc,CAAU,CAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,wBAAA,EAeDE,CAAW,CAAA;AAAA;;AAAA;AAAA,SAAA,EAI1BD,CAAY,CAAA;AAAA;;AAAA;;AAAA;AAAA,4BAAA,EAMOF,CAAAA,CAAS,MAAM,CAAA,CAAA,EAAID,CAAAA,CAAO,OAAO,CAAA;AAAA;;AAAA;AAAA,kCAAA,EAI3BA,EAAO,MAAM,CAAA;AAAA;;AAAA;AAAA,wCAAA,EAIPA,EAAO,MAAM,CAAA;AAAA;;AAAA;AAAA,yCAAA,EAIZA,EAAO,MAAM,CAAA;AAAA;;AAAA;AAAA,oCAAA,EAIlBA,EAAO,OAAO,CAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAYlD,IAAA,EACF,CAKO,SAASK,EAAAA,CAAajB,CAAAA,CAA4B,CACvD,GAAI,OAAO,QAAA,CAAa,GAAA,CAAa,OAGrC,GAAI,CAAC,QAAA,CAAS,cAAA,CAAeK,EAAO,CAAA,CAAG,CAErC,IAAMa,CAAAA,CAAa,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA,CAChDA,CAAAA,CAAW,GAAA,CAAM,YAAA,CACjBA,EAAW,IAAA,CAAO,8BAAA,CAClB,QAAA,CAAS,IAAA,CAAK,WAAA,CAAYA,CAAU,CAAA,CAEpC,IAAMC,CAAAA,CAAmB,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA,CACtDA,CAAAA,CAAiB,GAAA,CAAM,YAAA,CACvBA,EAAiB,IAAA,CAAO,2BAAA,CACxBA,CAAAA,CAAiB,WAAA,CAAc,WAAA,CAC/B,QAAA,CAAS,IAAA,CAAK,WAAA,CAAYA,CAAgB,CAAA,CAG1C,IAAMC,CAAAA,CAAO,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA,CAC1CA,EAAK,EAAA,CAAKf,EAAAA,CACVe,CAAAA,CAAK,GAAA,CAAM,YAAA,CACXA,CAAAA,CAAK,IAAA,CAAO,sGAAA,CACZ,QAAA,CAAS,IAAA,CAAK,WAAA,CAAYA,CAAI,EAChC,CAGA,IAAIC,CAAAA,CAAU,SAAS,cAAA,CAAejB,EAAQ,CAAA,CACzCiB,CAAAA,GACHA,CAAAA,CAAU,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA,CACxCA,CAAAA,CAAQ,EAAA,CAAKjB,EAAAA,CACb,QAAA,CAAS,IAAA,CAAK,WAAA,CAAYiB,CAAO,GAEnCA,CAAAA,CAAQ,WAAA,CAAcV,EAAAA,CAAiBX,CAAK,EAC9C,CClNA,IAAMsB,EAAAA,CAAgBC,mBAAAA,CAAyC,IAAI,CAAA,CAE7DC,EAAAA,CAAyB,GAExB,SAASC,EAAAA,CAAe,CAC7B,MAAA,CAAAtD,CAAAA,CACA,QAAA,CAAAuD,CAAAA,CACA,OAAA,CAAAtD,CAAAA,CACA,KAAA,CAAAT,CAAAA,CAAQ,KAAA,CACR,QAAA,CAAAgE,CAAAA,CAAW,KAAA,CACX,WAAA,CAAAC,EACA,WAAA,CAAAC,CACF,CAAA,CAAwB,CACtB,GAAM,CAACC,CAAAA,CAAeC,CAAgB,CAAA,CAAIC,cAAAA,CAAwB,IAAI,CAAA,CAElE5D,CAAAA,EAAW,CAACA,CAAAA,CAAQ,UAAA,CAAW,UAAU,CAAA,EAAK,CAACA,CAAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAK,CAACA,CAAAA,CAAQ,QAAA,CAAS,WAAW,CAAA,EACzG,OAAA,CAAQ,IAAA,CAAK,kDAAA,CAAoDA,CAAO,EAG1E,IAAM6D,CAAAA,CAASC,aAAAA,CACb,IAAMhE,EAAAA,CAAgB,CAAE,MAAA,CAAAC,CAAAA,CAAQ,OAAA,CAAAC,CAAAA,CAAS,KAAA,CAAAT,CAAM,CAAC,CAAA,CAChD,CAACQ,CAAAA,CAAQC,EAAST,CAAK,CACzB,CAAA,CAGMwE,CAAAA,CAAoBD,aAAAA,CACxB,IAAMN,CAAAA,EAAeJ,EAAAA,CAErB,CAAC,IAAA,CAAK,SAAA,CAAUI,CAAW,CAAC,CAC9B,CAAA,CAIAQ,eAAAA,CAAU,IAAM,CACd,IAAMjC,CAAAA,CAAWJ,EAAAA,CAAa,OAAA,CAAS,OAAA,CAAS8B,CAAW,CAAA,CAC3DZ,EAAAA,CAAad,CAAQ,EACvB,CAAA,CAAG,CAAC0B,CAAW,CAAC,CAAA,CAGhBO,gBAAU,KACRjG,EAAAA,EAAkB,CACX,IAAMC,EAAAA,EAAiB,CAAA,CAC7B,EAAE,CAAA,CAGLgG,eAAAA,CAAU,IAAM,CACdH,CAAAA,CAAO,UAAA,EAAW,CAClB,IAAMI,EAAe,IAAMJ,CAAAA,CAAO,UAAA,EAAW,CAC7C,OAAA,MAAA,CAAO,gBAAA,CAAiB,QAAA,CAAUI,CAAY,CAAA,CACvC,IAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUA,CAAY,CAChE,CAAA,CAAG,CAACJ,CAAM,CAAC,CAAA,CAEX,IAAMK,CAAAA,CAAYC,iBAAAA,CAAavD,CAAAA,EAAsB,CACnD+C,CAAAA,CAAiB/C,CAAS,EAC5B,CAAA,CAAG,EAAE,CAAA,CAECwD,CAAAA,CAAaD,kBAAY,IAAM,CACnCR,CAAAA,CAAiB,IAAI,EACvB,CAAA,CAAG,EAAE,CAAA,CAEC5G,CAAAA,CAA4B+G,aAAAA,CAChC,KAAO,CACL,MAAA,CAAAD,CAAAA,CACA,QAAA,CAAAN,CAAAA,CACA,WAAA,CAAaQ,CAAAA,CACb,KAAA,CAAAxE,CAAAA,CACA,aAAA,CAAAmE,CAAAA,CACA,SAAA,CAAAQ,CAAAA,CACA,UAAA,CAAAE,CAAAA,CACA,WAAA,CAAAX,CACF,CAAA,CAAA,CACA,CAACI,CAAAA,CAAQN,EAAUQ,CAAAA,CAAmBxE,CAAAA,CAAOmE,CAAAA,CAAeQ,CAAAA,CAAWE,CAAAA,CAAYX,CAAW,CAChG,CAAA,CAEA,OACEY,cAAAA,CAACnB,EAAAA,CAAc,QAAA,CAAd,CAAuB,KAAA,CAAOnG,CAAAA,CAAQ,QAAA,CAAAuG,EAAS,CAEpD,CAEO,SAASgB,CAAAA,EAAuC,CACrD,IAAMC,CAAAA,CAAUC,gBAAAA,CAAWtB,EAAa,CAAA,CACxC,GAAI,CAACqB,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,uDAAuD,CAAA,CAEzE,OAAOA,CACT,CCjGA,SAASE,EAAAA,CAAkBC,CAAAA,CAAmBC,CAAAA,CAA+B,CAC3E,IAAMC,CAAAA,CAAc,IAAI,IAAA,CAAKF,CAAS,CAAA,CAAE,OAAA,EAAQ,CAChD,GAAI,KAAA,CAAME,CAAW,CAAA,CAAG,OAAO,KAAA,CAC/B,IAAMC,CAAAA,CAAQ,IAAA,CAAK,GAAA,EAAI,CAAID,EACrBE,CAAAA,CAAaH,CAAAA,CAAe,EAAA,CAAK,EAAA,CAAK,EAAA,CAAK,GAAA,CACjD,OAAOE,CAAAA,EAASC,CAClB,CAEO,SAASC,EAAAA,CAAU1F,CAAAA,CAA2B,CACnD,GAAM,CAAE,OAAAwE,CAAAA,CAAQ,WAAA,CAAAL,CAAY,CAAA,CAAIc,CAAAA,EAAiB,CAC3C,CAACU,CAAAA,CAAWC,CAAY,CAAA,CAAIrB,cAAAA,CAAS,KAAK,CAAA,CAC1C,CAACsB,CAAAA,CAAoBC,CAAqB,CAAA,CAAIvB,cAAAA,CAAS,KAAK,CAAA,CAC5D,CAACjE,CAAAA,CAAOyF,CAAQ,CAAA,CAAIxB,cAAAA,CAAwB,IAAI,CAAA,CAChD,CAACyB,CAAAA,CAAkBC,CAAmB,CAAA,CAAI1B,cAAAA,CAAkC,IAAI,CAAA,CAGtF,OAAAI,eAAAA,CAAU,IAAM,CACV,OAAA,CAAQ,GAAA,CAAI,QAAA,GAAa,YAAA,EAAgB3E,CAAAA,CAAQ,YAAA,EAAgB,CAACA,CAAAA,CAAQ,UAAA,EAC5E,OAAA,CAAQ,IAAA,CAAK,6DAA6D,CAAA,CAG5E,IAAMwB,CAAAA,CAASxB,CAAAA,CAAQ,IAAA,EAAM,EAAA,EAAMmE,CAAAA,EAAa,EAAA,CAChD,GAAI,CAAC3C,CAAAA,EAAU,CAACxB,CAAAA,CAAQ,UAAA,CAAY,CAClCiG,CAAAA,CAAoB,IAAI,CAAA,CACxB,MACF,CAEA,IAAIC,CAAAA,CAAY,KAAA,CA0BhB,OAAA,CAxBsB,SAAY,CAChCJ,CAAAA,CAAsB,IAAI,CAAA,CAC1B,GAAI,CACF,IAAMK,CAAAA,CAAW,MAAM3B,CAAAA,CAAO,qBAAA,CAAsBxE,CAAAA,CAAQ,SAAA,CAAWwB,CAAM,CAAA,CACxE0E,CAAAA,GACCC,CAAAA,EAAYnG,CAAAA,CAAQ,YAAA,EAAgBA,CAAAA,CAAQ,YAAA,CAAe,CAAA,EAC3DoF,EAAAA,CAAkBe,CAAAA,CAAS,SAAA,CAAWnG,EAAQ,YAAY,CAAA,CAC5DiG,CAAAA,CAAoB,IAAI,CAAA,CAExBA,CAAAA,CAAoBE,CAAQ,CAAA,EAGlC,CAAA,KAAQ,CAEDD,CAAAA,EACHD,CAAAA,CAAoB,IAAI,EAE5B,CAAA,OAAE,CACKC,GACHJ,CAAAA,CAAsB,KAAK,EAE/B,CACF,CAAA,GAEc,CAEP,IAAM,CACXI,CAAAA,CAAY,KACd,CACF,CAAA,CAAG,CAAC1B,CAAAA,CAAQxE,CAAAA,CAAQ,SAAA,CAAWA,EAAQ,IAAA,EAAM,EAAA,CAAImE,CAAAA,EAAa,EAAA,CAAInE,CAAAA,CAAQ,UAAA,CAAYA,CAAAA,CAAQ,YAAY,CAAC,CAAA,CAoEpG,CACL,MAAA,CAnEa8E,iBAAAA,CACb,MAAO3D,CAAAA,EAAqB,CAC1ByE,CAAAA,CAAa,IAAI,CAAA,CACjBG,CAAAA,CAAS,IAAI,CAAA,CAEb,GAAI,CACF,IAAMvE,CAAAA,CAASxB,CAAAA,CAAQ,IAAA,EAAM,EAAA,EAAMmE,CAAAA,EAAa,EAAA,CAC5C9D,CAAAA,CAGJ,OAAIL,CAAAA,CAAQ,UAAA,EAAcgG,CAAAA,EAAoBxE,CAAAA,CAC5CnB,CAAAA,CAAW,MAAMmE,CAAAA,CAAO,cAAA,CACtBwB,CAAAA,CAAiB,EAAA,CACjB,CACE,OAAA,CAAS7E,CAAAA,CAAK,OAAA,CACd,KAAA,CAAOA,CAAAA,CAAK,MACZ,MAAA,CAAQA,CAAAA,CAAK,MAAA,CACb,IAAA,CAAMA,CAAAA,CAAK,IAAA,CACX,YAAA,CAAcA,CAAAA,CAAK,YACrB,CAAA,CACAK,CACF,CAAA,CAEAnB,CAAAA,CAAW,MAAMmE,CAAAA,CAAO,cAAA,CAAe,CACrC,SAAA,CAAWxE,CAAAA,CAAQ,SAAA,CACnB,IAAA,CAAMA,CAAAA,CAAQ,IAAA,CACd,OAAA,CAASmB,CAAAA,CAAK,OAAA,CACd,KAAA,CAAOA,CAAAA,CAAK,KAAA,CACZ,MAAA,CAAQA,CAAAA,CAAK,MAAA,CACb,IAAA,CAAMA,EAAK,IAAA,CACX,WAAA,CAAanB,CAAAA,CAAQ,WAAA,CACrB,YAAA,CAAcmB,CAAAA,CAAK,YAAA,CACnB,KAAA,CAAOA,CAAAA,CAAK,KAAA,CACZ,UAAA,CAAYA,CAAAA,CAAK,UAAA,CACjB,IAAA,CAAM,CAAE,GAAGgD,EAAa,GAAGnE,CAAAA,CAAQ,IAAK,CAC1C,CAAC,CAAA,CAICA,CAAAA,CAAQ,UAAA,EACViG,CAAAA,CAAoB,CAClB,EAAA,CAAI5F,CAAAA,CAAS,EAAA,CACb,IAAA,CAAML,CAAAA,CAAQ,IAAA,CACd,QAASmB,CAAAA,CAAK,OAAA,EAAW,IAAA,CACzB,KAAA,CAAOA,CAAAA,CAAK,KAAA,EAAS,IAAA,CACrB,MAAA,CAAQA,CAAAA,CAAK,MAAA,EAAU,IAAA,CACvB,IAAA,CAAMA,CAAAA,CAAK,IAAA,EAAQ,IAAA,CACnB,YAAA,CAAcA,EAAK,YAAA,EAAgB,IAAA,CACnC,SAAA,CAAWd,CAAAA,CAAS,SACtB,CAAC,CAAA,CAGHL,CAAAA,CAAQ,SAAA,GAAYK,CAAQ,CAAA,CACrBA,CACT,CAAA,MAASiB,CAAAA,CAAK,CACZ,IAAM8E,CAAAA,CAAe9E,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAI,OAAA,CAAU,sBAAA,CAC1D,MAAAyE,CAAAA,CAASK,CAAY,CAAA,CACrBpG,CAAAA,CAAQ,OAAA,GAAUsB,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,MAAM8E,CAAY,CAAC,CAAA,CAChE9E,CACR,CAAA,OAAE,CACAsE,CAAAA,CAAa,KAAK,EACpB,CACF,CAAA,CACA,CAACpB,CAAAA,CAAQL,CAAAA,CAAanE,CAAAA,CAASgG,CAAgB,CACjD,CAAA,CAIE,SAAA,CAAAL,CAAAA,CACA,kBAAA,CAAAE,CAAAA,CACA,KAAA,CAAAvF,CAAAA,CACA,gBAAA,CAAA0F,CAAAA,CACA,SAAA,CAAW,CAAC,CAACA,CAAAA,CACb,UAAA,CAAY,IAAMD,CAAAA,CAAS,IAAI,CACjC,CACF,CCtJA,SAASM,EAAAA,CAAc9E,CAAAA,CAAmBC,EAAwB,CAChE,OAAO,CAAA,EAAGpE,CAAAA,CAAa,YAAY,CAAA,CAAA,EAAImE,CAAS,CAAA,CAAA,EAAIC,CAAM,CAAA,CAC5D,CAEA,SAAS8E,EAAAA,CAAc/E,CAAAA,CAAmBgF,CAAAA,CAAwBC,CAAAA,CAAuC,CACvG,GAAI,CAACA,CAAAA,EAAuBA,CAAAA,EAAuB,CAAA,CAAG,OAAO,MAAA,CAC7D,IAAMhJ,CAAAA,CAAM6I,EAAAA,CAAc9E,CAAAA,CAAWgF,CAAc,CAAA,CAC7CE,CAAAA,CAAiBlJ,CAAAA,CAAYC,CAAG,EACtC,OAAKiJ,CAAAA,CACE,IAAI,IAAA,CAAKA,CAAc,CAAA,CAAE,OAAA,EAAQ,CAAI,IAAA,CAAK,GAAA,EAAI,CADzB,KAE9B,CAEO,SAASC,EAAAA,CAAmB1G,CAAAA,CAAoC,CACrE,GAAM,CAAE,SAAA,CAAAuB,CAAAA,CAAW,MAAA,CAAAC,CAAAA,CAAQ,mBAAA,CAAAgF,CAAoB,CAAA,CAAIxG,CAAAA,CAC7CuG,CAAAA,CAAiB9B,aAAAA,CAAQ,IAAMjD,CAAAA,EAAU1D,EAAAA,EAAe,CAAG,CAAC0D,CAAM,CAAC,CAAA,CAEnE,CAACmF,CAAAA,CAAUC,CAAW,CAAA,CAAIrC,cAAAA,CAAS,IACvC+B,EAAAA,CAAc/E,CAAAA,CAAWgF,CAAAA,CAAgBC,CAAmB,CAC9D,CAAA,CAGA7B,gBAAU,IAAM,CACdiC,CAAAA,CAAYN,EAAAA,CAAc/E,CAAAA,CAAWgF,CAAAA,CAAgBC,CAAmB,CAAC,EAC3E,CAAA,CAAG,CAACjF,CAAAA,CAAWgF,CAAAA,CAAgBC,CAAmB,CAAC,CAAA,CAEnD,IAAMK,CAAAA,CAAa/B,iBAAAA,CAAY,IAAM,CACnC,GAAI,CAAC0B,CAAAA,EAAuBA,CAAAA,EAAuB,CAAA,CAAG,OAEtD,IAAMhJ,CAAAA,CAAM6I,EAAAA,CAAc9E,CAAAA,CAAWgF,CAAc,CAAA,CAC7CO,EAAc,IAAI,IAAA,CACtB,IAAA,CAAK,GAAA,EAAI,CAAIN,CAAAA,CAAsB,EAAA,CAAK,EAAA,CAAK,EAAA,CAAK,GACpD,CAAA,CACA/I,EAAAA,CAAYD,CAAAA,CAAKsJ,CAAAA,CAAY,WAAA,EAAa,EAC1CF,CAAAA,CAAY,IAAI,EAClB,CAAA,CAAG,CAACrF,CAAAA,CAAWgF,CAAAA,CAAgBC,CAAmB,CAAC,CAAA,CAEnD,OAAO,CAAE,QAAA,CAAAG,CAAAA,CAAU,UAAA,CAAAE,CAAW,CAChC,CCrCA,SAASE,EAAAA,CAAYxF,CAAAA,CAA2B,CAC9C,OAAO,CAAA,EAAGnE,CAAAA,CAAa,WAAW,CAAA,CAAA,EAAImE,CAAS,CAAA,CACjD,CAEO,SAASyF,EAAAA,CAAqBhH,CAAAA,CAAsC,CACzE,GAAM,CAAE,SAAA,CAAAuB,CAAAA,CAAW,gBAAA,CAAA0F,CAAAA,CAAkB,sBAAA,CAAAC,CAAAA,CAAwB,eAAA,CAAAC,CAAgB,EAAInH,CAAAA,CAE3EoH,CAAAA,CAAgBH,CAAAA,EAAoB,IAAA,EAAQC,CAAAA,EAA0B,IAAA,EAAQC,CAAAA,EAAmB,IAAA,CAEjG,CAACE,CAAAA,CAASC,CAAU,CAAA,CAAI/C,cAAAA,CAAS,CAAC0C,CAAgB,CAAA,CAClD,CAACM,CAAAA,CAAWC,CAAY,CAAA,CAAIjD,cAAAA,CAAS,CAAC2C,CAAsB,CAAA,CAC5D,CAACO,CAAS,CAAA,CAAIlD,cAAAA,CAAS,IAAM,CACjC,GAAI,CAAC4C,EAAiB,OAAO,KAAA,CAC7B,IAAM3J,CAAAA,CAAMuJ,EAAAA,CAAYxF,CAAS,CAAA,CAE3BmG,CAAAA,CADU,QAAA,CAASnK,CAAAA,CAAYC,CAAG,CAAA,EAAK,GAAA,CAAK,EAAE,CAAA,CAC7B,CAAA,CACvB,OAAAC,EAAAA,CAAYD,CAAAA,CAAK,MAAA,CAAOkK,CAAI,CAAC,CAAA,CACtBA,CAAAA,EAAQP,CACjB,CAAC,CAAA,CAGD,OAAAxC,eAAAA,CAAU,IAAM,CACd,GAAI,CAACsC,GAAoBA,CAAAA,EAAoB,CAAA,CAAG,OAEhD,IAAMU,CAAAA,CAAQ,IAAA,CAAK,GAAA,EAAI,CACjBC,CAAAA,CAAWX,CAAAA,CAAmB,GAAA,CAE9BY,CAAAA,CAAQ,IAAM,CACd,IAAA,CAAK,GAAA,GAAQF,CAAAA,EAASC,CAAAA,CACxBN,CAAAA,CAAW,IAAI,CAAA,CAEfQ,CAAAA,CAAQ,UAAA,CAAWD,CAAAA,CAAO,IAAA,CAAK,GAAA,CAAI,GAAA,CAAMD,CAAAA,EAAY,IAAA,CAAK,GAAA,EAAI,CAAID,CAAAA,CAAM,CAAC,EAE7E,CAAA,CAEIG,CAAAA,CAAQ,UAAA,CAAWD,CAAAA,CAAO,IAAA,CAAK,GAAA,CAAI,GAAA,CAAMD,CAAQ,CAAC,CAAA,CACtD,OAAO,IAAM,YAAA,CAAaE,CAAK,CACjC,EAAG,CAACb,CAAgB,CAAC,CAAA,CAGrBtC,eAAAA,CAAU,IAAM,CACd,GAAI,CAACuC,CAAAA,EAA0BA,CAAAA,EAA0B,CAAA,CAAG,OAE5D,IAAMa,CAAAA,CAAc,IAAM,CACxB,IAAMC,CAAAA,CAAe,QAAA,CAAS,eAAA,CAAgB,YAAA,CACxCC,CAAAA,CAAiB,MAAA,CAAO,WAAA,CAG9B,GAAID,CAAAA,EAAgBC,CAAAA,CAAgB,CAClCT,CAAAA,CAAa,IAAI,CAAA,CACjB,MACF,CAAA,CAEkB,MAAA,CAAO,OAAA,CAAUS,CAAAA,EAAkBD,CAAAA,CAAe,GAAA,EACpDd,CAAAA,EACdM,CAAAA,CAAa,IAAI,EAErB,CAAA,CAGA,GADAO,CAAAA,EAAY,CACR,CAACR,CAAAA,CACH,cAAO,gBAAA,CAAiB,QAAA,CAAUQ,CAAAA,CAAa,CAAE,OAAA,CAAS,IAAK,CAAC,CAAA,CACzD,IAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUA,CAAW,CAEjE,CAAA,CAAG,CAACb,EAAwBK,CAAS,CAAC,CAAA,CAE/B,CACL,aAAA,CAAe,CAACH,CAAAA,EAAkBC,CAAAA,EAAWE,CAAAA,EAAaE,CAC5D,CACF,CC5EO,SAASS,EAAAA,CAAAA,GAAMC,CAAAA,CAAwD,CAC5E,OAAOA,CAAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CACzC,CCHO,IAAMC,CAAAA,CAAgB,IACvB,OAAO,MAAA,CAAW,GAAA,CAAoB,KAAA,CACnC,cAAA,GAAkB,MAAA,EAAU,SAAA,CAAU,cAAA,CAAiB,CAAA,CAMnDC,EAAAA,CAAoB,CAC/BC,CAAAA,CACAC,CAAAA,GACW,CACX,IAAMC,CAAAA,CAAQ,CACZ,EAAA,CAAI,CAAE,OAAA,CAAS,EAAA,CAAI,MAAA,CAAQ,EAAG,CAAA,CAC9B,EAAA,CAAI,CAAE,OAAA,CAAS,EAAA,CAAI,MAAA,CAAQ,EAAG,CAAA,CAC9B,GAAI,CAAE,OAAA,CAAS,EAAA,CAAI,MAAA,CAAQ,EAAG,CAChC,CAAA,CAEA,OAAOD,CAAAA,CAAUC,CAAAA,CAAMF,CAAI,CAAA,CAAE,MAAA,CAASE,CAAAA,CAAMF,CAAI,CAAA,CAAE,OACpD,CAAA,CCAA,SAASG,EAAAA,EAA0C,CACjD,OAAI,OAAO,MAAA,CAAW,GAAA,CAAoB,OAAA,CACnC,MAAA,CAAO,UAAA,CAAW,8BAA8B,CAAA,CAAE,OAAA,CACrD,MAAA,CACA,OACN,CAEO,SAASC,EAAAA,CAAa,CAC3B,IAAA,CAAAJ,CAAAA,CACA,KAAA,CAAA/F,CAAAA,CACA,YAAA,CAAAoG,CAAAA,CACA,YAAAC,CAAAA,CACA,aAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,MAAA,CAAAC,CAAAA,CACA,eAAA,CAAAC,CAAAA,CAAkB,KAAA,CAClB,QAAA,CAAAC,CAAAA,CAAW,IAAA,CACX,WAAA,CAAAC,CAAAA,CAAc,CAChB,EAAsB,CACpB,GAAM,CAACX,CAAAA,CAASY,CAAU,CAAA,CAAI5E,cAAAA,CAAS,KAAK,CAAA,CACtC,CAAC6E,CAAAA,CAAaC,CAAc,CAAA,CAAI9E,cAAAA,CAAS,KAAK,CAAA,CAC9C,CAAC/B,CAAAA,CAAa8G,CAAc,CAAA,CAAI/E,cAAAA,CAA2BkE,EAAqB,CAAA,CAChF,CAACc,CAAAA,CAAWC,CAAY,CAAA,CAAIjF,cAAAA,CAAS,KAAK,CAAA,CAC1C,CAACkF,CAAAA,CAAWC,CAAY,EAAInF,cAAAA,CAAS,KAAK,CAAA,CAC1C,CAACoF,CAAAA,CAAWC,CAAY,CAAA,CAAIrF,cAAAA,CAAS,KAAK,CAAA,CAE1C,CAAE,WAAA,CAAAH,CAAY,CAAA,CAAIa,CAAAA,EAAiB,CAEzCN,gBAAU,IAAM,CAGd,GAFAwE,CAAAA,CAAWf,CAAAA,EAAe,CAAA,CAEtB,OAAO,MAAA,CAAW,GAAA,CAAa,OACnC,IAAMyB,CAAAA,CAAY,MAAA,CAAO,UAAA,CAAW,8BAA8B,EAC5DC,CAAAA,CAAWC,CAAAA,EACfT,CAAAA,CAAeS,CAAAA,CAAE,OAAA,CAAU,MAAA,CAAS,OAAO,CAAA,CAC7C,OAAAF,CAAAA,CAAU,gBAAA,CAAiB,QAAA,CAAUC,CAAO,CAAA,CACrC,IAAMD,CAAAA,CAAU,oBAAoB,QAAA,CAAUC,CAAO,CAC9D,CAAA,CAAG,EAAE,CAAA,CAGL,IAAME,CAAAA,CACAjB,CAAAA,CAAe,IAAA,CACf,CAACR,CAAAA,EAAWK,CAAAA,CAAoBI,CAAAA,CAChCT,CAAAA,EAAWM,CAAAA,GAAkB,eAAA,CAAwBO,CAAAA,CAClD,IAAA,CAITzE,eAAAA,CAAU,IAAM,CACd,GAAIqF,CAAAA,EAAc,CAACL,CAAAA,CAAW,CAC5B,IAAM7B,CAAAA,CAAQ,UAAA,CAAW,IAAM8B,EAAa,IAAI,CAAA,CAAG,GAAG,CAAA,CACtD,OAAO,IAAM,YAAA,CAAa9B,CAAK,CACjC,CACF,CAAA,CAAG,CAACkC,CAAAA,CAAYL,CAAS,CAAC,CAAA,CAE1B,IAAMM,CAAAA,CAAc,IAAM,CACxB,GAAI1B,CAAAA,EAAWM,CAAAA,GAAkB,eAAA,EAAmB,CAACO,CAAAA,CAAa,CAChEC,CAAAA,CAAe,IAAI,CAAA,CACnB,MACF,CACAP,CAAAA,GACF,CAAA,CAEMoB,CAAAA,CAAa7B,EAAAA,CAAkBC,CAAAA,CAAMC,CAAO,CAAA,CAC5C4B,CAAAA,CAAI1F,aAAAA,CACR,IAAMnC,EAAAA,CAAaC,CAAAA,CAAOC,CAAAA,CAAa4B,CAAW,CAAA,CAClD,CAAC7B,CAAAA,CAAOC,EAAa4B,CAAW,CAClC,CAAA,CAGMgG,CAAAA,CAAe,IACdJ,CAAAA,CACDP,CAAAA,CAAkB,aAAA,CAClBF,CAAAA,CAAkB,aAAA,CACf,UAAA,CAHiB,YAAA,CAMpBc,EAAAA,CAAkC,CACtC,KAAA,CAAOH,CAAAA,CACP,OAAQA,CAAAA,CACR,YAAA,CAAc,KAAA,CACd,MAAA,CAAQC,CAAAA,CAAE,MAAA,CAAO,WAAA,CACjB,MAAA,CAAQ,SAAA,CACR,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,QAAA,CAChB,UAAA,CAAYA,EAAE,MAAA,CAAO,eAAA,CACrB,cAAA,CAAgB,2BAAA,CAChB,oBAAA,CAAsB,2BAAA,CACtB,KAAA,CAAOA,CAAAA,CAAE,MAAA,CAAO,UAAA,CAChB,SAAA,CAAWZ,CAAAA,CAAYY,CAAAA,CAAE,MAAA,CAAO,gBAAA,CAAmBA,CAAAA,CAAE,OAAO,WAAA,CAC5D,UAAA,CAAYR,CAAAA,CAAY,CAAA,SAAA,EAAYQ,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,MAAM,CAAA,CAAA,CAAK,MAAA,CAClE,OAAA,CAASH,CAAAA,CAAa,CAAA,CAAI,CAAA,CAC1B,SAAA,CAAWI,CAAAA,EAAa,CACxB,MAAA,CAAQX,CAAAA,CAAY,kBAAA,CAAqB,eAAA,CACzC,aAAA,CAAeO,CAAAA,CAAa,MAAA,CAAS,MAAA,CACrC,GAAIf,CAAAA,EAAYe,CAAAA,EAAc,CAACL,CAAAA,CAAY,CACzC,SAAA,CAAW,wHACb,CAAA,CAAI,EAAC,CACL,GAAGhB,CAAAA,EAAc,MACnB,CAAA,CAEA,OACE2B,eAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,OAAA,CAASL,CAAAA,CACT,YAAA,CAAc,IAAMT,EAAa,IAAI,CAAA,CACrC,YAAA,CAAc,IAAM,CAAEA,CAAAA,CAAa,KAAK,CAAA,CAAGE,CAAAA,CAAa,KAAK,EAAG,CAAA,CAChE,WAAA,CAAa,IAAMA,CAAAA,CAAa,IAAI,EACpC,SAAA,CAAW,IAAMA,CAAAA,CAAa,KAAK,CAAA,CACnC,YAAA,CAAc,IAAMA,CAAAA,CAAa,IAAI,CAAA,CACrC,UAAA,CAAY,IAAMA,CAAAA,CAAa,KAAK,CAAA,CACpC,KAAA,CAAOW,GACP,SAAA,CAAWnC,EAAAA,CAAG,eAAA,CAAiBa,CAAAA,EAAU,qBAAqB,CAAA,CAC9D,YAAA,CAAW,+BAAA,CACX,eAAA,CAAeA,CAAAA,CACf,eAAA,CAAc,QAAA,CAEd,QAAA,CAAA,CAAA/D,cAAAA,CAACuF,EAAAA,CAAA,CAAW,KAAML,CAAAA,CAAa,GAAA,CAAM,QAAA,CAAUjB,CAAAA,CAAU,CAAA,CACxDC,CAAAA,CAAc,CAAA,EACblE,cAAAA,CAAC,KAAA,CAAA,CACC,YAAA,CAAY,CAAA,EAAGkE,CAAW,CAAA,OAAA,CAAA,CAC1B,KAAA,CAAO,CACL,QAAA,CAAU,WACV,GAAA,CAAK,EAAA,CACL,KAAA,CAAO,EAAA,CACP,KAAA,CAAO,CAAA,CACP,MAAA,CAAQ,CAAA,CACR,YAAA,CAAc,KAAA,CACd,eAAA,CAAiBiB,CAAAA,CAAE,MAAA,CAAO,OAAA,CAC1B,MAAA,CAAQ,mCACV,EACF,CAAA,CAAA,CAEJ,CAEJ,CAEA,SAASI,EAAAA,CAAW,CAAE,IAAA,CAAAjC,CAAAA,CAAM,QAAA,CAAAW,CAAAA,CAAW,IAAK,CAAA,CAAyC,CACnF,GAAM,CAACuB,CAAAA,CAASC,CAAU,CAAA,CAAIlG,cAAAA,CAAS,KAAK,CAAA,CAC5C,OAAAI,eAAAA,CAAU,IAAM,CAAE8F,CAAAA,CAAW,IAAI,EAAG,CAAA,CAAG,EAAE,CAAA,CAGvCzF,eAAC,MAAA,CAAA,CACC,aAAA,CAAY,MAAA,CACZ,KAAA,CAAO,CACL,UAAA,CAAY,uBAAA,CACZ,QAAA,CAAUsD,CAAAA,CACV,UAAA,CAAY,CAAA,CACZ,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,SAChB,SAAA,CAAWA,CAAAA,CAAO,GAAA,CAClB,WAAA,CAAaA,CAAAA,CAAO,GAAA,CACpB,UAAA,CAAY,MAAA,CACZ,OAAA,CAASW,CAAAA,CAAW,CAAA,CAAKuB,CAAAA,CAAU,CAAA,CAAI,CAAA,CACvC,GAAIvB,CAAAA,EAAYuB,EAAU,CACxB,SAAA,CAAW,wEACb,CAAA,CAAI,EACN,CAAA,CACD,QAAA,CAAA,GAAA,CAED,CAEJ,CCnLO,SAASE,CAAAA,CAAQ,CAAE,IAAA,CAAApC,CAAAA,CAAO,EAAA,CAAI,KAAA,CAAAqC,CAAAA,CAAQ,cAAe,CAAA,CAAiB,CAC3E,OACEL,eAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAOhC,CAAAA,CACP,OAAQA,CAAAA,CACR,OAAA,CAAQ,WAAA,CACR,IAAA,CAAK,MAAA,CACL,KAAA,CAAO,CACL,SAAA,CAAW,kCACb,CAAA,CAEA,QAAA,CAAA,CAAAtD,cAAAA,CAAC,QAAA,CAAA,CACC,EAAA,CAAG,IAAA,CACH,EAAA,CAAG,KACH,CAAA,CAAE,IAAA,CACF,MAAA,CAAQ2F,CAAAA,CACR,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,MAAA,CAChB,CAAA,CACA3F,cAAAA,CAAC,QAAA,CAAA,CACC,EAAA,CAAG,IAAA,CACH,EAAA,CAAG,IAAA,CACH,CAAA,CAAE,IAAA,CACF,MAAA,CAAQ2F,CAAAA,CACR,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,OAAA,CACd,KAAA,CAAO,CACL,SAAA,CAAW,uCACb,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CC9BO,SAASC,EAAAA,CAAkB,CAAE,GAAA,CAAAC,CAAAA,CAAK,QAAA,CAAAC,CAAAA,CAAU,aAAA,CAAeX,CAAE,CAAA,CAA2B,CAC7F,OACEG,gBAAC,KAAA,CAAA,CAAI,KAAA,CAAO,CACV,QAAA,CAAU,UAAA,CACV,SAAA,CAAW,EAAA,CACX,YAAA,CAAcH,CAAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,EAAA,CAC/B,QAAA,CAAU,QAAA,CACV,MAAA,CAAQ,CAAA,UAAA,EAAaA,EAAE,MAAA,CAAO,MAAM,CAAA,CACtC,CAAA,CACE,QAAA,CAAA,CAAAnF,cAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAK6F,CAAAA,CACL,GAAA,CAAI,YAAA,CACJ,KAAA,CAAO,CACL,OAAA,CAAS,OAAA,CACT,KAAA,CAAO,OACP,SAAA,CAAW,GAAA,CACX,SAAA,CAAW,OACb,CAAA,CACF,CAAA,CACA7F,cAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS8F,CAAAA,CACT,YAAA,CAAW,mBAAA,CACX,KAAA,CAAO,CACL,SAAU,UAAA,CACV,GAAA,CAAK,CAAA,CACL,KAAA,CAAO,CAAA,CACP,KAAA,CAAO,EAAA,CACP,MAAA,CAAQ,EAAA,CACR,YAAA,CAAc,KAAA,CACd,MAAA,CAAQ,MAAA,CACR,eAAA,CAAiB,iBAAA,CACjB,KAAA,CAAO,OACP,MAAA,CAAQ,SAAA,CACR,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,QAAA,CAChB,QAAA,CAAU,EAAA,CACV,UAAA,CAAY,CACd,CAAA,CAEA,QAAA,CAAA9F,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO,EAAA,CAAI,MAAA,CAAQ,EAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CACnD,QAAA,CAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,sBAAA,CAAuB,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,GAAA,CAAI,aAAA,CAAc,OAAA,CAAQ,CAAA,CAC7F,CAAA,CACF,CAAA,CAAA,CACF,CAEJ,CC9BO,SAAS+F,EAAAA,CAAa,CAC3B,aAAA,CAAeZ,EACf,WAAA,CAAAa,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,SAAA,CAAAtF,CAAAA,CACA,QAAA,CAAAuF,CAAAA,CACA,YAAA,CAAAvC,CAAAA,CACA,aAAA,CAAAwC,CAAAA,CACA,SAAA,CAAAC,CAAAA,CAAY,KAAA,CACZ,QAAA,CAAAC,EAAW,IAAA,CACX,UAAA,CAAAC,CAAAA,CAAa,IAAA,CACb,aAAA,CAAAC,CAAAA,CAAgB,KAAA,CAChB,YAAA,CAAAC,CAAAA,CACA,gBAAA,CAAAC,CAAAA,CAAmB,KACrB,CAAA,CAAsB,CACpB,GAAM,CAACC,EAASC,CAAU,CAAA,CAAIpH,cAAAA,CAAS4G,CAAAA,EAAe,OAAA,EAAW,EAAE,CAAA,CAC7D,CAACS,CAAAA,CAAQC,CAAS,CAAA,CAAItH,cAAAA,CAAwB4G,CAAAA,EAAe,MAAA,EAAU,IAAI,CAAA,CAC3E,CAACW,CAAAA,CAAOC,CAAQ,CAAA,CAAIxH,cAAAA,CAAS,KAAK,CAAA,CAClC,CAACgE,CAAAA,CAASY,CAAU,CAAA,CAAI5E,cAAAA,CAAS,KAAK,CAAA,CACtC,CAACyH,CAAAA,CAAYC,CAAa,EAAI1H,cAAAA,CAAwB,IAAI,CAAA,CAC1D,CAAC2H,CAAAA,CAAqBC,CAAsB,CAAA,CAAI5H,cAAAA,CAAS,KAAK,CAAA,CAEpEI,eAAAA,CAAU,IAAM,CACdwE,CAAAA,CAAWf,CAAAA,EAAe,EAC5B,CAAA,CAAG,EAAE,CAAA,CAELzD,eAAAA,CAAU,IAAM,CACVwG,CAAAA,EAAe,OAAA,GAAY,MAAA,EAC7BQ,CAAAA,CAAWR,CAAAA,CAAc,OAAA,EAAW,EAAE,CAAA,CAEpCA,CAAAA,EAAe,SAAW,MAAA,EAC5BU,CAAAA,CAAUV,CAAAA,CAAc,MAAA,EAAU,IAAI,EAE1C,CAAA,CAAG,CAACA,CAAAA,EAAe,OAAA,CAASA,CAAAA,EAAe,MAAM,CAAC,CAAA,CAElD,IAAMiB,CAAAA,CACAf,CAAAA,EAAYC,CAAAA,CAAmBI,CAAAA,CAAQ,IAAA,EAAK,CAAE,MAAA,CAAS,CAAA,EAAKE,CAAAA,GAAW,IAAA,CACvEP,CAAAA,CAAiBK,CAAAA,CAAQ,IAAA,EAAK,CAAE,MAAA,CAAS,CAAA,CACzCJ,CAAAA,CAAmBM,IAAW,IAAA,CAC3B,KAAA,CAGHS,CAAAA,CAA0B,SAAY,CAC1CF,CAAAA,CAAuB,IAAI,CAAA,CAC3B,GAAI,CACF,GAAM,CAAE,iBAAA,CAAA3P,CAAkB,CAAA,CAAI,4CACxBuF,CAAAA,CAAS,MAAMvF,CAAAA,EAAkB,CACnCuF,CAAAA,EAAQkK,CAAAA,CAAclK,CAAM,EAClC,CAAA,KAAQ,CAER,CAAA,OAAE,CACAoK,CAAAA,CAAuB,KAAK,EAC9B,CACF,EAEMG,CAAAA,CAAgBvC,CAAAA,EAAuB,CAC3CA,CAAAA,CAAE,cAAA,EAAe,CACZqC,CAAAA,EACLlB,CAAAA,CAAS,CACP,OAAA,CAASG,CAAAA,EAAYK,CAAAA,CAAQ,IAAA,EAAK,CAAIA,CAAAA,CAAQ,IAAA,GAAS,MAAA,CACvD,MAAA,CAAQJ,CAAAA,EAAcM,CAAAA,GAAW,IAAA,CAAOA,CAAAA,CAAS,MAAA,CACjD,KAAA,CAAOE,CAAAA,EAAS,MAAA,CAChB,UAAA,CAAYE,CAAAA,EAAc,MAC5B,CAAC,EACH,CAAA,CAEMO,GAAmC,CACvC,KAAA,CAAO,MAAA,CACP,OAAA,CAAShE,CAAAA,CAAU,WAAA,CAAc,WAAA,CACjC,MAAA,CAAQ,CAAA,UAAA,EAAa4B,CAAAA,CAAE,MAAA,CAAO,WAAW,CAAA,CAAA,CACzC,YAAA,CAAcA,CAAAA,CAAE,OAAA,CAAQ,OAAO,EAAA,CAC/B,eAAA,CAAiBA,CAAAA,CAAE,MAAA,CAAO,eAAA,CAC1B,KAAA,CAAOA,CAAAA,CAAE,MAAA,CAAO,IAAA,CAChB,QAAA,CAAU5B,CAAAA,CAAU4B,CAAAA,CAAE,UAAA,CAAW,QAAA,CAAS,EAAA,CAAKA,CAAAA,CAAE,WAAW,QAAA,CAAS,EAAA,CACrE,MAAA,CAAQ,MAAA,CACR,SAAA,CAAW5B,CAAAA,CAAU,GAAA,CAAM,EAAA,CAC3B,UAAA,CAAY4B,CAAAA,CAAE,UAAA,CAAW,UAAA,CACzB,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,CAAA,aAAA,EAAgBA,CAAAA,CAAE,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,CAAA,EAAIA,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,aAAA,EAAgBA,CAAAA,CAAE,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,CAAA,EAAIA,CAAAA,CAAE,UAAU,MAAA,CAAO,OAAO,CAAA,CAAA,CAC1J,UAAA,CAAY,GAAA,CACZ,SAAA,CAAW,kCAAA,CACX,GAAGxB,CAAAA,EAAc,KACnB,CAAA,CAEM6D,CAAAA,CAAoC,CACxC,KAAA,CAAO,MAAA,CACP,OAAA,CAASjE,EAAU,WAAA,CAAc,WAAA,CACjC,MAAA,CAAQ4B,CAAAA,CAAE,MAAA,CAAO,YAAA,CACjB,YAAA,CAAcA,CAAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,EAAA,CAC/B,eAAA,CAAiBA,CAAAA,CAAE,MAAA,CAAO,gBAAA,CAC1B,KAAA,CAAOA,EAAE,MAAA,CAAO,WAAA,CAChB,QAAA,CAAU5B,CAAAA,CAAU4B,CAAAA,CAAE,UAAA,CAAW,QAAA,CAAS,EAAA,CAAKA,CAAAA,CAAE,UAAA,CAAW,QAAA,CAAS,EAAA,CACrE,UAAA,CAAYA,CAAAA,CAAE,UAAA,CAAW,UAAA,CAAW,OACpC,UAAA,CAAYA,CAAAA,CAAE,UAAA,CAAW,UAAA,CACzB,MAAA,CAAQxE,CAAAA,CAAY,aAAA,CAAgB,SAAA,CACpC,UAAA,CAAY,CAAA,IAAA,EAAOwE,CAAAA,CAAE,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,CAAA,EAAIA,CAAAA,CAAE,UAAU,MAAA,CAAO,OAAO,CAAA,CAAA,CAC1E,aAAA,CAAe,QAAA,CACf,GAAGxB,CAAAA,EAAc,YACnB,CAAA,CAEA,OACE2B,eAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAUgC,CAAAA,CAEb,QAAA,CAAA,CAAAhB,CAAAA,EACCtG,eAAC,KAAA,CAAA,CAAI,KAAA,CAAO,CACV,YAAA,CAAcqG,CAAAA,CAAY9C,CAAAA,CAAU,EAAA,CAAK,EAAA,CAAM,CAAA,CAC/C,GAAK8C,CAAAA,CAA6E,EAAC,CAAnE,CAAE,OAAA,CAAS,MAAA,CAAQ,eAAgB,QAAA,CAAU,OAAA,CAAS,OAAQ,CAChF,CAAA,CACE,QAAA,CAAArG,cAAAA,CAACyH,EAAAA,CAAA,CAAW,KAAA,CAAOb,CAAAA,CAAQ,QAAA,CAAUC,CAAAA,CAAW,KAAA,CAAO1B,CAAAA,CAAG,OAAA,CAAS5B,CAAAA,CAAS,KAAA,CAAO,CAAC8C,CAAAA,CAAU,CAAA,CAChG,CAAA,CAIDA,CAAAA,EACCrG,cAAAA,CAAC,UAAA,CAAA,CACC,KAAA,CAAO0G,CAAAA,CACP,QAAA,CAAW3B,CAAAA,EAAM4B,CAAAA,CAAW5B,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC1C,WAAA,CAAaiB,CAAAA,EAAe,wBAAA,CAC5B,SAAA,CAAW,GAAA,CACX,KAAA,CAAOuB,EAAAA,CACP,QAAA,CAAU5G,CAAAA,CACV,YAAA,CAAW,eAAA,CACX,OAAA,CAAUoE,CAAAA,EAAM,CACdA,CAAAA,CAAE,cAAc,KAAA,CAAM,WAAA,CAAcI,CAAAA,CAAE,MAAA,CAAO,gBAAA,CAC7CJ,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAY,CAAA,UAAA,EAAaI,CAAAA,CAAE,MAAA,CAAO,cAAc,CAAA,CAAA,CACtEJ,CAAAA,CAAE,aAAA,CAAc,MAAM,eAAA,CAAkBI,CAAAA,CAAE,MAAA,CAAO,qBACnD,CAAA,CACA,MAAA,CAASJ,CAAAA,EAAM,CACbA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,WAAA,CAAcI,CAAAA,CAAE,MAAA,CAAO,WAAA,CAC7CJ,CAAAA,CAAE,cAAc,KAAA,CAAM,SAAA,CAAY,kCAAA,CAClCA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,eAAA,CAAkBI,CAAAA,CAAE,MAAA,CAAO,gBACnD,CAAA,CACF,CAAA,CAIDoB,CAAAA,EACCjB,eAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,SACL,IAAA,CAAK,QAAA,CACL,cAAA,CAAcwB,CAAAA,CACd,OAAA,CAAS,IAAMC,CAAAA,CAAS,CAACD,CAAK,CAAA,CAC9B,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,IAAK,CAAA,CACL,KAAA,CAAO,MAAA,CACP,SAAA,CAAW,EAAA,CACX,OAAA,CAAS,UAAA,CACT,MAAA,CAAQ,CAAA,UAAA,EACNA,CAAAA,CAAQ3B,CAAAA,CAAE,MAAA,CAAO,aAAA,CAAgBA,CAAAA,CAAE,MAAA,CAAO,MAC5C,GACA,YAAA,CAAc,CAAA,CACd,eAAA,CAAiB2B,CAAAA,CAAQ3B,CAAAA,CAAE,MAAA,CAAO,cAAA,CAAiB,aAAA,CACnD,MAAA,CAAQ,SAAA,CACR,UAAA,CAAY,CAAA,IAAA,EAAOA,CAAAA,CAAE,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,CAAA,EAAIA,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,CAAA,CAC1E,UAAA,CAAYA,CAAAA,CAAE,UAAA,CAAW,UAAA,CACzB,GAAGxB,CAAAA,EAAc,OACnB,CAAA,CACA,YAAA,CAAeoB,CAAAA,EAAM,CACd+B,CAAAA,GACH/B,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,eAAA,CAAkBI,CAAAA,CAAE,MAAA,CAAO,YAAA,GAAiBA,CAAAA,CAAE,MAAA,CAAO,oBAAA,CACvE,kBAAA,CAAqBA,CAAAA,CAAE,MAAA,CAAO,YAAA,EAEtC,CAAA,CACA,aAAeJ,CAAAA,EAAM,CACd+B,CAAAA,GACH/B,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,eAAA,CAAkB,aAAA,EAE5C,CAAA,CAEA,QAAA,CAAA,CAAA/E,cAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,EAAA,CACP,MAAA,CAAQ,EAAA,CACR,QAAQ,WAAA,CACR,IAAA,CAAK,MAAA,CACL,MAAA,CAAQ8G,CAAAA,CAAQ3B,CAAAA,CAAE,MAAA,CAAO,aAAA,CAAgBA,CAAAA,CAAE,MAAA,CAAO,YAAA,CAClD,WAAA,CAAa,IAAA,CACb,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,QACf,KAAA,CAAO,CAAE,UAAA,CAAY,CAAA,CAAG,UAAA,CAAY,CAAA,OAAA,EAAUA,CAAAA,CAAE,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,CAAG,CAAA,CAE1E,QAAA,CAAAnF,cAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,mLAAmL,CAAA,CAC7L,CAAA,CACAA,cAAAA,CAAC,MAAA,CAAA,CACC,KAAA,CAAO,CACL,QAAA,CAAU,EAAA,CACV,UAAA,CAAY8G,CAAAA,CAAQ3B,CAAAA,CAAE,UAAA,CAAW,UAAA,CAAW,MAAA,CAASA,CAAAA,CAAE,UAAA,CAAW,WAAW,MAAA,CAC7E,KAAA,CAAO2B,CAAAA,CAAQ3B,CAAAA,CAAE,MAAA,CAAO,aAAA,CAAgBA,CAAAA,CAAE,MAAA,CAAO,YAAA,CACjD,UAAA,CAAY,CAAA,MAAA,EAASA,CAAAA,CAAE,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,CAAA,CAC9C,cAAe,QACjB,CAAA,CAEC,QAAA,CAAA2B,CAAAA,CAAQ,gBAAA,CAAoBN,CAAAA,EAAgB,iBAAA,CAC/C,CAAA,CACAxG,cAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,UAAA,CAAY,MAAA,CACZ,KAAA,CAAO,EAAA,CACP,MAAA,CAAQ,EAAA,CACR,YAAA,CAAc,CAAA,CACd,eAAA,CAAiB8G,CAAAA,CAAQ3B,CAAAA,CAAE,MAAA,CAAO,OAAA,CAAUA,CAAAA,CAAE,MAAA,CAAO,MAAA,CACrD,QAAA,CAAU,UAAA,CACV,UAAA,CAAY,CAAA,iBAAA,EAAoBA,EAAE,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,CAAA,EAAIA,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,CAAA,CACvF,UAAA,CAAY,CACd,CAAA,CAEA,QAAA,CAAAnF,cAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,QAAA,CAAU,UAAA,CACV,GAAA,CAAK,CAAA,CACL,IAAA,CAAM8G,CAAAA,CAAQ,EAAA,CAAK,CAAA,CACnB,KAAA,CAAO,EAAA,CACP,MAAA,CAAQ,EAAA,CACR,YAAA,CAAc,KAAA,CACd,eAAA,CAAiBA,CAAAA,CAAQ,UAAY3B,CAAAA,CAAE,MAAA,CAAO,YAAA,CAC9C,UAAA,CAAY,CAAA,KAAA,EAAQA,CAAAA,CAAE,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,CAAA,EAAIA,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,mBAAA,EAAsBA,CAAAA,CAAE,UAAU,QAAA,CAAS,IAAI,CAAA,CAAA,CAC1H,SAAA,CAAW,4BACb,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAIDoB,CAAAA,EAAiBE,CAAAA,EAAoBK,CAAAA,EAAS,CAACE,CAAAA,EAC9C1B,eAAAA,CAAC,QAAA,CAAA,CACC,KAAK,QAAA,CACL,OAAA,CAAS+B,CAAAA,CACT,QAAA,CAAUH,CAAAA,CACV,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,GAAA,CAAK,CAAA,CACL,KAAA,CAAO,MAAA,CACP,SAAA,CAAW,EACX,OAAA,CAAS,UAAA,CACT,MAAA,CAAQ,CAAA,UAAA,EAAa/B,CAAAA,CAAE,MAAA,CAAO,MAAM,CAAA,CAAA,CACpC,YAAA,CAAc,CAAA,CACd,eAAA,CAAiB,aAAA,CACjB,MAAA,CAAQ+B,CAAAA,CAAsB,aAAA,CAAgB,SAAA,CAC9C,WAAY/B,CAAAA,CAAE,UAAA,CAAW,UAAA,CACzB,QAAA,CAAU,EAAA,CACV,KAAA,CAAOA,CAAAA,CAAE,MAAA,CAAO,aAAA,CAChB,UAAA,CAAY,CAAA,IAAA,EAAOA,CAAAA,CAAE,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,CAAA,EAAIA,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,CAC5E,CAAA,CACA,YAAA,CAAeJ,CAAAA,EAAM,CAAEA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,eAAA,CAAkBI,CAAAA,CAAE,MAAA,CAAO,aAAc,EACtF,YAAA,CAAeJ,CAAAA,EAAM,CAAEA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,eAAA,CAAkB,cAAe,CAAA,CAE7E,QAAA,CAAA,CAAAmC,CAAAA,CACClH,cAAAA,CAAC0F,CAAAA,CAAA,CAAQ,IAAA,CAAM,EAAA,CAAI,MAAOP,CAAAA,CAAE,MAAA,CAAO,aAAA,CAAe,CAAA,CAElDG,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO,EAAA,CAAI,MAAA,CAAQ,EAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,YAAa,IAAA,CAAM,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CACxI,QAAA,CAAA,CAAAtF,cAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAAE,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,GAAG,GAAA,CAAI,CAAA,CAChDA,cAAAA,CAAC,QAAA,CAAA,CAAO,EAAA,CAAG,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAC9BA,cAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,uBAAA,CAAwB,CAAA,CAAA,CAClC,EAEDkH,CAAAA,CAAsB,cAAA,CAAiB,oBAAA,CAAA,CAC1C,CAAA,CAIDX,CAAAA,EAAiBE,CAAAA,EAAoBK,CAAAA,EAASE,CAAAA,EAC7ChH,cAAAA,CAAC4F,EAAAA,CAAA,CACC,GAAA,CAAKoB,CAAAA,CACL,QAAA,CAAU,IAAMC,CAAAA,CAAc,IAAI,CAAA,CAClC,aAAA,CAAe9B,CAAAA,CACjB,CAAA,CAIFG,eAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,QAAA,CAAU3E,CAAAA,EAAa,CAACyG,CAAAA,CACxB,KAAA,CAAO,CACL,GAAGI,CAAAA,CACH,UAAW,EAAA,CACX,OAAA,CAAS7G,CAAAA,CAAY,EAAA,CAAM,CAAA,CAC3B,eAAA,CAAkByG,CAAAA,CAAgDjC,CAAAA,CAAE,MAAA,CAAO,gBAAA,CAA7CA,CAAAA,CAAE,MAAA,CAAO,wBAAA,CACvC,KAAA,CAAQiC,CAAAA,CAA2CjC,CAAAA,CAAE,MAAA,CAAO,WAAA,CAAxCA,CAAAA,CAAE,MAAA,CAAO,mBAAA,CAC7B,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,QAAA,CAChB,GAAA,CAAK,CAAA,CACL,GAAIxE,CAAAA,CAAY,CACd,gBAAiB,qFAAA,CACjB,cAAA,CAAgB,WAAA,CAChB,SAAA,CAAW,mCACb,CAAA,CAAI,EACN,CAAA,CACA,YAAA,CAAeoE,CAAAA,EAAM,CACdA,CAAAA,CAAE,aAAA,CAAc,QAAA,GACnBA,CAAAA,CAAE,cAAc,KAAA,CAAM,eAAA,CAAkBI,CAAAA,CAAE,MAAA,CAAO,qBAAA,CACjDJ,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAY,kBAAA,CAClCA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAYI,CAAAA,CAAE,OAAA,CAAQ,QAEhD,CAAA,CACA,YAAA,CAAeJ,CAAAA,EAAM,CACdA,CAAAA,CAAE,aAAA,CAAc,QAAA,GACnBA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,eAAA,CAAkBI,CAAAA,CAAE,MAAA,CAAO,gBAAA,CACjDJ,CAAAA,CAAE,aAAA,CAAc,MAAM,SAAA,CAAY,eAAA,CAClCA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAY,MAAA,EAEtC,CAAA,CAEC,QAAA,CAAA,CAAApE,CAAAA,EAAaX,cAAAA,CAAC0F,CAAAA,CAAA,CAAQ,IAAA,CAAMnC,CAAAA,CAAU,EAAA,CAAK,GAAI,KAAA,CAAO4B,CAAAA,CAAE,MAAA,CAAO,WAAA,CAAa,CAAA,CAC5ExE,CAAAA,CAAayF,CAAAA,CAAY,aAAA,CAAgB,eAAA,CAAoBA,CAAAA,CAAY,QAAA,CAAWH,CAAAA,CAAAA,CACvF,CAAA,CAAA,CACF,CAEJ,CAUA,SAASwB,GAAW,CAAE,KAAA,CAAA/O,CAAAA,CAAO,QAAA,CAAAgP,CAAAA,CAAU,KAAA,CAAOvC,CAAAA,CAAG,OAAA,CAAA5B,CAAAA,CAAS,KAAA,CAAAoE,CAAAA,CAAQ,KAAM,CAAA,CAAoB,CAC1F,GAAM,CAACC,EAASC,CAAU,CAAA,CAAItI,cAAAA,CAAwB,IAAI,CAAA,CACpD,CAACuI,CAAAA,CAASC,CAAU,CAAA,CAAIxI,cAAAA,CAAwB,IAAI,CAAA,CACpDyI,CAAAA,CAAgBC,YAAAA,EAAsC,CACtDC,CAAAA,CAAWP,CAAAA,CAASpE,CAAAA,CAAU,EAAA,CAAK,EAAA,CAAOA,CAAAA,CAAU,EAAA,CAAK,EAAA,CACzD4E,CAAAA,CAAgBR,CAAAA,CAASpE,CAAAA,CAAU,CAAA,CAAI,CAAA,CAAMA,CAAAA,CAAU,CAAA,CAAI,CAAA,CAEjE5D,eAAAA,CAAU,IACD,IAAM,CAAE,YAAA,CAAaqI,CAAAA,CAAc,OAAO,EAAG,CAAA,CACnD,EAAE,CAAA,CAEL,IAAM/C,CAAAA,CAAemD,CAAAA,EAAiB,CACpCL,CAAAA,CAAWK,CAAI,EACfV,CAAAA,CAASU,CAAI,CAAA,CACb,YAAA,CAAaJ,CAAAA,CAAc,OAAO,CAAA,CAClCA,CAAAA,CAAc,OAAA,CAAU,UAAA,CAAW,IAAMD,CAAAA,CAAW,IAAI,CAAA,CAAG,GAAG,EAChE,EAEA,OACE/H,cAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,GAAA,CAAK2H,CAAAA,CAASpE,CAAAA,CAAU,CAAA,CAAI,CAAA,CAAMA,CAAAA,CAAU,CAAA,CAAI,CAClD,CAAA,CACA,KAAK,OAAA,CACL,YAAA,CAAW,QAAA,CAEV,QAAA,CAAA,CAAC,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAC,CAAA,CAAE,GAAA,CAAK6E,CAAAA,EAAS,CAC7B,IAAMC,CAAAA,CAAAA,CAAYT,CAAAA,EAAWlP,GAAS,CAAA,GAAM0P,CAAAA,CAC5C,OACEpI,cAAAA,CAAC,QAAA,CAAA,CAEC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS,IAAMiF,CAAAA,CAAYmD,CAAI,CAAA,CAC/B,YAAA,CAAc,IAAMP,CAAAA,CAAWO,CAAI,EACnC,YAAA,CAAc,IAAMP,CAAAA,CAAW,IAAI,CAAA,CACnC,YAAA,CAAY,CAAA,KAAA,EAAQO,CAAI,CAAA,SAAA,CAAA,CACxB,cAAA,CAAc1P,CAAAA,GAAU0P,CAAAA,CACxB,KAAA,CAAO,CACL,UAAA,CAAY,MAAA,CACZ,OAAQ,MAAA,CACR,MAAA,CAAQ,SAAA,CACR,OAAA,CAASD,CAAAA,CACT,KAAA,CAAOE,CAAAA,CAAWlD,CAAAA,CAAE,MAAA,CAAO,UAAA,CAAaA,CAAAA,CAAE,MAAA,CAAO,SAAA,CACjD,UAAA,CAAY,CAAA,YAAA,EAAeA,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,CAAA,CACrD,SAAA,CAAW2C,CAAAA,GAAYM,CAAAA,CAAO,UAAA,CAAeR,CAAAA,GAAY,IAAA,EAAQA,CAAAA,EAAWQ,CAAAA,CAAQ,YAAA,CAAe,UAAA,CACnG,SAAA,CAAWN,CAAAA,GAAYM,EAAO,CAAA,uBAAA,EAA0BjD,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,MAAM,CAAA,CAAA,CAAK,MAAA,CACtF,MAAA,CAAQkD,CAAAA,CAAW,CAAA,oBAAA,EAAuBlD,CAAAA,CAAE,MAAA,CAAO,UAAU,CAAA,GAAA,CAAA,CAAQ,MAAA,CACrE,eAAA,CAAiB,IAAIiD,CAAAA,CAAO,CAAA,EAAK,EAAE,CAAA,EAAA,CACrC,CAAA,CAEA,QAAA,CAAApI,cAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOkI,CAAAA,CAAU,MAAA,CAAQA,CAAAA,CAAU,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,cAAA,CAC/D,SAAAlI,cAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,8FAAA,CAA+F,CAAA,CACzG,CAAA,CAAA,CAtBKoI,CAuBP,CAEJ,CAAC,CAAA,CACH,CAEJ,CCxYO,SAASE,EAAAA,CAAS,CAAE,aAAA,CAAenD,CAAAA,CAAG,SAAA,CAAAxE,CAAAA,CAAW,QAAA,CAAAuF,EAAU,WAAA,CAAAqC,CAAAA,CAAa,SAAA,CAAAnC,CAAAA,CAAY,KAAA,CAAO,MAAA,CAAAoC,CAAO,CAAA,CAAkB,CACzH,GAAM,CAACjF,CAAAA,CAASY,CAAU,CAAA,CAAI5E,cAAAA,CAAS,KAAK,EACtC,CAACkJ,CAAAA,CAAYC,CAAa,CAAA,CAAInJ,cAAAA,CAA+BgJ,CAAAA,EAAe,IAAI,CAAA,CAChF,CAACI,CAAAA,CAAcC,CAAe,CAAA,CAAIrJ,cAAAA,CAA+BgJ,CAAAA,EAAe,IAAI,CAAA,CAE1F5I,gBAAU,IAAM,CACdwE,CAAAA,CAAWf,CAAAA,EAAe,EAC5B,CAAA,CAAG,EAAE,CAAA,CAELzD,eAAAA,CAAU,IAAM,CACV4I,CAAAA,GAAgB,MAAA,GAClBK,CAAAA,CAAgBL,CAAW,CAAA,CAC3BG,CAAAA,CAAcH,CAAW,CAAA,EAE7B,CAAA,CAAG,CAACA,CAAW,CAAC,CAAA,CAEhB5I,eAAAA,CAAU,IAAM,CACV,CAACgB,CAAAA,EAAa,CAACyF,GACjBsC,CAAAA,CAAc,IAAI,EAEtB,CAAA,CAAG,CAAC/H,CAAAA,CAAWyF,CAAS,CAAC,CAAA,CAEzB,IAAMyC,CAAAA,CAAcC,CAAAA,EAAwB,CAC1CJ,CAAAA,CAAcI,CAAI,CAAA,CAClB5C,EAAS,CAAE,IAAA,CAAA4C,CAAK,CAAC,EACnB,CAAA,CAEMC,CAAAA,CAAmBC,CAAAA,EAAiD,CACxE,IAAMC,CAAAA,CAAaN,CAAAA,GAAiBK,CAAAA,CAC9BrD,CAAAA,CAAQqD,CAAAA,GAAa,IAAA,CAAO7D,EAAE,MAAA,CAAO,MAAA,CAASA,CAAAA,CAAE,MAAA,CAAO,QAAA,CACvD+D,CAAAA,CAAUF,CAAAA,GAAa,IAAA,CAAO7D,CAAAA,CAAE,MAAA,CAAO,aAAA,CAAgBA,CAAAA,CAAE,MAAA,CAAO,eAAA,CAChEgE,CAAAA,CAASH,CAAAA,GAAa,KAAO7D,CAAAA,CAAE,MAAA,CAAO,YAAA,CAAeA,CAAAA,CAAE,MAAA,CAAO,cAAA,CAEpE,OAAO,CACL,IAAA,CAAM,CAAA,CACN,QAAA,CAAU,CAAA,CACV,QAAA,CAAU,QAAA,CACV,OAAA,CAAS5B,CAAAA,CAAU,YAAc,WAAA,CACjC,MAAA,CAAQ0F,CAAAA,CACJ,CAAA,UAAA,EAAaE,CAAM,CAAA,CAAA,CACnB,CAAA,UAAA,EAAahE,CAAAA,CAAE,MAAA,CAAO,MAAM,CAAA,CAAA,CAChC,YAAA,CAAcA,CAAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,EAAA,CAAK,EACpC,UAAA,CAAY8D,CAAAA,CACR,CAAA,wBAAA,EAA2BC,CAAO,CAAA,EAAA,EAAKA,CAAO,CAAA,CAAA,CAAA,CAC9C/D,CAAAA,CAAE,MAAA,CAAO,OAAA,CACb,KAAA,CAAO8D,CAAAA,CAAatD,CAAAA,CAAQR,CAAAA,CAAE,MAAA,CAAO,aAAA,CACrC,SAAU5B,CAAAA,CAAU,EAAA,CAAK,EAAA,CACzB,UAAA,CAAY4B,CAAAA,CAAE,UAAA,CAAW,UAAA,CACzB,MAAA,CAAQxE,CAAAA,CAAY,aAAA,CAAgB,SAAA,CACpC,UAAA,CAAY,CAAA,SAAA,EAAYwE,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,CAAA,CAClD,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,QAAA,CAChB,GAAA,CAAK5B,CAAAA,CAAU,EAAA,CAAK,CACtB,CACF,CAAA,CAEM6F,CAAAA,CAAW7F,CAAAA,CAAU,GAAK,EAAA,CAEhC,OACE+B,eAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,GAAA,CAAK/B,CAAAA,CAAU,EAAA,CAAK,EACtB,CAAA,CACA,IAAA,CAAK,OAAA,CACL,YAAA,CAAW,OAEX,QAAA,CAAA,CAAAvD,cAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS,IAAM6I,CAAAA,CAAW,IAAI,CAAA,CAC9B,QAAA,CAAUlI,CAAAA,CACV,KAAA,CAAOoI,CAAAA,CAAgB,IAAI,CAAA,CAC3B,aAAW,uBAAA,CACX,cAAA,CAAcJ,CAAAA,GAAiB,IAAA,CAC/B,YAAA,CAAe5D,CAAAA,EAAM,CACdpE,CAAAA,GACHoE,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAY,8BAAA,CAClCA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,UAAYI,CAAAA,CAAE,OAAA,CAAQ,MAAA,EAEhD,CAAA,CACA,YAAA,CAAeJ,CAAAA,EAAM,CACnBA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAY,wBAAA,CAClCA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAY,OACpC,CAAA,CAEC,QAAA,CAAApE,CAAAA,EAAa8H,CAAAA,GAAe,IAAA,CAC3BnD,eAAAA,CAAA+D,mBAAAA,CAAA,CACE,QAAA,CAAA,CAAArJ,cAAAA,CAAC0F,CAAAA,CAAA,CAAQ,IAAA,CAAM0D,CAAAA,CAAU,KAAA,CAAOjE,CAAAA,CAAE,OAAO,IAAA,CAAM,CAAA,CAC/CnF,cAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,QAAA,CAAUuD,CAAAA,CAAU,EAAA,CAAK,EAAA,CAAI,UAAA,CAAY4B,CAAAA,CAAE,UAAA,CAAW,UAAA,CAAW,MAAA,CAAQ,aAAA,CAAe,QAAS,CAAA,CAC7G,QAAA,CAAAiB,CAAAA,CAAY,aAAA,CAAgB,YAAA,CAC/B,CAAA,CAAA,CACF,CAAA,CAEAd,eAAAA,CAAA+D,mBAAAA,CAAA,CACE,QAAA,CAAA,CAAArJ,cAAAA,CAACsJ,EAAAA,CAAA,CAAa,IAAA,CAAMF,CAAAA,CAAU,CAAA,CAC9BpJ,cAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,QAAA,CAAUuD,CAAAA,CAAU,EAAA,CAAK,EAAA,CAAI,UAAA,CAAY4B,CAAAA,CAAE,UAAA,CAAW,UAAA,CAAW,MAAA,CAAQ,aAAA,CAAe,QAAS,EAC7G,QAAA,CAAAqD,CAAAA,EAAQ,EAAA,GAAOG,CAAAA,GAAiB,IAAA,CAAO,OAAA,CAAU,MAAA,CAAA,CACpD,CAAA,CAAA,CACF,CAAA,CAEJ,CAAA,CAEA3I,cAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS,IAAM6I,EAAW,MAAM,CAAA,CAChC,QAAA,CAAUlI,CAAAA,CACV,KAAA,CAAOoI,CAAAA,CAAgB,MAAM,CAAA,CAC7B,YAAA,CAAW,+BAAA,CACX,cAAA,CAAcJ,CAAAA,GAAiB,MAAA,CAC/B,YAAA,CAAe5D,CAAAA,EAAM,CACdpE,IACHoE,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAY,8BAAA,CAClCA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAYI,CAAAA,CAAE,OAAA,CAAQ,MAAA,EAEhD,CAAA,CACA,YAAA,CAAeJ,CAAAA,EAAM,CACnBA,EAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAY,wBAAA,CAClCA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAY,OACpC,CAAA,CAEC,QAAA,CAAApE,CAAAA,EAAa8H,CAAAA,GAAe,MAAA,CAC3BnD,eAAAA,CAAA+D,mBAAAA,CAAA,CACE,QAAA,CAAA,CAAArJ,cAAAA,CAAC0F,CAAAA,CAAA,CAAQ,IAAA,CAAM0D,CAAAA,CAAU,KAAA,CAAOjE,CAAAA,CAAE,MAAA,CAAO,IAAA,CAAM,CAAA,CAC/CnF,cAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,QAAA,CAAUuD,EAAU,EAAA,CAAK,EAAA,CAAI,UAAA,CAAY4B,CAAAA,CAAE,UAAA,CAAW,UAAA,CAAW,MAAA,CAAQ,aAAA,CAAe,QAAS,CAAA,CAC7G,QAAA,CAAAiB,CAAAA,CAAY,aAAA,CAAgB,YAAA,CAC/B,CAAA,CAAA,CACF,CAAA,CAEAd,gBAAA+D,mBAAAA,CAAA,CACE,QAAA,CAAA,CAAArJ,cAAAA,CAACuJ,EAAAA,CAAA,CAAe,IAAA,CAAMH,CAAAA,CAAU,CAAA,CAChCpJ,cAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,QAAA,CAAUuD,CAAAA,CAAU,EAAA,CAAK,EAAA,CAAI,UAAA,CAAY4B,CAAAA,CAAE,UAAA,CAAW,UAAA,CAAW,MAAA,CAAQ,aAAA,CAAe,QAAS,CAAA,CAC7G,QAAA,CAAAqD,CAAAA,EAAQ,IAAA,GAASG,CAAAA,GAAiB,MAAA,CAAS,UAAA,CAAa,SAAA,CAAA,CAC3D,GACF,CAAA,CAEJ,CAAA,CAAA,CACF,CAEJ,CAEA,SAASW,EAAAA,CAAa,CAAE,IAAA,CAAAhG,CAAAA,CAAO,EAAG,CAAA,CAAsB,CACtD,OACEtD,cAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOsD,EAAM,MAAA,CAAQA,CAAAA,CAAM,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,MAAA,CAAO,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAC5I,QAAA,CAAAtD,cAAAA,CAAC,QAAK,CAAA,CAAE,qHAAA,CAAsH,CAAA,CAChI,CAEJ,CAEA,SAASuJ,EAAAA,CAAe,CAAE,IAAA,CAAAjG,CAAAA,CAAO,EAAG,CAAA,CAAsB,CACxD,OACEtD,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAOsD,CAAAA,CAAM,MAAA,CAAQA,CAAAA,CAAM,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,cAAA,CAAe,WAAA,CAAY,MAAA,CAAO,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAC5I,QAAA,CAAAtD,eAAC,MAAA,CAAA,CAAK,CAAA,CAAE,uIAAA,CAAwI,CAAA,CAClJ,CAEJ,CC1JO,SAASwJ,EAAAA,CAAS,CACvB,aAAA,CAAerE,CAAAA,CACf,OAAA,CAAAnK,CAAAA,CACA,aAAA,CAAAyO,CAAAA,CACA,SAAA,CAAA9I,CAAAA,CACA,QAAA,CAAAuF,CAAAA,CACA,eAAA,CAAAwD,CAAAA,CACA,UAAAtD,CAAAA,CAAY,KACd,CAAA,CAAkB,CAChB,GAAM,CAACuD,CAAAA,CAAUC,CAAW,CAAA,CAAIrK,cAAAA,CAAmBmK,CAAAA,EAAmB,EAAE,CAAA,CAClE,CAACnG,CAAAA,CAASY,CAAU,CAAA,CAAI5E,cAAAA,CAAS,KAAK,CAAA,CAE5CI,eAAAA,CAAU,IAAM,CACdwE,CAAAA,CAAWf,CAAAA,EAAe,EAC5B,CAAA,CAAG,EAAE,CAAA,CAELzD,gBAAU,IAAM,CACV+J,CAAAA,EACFE,CAAAA,CAAYF,CAAe,EAE/B,CAAA,CAAG,CAACA,CAAe,CAAC,CAAA,CAEpB,IAAMG,CAAAA,CAAgBC,CAAAA,EAAmB,CAErCF,CAAAA,CADEH,EACWM,CAAAA,EACXA,CAAAA,CAAK,QAAA,CAASD,CAAM,CAAA,CAAIC,CAAAA,CAAK,MAAA,CAAQC,CAAAA,EAAMA,CAAAA,GAAMF,CAAM,CAAA,CAAI,CAAC,GAAGC,CAAAA,CAAMD,CAAM,CAAA,CAGhEC,GAAUA,CAAAA,CAAK,QAAA,CAASD,CAAM,CAAA,CAAI,EAAC,CAAI,CAACA,CAAM,CAF3D,EAIJ,CAAA,CAEMxC,CAAAA,CAAe,IAAM,CACrBqC,CAAAA,CAAS,MAAA,GAAW,GACxBzD,CAAAA,CAAS,CAAE,YAAA,CAAcyD,CAAS,CAAC,EACrC,CAAA,CAEMM,CAAAA,CAAkB,CAACH,CAAAA,CAAgBI,CAAAA,GAAuC,CAC9E,IAAMjB,CAAAA,CAAaU,CAAAA,CAAS,QAAA,CAASG,CAAM,CAAA,CAC3C,OAAO,CACL,KAAA,CAAO,MAAA,CACP,OAAA,CAASvG,CAAAA,CAAU,WAAA,CAAc,UAAA,CACjC,MAAA,CAAQ,CAAA,UAAA,EAAa0F,CAAAA,CAAa9D,CAAAA,CAAE,MAAA,CAAO,kBAAA,CAAqBA,CAAAA,CAAE,OAAO,UAAU,CAAA,CAAA,CACnF,YAAA,CAAcA,CAAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,EAAA,CAAK,CAAA,CACpC,eAAA,CAAiB8D,CAAAA,CAAa9D,CAAAA,CAAE,MAAA,CAAO,sBAAA,CAAyBA,CAAAA,CAAE,MAAA,CAAO,cAAA,CACzE,MAAO8D,CAAAA,CAAa9D,CAAAA,CAAE,MAAA,CAAO,iBAAA,CAAoBA,CAAAA,CAAE,MAAA,CAAO,SAAA,CAC1D,QAAA,CAAU5B,CAAAA,CAAU,EAAA,CAAK4B,CAAAA,CAAE,UAAA,CAAW,QAAA,CAAS,EAAA,CAC/C,UAAA,CAAY8D,CAAAA,CAAa9D,CAAAA,CAAE,UAAA,CAAW,UAAA,CAAW,QAAA,CAAWA,CAAAA,CAAE,UAAA,CAAW,UAAA,CAAW,MAAA,CACpF,UAAA,CAAYA,CAAAA,CAAE,UAAA,CAAW,UAAA,CACzB,MAAA,CAAQxE,CAAAA,CAAY,aAAA,CAAgB,SAAA,CACpC,WAAY,CAAA,SAAA,EAAYwE,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,CAAA,CAClD,SAAA,CAAW,MAAA,CACX,aAAA,CAAe,QAAA,CACf,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,GAAA,CAAK,CAAA,CACL,UAAW,CAAA,eAAA,EAAkBA,CAAAA,CAAE,SAAA,CAAU,QAAA,CAAS,MAAM,CAAA,CAAA,EAAIA,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,KAAA,CAAA,CACtF,cAAA,CAAgB,CAAA,EAAG+E,CAAAA,CAAQ,GAAI,CAAA,CAAA,CACjC,CACF,CAAA,CAEA,OACE5E,eAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAAtF,cAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,aAAA,CAAe,QAAA,CACf,GAAA,CAAKuD,CAAAA,CAAU,CAAA,CAAI,CACrB,CAAA,CACA,IAAA,CAAK,OAAA,CACL,YAAA,CAAYkG,CAAAA,CAAgB,4BAAA,CAA+B,kBAAA,CAE1D,QAAA,CAAAzO,CAAAA,CAAQ,GAAA,CAAI,CAAC8O,CAAAA,CAAQI,CAAAA,GAAU,CAC9B,IAAMjB,CAAAA,CAAaU,EAAS,QAAA,CAASG,CAAM,CAAA,CAC3C,OACExE,eAAAA,CAAC,QAAA,CAAA,CAEC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS,IAAMuE,CAAAA,CAAaC,CAAM,CAAA,CAClC,QAAA,CAAUnJ,CAAAA,CACV,KAAA,CAAOsJ,EAAgBH,CAAAA,CAAQI,CAAK,CAAA,CACpC,cAAA,CAAcjB,CAAAA,CACd,YAAA,CAAelE,CAAAA,EAAM,CACdpE,CAAAA,GACHoE,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAY,iBAAA,EAEtC,CAAA,CACA,YAAA,CAAeA,GAAM,CACnBA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAY,gBACpC,CAAA,CAEA,QAAA,CAAA,CAAA/E,cAAAA,CAAC,MAAA,CAAA,CACC,KAAA,CAAO,CACL,KAAA,CAAO,EAAA,CACP,MAAA,CAAQ,EAAA,CACR,YAAA,CAAcyJ,CAAAA,CAAgB,CAAA,CAAI,KAAA,CAClC,MAAA,CAAQ,CAAA,UAAA,EAAaR,CAAAA,CAAa9D,CAAAA,CAAE,MAAA,CAAO,uBAAA,CAA0BA,CAAAA,CAAE,MAAA,CAAO,eAAe,CAAA,CAAA,CAC7F,eAAA,CAAiB8D,CAAAA,CAAa9D,EAAE,MAAA,CAAO,mBAAA,CAAsB,aAAA,CAC7D,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,QAAA,CAChB,UAAA,CAAY,CAAA,CACZ,UAAA,CAAY,CAAA,IAAA,EAAOA,CAAAA,CAAE,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,CAC9C,CAAA,CAEC,QAAA,CAAA8D,CAAAA,EACCjJ,cAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO,EAAA,CAAI,MAAA,CAAQ,EAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CACnD,QAAA,CAAAA,cAAAA,CAAC,QACC,CAAA,CAAE,cAAA,CACF,MAAA,CAAO,MAAA,CACP,WAAA,CAAY,GAAA,CACZ,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACjB,CAAA,CACF,CAAA,CAEJ,CAAA,CACC8J,CAAAA,CAAAA,CAAAA,CAzCIA,CA0CP,CAEJ,CAAC,CAAA,CACH,CAAA,CAEAxE,eAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,OAAA,CAASgC,CAAAA,CACT,QAAA,CAAU3G,CAAAA,EAAagJ,CAAAA,CAAS,MAAA,GAAW,CAAA,CAC3C,KAAA,CAAO,CACL,KAAA,CAAO,OACP,SAAA,CAAW,EAAA,CACX,OAAA,CAASpG,CAAAA,CAAU,WAAA,CAAc,WAAA,CACjC,MAAA,CAAQ4B,CAAAA,CAAE,MAAA,CAAO,YAAA,CACjB,YAAA,CAAcA,CAAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,EAAA,CAC/B,eAAA,CAAiBwE,EAAS,MAAA,GAAW,CAAA,CAAIxE,CAAAA,CAAE,MAAA,CAAO,wBAAA,CAA2BA,CAAAA,CAAE,MAAA,CAAO,gBAAA,CACtF,KAAA,CAAOwE,CAAAA,CAAS,MAAA,GAAW,CAAA,CAAIxE,CAAAA,CAAE,MAAA,CAAO,mBAAA,CAAsBA,CAAAA,CAAE,OAAO,WAAA,CACvE,QAAA,CAAU5B,CAAAA,CAAU4B,CAAAA,CAAE,UAAA,CAAW,QAAA,CAAS,EAAA,CAAKA,CAAAA,CAAE,UAAA,CAAW,QAAA,CAAS,EAAA,CACrE,UAAA,CAAYA,CAAAA,CAAE,UAAA,CAAW,UAAA,CAAW,MAAA,CACpC,WAAYA,CAAAA,CAAE,UAAA,CAAW,UAAA,CACzB,MAAA,CAAQxE,CAAAA,EAAagJ,CAAAA,CAAS,MAAA,GAAW,CAAA,CAAI,aAAA,CAAgB,SAAA,CAC7D,UAAA,CAAY,CAAA,IAAA,EAAOxE,CAAAA,CAAE,SAAA,CAAU,QAAA,CAAS,IAAI,IAAIA,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,CAAA,CAC1E,aAAA,CAAe,QAAA,CACf,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,QAAA,CAChB,GAAA,CAAK,CAAA,CACL,OAAA,CAASxE,EAAY,EAAA,CAAM,CAAA,CAC3B,GAAIA,CAAAA,CAAY,CACd,eAAA,CAAiB,qFAAA,CACjB,cAAA,CAAgB,WAAA,CAChB,SAAA,CAAW,mCACb,CAAA,CAAI,EACN,CAAA,CACA,YAAA,CAAeoE,GAAM,CACdA,CAAAA,CAAE,aAAA,CAAc,QAAA,GACnBA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,eAAA,CAAkBI,CAAAA,CAAE,MAAA,CAAO,qBAAA,CACjDJ,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAY,kBAAA,CAClCA,EAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAYI,CAAAA,CAAE,OAAA,CAAQ,MAAA,EAEhD,CAAA,CACA,YAAA,CAAeJ,CAAAA,EAAM,CACdA,CAAAA,CAAE,aAAA,CAAc,QAAA,GACnBA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,gBAAkB4E,CAAAA,CAAS,MAAA,GAAW,CAAA,CACxDxE,CAAAA,CAAE,MAAA,CAAO,wBAAA,CACTA,CAAAA,CAAE,MAAA,CAAO,gBAAA,CACbJ,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAY,eAAA,CAClCA,CAAAA,CAAE,aAAA,CAAc,MAAM,SAAA,CAAY,MAAA,EAEtC,CAAA,CAEC,QAAA,CAAA,CAAApE,CAAAA,EAAaX,cAAAA,CAAC0F,CAAAA,CAAA,CAAQ,IAAA,CAAMnC,CAAAA,CAAU,EAAA,CAAK,EAAA,CAAI,KAAA,CAAO4B,CAAAA,CAAE,MAAA,CAAO,WAAA,CAAa,EAC5ExE,CAAAA,CAAayF,CAAAA,CAAY,aAAA,CAAgB,eAAA,CAAoBA,CAAAA,CAAY,QAAA,CAAW,QAAA,CAAA,CACvF,CAAA,CAAA,CACF,CAEJ,CCtKO,SAAS+D,EAAAA,CAAQ,CACtB,aAAA,CAAehF,CAAAA,CACf,UAAA,CAAAc,CAAAA,CACA,SAAA,CAAAtF,CAAAA,CACA,QAAA,CAAAuF,CAAAA,CACA,aAAAvC,CAAAA,CACA,YAAA,CAAAyG,CAAAA,CAAe,IAAA,CACf,mBAAA,CAAAC,CAAAA,CACA,QAAA,CAAAC,CAAAA,CAAW,YAAA,CACX,SAAA,CAAAC,CAAAA,CAAY,aAAA,CACZ,aAAA,CAAApE,CAAAA,CACA,SAAA,CAAAC,CAAAA,CAAY,KACd,CAAA,CAAiB,CACf,GAAM,CAACoE,CAAAA,CAAOC,CAAQ,CAAA,CAAIlL,cAAAA,CAAwB4G,CAAAA,EAAe,MAAA,EAAU,IAAI,CAAA,CACzE,CAACO,CAAAA,CAASC,CAAU,CAAA,CAAIpH,eAAS4G,CAAAA,EAAe,OAAA,EAAW,EAAE,CAAA,CAC7D,CAAC5C,CAAAA,CAASY,CAAU,CAAA,CAAI5E,cAAAA,CAAS,KAAK,CAAA,CACtC,CAACmL,CAAAA,CAAcC,CAAe,CAAA,CAAIpL,cAAAA,CAAwB,IAAI,CAAA,CAEpEI,eAAAA,CAAU,IAAM,CACdwE,CAAAA,CAAWf,CAAAA,EAAe,EAC5B,CAAA,CAAG,EAAE,CAAA,CAELzD,eAAAA,CAAU,IAAM,CACVwG,CAAAA,EAAe,SAAW,MAAA,EAC5BsE,CAAAA,CAAStE,CAAAA,CAAc,MAAA,EAAU,IAAI,CAAA,CAEnCA,CAAAA,EAAe,OAAA,GAAY,MAAA,EAC7BQ,CAAAA,CAAWR,CAAAA,CAAc,OAAA,EAAW,EAAE,EAE1C,CAAA,CAAG,CAACA,GAAe,MAAA,CAAQA,CAAAA,EAAe,OAAO,CAAC,CAAA,CAElD,IAAMiB,CAAAA,CAAYoD,CAAAA,GAAU,IAAA,CACtBI,CAAAA,CAAYzF,CAAAA,CAAE,MAAA,CAAO,SAAA,CAW3B,OACEG,eAAAA,CAAC,MAAA,CAAA,CAAK,SAVcP,CAAAA,EAAuB,CAC3CA,CAAAA,CAAE,cAAA,EAAe,CACZqC,CAAAA,EACLlB,CAAAA,CAAS,CACP,MAAA,CAAQsE,CAAAA,EAAS,MAAA,CACjB,OAAA,CAASJ,CAAAA,EAAgB1D,CAAAA,CAAQ,IAAA,EAAK,CAAIA,CAAAA,CAAQ,IAAA,EAAK,CAAI,MAC7D,CAAC,EACH,CAAA,CAKI,QAAA,CAAA,CAAApB,eAAAA,CAAC,KAAA,CAAA,CAEC,QAAA,CAAA,CAAAtF,cAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,OACT,GAAA,CAAKuD,CAAAA,CAAU,CAAA,CAAI,CAAA,CACnB,cAAA,CAAgB,QAClB,CAAA,CACA,IAAA,CAAK,OAAA,CACL,YAAA,CAAW,WAAA,CAEV,QAAA,CAAA,KAAA,CAAM,IAAA,CAAK,CAAE,MAAA,CAAQ,EAAG,EAAG,CAACsH,CAAAA,CAAGC,CAAAA,GAAM,CACpC,IAAMnB,CAAAA,CAAWa,CAAAA,GAAUM,CAAAA,CACrBlD,CAAAA,CAAU8C,CAAAA,GAAiBI,CAAAA,CAC3BnF,CAAAA,CAAQiF,CAAAA,CAAUE,CAAC,CAAA,CAEzB,OACE9K,eAAC,QAAA,CAAA,CAEC,IAAA,CAAK,QAAA,CACL,OAAA,CAAS,IAAMyK,CAAAA,CAASK,CAAC,CAAA,CACzB,YAAA,CAAc,IAAMH,CAAAA,CAAgBG,CAAC,CAAA,CACrC,YAAA,CAAc,IAAMH,CAAAA,CAAgB,IAAI,CAAA,CACxC,YAAA,CAAY,CAAA,MAAA,EAASG,CAAC,CAAA,UAAA,CAAA,CACtB,cAAA,CAAcnB,CAAAA,CACd,KAAA,CAAO,CACL,IAAA,CAAM,CAAA,CACN,QAAA,CAAU,CAAA,CACV,MAAA,CAAQpG,CAAAA,CAAU,EAAA,CAAK,GACvB,YAAA,CAAc4B,CAAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,EAAA,CAC/B,MAAA,CAAQwE,CAAAA,CACJ,CAAA,UAAA,EAAahE,CAAK,CAAA,CAAA,CAClB,CAAA,YAAA,EAAeA,CAAK,CAAA,EAAA,CAAA,CACxB,eAAA,CAAiBgE,CAAAA,CACbhE,CAAAA,CACAiC,EACE,CAAA,EAAGjC,CAAK,CAAA,EAAA,CAAA,CACR,CAAA,EAAGA,CAAK,CAAA,EAAA,CAAA,CACd,KAAA,CAAOgE,CAAAA,CACH,MAAA,CACA/B,CAAAA,CACEjC,CAAAA,CACA,CAAA,EAAGA,CAAK,CAAA,EAAA,CAAA,CACd,QAAA,CAAU,EAAA,CACV,WAAYgE,CAAAA,CAAWxE,CAAAA,CAAE,UAAA,CAAW,UAAA,CAAW,IAAA,CAAOA,CAAAA,CAAE,UAAA,CAAW,UAAA,CAAW,QAAA,CAC9E,UAAA,CAAYA,CAAAA,CAAE,UAAA,CAAW,UAAA,CACzB,kBAAA,CAAoB,cAAA,CACpB,MAAA,CAAQ,SAAA,CACR,OAAA,CAAS,CAAA,CACT,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,QAAA,CAChB,UAAA,CAAY,CAAA,SAAA,EAAYA,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,MAAM,CAAA,CAAA,CACjD,UAAWwE,CAAAA,CAAW,aAAA,CAAgB/B,CAAAA,CAAU,aAAA,CAAgB,UAAA,CAChE,SAAA,CAAW+B,CAAAA,CACP,CAAA,SAAA,EAAYhE,CAAK,CAAA,EAAA,CAAA,CACjB,MAAA,CACJ,GAAGhC,CAAAA,EAAc,SAAA,CACjB,GAAIgG,CAAAA,CAAWhG,GAAc,iBAAA,CAAoB,EACnD,CAAA,CAEC,QAAA,CAAAmH,CAAAA,CAAAA,CA3CIA,CA4CP,CAEJ,CAAC,CAAA,CACH,CAAA,CAGAxF,eAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,OACT,cAAA,CAAgB,eAAA,CAChB,UAAA,CAAY,QAAA,CACZ,SAAA,CAAW,CAAA,CACX,OAAA,CAAS,OAAA,CACT,GAAG3B,CAAAA,EAAc,SACnB,CAAA,CAEA,QAAA,CAAA,CAAA3D,cAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CACX,QAAA,CAAUmF,CAAAA,CAAE,UAAA,CAAW,QAAA,CAAS,EAAA,CAChC,KAAA,CAAOA,CAAAA,CAAE,MAAA,CAAO,YAAA,CAChB,UAAA,CAAYA,CAAAA,CAAE,UAAA,CAAW,UAAA,CAAW,MAAA,CACpC,aAAA,CAAe,QACjB,EACG,QAAA,CAAAmF,CAAAA,CACH,CAAA,CACAtK,cAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CACX,QAAA,CAAUmF,CAAAA,CAAE,UAAA,CAAW,QAAA,CAAS,EAAA,CAChC,KAAA,CAAOA,CAAAA,CAAE,MAAA,CAAO,YAAA,CAChB,WAAYA,CAAAA,CAAE,UAAA,CAAW,UAAA,CAAW,MAAA,CACpC,aAAA,CAAe,QACjB,CAAA,CACG,QAAA,CAAAoF,CAAAA,CACH,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAGCH,CAAAA,EAAgBI,CAAAA,GAAU,IAAA,EACzBxK,cAAAA,CAAC,YACC,KAAA,CAAO0G,CAAAA,CACP,QAAA,CAAW3B,CAAAA,EAAM4B,CAAAA,CAAW5B,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC1C,WAAA,CAAasF,CAAAA,EAAuB,wCAAA,CACpC,SAAA,CAAW,GAAA,CACX,KAAA,CAAO,CACL,KAAA,CAAO,MAAA,CACP,OAAA,CAAS9G,CAAAA,CAAU,WAAA,CAAc,WAAA,CACjC,MAAA,CAAQ,CAAA,UAAA,EAAa4B,CAAAA,CAAE,MAAA,CAAO,WAAW,CAAA,CAAA,CACzC,YAAA,CAAcA,CAAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,GAC/B,eAAA,CAAiBA,CAAAA,CAAE,MAAA,CAAO,eAAA,CAC1B,KAAA,CAAOA,CAAAA,CAAE,MAAA,CAAO,IAAA,CAChB,QAAA,CAAU5B,CAAAA,CAAU4B,CAAAA,CAAE,UAAA,CAAW,QAAA,CAAS,EAAA,CAAKA,CAAAA,CAAE,UAAA,CAAW,SAAS,EAAA,CACrE,MAAA,CAAQ,UAAA,CACR,SAAA,CAAW5B,CAAAA,CAAU,EAAA,CAAK,EAAA,CAC1B,UAAA,CAAY4B,CAAAA,CAAE,UAAA,CAAW,UAAA,CACzB,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,CAAA,aAAA,EAAgBA,CAAAA,CAAE,UAAU,QAAA,CAAS,IAAI,CAAA,CAAA,EAAIA,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,aAAA,EAAgBA,CAAAA,CAAE,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,CAAA,EAAIA,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,CAAA,CAC1J,UAAA,CAAY,GAAA,CACZ,SAAA,CAAW,CAAA,sBAAA,EAAyBA,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,KAAA,CAAA,CAC9D,QAAA,CAAU,QAAA,CACV,GAAGxB,CAAAA,EAAc,KACnB,CAAA,CACA,SAAUhD,CAAAA,CACV,YAAA,CAAW,oBAAA,CACX,OAAA,CAAUoE,CAAAA,EAAM,CACdA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,WAAA,CAAcI,CAAAA,CAAE,MAAA,CAAO,gBAAA,CAC7CJ,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,UAAY,CAAA,UAAA,EAAaI,CAAAA,CAAE,MAAA,CAAO,cAAc,CAAA,CAAA,CACtEJ,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,eAAA,CAAkBI,CAAAA,CAAE,MAAA,CAAO,qBACnD,CAAA,CACA,MAAA,CAASJ,CAAAA,EAAM,CACbA,EAAE,aAAA,CAAc,KAAA,CAAM,WAAA,CAAcI,CAAAA,CAAE,MAAA,CAAO,WAAA,CAC7CJ,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAY,MAAA,CAClCA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,eAAA,CAAkBI,CAAAA,CAAE,MAAA,CAAO,gBACnD,CAAA,CACF,CAAA,CAIFG,eAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,QAAA,CAAU3E,CAAAA,EAAa,CAACyG,CAAAA,CACxB,KAAA,CAAO,CACL,KAAA,CAAO,MAAA,CACP,QAAS7D,CAAAA,CAAU,WAAA,CAAc,WAAA,CACjC,MAAA,CAAQ4B,CAAAA,CAAE,MAAA,CAAO,YAAA,CACjB,YAAA,CAAcA,CAAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,EAAA,CAC/B,eAAA,CAAkBiC,CAAAA,CAAgDjC,CAAAA,CAAE,MAAA,CAAO,iBAA7CA,CAAAA,CAAE,MAAA,CAAO,wBAAA,CACvC,KAAA,CAAQiC,CAAAA,CAA2CjC,CAAAA,CAAE,MAAA,CAAO,WAAA,CAAxCA,CAAAA,CAAE,MAAA,CAAO,mBAAA,CAC7B,QAAA,CAAU5B,CAAAA,CAAU4B,CAAAA,CAAE,UAAA,CAAW,QAAA,CAAS,GAAKA,CAAAA,CAAE,UAAA,CAAW,QAAA,CAAS,EAAA,CACrE,UAAA,CAAYA,CAAAA,CAAE,UAAA,CAAW,UAAA,CAAW,MAAA,CACpC,UAAA,CAAYA,CAAAA,CAAE,UAAA,CAAW,UAAA,CACzB,MAAA,CAAQxE,CAAAA,CAAY,aAAA,CAAgB,UACpC,UAAA,CAAY,CAAA,IAAA,EAAOwE,CAAAA,CAAE,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,CAAA,EAAIA,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,CAAA,CAC1E,aAAA,CAAe,QAAA,CACf,OAAA,CAASxE,CAAAA,CAAY,GAAM,CAAA,CAC3B,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,QAAA,CAChB,GAAA,CAAK,CAAA,CACL,SAAA,CAAW,EAAA,CACX,GAAIA,CAAAA,CAAY,CACd,eAAA,CAAiB,qFAAA,CACjB,eAAgB,WAAA,CAChB,SAAA,CAAW,mCACb,CAAA,CAAI,EAAC,CACL,GAAGgD,CAAAA,EAAc,YACnB,CAAA,CACA,YAAA,CAAeoB,CAAAA,EAAM,CACdA,CAAAA,CAAE,aAAA,CAAc,QAAA,GACnBA,EAAE,aAAA,CAAc,KAAA,CAAM,eAAA,CAAkBI,CAAAA,CAAE,MAAA,CAAO,qBAAA,CACjDJ,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAY,kBAAA,CAClCA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAYI,CAAAA,CAAE,OAAA,CAAQ,MAAA,EAEhD,CAAA,CACA,YAAA,CAAeJ,CAAAA,EAAM,CACdA,CAAAA,CAAE,aAAA,CAAc,QAAA,GACnBA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,eAAA,CAAmBqC,CAAAA,CAAgDjC,CAAAA,CAAE,MAAA,CAAO,iBAA7CA,CAAAA,CAAE,MAAA,CAAO,wBAAA,CAC9DJ,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAY,eAAA,CAClCA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAY,MAAA,EAEtC,CAAA,CAEC,QAAA,CAAA,CAAApE,CAAAA,EAAaX,eAAC0F,CAAAA,CAAA,CAAQ,IAAA,CAAMnC,CAAAA,CAAU,EAAA,CAAK,EAAA,CAAI,KAAA,CAAO4B,CAAAA,CAAE,MAAA,CAAO,WAAA,CAAa,CAAA,CAC5ExE,CAAAA,CAAayF,CAAAA,CAAY,aAAA,CAAgB,eAAA,CAAoBA,CAAAA,CAAY,SAAWH,CAAAA,CAAAA,CACvF,CAAA,CAAA,CACF,CAEJ,CCnPO,SAAS8E,GAAe,CAC7B,aAAA,CAAe5F,CAAAA,CACf,UAAA,CAAA6F,CAAAA,CACA,WAAA,CAAAhF,CAAAA,CACA,SAAA,CAAArF,CAAAA,CACA,QAAA,CAAAuF,CACF,CAAA,CAAwB,CACtB,GAAM,CAACQ,CAAAA,CAASC,CAAU,CAAA,CAAIpH,cAAAA,CAAS,EAAE,CAAA,CACnC,CAACgE,CAAAA,CAASY,CAAU,CAAA,CAAI5E,cAAAA,CAAS,KAAK,CAAA,CAE5C,OAAAI,eAAAA,CAAU,IAAM,CACdwE,CAAAA,CAAWf,GAAe,EAC5B,CAAA,CAAG,EAAE,CAAA,CASHkC,eAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAPcP,CAAAA,EAAuB,CAC3CA,CAAAA,CAAE,cAAA,EAAe,CACZ2B,CAAAA,CAAQ,IAAA,IACbR,CAAAA,CAASQ,CAAAA,CAAQ,IAAA,EAAM,EACzB,CAAA,CAII,QAAA,CAAA,CAAA1G,cAAAA,CAAC,GAAA,CAAA,CAAE,KAAA,CAAO,CACR,MAAA,CAAQ,YAAA,CACR,QAAA,CAAUmF,CAAAA,CAAE,UAAA,CAAW,QAAA,CAAS,EAAA,CAChC,KAAA,CAAOA,CAAAA,CAAE,MAAA,CAAO,aAAA,CAChB,UAAA,CAAY,GAAA,CACZ,UAAA,CAAYA,CAAAA,CAAE,UAAA,CAAW,UAC3B,CAAA,CACG,QAAA,CAAA6F,CAAAA,CACH,CAAA,CAEAhL,eAAC,UAAA,CAAA,CACC,KAAA,CAAO0G,CAAAA,CACP,QAAA,CAAW3B,CAAAA,EAAM4B,CAAAA,CAAW5B,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC1C,WAAA,CAAaiB,CAAAA,EAAe,iBAAA,CAC5B,SAAA,CAAW,GAAA,CACX,QAAA,CAAUrF,EACV,YAAA,CAAW,oBAAA,CACX,KAAA,CAAO,CACL,KAAA,CAAO,MAAA,CACP,OAAA,CAAS4C,CAAAA,CAAU,WAAA,CAAc,WAAA,CACjC,MAAA,CAAQ,CAAA,UAAA,EAAa4B,CAAAA,CAAE,MAAA,CAAO,WAAW,CAAA,CAAA,CACzC,aAAcA,CAAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,EAAA,CAC/B,eAAA,CAAiBA,CAAAA,CAAE,MAAA,CAAO,eAAA,CAC1B,KAAA,CAAOA,CAAAA,CAAE,MAAA,CAAO,IAAA,CAChB,QAAA,CAAU5B,CAAAA,CAAU4B,CAAAA,CAAE,UAAA,CAAW,SAAS,EAAA,CAAKA,CAAAA,CAAE,UAAA,CAAW,QAAA,CAAS,EAAA,CACrE,MAAA,CAAQ,MAAA,CACR,SAAA,CAAW5B,CAAAA,CAAU,GAAA,CAAM,EAAA,CAC3B,UAAA,CAAY4B,CAAAA,CAAE,UAAA,CAAW,UAAA,CACzB,OAAA,CAAS,OACT,UAAA,CAAY,CAAA,aAAA,EAAgBA,CAAAA,CAAE,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,CAAA,EAAIA,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,aAAA,EAAgBA,CAAAA,CAAE,SAAA,CAAU,QAAA,CAAS,IAAI,IAAIA,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,CAAA,CAC1J,UAAA,CAAY,GAAA,CACZ,SAAA,CAAW,kCACb,CAAA,CACA,OAAA,CAAUJ,CAAAA,EAAM,CACdA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,YAAcI,CAAAA,CAAE,MAAA,CAAO,gBAAA,CAC7CJ,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAY,CAAA,UAAA,EAAaI,CAAAA,CAAE,MAAA,CAAO,cAAc,CAAA,CAAA,CACtEJ,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,eAAA,CAAkBI,CAAAA,CAAE,MAAA,CAAO,qBACnD,CAAA,CACA,MAAA,CAASJ,CAAAA,EAAM,CACbA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,WAAA,CAAcI,CAAAA,CAAE,MAAA,CAAO,WAAA,CAC7CJ,CAAAA,CAAE,aAAA,CAAc,MAAM,SAAA,CAAY,kCAAA,CAClCA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,eAAA,CAAkBI,CAAAA,CAAE,MAAA,CAAO,gBACnD,CAAA,CACF,CAAA,CAEAG,eAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,QAAA,CAAU3E,GAAa,CAAC+F,CAAAA,CAAQ,IAAA,EAAK,CACrC,KAAA,CAAO,CACL,KAAA,CAAO,MAAA,CACP,SAAA,CAAW,EAAA,CACX,OAAA,CAASnD,CAAAA,CAAU,WAAA,CAAc,WAAA,CACjC,MAAA,CAAQ4B,CAAAA,CAAE,OAAO,YAAA,CACjB,YAAA,CAAcA,CAAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,EAAA,CAC/B,eAAA,CAAkBuB,CAAAA,CAAQ,IAAA,EAAK,CAAwCvB,CAAAA,CAAE,MAAA,CAAO,gBAAA,CAA7CA,CAAAA,CAAE,MAAA,CAAO,wBAAA,CAC5C,MAAQuB,CAAAA,CAAQ,IAAA,EAAK,CAAmCvB,CAAAA,CAAE,MAAA,CAAO,WAAA,CAAxCA,CAAAA,CAAE,MAAA,CAAO,mBAAA,CAClC,QAAA,CAAU5B,CAAAA,CAAU4B,CAAAA,CAAE,UAAA,CAAW,QAAA,CAAS,EAAA,CAAKA,CAAAA,CAAE,WAAW,QAAA,CAAS,EAAA,CACrE,UAAA,CAAYA,CAAAA,CAAE,UAAA,CAAW,UAAA,CAAW,MAAA,CACpC,UAAA,CAAYA,CAAAA,CAAE,UAAA,CAAW,UAAA,CACzB,MAAA,CAAQxE,CAAAA,CAAY,aAAA,CAAgB,SAAA,CACpC,UAAA,CAAY,OAAOwE,CAAAA,CAAE,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,CAAA,EAAIA,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,CAAA,CAC1E,aAAA,CAAe,QAAA,CACf,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,eAAgB,QAAA,CAChB,GAAA,CAAK,CAAA,CACL,OAAA,CAASxE,CAAAA,CAAY,EAAA,CAAM,CAC7B,CAAA,CACA,YAAA,CAAeoE,CAAAA,EAAM,CACdA,CAAAA,CAAE,aAAA,CAAc,QAAA,GACnBA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,eAAA,CAAkBI,CAAAA,CAAE,MAAA,CAAO,qBAAA,CACjDJ,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAY,kBAAA,CAClCA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAYI,CAAAA,CAAE,OAAA,CAAQ,QAEhD,CAAA,CACA,YAAA,CAAeJ,CAAAA,EAAM,CACdA,CAAAA,CAAE,aAAA,CAAc,QAAA,GACnBA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,eAAA,CAAkBI,CAAAA,CAAE,MAAA,CAAO,gBAAA,CACjDJ,CAAAA,CAAE,aAAA,CAAc,MAAM,SAAA,CAAY,eAAA,CAClCA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,SAAA,CAAY,MAAA,EAEtC,CAAA,CAEC,QAAA,CAAA,CAAApE,CAAAA,EAAaX,cAAAA,CAAC0F,CAAAA,CAAA,CAAQ,IAAA,CAAMnC,CAAAA,CAAU,EAAA,CAAK,GAAI,KAAA,CAAO4B,CAAAA,CAAE,MAAA,CAAO,WAAA,CAAa,CAAA,CAC5ExE,CAAAA,CAAY,YAAA,CAAe,QAAA,CAAA,CAC9B,CAAA,CAAA,CACF,CAEJ,CC3DO,SAASsK,EAAAA,CAAY,CAC1B,IAAA,CAAAC,CAAAA,CACA,KAAA,CAAA3N,CAAAA,CACA,YAAA,CAAAoG,CAAAA,CACA,UAAA,CAAAqH,CAAAA,CACA,WAAA,CAAAhF,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,eAAA,CAAAkF,CAAAA,CACA,UAAAxK,CAAAA,CACA,kBAAA,CAAAE,CAAAA,CAAqB,KAAA,CACrB,WAAA,CAAAuK,CAAAA,CACA,KAAA,CAAAC,CAAAA,CAAQ,MAAA,CACR,cAAA,CAAAC,CAAAA,CACA,eAAA,CAAAC,CAAAA,CAAkB,KAAA,CAClB,gBAAA,CAAAC,CAAAA,CACA,MAAAlQ,CAAAA,CACA,gBAAA,CAAA0F,CAAAA,CACA,SAAA,CAAAoF,CAAAA,CAAY,KAAA,CACZ,QAAA,CAAAC,CAAAA,CAAW,IAAA,CACX,UAAA,CAAAC,CAAAA,CAAa,IAAA,CACb,UAAA,CAAAmF,CAAAA,CACA,OAAA,CAAAzQ,CAAAA,CACA,cAAAyO,CAAAA,CAAgB,KAAA,CAChB,WAAA,CAAAiC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CAAc,IAAA,CACd,sBAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,aAAA,CAAAvF,CAAAA,CAAgB,KAAA,CAChB,YAAA,CAAAC,EAAAA,CACA,gBAAA,CAAAC,CAAAA,CAAmB,KAAA,CACnB,QAAA,CAAAP,CAAAA,CACA,OAAA,CAAA6F,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,gBAAA,CAAAC,EAAAA,CAAmB,KACrB,CAAA,CAAqB,CACnB,IAAMC,EAAAA,CAAWjE,YAAAA,CAAuB,IAAI,CAAA,CACtCkE,EAAAA,CAAoBlE,YAAAA,CAA0B,IAAI,CAAA,CAClDmE,EAAAA,CAAanE,YAAAA,CAAO8D,CAAO,CAAA,CACjCK,EAAAA,CAAW,OAAA,CAAUL,CAAAA,CAErB,GAAM,CAACM,CAAAA,CAAUC,EAAW,CAAA,CAAI/M,cAAAA,CAAS,KAAK,CAAA,CACxC,CAAC/B,EAAAA,CAAa8G,EAAc,CAAA,CAAI/E,cAAAA,CAA2B,OAAO,CAAA,CAElE,CAAE,WAAA,CAAAH,EAAY,EAAIa,CAAAA,EAAiB,CAGzCN,eAAAA,CAAU,IAAM,CACd2M,EAAAA,CAAY,MAAA,CAAO,UAAA,CAAa,GAAG,CAAA,CAEnC,IAAMzH,CAAAA,CAAY,MAAA,CAAO,UAAA,CAAW,8BAA8B,CAAA,CAClEP,GAAeO,CAAAA,CAAU,OAAA,CAAU,MAAA,CAAS,OAAO,CAAA,CAEnD,IAAMC,CAAAA,CAAWC,CAAAA,EAA2BT,EAAAA,CAAeS,CAAAA,CAAE,OAAA,CAAU,MAAA,CAAS,OAAO,CAAA,CACvF,OAAAF,CAAAA,CAAU,iBAAiB,QAAA,CAAUC,CAAO,CAAA,CACrC,IAAMD,CAAAA,CAAU,mBAAA,CAAoB,QAAA,CAAUC,CAAO,CAC9D,CAAA,CAAG,EAAE,CAAA,CAGL,IAAMK,CAAAA,CAAmB1F,aAAAA,CACvB,IAAMnC,EAAAA,CAAaC,CAAAA,CAAOC,EAAAA,CAAa4B,EAAW,CAAA,CAClD,CAAC7B,CAAAA,CAAOC,EAAAA,CAAa4B,EAAW,CAClC,CAAA,CAGAO,eAAAA,CAAU,IAAM,CACdnB,EAAAA,CAAa2G,CAAC,EAChB,CAAA,CAAG,CAACA,CAAC,CAAC,CAAA,CAIN,IAAMoH,EAAAA,CACA,OAAO,MAAA,CAAW,GAAA,EAAe,CAACP,CAAAA,CAAmB,KAAA,CACtC,MAAA,CAAO,WAAA,CAAcA,CAAAA,CAAW,MAAA,CAC/B,GAAA,CAItBrM,eAAAA,CAAU,IAAM,CACd,IAAM6M,CAAAA,CAAQN,EAAAA,CAAS,OAAA,CACvB,GAAI,CAACM,CAAAA,CAAO,OAEZL,EAAAA,CAAkB,OAAA,EAAS,KAAA,GAE3B,IAAMM,CAAAA,CAAiB1H,CAAAA,EAAqB,CAC1C,GAAIA,CAAAA,CAAE,GAAA,GAAQ,QAAA,CAAU,CACtBqH,EAAAA,CAAW,OAAA,EAAQ,CACnB,MACF,CAEA,GAAIrH,CAAAA,CAAE,MAAQ,KAAA,CAAO,CACnB,IAAM2H,CAAAA,CAAoBF,CAAAA,CAAM,gBAAA,CAC9B,0EACF,CAAA,CACMG,EAAAA,CAAeD,CAAAA,CAAkB,CAAC,CAAA,CAClCE,EAAAA,CAAcF,CAAAA,CAAkBA,CAAAA,CAAkB,MAAA,CAAS,CAAC,CAAA,CAE9D3H,CAAAA,CAAE,QAAA,EAAY,QAAA,CAAS,aAAA,GAAkB4H,EAAAA,EAC3C5H,CAAAA,CAAE,cAAA,EAAe,CACjB6H,EAAAA,EAAa,KAAA,EAAM,EACV,CAAC7H,CAAAA,CAAE,QAAA,EAAY,QAAA,CAAS,gBAAkB6H,EAAAA,GACnD7H,CAAAA,CAAE,cAAA,EAAe,CACjB4H,EAAAA,EAAc,KAAA,EAAM,EAExB,CACF,CAAA,CAEA,OAAA,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAWF,CAAa,CAAA,CAC3C,IAAM,QAAA,CAAS,oBAAoB,SAAA,CAAWA,CAAa,CACpE,CAAA,CAAG,EAAE,CAAA,CAEL,IAAMI,EAAAA,CAAgB3B,CAAAA,GAAS,MAAA,CAC3B,oBAAA,CACAA,CAAAA,GAAS,MAAA,CACT,gBAAA,CACAA,CAAAA,GAAS,MACRQ,CAAAA,EAAe,qCAAA,CAChB,oCAAA,CAEEoB,EAAAA,CAAeT,CAAAA,CAAW,EAAA,CAAK,EAAA,CAC/BU,EAAAA,CAAa7B,CAAAA,GAAS,KAAA,CAAQ,GAAA,CAAM,GAAA,CAGpC8B,EAAAA,CAAiBX,CAAAA,CACnB,2BAAA,CACAE,EAAAA,CACA,2BACA,oBAAA,CAEEtJ,EAAAA,CAAiB,OAAO,MAAA,CAAW,GAAA,CAAc,MAAA,CAAO,WAAA,CAAc,CAAA,CAEtEgK,CAAAA,CAAmCZ,CAAAA,CACrC,CACE,QAAA,CAAU,OAAA,CACV,IAAA,CAAM,KAAA,CACN,GAAA,CAAK,KAAA,CACL,SAAA,CAAW,uBAAA,CACX,KAAA,CAAO,oBAAA,CACP,QAAA,CAAUU,EAAAA,CACV,OAAA,CAASD,EAAAA,CACT,YAAA,CAAc3H,CAAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,EAAA,CAAK,CAAA,CACpC,UAAA,CAAYA,EAAE,MAAA,CAAO,kBAAA,CACrB,KAAA,CAAOA,CAAAA,CAAE,MAAA,CAAO,IAAA,CAChB,SAAA,CAAWA,CAAAA,CAAE,OAAA,CAAQ,KAAA,CACrB,MAAA,CAAQ,CAAA,EAAGA,CAAAA,CAAE,OAAA,CAAQ,KAAK,CAAA,SAAA,EAAYA,EAAE,MAAA,CAAO,MAAM,CAAA,CAAA,CACrD,MAAA,CAAQ,IAAA,CACR,UAAA,CAAYA,CAAAA,CAAE,UAAA,CAAW,UAAA,CACzB,GAAGxB,CAAAA,EAAc,KAAA,CACjB,SAAA,CAAW,MACb,CAAA,CACAsI,EAAAA,EAAoBD,GAAc/I,EAAAA,CAAAA,CACjC,IAAM,CACL,IAAMiK,CAAAA,CAAgB,MAAA,CAAO,UAAA,CACvBC,CAAAA,CAAc,EAAA,CAGdC,CAAAA,CAFUpB,CAAAA,CAAW,IAAA,CAAOA,CAAAA,CAAW,KAAA,CAAQ,CAAA,CAEzBe,EAAAA,CAAa,EAEzC,OAAO,CACL,QAAA,CAAU,OAAA,CACV,IAAA,CAHkB,IAAA,CAAK,GAAA,CAAII,CAAAA,CAAa,IAAA,CAAK,GAAA,CAAIC,CAAAA,CAAWF,CAAAA,CAAgBH,EAAAA,CAAaI,CAAW,CAAC,CAAA,CAIrG,MAAOJ,EAAAA,CACP,OAAA,CAASD,EAAAA,CACT,YAAA,CAAc3H,CAAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,EAAA,CAC/B,UAAA,CAAYA,CAAAA,CAAE,MAAA,CAAO,kBAAA,CACrB,KAAA,CAAOA,CAAAA,CAAE,MAAA,CAAO,IAAA,CAChB,UAAWA,CAAAA,CAAE,OAAA,CAAQ,KAAA,CACrB,MAAA,CAAQ,CAAA,EAAGA,CAAAA,CAAE,OAAA,CAAQ,KAAK,CAAA,SAAA,EAAYA,CAAAA,CAAE,MAAA,CAAO,MAAM,CAAA,CAAA,CACrD,MAAA,CAAQ,KAAA,CACR,UAAA,CAAYA,EAAE,UAAA,CAAW,UAAA,CACzB,GAAIoH,EAAAA,CACA,CAAE,MAAA,CAAQtJ,EAAAA,CAAiB+I,CAAAA,CAAW,GAAA,CAAM,CAAE,CAAA,CAC9C,CAAE,GAAA,CAAKA,CAAAA,CAAW,MAAA,CAAS,CAAE,CAAA,CACjC,GAAGrI,CAAAA,EAAc,KAAA,CACjB,SAAA,CAAW,MACb,CACF,CAAA,GAAG,CACH,CACE,QAAA,CAAU,UAAA,CACV,IAAA,CAAM,KAAA,CACN,KAAA,CAAOoJ,EAAAA,CACP,QAASD,EAAAA,CACT,YAAA,CAAc3H,CAAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,EAAA,CAC/B,UAAA,CAAYA,CAAAA,CAAE,MAAA,CAAO,kBAAA,CACrB,KAAA,CAAOA,CAAAA,CAAE,MAAA,CAAO,IAAA,CAChB,SAAA,CAAWA,CAAAA,CAAE,QAAQ,KAAA,CACrB,MAAA,CAAQ,CAAA,EAAGA,CAAAA,CAAE,OAAA,CAAQ,KAAK,CAAA,SAAA,EAAYA,CAAAA,CAAE,MAAA,CAAO,MAAM,CAAA,CAAA,CACrD,MAAA,CAAQ,IAAA,CACR,UAAA,CAAYA,CAAAA,CAAE,UAAA,CAAW,WACzB,GAAIoH,EAAAA,CACA,CAAE,MAAA,CAAQ,MAAA,CAAQ,YAAA,CAAc,CAAA,CAAG,SAAA,CAAW,kBAAmB,CAAA,CACjE,CAAE,GAAA,CAAK,MAAA,CAAQ,SAAA,CAAW,CAAA,CAAG,SAAA,CAAW,kBAAmB,CAAA,CAC/D,GAAG5I,CAAAA,EAAc,KAAA,CACjB,SAAA,CAAW,MACb,CAAA,CAGE0J,CAAAA,CAAenD,CAAAA,EACnBmC,CAAAA,CACI,EAAC,CACD,CACE,SAAA,CAAW,CAAA,eAAA,EAAkBlH,CAAAA,CAAE,UAAU,QAAA,CAAS,MAAM,CAAA,CAAA,EAAIA,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,KAAA,CAAA,CACtF,cAAA,CAAgB,CAAA,EAAG+E,CAAAA,CAAQ,GAAI,CAAA,CAAA,CACjC,CAAA,CAGAoD,EAAAA,CAAoBnC,CAAAA,GAAoB,WAAaA,CAAAA,GAAoB,2BAAA,CAE/E,OACE7F,eAAAA,CAAC,KAAA,CAAA,CACC,GAAA,CAAK4G,EAAAA,CACL,IAAA,CAAK,QAAA,CACL,YAAA,CAAW,MAAA,CACX,YAAA,CAAYd,CAAAA,CAAc,oBAAA,CAAuB,MAAA,CACjD,iBAAA,CAAiBA,EAAc,MAAA,CAAY,oBAAA,CAC3C,aAAA,CAAW,IAAA,CACX,KAAA,CAAO6B,CAAAA,CACP,SAAA,CAAW/J,EAAAA,CAAG,cAAA,CAAgB8J,EAAc,CAAA,CAG5C,QAAA,CAAA,CAAAhN,cAAAA,CAAC,QAAA,CAAA,CACC,GAAA,CAAKmM,EAAAA,CACL,IAAA,CAAK,QAAA,CACL,OAAA,CAASJ,CAAAA,CACT,YAAA,CAAW,qBAAA,CACX,KAAA,CAAO,CACL,QAAA,CAAU,UAAA,CACV,GAAA,CAAKM,CAAAA,CAAW,EAAA,CAAK,CAAA,CACrB,KAAA,CAAOA,CAAAA,CAAW,GAAK,CAAA,CACvB,KAAA,CAAOA,CAAAA,CAAW,EAAA,CAAK,EAAA,CACvB,MAAA,CAAQA,CAAAA,CAAW,EAAA,CAAK,EAAA,CACxB,MAAA,CAAQ,MAAA,CACR,UAAA,CAAY,aAAA,CACZ,OAAA,CAAS,MAAA,CACT,MAAA,CAAQ,UACR,MAAA,CAAQ,EAAA,CACR,KAAA,CAAOlH,CAAAA,CAAE,MAAA,CAAO,WAAA,CAChB,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,QAAA,CAChB,YAAA,CAAcA,CAAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,GAC/B,UAAA,CAAY,CAAA,IAAA,EAAOA,CAAAA,CAAE,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,CAAA,EAAIA,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,CAAA,CAC1E,GAAGxB,CAAAA,EAAc,WACnB,CAAA,CACA,aAAeoB,CAAAA,EAAM,CACnBA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,eAAA,CAAkBI,CAAAA,CAAE,MAAA,CAAO,aAAA,CACjDJ,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,KAAA,CAAQI,CAAAA,CAAE,MAAA,CAAO,iBACzC,EACA,YAAA,CAAeJ,CAAAA,EAAM,CACnBA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,eAAA,CAAkB,aAAA,CACxCA,CAAAA,CAAE,aAAA,CAAc,KAAA,CAAM,KAAA,CAAQI,CAAAA,CAAE,MAAA,CAAO,YACzC,CAAA,CAEA,SAAAnF,cAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOqM,CAAAA,CAAW,EAAA,CAAK,EAAA,CAAI,MAAA,CAAQA,CAAAA,CAAW,EAAA,CAAK,EAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CACnF,QAAA,CAAArM,cAAAA,CAAC,QACC,CAAA,CAAE,sBAAA,CACF,MAAA,CAAO,cAAA,CACP,WAAA,CAAY,KAAA,CACZ,aAAA,CAAc,OAAA,CAChB,CAAA,CACF,CAAA,CACF,CAAA,CAGC,CAACoL,CAAAA,EACApL,cAAAA,CAAC,IAAA,CAAA,CACC,EAAA,CAAG,oBAAA,CACH,KAAA,CAAO,CACL,MAAA,CAAQ,YAAA,CACR,QAAA,CAAUqM,CAAAA,CAAWlH,CAAAA,CAAE,UAAA,CAAW,QAAA,CAAS,EAAA,CAAKA,CAAAA,CAAE,UAAA,CAAW,QAAA,CAAS,EAAA,CACtE,UAAA,CAAYA,EAAE,UAAA,CAAW,UAAA,CAAW,QAAA,CACpC,YAAA,CAAckH,CAAAA,CAAW,EAAA,CAAK,EAAA,CAC9B,aAAA,CAAe,SAAA,CACf,UAAA,CAAY,GAAA,CACZ,SAAA,CAAW,MAAA,CACX,UAAA,CAAYlH,CAAAA,CAAE,UAAA,CAAW,WACzB,GAAGkI,CAAAA,CAAY,CAAC,CAAA,CAChB,GAAG1J,CAAAA,EAAc,KACnB,CAAA,CAEC,QAAA,CAAAqH,CAAAA,EAAc6B,EAAAA,CACjB,CAAA,CAIDzB,CAAAA,EACC9F,eAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,SAAA,CAAW,QAAA,CACX,OAAA,CAAS,aACX,CAAA,CAGA,QAAA,CAAA,CAAAtF,cAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,KAAA,CAAO,EAAA,CACP,MAAA,CAAQ,EAAA,CACR,YAAA,CAAc,KAAA,CACd,gBAAiBmF,CAAAA,CAAE,MAAA,CAAO,cAAA,CAC1B,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,QAAA,CAChB,MAAA,CAAQ,aAAA,CACR,SAAA,CAAW,CAAA,wBAAA,EAA2BA,CAAAA,CAAE,SAAA,CAAU,MAAA,CAAO,MAAM,CAAA,uCAAA,CAAA,CAC/D,GAAGxB,CAAAA,EAAc,WACnB,CAAA,CAEA,QAAA,CAAA3D,cAAAA,CAAC,KAAA,CAAA,CACC,KAAA,CAAM,IAAA,CACN,MAAA,CAAO,IAAA,CACP,OAAA,CAAQ,WAAA,CACR,IAAA,CAAK,MAAA,CAEL,SAAAA,cAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,iBAAA,CACF,MAAA,CAAQmF,CAAAA,CAAE,MAAA,CAAO,OAAA,CACjB,WAAA,CAAY,KAAA,CACZ,aAAA,CAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,KAAA,CAAO,CACL,gBAAiB,EAAA,CACjB,gBAAA,CAAkB,CAAA,CAClB,SAAA,CAAW,uCACb,CAAA,CACF,CAAA,CACF,CAAA,CACF,CAAA,CAGAnF,cAAAA,CAAC,GAAA,CAAA,CACC,KAAA,CAAO,CACL,MAAA,CAAQ,CAAA,CACR,QAAA,CAAUsN,EAAAA,CAAoB,EAAA,CAAKnI,CAAAA,CAAE,UAAA,CAAW,QAAA,CAAS,EAAA,CACzD,UAAA,CAAYmI,EAAAA,CAAoBnI,CAAAA,CAAE,UAAA,CAAW,UAAA,CAAW,IAAA,CAAOA,CAAAA,CAAE,UAAA,CAAW,UAAA,CAAW,MAAA,CACvF,MAAOA,CAAAA,CAAE,MAAA,CAAO,IAAA,CAChB,UAAA,CAAYmI,EAAAA,CAAoB,uBAAA,CAA0BnI,CAAAA,CAAE,UAAA,CAAW,UAAA,CACvE,SAAA,CAAW,yCAAA,CACX,GAAGxB,CAAAA,EAAc,cACnB,CAAA,CAEC,QAAA,CAAA2J,GAAoB,SAAA,CAAYnC,CAAAA,CACnC,CAAA,CAGCmC,EAAAA,EACCtN,cAAAA,CAAC,GAAA,CAAA,CACC,KAAA,CAAO,CACL,MAAA,CAAQ,SAAA,CACR,QAAA,CAAUmF,CAAAA,CAAE,UAAA,CAAW,QAAA,CAAS,EAAA,CAChC,UAAA,CAAYA,EAAE,UAAA,CAAW,UAAA,CAAW,MAAA,CACpC,KAAA,CAAOA,CAAAA,CAAE,MAAA,CAAO,aAAA,CAChB,SAAA,CAAW,0CACb,CAAA,CACD,QAAA,CAAA,2BAAA,CAED,CAAA,CAAA,CAEJ,CAAA,CAID7J,CAAAA,EAAS,CAAC8P,CAAAA,EACT9F,gBAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,OAAA,CAAS,UAAA,CACT,YAAA,CAAc,EAAA,CACd,YAAA,CAAcH,CAAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,EAAA,CAC/B,eAAA,CAAiBA,CAAAA,CAAE,MAAA,CAAO,YAAA,CAC1B,OAAQ,CAAA,UAAA,EAAaA,CAAAA,CAAE,MAAA,CAAO,WAAW,CAAA,CAAA,CACzC,KAAA,CAAOA,CAAAA,CAAE,MAAA,CAAO,KAAA,CAChB,QAAA,CAAUA,CAAAA,CAAE,UAAA,CAAW,QAAA,CAAS,EAAA,CAChC,UAAA,CAAY,GAAA,CACZ,QAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,GAAA,CAAK,CAAA,CACL,GAAGkI,CAAAA,CAAY,CAAC,CAAA,CAChB,GAAG1J,CAAAA,EAAc,YACnB,CAAA,CAEA,QAAA,CAAA,CAAA3D,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO,EAAA,CAAI,MAAA,CAAQ,EAAA,CAAI,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,KAAA,CAAO,CAAE,UAAA,CAAY,CAAE,CAAA,CACjF,QAAA,CAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,kLAAA,CAAmL,MAAA,CAAO,cAAA,CAAe,WAAA,CAAa,GAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,cAAA,CAAe,OAAA,CAAQ,CAAA,CAClR,CAAA,CACC1E,CAAAA,CAAAA,CACH,CAAA,CAID+P,CAAAA,GAAU,UAAA,EAAcC,CAAAA,EAAkBE,GACzCxL,cAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOqN,CAAAA,CAAY,CAAC,CAAA,CACvB,QAAA,CAAArN,cAAAA,CAAC+K,EAAAA,CAAA,CACC,aAAA,CAAe5F,CAAAA,CACf,UAAA,CAAYmG,CAAAA,CAAe,UAAA,CAC3B,WAAA,CAAaA,EAAe,WAAA,CAC5B,SAAA,CAAWC,CAAAA,CACX,QAAA,CAAUC,CAAAA,CACZ,CAAA,CACF,CAAA,CAIDH,CAAAA,GAAU,MAAA,EAAUxK,CAAAA,EACnBb,cAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO,CACV,OAAA,CAAS,MAAA,CACT,eAAgB,QAAA,CAChB,OAAA,CAAS,QAAA,CACT,GAAGqN,CAAAA,CAAY,CAAC,CAClB,CAAA,CACE,QAAA,CAAArN,cAAAA,CAAC0F,CAAAA,CAAA,CAAQ,IAAA,CAAM,EAAA,CAAI,KAAA,CAAOP,CAAAA,CAAE,OAAO,aAAA,CAAe,CAAA,CACpD,CAAA,CAIDkG,CAAAA,GAAU,MAAA,EAAU,CAACxK,CAAAA,EACpByE,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO+H,CAAAA,CAAY,CAAC,CAAA,CACtB,QAAA,CAAA,CAAAnC,CAAAA,GAAS,UAAA,EACRlL,eAAC+F,EAAAA,CAAA,CACC,aAAA,CAAeZ,CAAAA,CACf,WAAA,CAAaa,CAAAA,CACb,UAAA,CAAYC,CAAAA,CACZ,SAAA,CAAWtF,CAAAA,CACX,QAAA,CAAUuF,CAAAA,CACV,YAAA,CAAcvC,CAAAA,CACd,aAAA,CAAe3C,CAAAA,CAAmB,CAChC,OAAA,CAASA,CAAAA,CAAiB,OAAA,CAC1B,MAAA,CAAQA,CAAAA,CAAiB,MAC3B,CAAA,CAAI,MAAA,CACJ,SAAA,CAAWoF,CAAAA,CACX,QAAA,CAAUC,CAAAA,CACV,UAAA,CAAYC,CAAAA,CACZ,aAAA,CAAeC,CAAAA,CACf,aAAcC,EAAAA,CACd,gBAAA,CAAkBC,CAAAA,CACpB,CAAA,CAEDyE,CAAAA,GAAS,MAAA,EACRlL,cAAAA,CAACsI,EAAAA,CAAA,CACC,aAAA,CAAenD,CAAAA,CACf,SAAA,CAAWxE,CAAAA,CACX,QAAA,CAAUuF,CAAAA,CACV,WAAA,CAAalF,CAAAA,EAAkB,IAAA,EAAQ,MAAA,CACvC,SAAA,CAAWoF,CAAAA,CACX,MAAA,CAAQqF,CAAAA,CACV,CAAA,CAEDP,CAAAA,GAAS,KAAA,EACRlL,cAAAA,CAACmK,EAAAA,CAAA,CACC,aAAA,CAAehF,CAAAA,CACf,UAAA,CAAYc,EACZ,SAAA,CAAWtF,CAAAA,CACX,QAAA,CAAUuF,CAAAA,CACV,YAAA,CAAcyF,CAAAA,CACd,mBAAA,CAAqBC,CAAAA,CACrB,QAAA,CAAUC,CAAAA,CACV,SAAA,CAAWC,CAAAA,CACX,YAAA,CAAcnI,CAAAA,CACd,aAAA,CAAe3C,CAAAA,CAAmB,CAChC,MAAA,CAAQA,CAAAA,CAAiB,MAAA,CACzB,OAAA,CAASA,CAAAA,CAAiB,OAC5B,CAAA,CAAI,MAAA,CACJ,SAAA,CAAWoF,CAAAA,CACb,CAAA,CAED8E,CAAAA,GAAS,MAAA,EAAUlQ,CAAAA,EAAWA,CAAAA,CAAQ,MAAA,CAAS,GAC9CgF,cAAAA,CAACwJ,EAAAA,CAAA,CACC,aAAA,CAAerE,CAAAA,CACf,OAAA,CAASnK,CAAAA,CACT,aAAA,CAAeyO,CAAAA,CACf,SAAA,CAAW9I,CAAAA,CACX,QAAA,CAAUuF,CAAAA,CACV,eAAA,CAAiBlF,CAAAA,EAAkB,YAAA,EAAgB,OACnD,SAAA,CAAWoF,CAAAA,CACb,CAAA,CAAA,CAEJ,CAAA,CAIFd,eAAAA,CAAC,KAAA,CAAA,CAAI,WAAA,CAAU,QAAA,CAAS,SAAA,CAAU,SAAA,CAAU,KAAA,CAAO,CAAE,QAAA,CAAU,UAAA,CAAY,IAAA,CAAM,KAAM,EACpF,QAAA,CAAA,CAAA8F,CAAAA,EAAe,8CAAA,CACf9P,CAAAA,EAAS,CAAA,OAAA,EAAUA,CAAK,CAAA,CAAA,CAAA,CAC3B,CAAA,CAAA,CACF,CAEJ,CCvZO,SAASiS,EAAAA,CAAO,CACrB,SAAA,CAAAhR,CAAAA,CACA,IAAA,CAAAH,CAAAA,CACA,IAAA,CAAA8O,CAAAA,CAAO,UAAA,CACP,QAAA,CAAA7E,CAAAA,CAAW,IAAA,CACX,UAAA,CAAAC,CAAAA,CAAa,IAAA,CACb,UAAA,CAAAmF,EACA,OAAA,CAAAzQ,CAAAA,CACA,aAAA,CAAAyO,CAAAA,CAAgB,KAAA,CAChB,WAAA,CAAAiC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CAAc,IAAA,CACd,sBAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,aAAA,CAAAvF,CAAAA,CAAgB,KAAA,CAChB,YAAA,CAAAC,CAAAA,CACA,gBAAA,CAAAC,CAAAA,CAAmB,KAAA,CACnB,UAAA,CAAA+G,CAAAA,CAAa,KAAA,CACb,YAAA,CAAAlN,CAAAA,CACA,mBAAA,CAAAkB,CAAAA,CACA,gBAAA,CAAAS,EACA,sBAAA,CAAAC,CAAAA,CACA,eAAA,CAAAC,CAAAA,CACA,QAAA,CAAAsL,CAAAA,CACA,QAAA,CAAAxJ,CAAAA,CAAW,IAAA,CACX,QAAA,CAAAyJ,CAAAA,CAAWrV,CAAAA,CAAS,QAAA,CACpB,IAAA,CAAAiL,CAAAA,CAAOjL,CAAAA,CAAS,KAChB,KAAA,CAAAkF,CAAAA,CAAQlF,CAAAA,CAAS,KAAA,CACjB,YAAA,CAAAsL,CAAAA,CACA,OAAA,CAAAgK,EAAAA,CAAU,IAAA,CACV,WAAA,CAAA/J,CAAAA,CAAcvL,CAAAA,CAAS,aAAA,CACvB,aAAA,CAAAwL,CAAAA,CAAgBxL,CAAAA,CAAS,eACzB,UAAA,CAAA2S,CAAAA,CACA,WAAA,CAAAhF,CAAAA,CACA,UAAA,CAAAC,EAAAA,CAAa5N,CAAAA,CAAS,WAAA,CACtB,eAAA,CAAA8S,EAAAA,CAAkB9S,CAAAA,CAAS,iBAAA,CAC3B,QAAA,CAAA6N,EAAAA,CACA,MAAA,CAAA0H,EAAAA,CACA,QAAA7B,CAAAA,CACA,OAAA,CAAA8B,EACF,CAAA,CAAgB,CACd,GAAM,CAAE,QAAA,CAAA3O,EAAAA,CAAU,aAAA,CAAAG,EAAAA,CAAe,SAAA,CAAAQ,EAAAA,CAAW,UAAA,CAAAE,CAAAA,CAAY,WAAA,CAAAZ,GAAa,MAAA,CAAAK,EAAO,CAAA,CAAIS,CAAAA,EAAiB,CAE3F,CAAE,aAAA,CAAA6N,EAAc,CAAA,CAAI9L,EAAAA,CAAqB,CAC7C,SAAA,CAAAzF,CAAAA,CACA,gBAAA,CAAA0F,CAAAA,CACA,sBAAA,CAAAC,EACA,eAAA,CAAAC,CACF,CAAC,CAAA,CAEK,CAAE,QAAA,CAAAR,EAAAA,CAAU,UAAA,CAAAE,EAAW,CAAA,CAAIH,EAAAA,CAAmB,CAClD,SAAA,CAAAnF,CAAAA,CACA,MAAA,CAAQH,CAAAA,EAAM,IAAM+C,EAAAA,EAAa,EAAA,CACjC,mBAAA,CAAAqC,CACF,CAAC,CAAA,CACK,CAAC6J,EAAAA,CAAO0C,CAAQ,CAAA,CAAIxO,cAAAA,CAA0C,MAAM,CAAA,CACpE,CAACyO,CAAAA,CAAgBC,EAAiB,CAAA,CAAI1O,cAAAA,CAAwB,IAAI,CAAA,CAClE,CAACgM,CAAAA,CAAiB2C,CAAkB,CAAA,CAAI3O,cAAAA,CAAS,KAAK,CAAA,CACtD,CAAC2E,CAAAA,CAAaiK,CAAc,CAAA,CAAI5O,cAAAA,CAAS,CAAC,CAAA,CAC1C,CAACyE,EAAAA,CAAiBoK,EAAkB,CAAA,CAAI7O,cAAAA,CAAS,KAAK,CAAA,CACtD,CAACyM,EAAAA,CAAYqC,EAAa,CAAA,CAAI9O,cAAAA,CAAyB,IAAI,CAAA,CAC3D,CAAC8M,GAAUC,EAAW,CAAA,CAAI/M,cAAAA,CAAS,KAAK,CAAA,CACxC,CAAC+O,EAAAA,CAAYC,EAAa,CAAA,CAAIhP,cAAAA,CAAS,KAAK,CAAA,CAC5CiP,EAAAA,CAAevG,YAAAA,CAAuB,IAAI,CAAA,CAC1CwG,GAAoBxG,YAAAA,EAAsC,CAC1DyG,EAAAA,CAAoBzG,YAAAA,CAAyD,IAAI,CAAA,CAGvFtI,eAAAA,CAAU,KACR4O,EAAAA,CAAc,IAAI,CAAA,CAClBjC,EAAAA,CAAY,MAAA,CAAO,UAAA,CAAa,GAAG,CAAA,CAC5B,IAAM,CACX,YAAA,CAAamC,EAAAA,CAAkB,OAAO,EACxC,CAAA,CAAA,CACC,EAAE,CAAA,CAGL9O,eAAAA,CAAU,IAAM,CACdwO,CAAAA,CAAe3O,EAAAA,CAAO,cAAA,EAAgB,EACtC,IAAMI,CAAAA,CAAe,IAAM,CAEzB,UAAA,CAAW,IAAMuO,CAAAA,CAAe3O,EAAAA,CAAO,cAAA,EAAgB,CAAA,CAAG,GAAI,EAChE,CAAA,CACA,OAAA,MAAA,CAAO,gBAAA,CAAiB,SAAUI,CAAY,CAAA,CACvC,IAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUA,CAAY,CAChE,CAAA,CAAG,CAACJ,EAAM,CAAC,CAAA,CAEX,IAAMuE,CAAAA,CAAS1E,EAAAA,GAAkB9C,EAGjCoD,eAAAA,CAAU,IAAM,CACToE,CAAAA,GACHgK,CAAAA,CAAS,MAAM,CAAA,CACf,YAAA,CAAaU,EAAAA,CAAkB,OAAO,CAAA,EAE1C,CAAA,CAAG,CAAC1K,CAAM,CAAC,CAAA,CAGXpE,eAAAA,CAAU,IAAM,CACd,GAAI,CAACoE,CAAAA,EAAU,CAACsI,EAAAA,CAAU,OAC1B,IAAMtC,CAAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CACjC,OAAA,QAAA,CAAS,KAAK,KAAA,CAAM,QAAA,CAAW,QAAA,CACxB,IAAM,CAAE,QAAA,CAAS,IAAA,CAAK,KAAA,CAAM,QAAA,CAAWA,EAAM,CACtD,CAAA,CAAG,CAAChG,CAAAA,CAAQsI,EAAQ,CAAC,EAGrB1M,eAAAA,CAAU,IAAM,CACd,GAAI,CAACiE,CAAAA,CAAa,OAElB,IAAM+K,CAAAA,CAAYH,EAAAA,CAAa,OAAA,CAC/B,GAAI,CAACG,CAAAA,CAAW,OAEhB,IAAMC,EAASD,CAAAA,CAAU,aAAA,CACzB,GAAI,CAACC,CAAAA,CAAQ,OAEb,IAAMC,EAAAA,CAAmB,IAAMT,EAAAA,CAAmB,IAAI,CAAA,CAChDU,EAAAA,CAAmB,IAAMV,EAAAA,CAAmB,KAAK,EAEvD,OAAAQ,CAAAA,CAAO,gBAAA,CAAiB,YAAA,CAAcC,EAAgB,CAAA,CACtDD,CAAAA,CAAO,gBAAA,CAAiB,YAAA,CAAcE,EAAgB,CAAA,CAE/C,IAAM,CACXF,CAAAA,CAAO,mBAAA,CAAoB,YAAA,CAAcC,EAAgB,CAAA,CACzDD,CAAAA,CAAO,mBAAA,CAAoB,YAAA,CAAcE,EAAgB,EAC3D,CACF,CAAA,CAAG,CAAClL,CAAW,CAAC,CAAA,CAEhB,GAAM,CAAE,MAAA,CAAAmL,EAAAA,CAAQ,UAAApO,EAAAA,CAAW,kBAAA,CAAAE,EAAAA,CAAoB,KAAA,CAAAvF,EAAAA,CAAO,gBAAA,CAAA0F,EAAAA,CAAkB,SAAA,CAAAoF,EAAU,CAAA,CAAI1F,EAAAA,CAAU,CAC9F,SAAA,CAAAnE,CAAAA,CACA,IAAA,CAAA2O,CAAAA,CACA,YAAalQ,CAAAA,CACb,IAAA,CAAAoB,CAAAA,CACA,UAAA,CAAAoR,CAAAA,CACA,YAAA,CAAAlN,CAAAA,CACA,SAAA,CAAYjF,CAAAA,EAAa,CACvB4S,EAAAA,CAAkB5S,CAAAA,CAAS,EAAE,CAAA,CACzBmG,CAAAA,EAAqBK,EAAAA,EAAW,CACpCqE,EAAAA,GAAW7K,CAAQ,CAAA,CAGIoS,CAAAA,EAAYiB,EAAAA,CAAkB,OAAA,GAClDjB,CAAAA,CAAS,eAAA,EAAmB,IAAA,EAAQiB,EAAAA,CAAkB,OAAA,CAAQ,MAAA,EAAU,IAAA,EACxEA,EAAAA,CAAkB,OAAA,CAAQ,QAAUjB,CAAAA,CAAS,eAAA,EAC7CA,CAAAA,CAAS,cAAA,EAAkBiB,EAAAA,CAAkB,OAAA,CAAQ,IAAA,GAAS,MAAA,CAAA,EAG3CxD,CAAAA,GAAS,MAAA,CAC7B6C,CAAAA,CAAS,UAAU,CAAA,EAEnBA,CAAAA,CAAS,SAAS,CAAA,CAClBU,GAAkB,OAAA,CAAU,UAAA,CAAW,IAAM,CAC3C1O,CAAAA,EAAW,CACXgO,CAAAA,CAAS,MAAM,EACjB,CAAA,CAAG,GAAI,CAAA,EAEX,CAAA,CACA,OAAA,CAAUzR,CAAAA,EAAQ,CAChB,QAAQ,IAAA,CAAK,6BAAA,CAA+BA,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAI,OAAA,CAAUA,CAAG,CAAA,CACpFuR,EAAAA,GAAUvR,CAA6B,EACzC,CACF,CAAC,CAAA,CAEK0S,EAAAA,CAAalP,iBAAAA,CAAY,IAAM,CACnC,GAAI0O,EAAAA,CAAa,OAAA,CAAS,CAKxB,IAAMS,CAAAA,CAAST,EAAAA,CAAa,OAAA,CAAQ,aAAA,CAAc,QAAQ,CAAA,CAC1DH,EAAAA,CAAAA,CAAeY,CAAAA,EAAUT,EAAAA,CAAa,OAAA,EAAS,uBAAuB,EACxE,CACA3O,EAAAA,CAAUtD,CAAS,CAAA,CACnBqR,EAAAA,KACF,CAAA,CAAG,CAACrR,CAAAA,CAAWsD,EAAAA,CAAW+N,EAAM,CAAC,CAAA,CAE3BsB,EAAAA,CAAcpP,kBAAY,IAAM,CACpC,YAAA,CAAa2O,EAAAA,CAAkB,OAAO,CAAA,CACtC1O,CAAAA,EAAW,CACXgO,CAAAA,CAAS,MAAM,CAAA,CACfhC,CAAAA,KACF,CAAA,CAAG,CAAChM,CAAAA,CAAYgM,CAAO,CAAC,CAAA,CAGlBzE,EAAAA,CAAexH,iBAAAA,CAClB3D,CAAAA,EAAgH,CAC/GuS,EAAAA,CAAkB,OAAA,CAAU,CAAE,MAAA,CAAQvS,CAAAA,CAAK,MAAA,CAAQ,IAAA,CAAMA,CAAAA,CAAK,IAAK,CAAA,CACnE4S,EAAAA,CAAO5S,CAAI,EACb,CAAA,CACA,CAAC4S,EAAM,CACT,CAAA,CAGMI,EAAAA,CAAuBrP,iBAAAA,CAC3B,MAAO4G,CAAAA,EAAoB,CACzB,GAAKsH,CAAAA,CACL,CAAAE,EAAmB,IAAI,CAAA,CACvB,GAAI,CACF,MAAM1O,EAAAA,CAAO,cAAA,CAAewO,CAAAA,CAAgB,CAAE,OAAA,CAAAtH,CAAQ,CAAC,EACzD,CAAA,MAASpK,CAAAA,CAAK,CAEZ,QAAQ,IAAA,CAAK,uCAAA,CAAyCA,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAI,OAAA,CAAUA,CAAG,EAChG,CAAA,OAAE,CACA4R,CAAAA,CAAmB,KAAK,CAAA,CACxBH,CAAAA,CAAS,SAAS,CAAA,CAClBU,GAAkB,OAAA,CAAU,UAAA,CAAW,IAAM,CAC3C1O,CAAAA,EAAW,CACXgO,CAAAA,CAAS,MAAM,EACjB,CAAA,CAAG,GAAI,EACT,CAAA,CACF,CAAA,CACA,CAACC,CAAAA,CAAgBjO,EAAYP,EAAM,CACrC,CAAA,CAEM4P,EAAAA,CAAuB5B,CAAAA,EAAcpH,EAAAA,CAAa,QAAA,CAAWH,EAAAA,CAEnE,GAAI/G,EAAAA,EAAY,CAACyO,EAAAA,EAAWhM,EAAAA,EAAY,CAACmM,EAAAA,CAAe,OAAO,KAE/D,IAAMuB,EAAAA,CAAwD,CAC5D,WAAA,CAAa,CAAE,QAAA,CAAU,UAAA,CAAY,GAAA,CAAK,CAAA,CAAG,KAAA,CAAO,CAAA,CAAG,SAAA,CAAW,sBAAuB,CAAA,CACzF,UAAA,CAAY,CAAE,SAAU,UAAA,CAAY,GAAA,CAAK,CAAA,CAAG,IAAA,CAAM,CAAA,CAAG,SAAA,CAAW,uBAAwB,CAAA,CACxF,cAAA,CAAgB,CAAE,QAAA,CAAU,UAAA,CAAY,MAAA,CAAQ,CAAA,CAAG,KAAA,CAAO,CAAA,CAAG,UAAW,qBAAsB,CAAA,CAC9F,aAAA,CAAe,CAAE,QAAA,CAAU,UAAA,CAAY,MAAA,CAAQ,CAAA,CAAG,IAAA,CAAM,CAAA,CAAG,SAAA,CAAW,sBAAuB,CAAA,CAC7F,MAAA,CAAU,CAAE,QAAA,CAAU,UAAA,CAAY,OAAA,CAAS,aAAc,CAC3D,CAAA,CAEMC,EAAAA,CAAa,CACjB,IAAA,CAAApE,CAAAA,CACA,KAAA,CAAA3N,CAAAA,CACA,YAAA,CAAAoG,CAAAA,CACA,UAAA,CAAAqH,CAAAA,CACA,WAAA,CAAAhF,EACA,UAAA,CAAYoJ,EAAAA,CACZ,eAAA,CAAAjE,EAAAA,CACA,SAAA,CAAAxK,EAAAA,CACA,kBAAA,CAAoB6M,CAAAA,EAAc3M,EAAAA,CAClC,WAAA,CAAawK,EAAAA,GAAU,SAAA,CACvB,KAAA,CAAAA,EAAAA,CACA,cAAA,CAAgBoC,CAAAA,CAChB,gBAAAlC,CAAAA,CACA,gBAAA,CAAkB4D,EAAAA,CAClB,KAAA,CAAA7T,EAAAA,CACA,gBAAA,CAAkBkS,CAAAA,CAAaxM,EAAAA,CAAmB,IAAA,CAClD,SAAA,CAAWwM,CAAAA,EAAcpH,EAAAA,CACzB,QAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CACA,WAAAmF,CAAAA,CACA,OAAA,CAAAzQ,CAAAA,CACA,aAAA,CAAAyO,CAAAA,CACA,WAAA,CAAAiC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,sBAAA,CAAAC,CAAAA,CACA,WAAA,CAAAC,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,aAAA,CAAAvF,EACA,YAAA,CAAAC,CAAAA,CACA,gBAAA,CAAAC,CAAAA,CACA,QAAA,CAAUa,EAAAA,CACV,OAAA,CAAS4H,EAAAA,CACT,UAAA,CAAYlD,EAAAA,EAAc,MAAA,CAC1B,gBAAA,CAAkB,CAACK,EACrB,CAAA,CAEA,OACE/G,gBAAC,KAAA,CAAA,CACC,GAAA,CAAKkJ,EAAAA,CACL,KAAA,CAAO,CACL,GAAGa,EAAAA,CAAe3B,CAAQ,CAAA,CAC1B,MAAA,CAAQ3J,CAAAA,CAAS,GAAA,CAAQ,MAC3B,CAAA,CACA,SAAA,CAAU,kBAAA,CACV,sBAAqBxH,CAAAA,CAErB,QAAA,CAAA,CAAAyD,cAAAA,CAAC0D,EAAAA,CAAA,CACC,IAAA,CAAMJ,CAAAA,CACN,KAAA,CAAO/F,CAAAA,CACP,YAAA,CAAcoG,CAAAA,CACd,WAAA,CAAaC,CAAAA,CACb,aAAA,CAAeC,CAAAA,CACf,OAAA,CAASmL,GACT,MAAA,CAAQjL,CAAAA,CACR,eAAA,CAAiBC,EAAAA,CACjB,QAAA,CAAUC,CAAAA,CACV,WAAA,CAAaC,CAAAA,CACf,CAAA,CAGCH,CAAAA,EAAU,CAACsI,EAAAA,EAAYiC,EAAAA,EAAciB,qBAAAA,CACpCvP,cAAAA,CAACiL,EAAAA,CAAA,CAAa,GAAGqE,EAAAA,CAAY,CAAA,CAC7B,QAAA,CAAS,IACX,CAAA,CAGCvL,CAAAA,EAAUsI,EAAAA,EAAYiC,EAAAA,EAAciB,qBAAAA,CACnCvP,cAAAA,CAAC,KAAA,CAAA,CACC,IAAA,CAAK,cAAA,CACL,KAAA,CAAO,CACL,QAAA,CAAU,OAAA,CACV,KAAA,CAAO,CAAA,CACP,MAAA,CAAQ,KAAA,CACR,eAAA,CAAiB,iBAAA,CACjB,cAAA,CAAgB,WAAA,CAChB,oBAAA,CAAsB,WACxB,CAAA,CACA,SAAA,CAAU,sBAAA,CACV,OAAA,CAASkP,GAET,QAAA,CAAAlP,cAAAA,CAAC,KAAA,CAAA,CAAI,OAAA,CAAU+E,CAAAA,EAAMA,CAAAA,CAAE,eAAA,EAAgB,CACrC,QAAA,CAAA/E,cAAAA,CAACiL,EAAAA,CAAA,CAAa,GAAGqE,EAAAA,CAAY,CAAA,CAC/B,CAAA,CACF,EACA,QAAA,CAAS,IACX,CAAA,CAAA,CACF,CAEJ,CCvbO,SAASE,EAAAA,CAAS,CAAE,SAAA,CAAAjT,CAAAA,CAAW,eAAA,CAAAkT,CAAgB,CAAA,CAAoC,CACxF,GAAM,CAAE,MAAA,CAAAjQ,CAAO,CAAA,CAAIS,GAAiB,CAC9B,CAACuK,CAAAA,CAAOC,CAAQ,CAAA,CAAIlL,cAAAA,CAA2B,IAAI,CAAA,CACnD,CAACoB,CAAAA,CAAWC,CAAY,CAAA,CAAIrB,cAAAA,CAAS,IAAI,CAAA,CACzC,CAACjE,EAAOyF,CAAQ,CAAA,CAAIxB,cAAAA,CAAwB,IAAI,CAAA,CAEtD,OAAAI,eAAAA,CAAU,IAAM,CACd,IAAIuB,CAAAA,CAAY,KAAA,CAEVwO,CAAAA,CAAa,SAAY,CAC7B,GAAI,CACF,IAAMvT,CAAAA,CAAO,MAAMqD,CAAAA,CAAO,QAAA,CAASjD,CAAS,CAAA,CACvC2E,CAAAA,GACHuJ,CAAAA,CAAStO,CAAI,CAAA,CACb4E,CAAAA,CAAS,IAAI,CAAA,EAEjB,CAAA,MAASzE,CAAAA,CAAK,CACP4E,CAAAA,EACHH,CAAAA,CAASzE,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAI,OAAA,CAAU,sBAAsB,EAExE,CAAA,OAAE,CACK4E,CAAAA,EACHN,CAAAA,CAAa,KAAK,EAEtB,CACF,EAEA8O,CAAAA,EAAW,CAEX,IAAIC,CAAAA,CACJ,OAAIF,CAAAA,EAAmBA,CAAAA,CAAkB,CAAA,GACvCE,CAAAA,CAAa,WAAA,CAAYD,CAAAA,CAAYD,CAAe,CAAA,CAAA,CAG/C,IAAM,CACXvO,CAAAA,CAAY,KACRyO,CAAAA,EAAY,aAAA,CAAcA,CAAU,EAC1C,CACF,CAAA,CAAG,CAACnQ,CAAAA,CAAQjD,CAAAA,CAAWkT,CAAe,CAAC,CAAA,CAEhC,CAAE,KAAA,CAAAjF,CAAAA,CAAO,SAAA,CAAA7J,EAAW,KAAA,CAAArF,CAAM,CACnC,CCtCA,IAAMsU,EAAAA,CASD,CACH,EAAA,CAAI,CAAE,QAAA,CAAU,GAAI,cAAA,CAAgB,EAAA,CAAI,QAAA,CAAU,EAAA,CAAI,GAAA,CAAK,CAAA,CAAG,MAAA,CAAQ,CAAA,CAAG,MAAA,CAAQ,CAAA,CAAG,SAAA,CAAW,CAAA,CAAG,QAAA,CAAU,EAAG,CAAA,CAC/G,EAAA,CAAI,CAAE,QAAA,CAAU,IAAA,CAAM,cAAA,CAAgB,EAAA,CAAI,QAAA,CAAU,EAAA,CAAI,GAAA,CAAK,CAAA,CAAG,MAAA,CAAQ,EAAA,CAAI,MAAA,CAAQ,CAAA,CAAG,SAAA,CAAW,CAAA,CAAG,QAAA,CAAU,EAAG,EAClH,EAAA,CAAI,CAAE,QAAA,CAAU,EAAA,CAAI,cAAA,CAAgB,EAAA,CAAI,QAAA,CAAU,EAAA,CAAI,GAAA,CAAK,CAAA,CAAG,MAAA,CAAQ,EAAA,CAAI,MAAA,CAAQ,CAAA,CAAG,SAAA,CAAW,CAAA,CAAG,SAAU,EAAG,CAClH,CAAA,CAGA,SAASC,EAAAA,CAAM,CAAE,MAAA,CAAAjJ,CAAAA,CAAQ,IAAA,CAAAtD,CAAAA,CAAM,WAAA,CAAAwM,CAAAA,CAAa,UAAA,CAAAC,CAAW,CAAA,CAKpD,CACD,IAAMC,CAAAA,CAAS,CAAA,iBAAA,EAAoB,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,CAAG,CAAC,CAAC,CAAA,CAAA,CACnEC,CAAAA,CAAQ,GACd,IAAA,IAASnF,CAAAA,CAAI,CAAA,CAAGA,CAAAA,EAAK,CAAA,CAAGA,CAAAA,EAAAA,CAAK,CAC3B,IAAMoF,CAAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,CAAG,IAAA,CAAK,GAAA,CAAI,CAAA,CAAGtJ,CAAAA,EAAUkE,EAAI,CAAA,CAAE,CAAC,CAAA,CAChD9R,CAAAA,CAAK,CAAA,EAAGgX,CAAM,CAAA,CAAA,EAAIlF,CAAC,CAAA,CAAA,CACzBmF,CAAAA,CAAM,IAAA,CACJ3K,eAAAA,CAAC,KAAA,CAAA,CAAY,KAAA,CAAOhC,CAAAA,CAAM,MAAA,CAAQA,EAAM,OAAA,CAAQ,WAAA,CAAY,KAAA,CAAO,CAAE,OAAA,CAAS,OAAQ,CAAA,CACpF,QAAA,CAAA,CAAAtD,cAAAA,CAAC,MAAA,CAAA,CACC,QAAA,CAAAA,cAAAA,CAAC,UAAA,CAAA,CAAS,EAAA,CAAIhH,CAAAA,CACZ,QAAA,CAAAgH,eAAC,MAAA,CAAA,CAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAAE,GAAA,CAAI,KAAA,CAAO,EAAA,CAAKkQ,CAAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAA,CAClD,CAAA,CACF,CAAA,CACAlQ,cAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,+FACF,IAAA,CAAM+P,CAAAA,CACR,CAAA,CACA/P,cAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,8FAAA,CACF,IAAA,CAAM8P,CAAAA,CACN,QAAA,CAAU,CAAA,KAAA,EAAQ9W,CAAE,CAAA,CAAA,CAAA,CACtB,CAAA,CAAA,CAAA,CAdQ8R,CAeV,CACF,EACF,CACA,OAAO9K,cAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,OAAA,CAAS,aAAA,CAAe,GAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAA,CAAGsD,CAAAA,CAAO,GAAI,CAAA,CAAG,UAAA,CAAY,QAAS,CAAA,CAAI,QAAA,CAAA2M,CAAAA,CAAM,CAC9G,CAGA,SAASE,EAAAA,CAAY,CAAE,IAAA,CAAAC,CAAAA,CAAM,MAAA,CAAAC,CAAAA,CAAQ,WAAA,CAAAP,CAAAA,CAAa,UAAA,CAAAQ,CAAW,CAAA,CAK1D,CACD,OACEtQ,cAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CACX,OAAA,CAAS,cAAA,CACT,KAAA,CAAO,EAAA,CACP,MAAA,CAAAqQ,CAAAA,CACA,YAAA,CAAcA,CAAAA,CACd,eAAA,CAAiBC,EACjB,QAAA,CAAU,QAAA,CACV,aAAA,CAAe,QACjB,CAAA,CACE,QAAA,CAAAtQ,cAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CACX,OAAA,CAAS,OAAA,CACT,KAAA,CAAO,CAAA,EAAGoQ,CAAI,CAAA,CAAA,CAAA,CACd,OAAQ,MAAA,CACR,YAAA,CAAcC,CAAAA,CACd,UAAA,CAAYP,CAAAA,CACZ,UAAA,CAAY,yCACd,CAAA,CAAG,CAAA,CACL,CAEJ,CAGA,SAASS,EAAAA,CAAU,CAAE,IAAA,CAAAjN,CAAAA,CAAM,MAAAqC,CAAM,CAAA,CAAoC,CACnE,OACE3F,cAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOsD,CAAAA,CAAM,MAAA,CAAQA,CAAAA,CAAM,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAMqC,CAAAA,CAAO,KAAA,CAAO,CAAE,QAAS,OAAQ,CAAA,CACzF,QAAA,CAAA3F,cAAAA,CAAC,MAAA,CAAA,CAAK,CAAA,CAAE,yQAAA,CAA0Q,CAAA,CACpR,CAEJ,CAEO,SAASwQ,EAAAA,CAAY,CAC1B,SAAA,CAAAjU,CAAAA,CACA,OAAA,CAAAkU,EAAU,OAAA,CACV,SAAA,CAAAC,CAAAA,CAAY,IAAA,CACZ,IAAA,CAAApN,CAAAA,CAAO,IAAA,CACP,KAAA,CAAA/F,CAAAA,CAAQ,MAAA,CACR,eAAA,CAAAkS,CAAAA,CACA,KAAA,CAAAzR,CACF,CAAA,CAAqB,CACnB,GAAM,CAAE,KAAA,CAAAwM,CAAAA,CAAO,SAAA,CAAA7J,CAAU,CAAA,CAAI6O,EAAAA,CAAS,CAAE,SAAA,CAAAjT,CAAAA,CAAW,eAAA,CAAAkT,CAAgB,CAAC,CAAA,CAC9D,CAACjS,CAAAA,CAAa8G,CAAc,CAAA,CAAI/E,cAAAA,CAA2B,OAAO,CAAA,CAExEI,eAAAA,CAAU,IAAM,CACd,GAAI,OAAO,MAAA,CAAW,GAAA,CAAa,OACnC,IAAMgR,CAAAA,CAAK,MAAA,CAAO,UAAA,CAAW,8BAA8B,CAAA,CAC3DrM,CAAAA,CAAeqM,CAAAA,CAAG,OAAA,CAAU,MAAA,CAAS,OAAO,CAAA,CAC5C,IAAM7L,CAAAA,CAAWC,CAAAA,EAA2BT,CAAAA,CAAeS,CAAAA,CAAE,OAAA,CAAU,MAAA,CAAS,OAAO,EACvF,OAAA4L,CAAAA,CAAG,gBAAA,CAAiB,QAAA,CAAU7L,CAAO,CAAA,CAC9B,IAAM6L,CAAAA,CAAG,mBAAA,CAAoB,QAAA,CAAU7L,CAAO,CACvD,CAAA,CAAG,EAAE,CAAA,CAEL,GAAM,CAAE,WAAA,CAAA1F,CAAY,CAAA,CAAIa,CAAAA,EAAiB,CACnCkF,CAAAA,CAAI1F,aAAAA,CAAQ,IAAMnC,EAAAA,CAAaC,CAAAA,CAAOC,CAAAA,CAAa4B,CAAW,CAAA,CAAG,CAAC7B,CAAAA,CAAOC,EAAa4B,CAAW,CAAC,CAAA,CAExG,GAAIuB,CAAAA,EAAa,CAAC6J,CAAAA,CAAO,OAAO,IAAA,CAChC,IAAMoG,CAAAA,CAAIhB,EAAAA,CAAStM,CAAI,CAAA,CAGjBuN,CAAAA,CAAc1L,CAAAA,CAAE,OAAO,IAAA,CACvB2L,CAAAA,CAAa3L,CAAAA,CAAE,MAAA,CAAO,YAAA,CACtB4L,CAAAA,CAAa5L,CAAAA,CAAE,MAAA,CAAO,UAAA,CACtB6L,CAAAA,CAAY7L,CAAAA,CAAE,MAAA,CAAO,SAAA,CACrB8L,CAAAA,CAAgB9L,CAAAA,CAAE,MAAA,CAAO,OACzB+L,CAAAA,CAAgB/L,CAAAA,CAAE,MAAA,CAAO,SAAA,CAEzBgM,CAAAA,CAAiC,CACrC,OAAA,CAAS,aAAA,CACT,UAAA,CAAY,QAAA,CACZ,GAAA,CAAKP,CAAAA,CAAE,GAAA,CACP,UAAA,CAAYzL,CAAAA,CAAE,UAAA,CAAW,WACzB,UAAA,CAAY,CAAA,CACZ,aAAA,CAAe,SAAA,CACf,mBAAA,CAAqB,aAAA,CACrB,GAAGnH,CACL,CAAA,CAEMoT,CAAAA,CAAY,CAACC,CAAAA,CAAWC,CAAAA,GAAqB,CACjD,IAAMC,CAAAA,CAAQF,IAAM,CAAA,CAAIC,CAAAA,CAAW,CAAA,EAAGA,CAAQ,CAAA,CAAA,CAAA,CAC9C,OAAO,CAAA,EAAGD,CAAAA,CAAE,cAAA,EAAgB,CAAA,CAAA,EAAIE,CAAK,CAAA,CACvC,CAAA,CAGA,GAAId,CAAAA,GAAY,OAAA,CAAS,CACvB,GAAM,CAAE,SAAA,CAAAe,CAAAA,CAAW,YAAA,CAAAC,CAAa,CAAA,CAAIjH,CAAAA,CAC9BkH,CAAAA,CAAQF,CAAAA,CAAU,EAAA,CAAKA,CAAAA,CAAU,IAAA,CACvC,OAAIE,IAAU,CAAA,CAAU,IAAA,CAGtBpM,eAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO6L,CAAAA,CACX,QAAA,CAAA,CAAAnR,cAAAA,CAACuQ,EAAAA,CAAA,CAAU,IAAA,CAAMK,CAAAA,CAAE,QAAA,CAAU,KAAA,CAAOK,CAAAA,CAAe,CAAA,CACnD3L,gBAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,QAAA,CAAUsL,CAAAA,CAAE,cAAA,CAAgB,UAAA,CAAY,GAAA,CAAK,KAAA,CAAOK,CAAAA,CAAe,kBAAA,CAAoB,cAAe,CAAA,CAClH,QAAA,CAAA,CAAAQ,CAAAA,CAAa,GAAA,CAAA,CAChB,EACAzR,cAAAA,CAACmQ,EAAAA,CAAA,CAAY,IAAA,CAAMsB,CAAAA,EAAgB,CAAA,CAAG,MAAA,CAAQb,CAAAA,CAAE,SAAA,CAAW,WAAA,CAAaK,CAAAA,CAAe,UAAA,CAAYC,CAAAA,CAAe,CAAA,CACjHR,CAAAA,EACC1Q,cAAAA,CAAC,QAAK,KAAA,CAAO,CAAE,QAAA,CAAU4Q,CAAAA,CAAE,QAAA,CAAU,KAAA,CAAOE,CAAAA,CAAY,UAAA,CAAY,GAAI,CAAA,CACrE,QAAA,CAAAM,CAAAA,CAAUM,CAAAA,CAAO,MAAM,CAAA,CAC1B,CAAA,CAAA,CAEJ,CAEJ,CAGA,GAAM,CAAE,aAAA,CAAAC,CAAAA,CAAe,cAAA,CAAAC,CAAe,CAAA,CAAIpH,CAAAA,CAC1C,GAAImH,CAAAA,GAAkB,IAAA,EAAQC,CAAAA,GAAmB,CAAA,CAAG,OAAO,IAAA,CAE3D,IAAMC,CAAAA,CAAgBF,CAAAA,CAAc,OAAA,CAAQ,CAAC,CAAA,CAG7C,OAAIlB,CAAAA,GAAY,SAAA,CAEZnL,eAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO6L,CAAAA,CACX,QAAA,CAAA,CAAAnR,cAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO4Q,EAAE,QAAA,CAAU,MAAA,CAAQA,CAAAA,CAAE,QAAA,CAAU,OAAA,CAAQ,WAAA,CAAY,KAAA,CAAO,CAAE,OAAA,CAAS,OAAA,CAAS,UAAA,CAAY,CAAE,CAAA,CACvG,QAAA,CAAA5Q,cAAAA,CAAC,MAAA,CAAA,CACC,CAAA,CAAE,8FAAA,CACF,IAAA,CAAM+Q,CAAAA,CACR,CAAA,CACF,CAAA,CACA/Q,cAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,QAAA,CAAU4Q,CAAAA,CAAE,cAAA,CAAgB,UAAA,CAAY,GAAA,CAAK,KAAA,CAAOC,EAAa,kBAAA,CAAoB,cAAe,CAAA,CAChH,QAAA,CAAAgB,CAAAA,CACH,CAAA,CACCnB,CAAAA,EACCpL,eAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,QAAA,CAAUsL,CAAAA,CAAE,QAAA,CAAU,KAAA,CAAOE,CAAAA,CAAY,WAAY,GAAI,CAAA,CAAG,QAAA,CAAA,CAAA,GAAA,CACvEc,CAAAA,CAAe,cAAA,EAAe,CAAE,GAAA,CAAA,CACpC,CAAA,CAAA,CAEJ,CAAA,CAKAnB,CAAAA,GAAY,QAAA,CAEZnL,eAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO6L,CAAAA,CACX,QAAA,CAAA,CAAAnR,eAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,QAAA,CAAU4Q,CAAAA,CAAE,cAAA,CAAgB,UAAA,CAAY,GAAA,CAAK,KAAA,CAAOC,CAAAA,CAAa,kBAAA,CAAoB,cAAe,CAAA,CAChH,QAAA,CAAAgB,CAAAA,CACH,CAAA,CACA7R,eAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,QAAA,CAAU4Q,CAAAA,CAAE,QAAA,CAAU,KAAA,CAAOE,CAAAA,CAAY,UAAA,CAAY,GAAI,CAAA,CAAG,QAAA,CAAA,KAAA,CAAG,CAAA,CAC7EJ,CAAAA,EACCpL,eAAAA,CAAC,MAAA,CAAA,CAAK,MAAO,CACX,QAAA,CAAUsL,CAAAA,CAAE,QAAA,CACZ,KAAA,CAAOE,CAAAA,CACP,UAAA,CAAY,GAAA,CACZ,UAAA,CAAY,CACd,CAAA,CAAG,QAAA,CAAA,CAAA,GAAA,CACCM,CAAAA,CAAUQ,CAAAA,CAAgB,UAAU,CAAA,CAAE,KAC1C,CAAA,CAAA,CAEJ,CAAA,CAMFtM,eAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO6L,CAAAA,CACX,QAAA,CAAA,CAAAnR,cAAAA,CAAC6P,EAAAA,CAAA,CAAM,MAAA,CAAQ8B,CAAAA,CAAe,IAAA,CAAMf,CAAAA,CAAE,QAAA,CAAU,WAAA,CAAaG,EAAY,UAAA,CAAYC,CAAAA,CAAW,CAAA,CAChGhR,cAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,QAAA,CAAU4Q,CAAAA,CAAE,cAAA,CAAgB,UAAA,CAAY,GAAA,CAAK,KAAA,CAAOC,CAAAA,CAAa,kBAAA,CAAoB,cAAe,EAChH,QAAA,CAAAgB,CAAAA,CACH,CAAA,CACCnB,CAAAA,EACCpL,eAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,QAAA,CAAUsL,CAAAA,CAAE,QAAA,CAAU,KAAA,CAAOE,CAAAA,CAAY,UAAA,CAAY,GAAI,CAAA,CAAG,cACvEM,CAAAA,CAAUQ,CAAAA,CAAgB,UAAU,CAAA,CAAE,GAAA,CAAA,CAC1C,CAAA,CAAA,CAEJ,CAEJ,CC5OO,SAASE,EAAAA,EAAY,CAC1B,GAAM,CAAE,MAAA,CAAAtS,CAAAA,CAAQ,QAAA,CAAAN,EAAU,WAAA,CAAAC,CAAAA,CAAa,KAAA,CAAAjE,CAAAA,CAAO,SAAA,CAAA2E,CAAAA,CAAW,UAAA,CAAAE,CAAAA,CAAY,aAAA,CAAAV,CAAc,CAAA,CAAIY,CAAAA,EAAiB,CAExG,OAAO,CAEL,MAAA,CAAAT,EAEA,QAAA,CAAAN,CAAAA,CAEA,WAAA,CAAAC,CAAAA,CAEA,KAAA,CAAAjE,CAAAA,CAEA,cAAA,CAAgBsE,CAAAA,CAAO,cAAA,CAAe,IAAA,CAAKA,CAAM,CAAA,CAEjD,SAAA,CAAAK,CAAAA,CAEA,UAAA,CAAAE,CAAAA,CAEA,cAAAV,CACF,CACF,CCpBO,SAAS0S,EAAAA,CAAiBxV,CAAAA,CAAmB,CAClD,GAAM,CAAE,aAAA,CAAA8C,CAAAA,CAAe,SAAA,CAAAQ,EAAW,UAAA,CAAAE,CAAW,CAAA,CAAIE,CAAAA,EAAiB,CAE5D+R,CAAAA,CAAOlS,iBAAAA,CAAY,IAAMD,CAAAA,CAAUtD,CAAS,CAAA,CAAG,CAACsD,CAAAA,CAAWtD,CAAS,CAAC,CAAA,CACrE0V,EAAQnS,iBAAAA,CAAY,IAAMC,CAAAA,EAAW,CAAG,CAACA,CAAU,CAAC,CAAA,CAE1D,OAAO,CACL,IAAA,CAAAiS,CAAAA,CACA,KAAA,CAAAC,CAAAA,CACA,MAAA,CAAQ5S,CAAAA,GAAkB9C,CAC5B,CACF","file":"index.js","sourcesContent":["const MAX_SIZE_BYTES = 2 * 1024 * 1024; // 2MB\n\n/**\n * Capture a screenshot of the current page.\n * Tries html2canvas first (if installed), falls back to native Screen Capture API.\n * Returns a base64 data URL or null if both methods fail.\n */\nexport async function captureScreenshot(): Promise<string | null> {\n // Try html2canvas first (silent, no user prompt)\n try {\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n const html2canvas = (await (new Function('return import(\"html2canvas\")'))()).default;\n const canvas = await html2canvas(document.body, {\n logging: false,\n useCORS: true,\n scale: 1,\n width: window.innerWidth,\n height: window.innerHeight,\n windowWidth: window.innerWidth,\n windowHeight: window.innerHeight,\n });\n return compressCanvas(canvas);\n } catch {\n // html2canvas not installed or failed — try native API\n }\n\n // Fallback: native Screen Capture API\n try {\n if (!navigator.mediaDevices?.getDisplayMedia || typeof ImageCapture === 'undefined') return null;\n\n const stream = await navigator.mediaDevices.getDisplayMedia({\n video: { displaySurface: 'browser' } as MediaTrackConstraints,\n });\n\n const track = stream.getVideoTracks()[0];\n const imageCapture = new ImageCapture(track);\n const bitmap = await imageCapture.grabFrame();\n track.stop();\n\n const canvas = document.createElement('canvas');\n canvas.width = bitmap.width;\n canvas.height = bitmap.height;\n const ctx = canvas.getContext('2d');\n if (!ctx) return null;\n ctx.drawImage(bitmap, 0, 0);\n\n return compressCanvas(canvas);\n } catch {\n return null;\n }\n}\n\nfunction compressCanvas(canvas: HTMLCanvasElement): string {\n // Start with JPEG 0.7 quality\n let dataUrl = canvas.toDataURL('image/jpeg', 0.7);\n\n // If still too large, reduce quality further\n if (dataUrl.length > MAX_SIZE_BYTES) {\n dataUrl = canvas.toDataURL('image/jpeg', 0.4);\n }\n\n // If still too large, scale down\n if (dataUrl.length > MAX_SIZE_BYTES) {\n const scale = 0.5;\n const smaller = document.createElement('canvas');\n smaller.width = canvas.width * scale;\n smaller.height = canvas.height * scale;\n const ctx = smaller.getContext('2d');\n if (ctx) {\n ctx.drawImage(canvas, 0, 0, smaller.width, smaller.height);\n dataUrl = smaller.toDataURL('image/jpeg', 0.5);\n }\n }\n\n return dataUrl;\n}\n","// API URL\nexport const API_BASE_URL = 'https://gotcha.cx/api/v1';\n\n// Error codes\nexport const ERROR_CODES = {\n INVALID_API_KEY: 'INVALID_API_KEY',\n ORIGIN_NOT_ALLOWED: 'ORIGIN_NOT_ALLOWED',\n RATE_LIMITED: 'RATE_LIMITED',\n QUOTA_EXCEEDED: 'QUOTA_EXCEEDED',\n INVALID_REQUEST: 'INVALID_REQUEST',\n USER_NOT_FOUND: 'USER_NOT_FOUND',\n INTERNAL_ERROR: 'INTERNAL_ERROR',\n} as const;\n\n// Local storage keys\nexport const STORAGE_KEYS = {\n ANONYMOUS_ID: 'gotcha_anonymous_id',\n OFFLINE_QUEUE: 'gotcha_offline_queue',\n HIDDEN_UNTIL: 'gotcha_hidden',\n VISIT_COUNT: 'gotcha_visits',\n} as const;\n\n// Default values\nexport const DEFAULTS = {\n POSITION: 'top-right' as const,\n SIZE: 'md' as const,\n THEME: 'light' as const,\n SHOW_ON_HOVER: true,\n TOUCH_BEHAVIOR: 'always-visible' as const,\n SUBMIT_TEXT: 'Submit',\n THANK_YOU_MESSAGE: 'Gotcha!',\n} as const;\n\n// Retry config\nexport const RETRY_CONFIG = {\n MAX_RETRIES: 2,\n BASE_DELAY_MS: 500,\n MAX_DELAY_MS: 5000,\n} as const;\n","export function safeGetItem(key: string): string | null {\n if (typeof window === 'undefined') return null;\n try {\n return localStorage.getItem(key);\n } catch {\n return null;\n }\n}\n\nexport function safeSetItem(key: string, value: string): void {\n if (typeof window === 'undefined') return;\n try {\n localStorage.setItem(key, value);\n } catch {\n // localStorage unavailable (incognito Safari, sandboxed iframes)\n }\n}\n\nexport function safeRemoveItem(key: string): void {\n if (typeof window === 'undefined') return;\n try {\n localStorage.removeItem(key);\n } catch {\n // silently fail\n }\n}\n","/**\n * Generate a UUID v4. Falls back to Math.random for insecure contexts\n * (HTTP, some WebViews) where crypto.randomUUID is unavailable.\n */\nexport function generateId(): string {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n}\n","import { STORAGE_KEYS } from '../constants';\nimport { safeGetItem, safeSetItem, safeRemoveItem } from './localStorage';\nimport { generateId } from './generateId';\n\n/**\n * Get or create an anonymous user ID\n * Stored in localStorage for consistency across sessions\n */\nexport function getAnonymousId(): string {\n const stored = safeGetItem(STORAGE_KEYS.ANONYMOUS_ID);\n if (stored) return stored;\n\n const id = `anon_${generateId()}`;\n safeSetItem(STORAGE_KEYS.ANONYMOUS_ID, id);\n return id;\n}\n\n/**\n * Clear the anonymous ID (useful for testing)\n */\nexport function clearAnonymousId(): void {\n safeRemoveItem(STORAGE_KEYS.ANONYMOUS_ID);\n}\n","const MAX_ERRORS = 10;\nconst MAX_MESSAGE_LENGTH = 200;\n\ninterface CapturedError {\n message: string;\n source?: string;\n timestamp: number;\n}\n\nlet buffer: CapturedError[] = [];\nlet listening = false;\n\nfunction pushError(message: string, source?: string) {\n const entry: CapturedError = {\n message: message.slice(0, MAX_MESSAGE_LENGTH),\n source: source?.slice(0, MAX_MESSAGE_LENGTH),\n timestamp: Date.now(),\n };\n buffer.push(entry);\n if (buffer.length > MAX_ERRORS) {\n buffer.shift();\n }\n}\n\nfunction handleError(event: ErrorEvent) {\n pushError(event.message, event.filename);\n}\n\nfunction handleRejection(event: PromiseRejectionEvent) {\n const message = event.reason instanceof Error\n ? event.reason.message\n : String(event.reason);\n pushError(message);\n}\n\nexport function startErrorCapture(): void {\n if (typeof window === 'undefined' || listening) return;\n window.addEventListener('error', handleError);\n window.addEventListener('unhandledrejection', handleRejection);\n listening = true;\n}\n\nexport function stopErrorCapture(): void {\n if (typeof window === 'undefined' || !listening) return;\n window.removeEventListener('error', handleError);\n window.removeEventListener('unhandledrejection', handleRejection);\n listening = false;\n}\n\nexport function getRecentErrors(): CapturedError[] {\n return [...buffer].reverse();\n}\n","import { SubmissionContext } from '../types';\nimport { getRecentErrors } from './errorBuffer';\n\nexport function collectContext(): SubmissionContext {\n if (typeof window === 'undefined') return {};\n\n return {\n url: window.location.origin + window.location.pathname,\n userAgent: navigator.userAgent,\n viewport: { width: window.innerWidth, height: window.innerHeight },\n language: navigator.language,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n screenResolution: { width: screen.width, height: screen.height },\n recentErrors: getRecentErrors(),\n };\n}\n","import { STORAGE_KEYS } from '../constants';\nimport { safeGetItem, safeSetItem } from './localStorage';\nimport { generateId } from './generateId';\n\nconst MAX_QUEUE_SIZE = 50;\nconst MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000; // 7 days\n\nexport interface OfflineQueueItem {\n id: string;\n payload: Record<string, unknown>;\n type: 'create' | 'update';\n queuedAt: number;\n retries: number;\n}\n\nfunction readQueue(): OfflineQueueItem[] {\n const raw = safeGetItem(STORAGE_KEYS.OFFLINE_QUEUE);\n if (!raw) return [];\n try {\n const items = JSON.parse(raw) as OfflineQueueItem[];\n // Drop items older than 7 days\n const now = Date.now();\n return items.filter(item => now - item.queuedAt < MAX_AGE_MS);\n } catch {\n return [];\n }\n}\n\nfunction writeQueue(items: OfflineQueueItem[]): void {\n safeSetItem(STORAGE_KEYS.OFFLINE_QUEUE, JSON.stringify(items));\n}\n\nexport function enqueue(payload: Record<string, unknown>, type: 'create' | 'update' = 'create'): void {\n const items = readQueue();\n if (items.length >= MAX_QUEUE_SIZE) return;\n items.push({\n id: generateId(),\n payload,\n type,\n queuedAt: Date.now(),\n retries: 0,\n });\n writeQueue(items);\n}\n\nexport function dequeue(id: string): void {\n const items = readQueue().filter(item => item.id !== id);\n writeQueue(items);\n}\n\nexport function getQueuedItems(): OfflineQueueItem[] {\n return readQueue();\n}\n\nexport function getQueueLength(): number {\n return readQueue().length;\n}\n\nexport function incrementRetries(id: string): void {\n const items = readQueue().map(item =>\n item.id === id ? { ...item, retries: item.retries + 1 } : item\n );\n // Drop items with too many retries\n writeQueue(items.filter(item => item.retries <= 5));\n}\n","import { API_BASE_URL, RETRY_CONFIG } from '../constants';\nimport { SubmitResponsePayload, GotchaResponse, GotchaError, ExistingResponse, VoteType, ScoreData } from '../types';\nimport { getAnonymousId } from '../utils/anonymous';\nimport { generateId } from '../utils/generateId';\nimport { collectContext } from '../utils/contextCollector';\nimport { enqueue, getQueuedItems, dequeue, incrementRetries, getQueueLength } from '../utils/offlineQueue';\n\ninterface ApiClientConfig {\n apiKey: string;\n baseUrl?: string;\n debug?: boolean;\n}\n\ninterface RetryConfig {\n maxRetries: number;\n baseDelayMs: number;\n maxDelayMs: number;\n}\n\nconst DEFAULT_RETRY_CONFIG: RetryConfig = {\n maxRetries: RETRY_CONFIG.MAX_RETRIES,\n baseDelayMs: RETRY_CONFIG.BASE_DELAY_MS,\n maxDelayMs: RETRY_CONFIG.MAX_DELAY_MS,\n};\n\n/**\n * Fetch with automatic retry and exponential backoff\n */\nasync function fetchWithRetry(\n url: string,\n options: RequestInit,\n config: RetryConfig = DEFAULT_RETRY_CONFIG,\n debug: boolean = false\n): Promise<Response> {\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt <= config.maxRetries; attempt++) {\n try {\n if (debug && attempt > 0) {\n console.log(`[Gotcha] Retry attempt ${attempt}/${config.maxRetries}`);\n }\n\n const response = await fetch(url, options);\n\n // Don't retry client errors (4xx) except 429 (rate limit)\n if (response.status >= 400 && response.status < 500 && response.status !== 429) {\n return response;\n }\n\n // Success - return immediately\n if (response.ok) {\n return response;\n }\n\n lastError = new Error(`HTTP ${response.status}`);\n } catch (error) {\n // Network error - retry\n lastError = error as Error;\n if (debug) {\n console.log(`[Gotcha] Network error: ${lastError.message}`);\n }\n }\n\n // Don't delay after last attempt\n if (attempt < config.maxRetries) {\n const delay = Math.min(\n config.baseDelayMs * Math.pow(2, attempt),\n config.maxDelayMs\n );\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n\n throw lastError;\n}\n\nexport function createApiClient(config: ApiClientConfig) {\n const { apiKey, baseUrl = API_BASE_URL, debug = false } = config;\n\n let flushing = false;\n\n const headers = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${apiKey}`,\n };\n\n async function request<T>(\n method: string,\n endpoint: string,\n body?: unknown\n ): Promise<T> {\n const url = `${baseUrl}${endpoint}`;\n const idempotencyKey = generateId();\n\n if (debug) {\n console.log(`[Gotcha] ${method} ${endpoint}`, body);\n }\n\n const response = await fetchWithRetry(\n url,\n {\n method,\n headers: {\n ...headers,\n 'Idempotency-Key': idempotencyKey,\n },\n body: body ? JSON.stringify(body) : undefined,\n },\n DEFAULT_RETRY_CONFIG,\n debug\n );\n\n let data: Record<string, unknown>;\n try {\n data = await response.json();\n } catch {\n throw { code: 'PARSE_ERROR', message: 'Invalid response from server', status: response.status } as GotchaError;\n }\n\n if (!response.ok) {\n const error = data.error as GotchaError;\n if (debug) {\n console.error(`[Gotcha] Error: ${error.code} - ${error.message}`);\n }\n throw error;\n }\n\n if (debug) {\n console.log(`[Gotcha] Response:`, data);\n }\n\n return data as T;\n }\n\n return {\n /**\n * Submit a response (feedback, vote, etc.)\n */\n async submitResponse(\n payload: Omit<SubmitResponsePayload, 'context'>\n ): Promise<GotchaResponse> {\n // Ensure user has an ID (anonymous if not provided)\n const user = payload.user || {};\n if (!user.id) {\n user.id = getAnonymousId();\n }\n\n const fullPayload: SubmitResponsePayload = {\n ...payload,\n user,\n context: collectContext(),\n // Only include isBug if true\n ...(payload.isBug ? { isBug: true } : {}),\n };\n\n // Queue if offline\n if (typeof navigator !== 'undefined' && !navigator.onLine) {\n enqueue(fullPayload as unknown as Record<string, unknown>, 'create');\n return {\n id: generateId(),\n status: 'queued' as const,\n createdAt: new Date().toISOString(),\n };\n }\n\n try {\n return await request<GotchaResponse>('POST', '/responses', fullPayload);\n } catch (err) {\n // On network failure, queue for later\n if (err instanceof TypeError && typeof navigator !== 'undefined' && !navigator.onLine) {\n enqueue(fullPayload as unknown as Record<string, unknown>, 'create');\n return {\n id: generateId(),\n status: 'queued' as const,\n createdAt: new Date().toISOString(),\n };\n }\n throw err;\n }\n },\n\n /**\n * Check if a user has an existing response for an element\n */\n async checkExistingResponse(\n elementId: string,\n userId: string\n ): Promise<ExistingResponse | null> {\n const url = `${baseUrl}/responses/check?elementId=${encodeURIComponent(elementId)}&userId=${encodeURIComponent(userId)}`;\n\n if (debug) {\n console.log(`[Gotcha] GET /responses/check`);\n }\n\n const response = await fetchWithRetry(\n url,\n {\n method: 'GET',\n headers,\n },\n DEFAULT_RETRY_CONFIG,\n debug\n );\n\n const data = await response.json();\n\n if (!response.ok) {\n const error = data.error as GotchaError;\n if (debug) {\n console.error(`[Gotcha] Error: ${error.code} - ${error.message}`);\n }\n throw error;\n }\n\n if (data.exists) {\n if (debug) {\n console.log(`[Gotcha] Found existing response:`, data.response);\n }\n return data.response as ExistingResponse;\n }\n\n return null;\n },\n\n /**\n * Update an existing response\n */\n async updateResponse(\n id: string,\n payload: {\n content?: string;\n title?: string;\n rating?: number;\n vote?: VoteType;\n pollSelected?: string[];\n },\n userId?: string\n ): Promise<GotchaResponse> {\n const url = `${baseUrl}/responses/${id}${userId ? `?userId=${encodeURIComponent(userId)}` : ''}`;\n\n if (debug) {\n console.log(`[Gotcha] PATCH /responses/${id}`, payload);\n }\n\n const response = await fetchWithRetry(\n url,\n {\n method: 'PATCH',\n headers,\n body: JSON.stringify(payload),\n },\n DEFAULT_RETRY_CONFIG,\n debug\n );\n\n const data = await response.json();\n\n if (!response.ok) {\n const error = data.error as GotchaError;\n if (debug) {\n console.error(`[Gotcha] Error: ${error.code} - ${error.message}`);\n }\n throw error;\n }\n\n if (debug) {\n console.log(`[Gotcha] Response updated:`, data);\n }\n\n return data as GotchaResponse;\n },\n\n /**\n * Get aggregate score data for an element\n */\n async getScore(elementId: string): Promise<ScoreData> {\n const url = `${baseUrl}/scores/${encodeURIComponent(elementId)}`;\n\n if (debug) {\n console.log(`[Gotcha] GET /scores/${elementId}`);\n }\n\n const response = await fetchWithRetry(\n url,\n {\n method: 'GET',\n headers,\n },\n DEFAULT_RETRY_CONFIG,\n debug\n );\n\n const data = await response.json();\n\n if (!response.ok) {\n const error = data.error as GotchaError;\n if (debug) {\n console.error(`[Gotcha] Error: ${error.code} - ${error.message}`);\n }\n throw error;\n }\n\n if (debug) {\n console.log(`[Gotcha] Score:`, data);\n }\n\n return data as ScoreData;\n },\n\n /**\n * Flag a response as a bug report\n */\n async flagAsBug(responseId: string): Promise<{ ticketId: string; status: string }> {\n const url = `${baseUrl}/responses/${encodeURIComponent(responseId)}/bug`;\n\n if (debug) {\n console.log(`[Gotcha] POST /responses/${responseId}/bug`);\n }\n\n const response = await fetchWithRetry(\n url,\n {\n method: 'POST',\n headers,\n },\n DEFAULT_RETRY_CONFIG,\n debug\n );\n\n const data = await response.json();\n\n if (!response.ok) {\n const error = data.error as GotchaError;\n if (debug) {\n console.error(`[Gotcha] Error: ${error.code} - ${error.message}`);\n }\n throw error;\n }\n\n if (debug) {\n console.log(`[Gotcha] Bug flagged:`, data);\n }\n\n return data as { ticketId: string; status: string };\n },\n\n /**\n * Flush queued offline submissions\n */\n async flushQueue(): Promise<void> {\n if (flushing) return;\n flushing = true;\n try {\n const items = getQueuedItems();\n for (const item of items) {\n try {\n if (item.type === 'update' && item.payload.responseId) {\n const { responseId, ...updatePayload } = item.payload;\n await request('PATCH', `/responses/${responseId}`, updatePayload);\n } else {\n await request('POST', '/responses', item.payload);\n }\n dequeue(item.id);\n } catch {\n incrementRetries(item.id);\n }\n }\n } finally {\n flushing = false;\n }\n },\n\n /**\n * Get count of queued offline submissions\n */\n getQueueLength,\n\n /**\n * Get the base URL (for debugging)\n */\n getBaseUrl(): string {\n return baseUrl;\n },\n };\n}\n\nexport type ApiClient = ReturnType<typeof createApiClient>;\n","const UNSAFE_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function deepMerge(base: any, override: any): any {\n const result = { ...base };\n for (const key of Object.keys(override)) {\n if (UNSAFE_KEYS.has(key)) continue;\n const val = override[key];\n if (val !== undefined && val !== null && typeof val === 'object' && !Array.isArray(val)) {\n result[key] = deepMerge(base[key] ?? {}, val);\n } else if (val !== undefined) {\n result[key] = val;\n }\n }\n return result;\n}\n","// ============================================\n// THEME TOKEN SYSTEM\n// ============================================\n\nexport interface GotchaThemeColors {\n primary: string;\n primaryHover: string;\n primaryText: string;\n background: string;\n backgroundGradient: string;\n surface: string;\n surfaceHover: string;\n text: string;\n textSecondary: string;\n textDisabled: string;\n border: string;\n borderFocus: string;\n success: string;\n successSurface: string;\n error: string;\n errorSurface: string;\n errorBorder: string;\n warning: string;\n warningActive: string;\n warningSurface: string;\n warningBorder: string;\n starFilled: string;\n starEmpty: string;\n voteUp: string;\n voteUpSurface: string;\n voteUpBorder: string;\n voteDown: string;\n voteDownSurface: string;\n voteDownBorder: string;\n npsColors: string[];\n buttonBackground: string;\n buttonBackgroundHover: string;\n buttonBackgroundDisabled: string;\n buttonColor: string;\n buttonColorDisabled: string;\n buttonBorder: string;\n buttonShadow: string;\n backdropColor: string;\n closeButton: string;\n closeButtonHover: string;\n closeButtonBg: string;\n // Glass button\n glassBackground: string;\n glassBorder: string;\n glassColor: string;\n glassShadow: string;\n glassHoverShadow: string;\n // Input\n inputBackground: string;\n inputBackgroundFocus: string;\n inputBorder: string;\n inputBorderFocus: string;\n inputFocusRing: string;\n // Poll\n pollBorder: string;\n pollSelectedBorder: string;\n pollBackground: string;\n pollSelectedBackground: string;\n pollColor: string;\n pollSelectedColor: string;\n pollCheckBorder: string;\n pollCheckSelectedBorder: string;\n pollCheckSelectedBg: string;\n}\n\nexport interface GotchaThemeTypography {\n fontFamily: string;\n fontSize: {\n xs: number;\n sm: number;\n md: number;\n lg: number;\n };\n fontWeight: {\n normal: number;\n medium: number;\n semibold: number;\n bold: number;\n };\n}\n\nexport interface GotchaThemeBorders {\n radius: {\n sm: number;\n md: number;\n lg: number;\n full: string;\n };\n width: number;\n}\n\nexport interface GotchaThemeShadows {\n sm: string;\n md: string;\n lg: string;\n modal: string;\n button: string;\n}\n\nexport interface GotchaThemeAnimation {\n duration: {\n fast: string;\n normal: string;\n slow: string;\n };\n easing: {\n default: string;\n spring: string;\n };\n}\n\nexport interface GotchaThemeConfig {\n colors?: Partial<GotchaThemeColors>;\n typography?: Partial<GotchaThemeTypography>;\n borders?: Partial<GotchaThemeBorders>;\n shadows?: Partial<GotchaThemeShadows>;\n animation?: Partial<GotchaThemeAnimation>;\n}\n\nexport interface ResolvedTheme {\n colors: GotchaThemeColors;\n typography: GotchaThemeTypography;\n borders: GotchaThemeBorders;\n shadows: GotchaThemeShadows;\n animation: GotchaThemeAnimation;\n}\n\n// ── NPS score colors ─────────────────────────────────────────\nconst NPS_COLORS = [\n '#ef4444', '#f05540', '#f1663c', '#f27738', '#f38834',\n '#f59e0b', '#d4a30e', '#b3a812', '#79b841', '#45c870', '#10b981',\n];\n\n// ── Light preset ─────────────────────────────────────────────\nexport const LIGHT_TOKENS: ResolvedTheme = {\n colors: {\n primary: '#1e293b',\n primaryHover: '#334155',\n primaryText: '#ffffff',\n background: '#ffffff',\n backgroundGradient: 'linear-gradient(180deg, #ffffff 0%, #f8fafc 100%)',\n surface: '#fafbfc',\n surfaceHover: '#ffffff',\n text: '#111827',\n textSecondary: '#374151',\n textDisabled: '#94a3b8',\n border: '#e2e8f0',\n borderFocus: '#1e293b',\n success: '#059669',\n successSurface: 'rgba(5,150,105,0.08)',\n error: '#dc2626',\n errorSurface: '#fef2f2',\n errorBorder: 'rgba(220,38,38,0.1)',\n warning: '#d97706',\n warningActive: '#b45309',\n warningSurface: 'rgba(251,191,36,0.08)',\n warningBorder: 'rgba(217,119,6,0.25)',\n starFilled: '#f59e0b',\n starEmpty: '#e2e8f0',\n voteUp: '#10b981',\n voteUpSurface: 'rgba(16,185,129,0.06)',\n voteUpBorder: 'rgba(16,185,129,0.25)',\n voteDown: '#ef4444',\n voteDownSurface: 'rgba(239,68,68,0.06)',\n voteDownBorder: 'rgba(239,68,68,0.25)',\n npsColors: NPS_COLORS,\n buttonBackground: '#1e293b',\n buttonBackgroundHover: '#334155',\n buttonBackgroundDisabled: '#e2e8f0',\n buttonColor: '#ffffff',\n buttonColorDisabled: '#94a3b8',\n buttonBorder: 'none',\n buttonShadow: 'none',\n backdropColor: 'rgba(0,0,0,0.4)',\n closeButton: '#9ca3af',\n closeButtonHover: '#6b7280',\n closeButtonBg: 'rgba(0,0,0,0.04)',\n glassBackground: 'linear-gradient(160deg, rgba(255,255,255,0.7) 0%, rgba(200,210,230,0.4) 40%, rgba(180,192,220,0.5) 100%)',\n glassBorder: 'none',\n glassColor: 'rgba(0,0,0,0.75)',\n glassShadow: '0 3px 12px rgba(0,0,0,0.12), 0 0 1px rgba(0,0,0,0.2)',\n glassHoverShadow: '0 6px 20px rgba(0,0,0,0.18), 0 0 1px rgba(0,0,0,0.25)',\n inputBackground: '#fafbfc',\n inputBackgroundFocus: '#ffffff',\n inputBorder: '#e2e8f0',\n inputBorderFocus: '#1e293b',\n inputFocusRing: 'rgba(30,41,59,0.15)',\n pollBorder: '#e2e8f0',\n pollSelectedBorder: 'rgba(30,41,59,0.25)',\n pollBackground: '#fafbfc',\n pollSelectedBackground: 'rgba(30,41,59,0.05)',\n pollColor: '#374151',\n pollSelectedColor: '#1e293b',\n pollCheckBorder: '#cbd5e1',\n pollCheckSelectedBorder: '#1e293b',\n pollCheckSelectedBg: '#1e293b',\n },\n typography: {\n fontFamily: \"'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\",\n fontSize: { xs: 11, sm: 13, md: 14, lg: 16 },\n fontWeight: { normal: 400, medium: 500, semibold: 600, bold: 700 },\n },\n borders: {\n radius: { sm: 8, md: 10, lg: 14, full: '50%' },\n width: 1,\n },\n shadows: {\n sm: '0 1px 2px rgba(0,0,0,0.04)',\n md: '0 4px 12px rgba(0,0,0,0.06)',\n lg: '0 12px 32px rgba(0,0,0,0.06)',\n modal: '0 1px 2px rgba(0,0,0,0.04), 0 4px 12px rgba(0,0,0,0.06), 0 12px 32px rgba(0,0,0,0.06), 0 24px 48px rgba(0,0,0,0.04)',\n button: '0 2px 8px rgba(0,0,0,0.06)',\n },\n animation: {\n duration: { fast: '0.15s', normal: '0.25s', slow: '0.4s' },\n easing: {\n default: 'cubic-bezier(0.4, 0, 0.2, 1)',\n spring: 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n },\n },\n};\n\n// ── Dark preset ──────────────────────────────────────────────\nexport const DARK_TOKENS: ResolvedTheme = {\n colors: {\n primary: '#e2e8f0',\n primaryHover: '#cbd5e1',\n primaryText: '#1e293b',\n background: '#1a1f2e',\n backgroundGradient: 'linear-gradient(180deg, #1a1f2e 0%, #151925 100%)',\n surface: 'rgba(55,65,81,0.5)',\n surfaceHover: 'rgba(55,65,81,0.7)',\n text: '#f9fafb',\n textSecondary: '#d1d5db',\n textDisabled: '#6b7280',\n border: 'rgba(255,255,255,0.08)',\n borderFocus: 'rgba(255,255,255,0.2)',\n success: '#10b981',\n successSurface: 'rgba(16,185,129,0.1)',\n error: '#fecaca',\n errorSurface: 'rgba(127,29,29,0.3)',\n errorBorder: 'rgba(254,202,202,0.1)',\n warning: '#fbbf24',\n warningActive: '#fbbf24',\n warningSurface: 'rgba(245,158,11,0.08)',\n warningBorder: 'rgba(245,158,11,0.3)',\n starFilled: '#f59e0b',\n starEmpty: 'rgba(255,255,255,0.12)',\n voteUp: '#10b981',\n voteUpSurface: 'rgba(16,185,129,0.08)',\n voteUpBorder: 'rgba(16,185,129,0.3)',\n voteDown: '#ef4444',\n voteDownSurface: 'rgba(239,68,68,0.08)',\n voteDownBorder: 'rgba(239,68,68,0.3)',\n npsColors: NPS_COLORS,\n buttonBackground: '#e2e8f0',\n buttonBackgroundHover: '#cbd5e1',\n buttonBackgroundDisabled: '#374151',\n buttonColor: '#1e293b',\n buttonColorDisabled: '#6b7280',\n buttonBorder: 'none',\n buttonShadow: 'none',\n backdropColor: 'rgba(0,0,0,0.5)',\n closeButton: '#6b7280',\n closeButtonHover: '#9ca3af',\n closeButtonBg: 'rgba(255,255,255,0.06)',\n glassBackground: 'linear-gradient(180deg, rgba(255,255,255,0.16) 0%, rgba(255,255,255,0.04) 60%, rgba(0,0,0,0.05) 100%)',\n glassBorder: '1px solid rgba(255,255,255,0.15)',\n glassColor: 'rgba(255,255,255,0.88)',\n glassShadow: '0 4px 14px rgba(0,0,0,0.45), 0 1px 3px rgba(0,0,0,0.35)',\n glassHoverShadow: '0 8px 24px rgba(0,0,0,0.55), 0 1px 3px rgba(0,0,0,0.4)',\n inputBackground: 'rgba(55,65,81,0.5)',\n inputBackgroundFocus: 'rgba(55,65,81,0.7)',\n inputBorder: 'rgba(255,255,255,0.08)',\n inputBorderFocus: 'rgba(255,255,255,0.2)',\n inputFocusRing: 'rgba(255,255,255,0.06)',\n pollBorder: 'rgba(255,255,255,0.08)',\n pollSelectedBorder: 'rgba(226,232,240,0.25)',\n pollBackground: 'rgba(55,65,81,0.5)',\n pollSelectedBackground: 'rgba(226,232,240,0.08)',\n pollColor: '#d1d5db',\n pollSelectedColor: '#e2e8f0',\n pollCheckBorder: 'rgba(255,255,255,0.2)',\n pollCheckSelectedBorder: '#e2e8f0',\n pollCheckSelectedBg: '#e2e8f0',\n },\n typography: {\n fontFamily: \"'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\",\n fontSize: { xs: 11, sm: 13, md: 14, lg: 16 },\n fontWeight: { normal: 400, medium: 500, semibold: 600, bold: 700 },\n },\n borders: {\n radius: { sm: 8, md: 10, lg: 14, full: '50%' },\n width: 1,\n },\n shadows: {\n sm: '0 1px 2px rgba(0,0,0,0.2)',\n md: '0 4px 12px rgba(0,0,0,0.3)',\n lg: '0 12px 32px rgba(0,0,0,0.2)',\n modal: '0 1px 2px rgba(0,0,0,0.2), 0 4px 12px rgba(0,0,0,0.3), 0 12px 32px rgba(0,0,0,0.2), 0 24px 48px rgba(0,0,0,0.15)',\n button: '0 2px 8px rgba(0,0,0,0.15)',\n },\n animation: {\n duration: { fast: '0.15s', normal: '0.25s', slow: '0.4s' },\n easing: {\n default: 'cubic-bezier(0.4, 0, 0.2, 1)',\n spring: 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n },\n },\n};\n\n// ── Helper ───────────────────────────────────────────────────\n\nimport { deepMerge } from '../utils/deepMerge';\n\n/** Create a custom theme by merging partial overrides onto a preset */\nexport function createTheme(\n base: 'light' | 'dark',\n overrides: GotchaThemeConfig,\n): GotchaThemeConfig {\n const preset = base === 'dark' ? DARK_TOKENS : LIGHT_TOKENS;\n return deepMerge(preset, overrides) as GotchaThemeConfig;\n}\n","import { LIGHT_TOKENS, DARK_TOKENS, GotchaThemeConfig, ResolvedTheme } from './tokens';\nimport { deepMerge } from '../utils/deepMerge';\n\n/**\n * Resolve a complete theme from the base preset + optional provider & instance overrides.\n * Returns a fully-resolved object with no undefined values.\n */\nexport function resolveTheme(\n theme: 'light' | 'dark' | 'auto' | 'custom',\n systemTheme: 'light' | 'dark',\n providerConfig?: GotchaThemeConfig,\n): ResolvedTheme {\n const effectiveTheme = theme === 'auto' || theme === 'custom' ? systemTheme : theme;\n let resolved: ResolvedTheme = effectiveTheme === 'dark'\n ? deepMerge({}, DARK_TOKENS) as ResolvedTheme\n : deepMerge({}, LIGHT_TOKENS) as ResolvedTheme;\n\n if (providerConfig) {\n resolved = deepMerge(resolved, providerConfig) as ResolvedTheme;\n }\n\n return resolved;\n}\n","import { ResolvedTheme } from './tokens';\n\nconst STYLE_ID = 'gotcha-styles';\nconst FONT_ID = 'gotcha-dm-sans';\nconst FONT_FACE_ID = 'gotcha-carter-one';\n\n/**\n * The Carter One @font-face CSS with base64-embedded woff2.\n * Uses font-display: block to prevent any fallback font from showing.\n * Since the font is base64-encoded (instant decode), the block period is negligible.\n */\nconst CARTER_ONE_FONT_FACE = `\n@font-face {\n font-family: 'Carter One';\n font-style: normal;\n font-weight: 400;\n font-display: block;\n src: url(data:font/woff2;base64,d09GMgABAAAAAAK4AA4AAAAABOwAAAJlAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhQbXhwaBmAANBEICoFUgW8BNgIkAwgLBgAEIAWCUgcgGwoEUVQMHgC+OLCNaQVfBAoIrXGAIhjLIIM0CxavPfqMrzmLh6/9fufu20XEQyQzNNPOUEmimUZJpKLdIu3RKOU3O1hXc5D3YTdAbu+mRHU5AAIwC231R25qGGbpnwecyr34QQKM3gHMKMzOM4ogDSwQSreJE9bjISamQdCMwAAgeI0+S7qoy5j8TCDK8Ff4Fwm5+ecJhCwh9EgmsJiTo6S+/WkCPCU8DpCqr+hWKM/FBMRyfLPqV2LSlzBEIhqLxeGhIADg+rwoHxx58Oipm4301FUpgID4K8fAChoJFSYwAhNYKyDLAjudDimd9wA18hGDDvNkBE6AByBJiLpXVM2jgyht94hWK9yPQD+5lb948fAQKnfCK1PjBQWRayfW+hltCzAs9B8eX54Xd5g7vrzpiTswCeXB/VG5PNObmFr711KPrLKC6/mxys5avigCA+uFj8HGq+ErmaRDt/31k1XtfRtcI0pNluOCFEOOmVEOTg5eYn77Hq9Y0SJxu+bSBW5skqWS0VLXOvNJxgyRhVECycL7u2cb2pmOGdolPK+ORsLma1IHQCAY6I5NjWKsNzQVPeDnvzc7Pth+aTYMKHpqoEcCwSM4A6sVYPt/AIoeTckToLx4hELyieAj16Z4TKDbKYzIJOAW2JNhIptMhjyRlbXedjaymDv75i5jb1xkyVYiV4okyfIhmnG0EGNDIyMkVgmkUIJcmbJkQmLEi5Ehjz7iJF06pJeel1ETYiCBP/+OePouYuTKlyAX4iVTAl8JkhRIFyN3UpqAdTHa1nfVAy3Kk3LL2Ejf0Gch0McAqJNIAwAA) format('woff2');\n unicode-range: U+0047;\n}`.trim();\n\n/**\n * Inject Carter One @font-face at module load time (top-level side effect).\n * This ensures the font is registered with the browser BEFORE any React\n * component renders, eliminating FOUT completely.\n */\nfunction injectFontFace(): void {\n if (typeof document === 'undefined') return;\n if (document.getElementById(FONT_FACE_ID)) return;\n\n const style = document.createElement('style');\n style.id = FONT_FACE_ID;\n style.textContent = CARTER_ONE_FONT_FACE;\n document.head.appendChild(style);\n}\n\n// Execute immediately when this module is imported\ninjectFontFace();\n\n/** Strip characters that could break out of a CSS value context */\nfunction sanitizeCSS(value: string): string {\n return value.replace(/[{}<>;@\\\\]/g, '');\n}\n\n/**\n * Generate the full CSS string for all Gotcha animations, fonts, and base styles.\n */\nexport function generateStyleTag(theme: ResolvedTheme): string {\n const easing = {\n default: sanitizeCSS(theme.animation.easing.default),\n spring: sanitizeCSS(theme.animation.easing.spring),\n };\n const duration = {\n normal: sanitizeCSS(theme.animation.duration.normal),\n };\n const fontFamily = sanitizeCSS(theme.typography.fontFamily);\n const textDisabled = sanitizeCSS(theme.colors.textDisabled);\n const borderColor = sanitizeCSS(theme.colors.border);\n\n return `\n/* ── Gotcha Keyframe Animations ────────────────────────────── */\n\n@keyframes gotcha-modal-in {\n from { opacity: 0; transform: scale(0.92) translateY(-6px); }\n to { opacity: 1; transform: scale(1) translateY(0); }\n}\n\n@keyframes gotcha-modal-in-above {\n from { opacity: 0; transform: scale(0.92) translateY(6px); }\n to { opacity: 1; transform: scale(1) translateY(0); }\n}\n\n@keyframes gotcha-modal-in-center {\n from { opacity: 0; transform: translate(-50%, -50%) scale(0.92); }\n to { opacity: 1; transform: translate(-50%, -50%) scale(1); }\n}\n\n@keyframes gotcha-success-pop {\n 0% { transform: scale(0); opacity: 0; }\n 50% { transform: scale(1.15); }\n 100% { transform: scale(1); opacity: 1; }\n}\n\n@keyframes gotcha-success-text {\n from { opacity: 0; transform: translateY(6px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes gotcha-check-draw {\n from { stroke-dashoffset: 24; }\n to { stroke-dashoffset: 0; }\n}\n\n@keyframes gotcha-glow-pulse {\n 0%, 100% { box-shadow: 0 0 0 0 rgba(16,185,129,0.3); }\n 50% { box-shadow: 0 0 0 8px rgba(16,185,129,0); }\n}\n\n@keyframes gotcha-star-pulse {\n 0% { transform: scale(1); }\n 40% { transform: scale(1.3); }\n 100% { transform: scale(1); }\n}\n\n@keyframes gotcha-shimmer {\n 0% { background-position: -200% 0; }\n 100% { background-position: 200% 0; }\n}\n\n@keyframes gotcha-fade-up {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes gotcha-overlay-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes gotcha-expand-in {\n from { opacity: 0; max-height: 0; margin-top: 0; }\n to { opacity: 1; max-height: 200px; margin-top: 12px; }\n}\n\n@keyframes gotcha-bubble-pop {\n 0% { transform: scale(0); opacity: 0; filter: blur(4px); }\n 40% { opacity: 1; filter: blur(0px); }\n 65% { transform: scale(1.08); }\n 82% { transform: scale(0.97); }\n 100% { transform: scale(1); opacity: 1; filter: blur(0px); }\n}\n\n@keyframes gotcha-letter-in {\n 0% { opacity: 0; transform: scale(0.6) translateY(2px); filter: blur(3px); }\n 100% { opacity: 1; transform: scale(1) translateY(0); filter: blur(0px); }\n}\n\n@keyframes gotcha-arrive-glow {\n 0%, 100% { box-shadow: 0 3px 12px rgba(0,0,0,0.12), 0 0 1px rgba(0,0,0,0.2); }\n 50% { box-shadow: 0 4px 16px rgba(0,0,0,0.18), 0 0 1px rgba(0,0,0,0.25); }\n}\n\n@keyframes gotcha-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n@keyframes gotcha-dash {\n 0% { stroke-dasharray: 1, 62; stroke-dashoffset: 0; }\n 50% { stroke-dasharray: 40, 62; stroke-dashoffset: -12; }\n 100% { stroke-dasharray: 1, 62; stroke-dashoffset: -62; }\n}\n\n/* ── Base Styles ───────────────────────────────────────────── */\n\n[data-gotcha] {\n font-family: ${fontFamily};\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n[data-gotcha] *, [data-gotcha] *::before, [data-gotcha] *::after {\n box-sizing: border-box;\n}\n\n[data-gotcha] button {\n outline: none;\n}\n\n[data-gotcha] button:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px ${borderColor};\n}\n\n.gotcha-root textarea::placeholder {\n color: ${textDisabled};\n}\n\n/* ── Animation Utilities ───────────────────────────────────── */\n\n.gotcha-fade-up {\n animation: gotcha-fade-up ${duration.normal} ${easing.default} both;\n}\n\n.gotcha-modal-enter {\n animation: gotcha-modal-in 0.3s ${easing.spring} both;\n}\n\n.gotcha-modal-enter-above {\n animation: gotcha-modal-in-above 0.3s ${easing.spring} both;\n}\n\n.gotcha-modal-enter-center {\n animation: gotcha-modal-in-center 0.3s ${easing.spring} both;\n}\n\n.gotcha-overlay-enter {\n animation: gotcha-overlay-in 0.2s ${easing.default} both;\n}\n\n/* ── Reduced Motion ────────────────────────────────────────── */\n\n@media (prefers-reduced-motion: reduce) {\n [data-gotcha] *, [data-gotcha] *::before, [data-gotcha] *::after {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n }\n}\n`.trim();\n}\n\n/**\n * Inject the style tag into the document head (idempotent).\n */\nexport function injectStyles(theme: ResolvedTheme): void {\n if (typeof document === 'undefined') return;\n\n // Inject DM Sans from Google Fonts with preconnect\n if (!document.getElementById(FONT_ID)) {\n // Preconnect to Google Fonts\n const preconnect = document.createElement('link');\n preconnect.rel = 'preconnect';\n preconnect.href = 'https://fonts.googleapis.com';\n document.head.appendChild(preconnect);\n\n const preconnectStatic = document.createElement('link');\n preconnectStatic.rel = 'preconnect';\n preconnectStatic.href = 'https://fonts.gstatic.com';\n preconnectStatic.crossOrigin = 'anonymous';\n document.head.appendChild(preconnectStatic);\n\n // Load DM Sans from Google Fonts (Carter One is base64-embedded above)\n const link = document.createElement('link');\n link.id = FONT_ID;\n link.rel = 'stylesheet';\n link.href = 'https://fonts.googleapis.com/css2?family=Carter+One&family=DM+Sans:wght@400;500;600;700&display=swap';\n document.head.appendChild(link);\n }\n\n // Inject or update style tag\n let styleEl = document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n if (!styleEl) {\n styleEl = document.createElement('style');\n styleEl.id = STYLE_ID;\n document.head.appendChild(styleEl);\n }\n styleEl.textContent = generateStyleTag(theme);\n}\n","import React, { createContext, useContext, useMemo, useState, useCallback, useEffect } from 'react';\nimport { createApiClient, ApiClient } from '../api/client';\nimport { GotchaUser } from '../types';\nimport { GotchaThemeConfig } from '../theme/tokens';\nimport { resolveTheme } from '../theme/resolveTheme';\nimport { injectStyles } from '../theme/styles';\nimport { startErrorCapture, stopErrorCapture } from '../utils/errorBuffer';\n\nexport interface GotchaProviderProps {\n /** Your Gotcha API key */\n apiKey: string;\n /** React children */\n children: React.ReactNode;\n /** Override the API base URL (for testing/staging) */\n baseUrl?: string;\n /** Enable debug logging */\n debug?: boolean;\n /** Disable all Gotcha buttons globally */\n disabled?: boolean;\n /** Default user metadata applied to all submissions */\n defaultUser?: GotchaUser;\n /** Theme configuration overrides applied to all instances */\n themeConfig?: GotchaThemeConfig;\n}\n\nexport interface GotchaContextValue {\n client: ApiClient;\n disabled: boolean;\n defaultUser: GotchaUser;\n debug: boolean;\n // Modal management - only one open at a time\n activeModalId: string | null;\n openModal: (elementId: string) => void;\n closeModal: () => void;\n // Theme\n themeConfig?: GotchaThemeConfig;\n}\n\nconst GotchaContext = createContext<GotchaContextValue | null>(null);\n\nconst EMPTY_USER: GotchaUser = {};\n\nexport function GotchaProvider({\n apiKey,\n children,\n baseUrl,\n debug = false,\n disabled = false,\n defaultUser,\n themeConfig,\n}: GotchaProviderProps) {\n const [activeModalId, setActiveModalId] = useState<string | null>(null);\n\n if (baseUrl && !baseUrl.startsWith('https://') && !baseUrl.startsWith('/') && !baseUrl.includes('localhost')) {\n console.warn('[Gotcha] baseUrl should use HTTPS in production:', baseUrl);\n }\n\n const client = useMemo(\n () => createApiClient({ apiKey, baseUrl, debug }),\n [apiKey, baseUrl, debug]\n );\n\n // Stabilize defaultUser reference\n const stableDefaultUser = useMemo(\n () => defaultUser ?? EMPTY_USER,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(defaultUser)]\n );\n\n // Inject styles on mount. Carter One @font-face is injected at module-load time\n // (styles.ts:37) so it's already available before this runs.\n useEffect(() => {\n const resolved = resolveTheme('light', 'light', themeConfig);\n injectStyles(resolved);\n }, [themeConfig]);\n\n // Capture JS errors for context enrichment\n useEffect(() => {\n startErrorCapture();\n return () => stopErrorCapture();\n }, []);\n\n // Flush offline queue on reconnect and on mount\n useEffect(() => {\n client.flushQueue();\n const handleOnline = () => client.flushQueue();\n window.addEventListener('online', handleOnline);\n return () => window.removeEventListener('online', handleOnline);\n }, [client]);\n\n const openModal = useCallback((elementId: string) => {\n setActiveModalId(elementId);\n }, []);\n\n const closeModal = useCallback(() => {\n setActiveModalId(null);\n }, []);\n\n const value: GotchaContextValue = useMemo(\n () => ({\n client,\n disabled,\n defaultUser: stableDefaultUser,\n debug,\n activeModalId,\n openModal,\n closeModal,\n themeConfig,\n }),\n [client, disabled, stableDefaultUser, debug, activeModalId, openModal, closeModal, themeConfig]\n );\n\n return (\n <GotchaContext.Provider value={value}>{children}</GotchaContext.Provider>\n );\n}\n\nexport function useGotchaContext(): GotchaContextValue {\n const context = useContext(GotchaContext);\n if (!context) {\n throw new Error('useGotchaContext must be used within a GotchaProvider');\n }\n return context;\n}\n","import { useState, useCallback, useEffect } from 'react';\nimport { useGotchaContext } from '../components/GotchaProvider';\nimport { ResponseMode, GotchaUser, GotchaResponse, VoteType, ExistingResponse } from '../types';\n\ninterface UseSubmitOptions {\n elementId: string;\n mode: ResponseMode;\n pollOptions?: string[];\n user?: GotchaUser;\n onePerUser?: boolean;\n /** When onePerUser is true, allow a new submission after this many days */\n cooldownDays?: number;\n onSuccess?: (response: GotchaResponse) => void;\n onError?: (error: Error) => void;\n}\n\ninterface SubmitData {\n content?: string;\n title?: string;\n rating?: number;\n vote?: VoteType;\n pollSelected?: string[];\n isBug?: boolean;\n screenshot?: string;\n}\n\nfunction isResponseExpired(createdAt: string, cooldownDays: number): boolean {\n const createdTime = new Date(createdAt).getTime();\n if (isNaN(createdTime)) return true;\n const ageMs = Date.now() - createdTime;\n const cooldownMs = cooldownDays * 24 * 60 * 60 * 1000;\n return ageMs >= cooldownMs;\n}\n\nexport function useSubmit(options: UseSubmitOptions) {\n const { client, defaultUser } = useGotchaContext();\n const [isLoading, setIsLoading] = useState(false);\n const [isCheckingExisting, setIsCheckingExisting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [existingResponse, setExistingResponse] = useState<ExistingResponse | null>(null);\n\n // Check for existing response when user ID is provided and onePerUser is enabled\n useEffect(() => {\n if (process.env.NODE_ENV !== 'production' && options.cooldownDays && !options.onePerUser) {\n console.warn('[Gotcha] cooldownDays has no effect without onePerUser=true');\n }\n\n const userId = options.user?.id || defaultUser?.id;\n if (!userId || !options.onePerUser) {\n setExistingResponse(null);\n return;\n }\n\n let cancelled = false;\n\n const checkExisting = async () => {\n setIsCheckingExisting(true);\n try {\n const existing = await client.checkExistingResponse(options.elementId, userId);\n if (!cancelled) {\n if (existing && options.cooldownDays && options.cooldownDays > 0 &&\n isResponseExpired(existing.createdAt, options.cooldownDays)) {\n setExistingResponse(null);\n } else {\n setExistingResponse(existing);\n }\n }\n } catch {\n // Ignore errors - just means no existing response found\n if (!cancelled) {\n setExistingResponse(null);\n }\n } finally {\n if (!cancelled) {\n setIsCheckingExisting(false);\n }\n }\n };\n\n checkExisting();\n\n return () => {\n cancelled = true;\n };\n }, [client, options.elementId, options.user?.id, defaultUser?.id, options.onePerUser, options.cooldownDays]);\n\n const submit = useCallback(\n async (data: SubmitData) => {\n setIsLoading(true);\n setError(null);\n\n try {\n const userId = options.user?.id || defaultUser?.id;\n let response: GotchaResponse;\n\n // If onePerUser is enabled and we have an existing response, update instead of create\n if (options.onePerUser && existingResponse && userId) {\n response = await client.updateResponse(\n existingResponse.id,\n {\n content: data.content,\n title: data.title,\n rating: data.rating,\n vote: data.vote,\n pollSelected: data.pollSelected,\n },\n userId\n );\n } else {\n response = await client.submitResponse({\n elementId: options.elementId,\n mode: options.mode,\n content: data.content,\n title: data.title,\n rating: data.rating,\n vote: data.vote,\n pollOptions: options.pollOptions,\n pollSelected: data.pollSelected,\n isBug: data.isBug,\n screenshot: data.screenshot,\n user: { ...defaultUser, ...options.user },\n });\n }\n\n // Update existingResponse so isEditing flips to true after first submit (only for onePerUser)\n if (options.onePerUser) {\n setExistingResponse({\n id: response.id,\n mode: options.mode,\n content: data.content ?? null,\n title: data.title ?? null,\n rating: data.rating ?? null,\n vote: data.vote ?? null,\n pollSelected: data.pollSelected ?? null,\n createdAt: response.createdAt,\n });\n }\n\n options.onSuccess?.(response);\n return response;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Something went wrong';\n setError(errorMessage);\n options.onError?.(err instanceof Error ? err : new Error(errorMessage));\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client, defaultUser, options, existingResponse]\n );\n\n return {\n submit,\n isLoading,\n isCheckingExisting,\n error,\n existingResponse,\n isEditing: !!existingResponse,\n clearError: () => setError(null),\n };\n}\n","import { useState, useCallback, useEffect, useMemo } from 'react';\nimport { STORAGE_KEYS } from '../constants';\nimport { getAnonymousId } from '../utils/anonymous';\nimport { safeGetItem, safeSetItem } from '../utils/localStorage';\n\ninterface UseHideAfterSubmitOptions {\n elementId: string;\n userId?: string;\n hideAfterSubmitDays?: number;\n}\n\nfunction getStorageKey(elementId: string, userId: string): string {\n return `${STORAGE_KEYS.HIDDEN_UNTIL}_${elementId}_${userId}`;\n}\n\nfunction checkIsHidden(elementId: string, resolvedUserId: string, hideAfterSubmitDays?: number): boolean {\n if (!hideAfterSubmitDays || hideAfterSubmitDays <= 0) return false;\n const key = getStorageKey(elementId, resolvedUserId);\n const hiddenUntilStr = safeGetItem(key);\n if (!hiddenUntilStr) return false;\n return new Date(hiddenUntilStr).getTime() > Date.now();\n}\n\nexport function useHideAfterSubmit(options: UseHideAfterSubmitOptions) {\n const { elementId, userId, hideAfterSubmitDays } = options;\n const resolvedUserId = useMemo(() => userId || getAnonymousId(), [userId]);\n\n const [isHidden, setIsHidden] = useState(() =>\n checkIsHidden(elementId, resolvedUserId, hideAfterSubmitDays)\n );\n\n // Re-evaluate when props change dynamically\n useEffect(() => {\n setIsHidden(checkIsHidden(elementId, resolvedUserId, hideAfterSubmitDays));\n }, [elementId, resolvedUserId, hideAfterSubmitDays]);\n\n const markHidden = useCallback(() => {\n if (!hideAfterSubmitDays || hideAfterSubmitDays <= 0) return;\n\n const key = getStorageKey(elementId, resolvedUserId);\n const hiddenUntil = new Date(\n Date.now() + hideAfterSubmitDays * 24 * 60 * 60 * 1000\n );\n safeSetItem(key, hiddenUntil.toISOString());\n setIsHidden(true);\n }, [elementId, resolvedUserId, hideAfterSubmitDays]);\n\n return { isHidden, markHidden };\n}\n","import { useState, useEffect } from 'react';\nimport { STORAGE_KEYS } from '../constants';\nimport { safeGetItem, safeSetItem } from '../utils/localStorage';\n\ninterface UseTriggerConditionsOptions {\n elementId: string;\n showAfterSeconds?: number;\n showAfterScrollPercent?: number;\n showAfterVisits?: number;\n}\n\nfunction getVisitKey(elementId: string): string {\n return `${STORAGE_KEYS.VISIT_COUNT}_${elementId}`;\n}\n\nexport function useTriggerConditions(options: UseTriggerConditionsOptions) {\n const { elementId, showAfterSeconds, showAfterScrollPercent, showAfterVisits } = options;\n\n const hasConditions = showAfterSeconds != null || showAfterScrollPercent != null || showAfterVisits != null;\n\n const [timeMet, setTimeMet] = useState(!showAfterSeconds);\n const [scrollMet, setScrollMet] = useState(!showAfterScrollPercent);\n const [visitsMet] = useState(() => {\n if (!showAfterVisits) return true;\n const key = getVisitKey(elementId);\n const current = parseInt(safeGetItem(key) || '0', 10);\n const next = current + 1;\n safeSetItem(key, String(next));\n return next >= showAfterVisits;\n });\n\n // Time delay\n useEffect(() => {\n if (!showAfterSeconds || showAfterSeconds <= 0) return;\n\n const start = Date.now();\n const targetMs = showAfterSeconds * 1000;\n\n const check = () => {\n if (Date.now() - start >= targetMs) {\n setTimeMet(true);\n } else {\n timer = setTimeout(check, Math.min(1000, targetMs - (Date.now() - start)));\n }\n };\n\n let timer = setTimeout(check, Math.min(1000, targetMs));\n return () => clearTimeout(timer);\n }, [showAfterSeconds]);\n\n // Scroll depth\n useEffect(() => {\n if (!showAfterScrollPercent || showAfterScrollPercent <= 0) return;\n\n const checkScroll = () => {\n const scrollHeight = document.documentElement.scrollHeight;\n const viewportHeight = window.innerHeight;\n\n // If page can't scroll, condition is auto-met\n if (scrollHeight <= viewportHeight) {\n setScrollMet(true);\n return;\n }\n\n const scrolled = (window.scrollY + viewportHeight) / scrollHeight * 100;\n if (scrolled >= showAfterScrollPercent) {\n setScrollMet(true);\n }\n };\n\n checkScroll();\n if (!scrollMet) {\n window.addEventListener('scroll', checkScroll, { passive: true });\n return () => window.removeEventListener('scroll', checkScroll);\n }\n }, [showAfterScrollPercent, scrollMet]);\n\n return {\n conditionsMet: !hasConditions || (timeMet && scrollMet && visitsMet),\n };\n}\n","/**\n * Simple class name utility\n * Combines class names, filtering out falsy values\n */\nexport function cn(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(' ');\n}\n","/**\n * Detect if the device supports touch\n */\nexport const isTouchDevice = (): boolean => {\n if (typeof window === 'undefined') return false;\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n};\n\n/**\n * Get the appropriate size based on device type\n */\nexport const getResponsiveSize = (\n size: 'sm' | 'md' | 'lg',\n isTouch: boolean\n): number => {\n const sizes = {\n sm: { desktop: 24, mobile: 28 },\n md: { desktop: 32, mobile: 34 },\n lg: { desktop: 40, mobile: 40 },\n };\n\n return isTouch ? sizes[size].mobile : sizes[size].desktop;\n};\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { Size, Theme, GotchaStyles } from '../types';\nimport { cn } from '../utils/cn';\nimport { isTouchDevice, getResponsiveSize } from '../utils/device';\nimport { resolveTheme } from '../theme/resolveTheme';\nimport { useGotchaContext } from './GotchaProvider';\n\nexport interface GotchaButtonProps {\n size: Size;\n theme: Theme;\n customStyles?: GotchaStyles;\n showOnHover: boolean;\n touchBehavior: 'always-visible' | 'tap-to-reveal';\n onClick: () => void;\n isOpen: boolean;\n isParentHovered?: boolean;\n /** Enable entrance animations (default: true) */\n animated?: boolean;\n /** Number of queued offline submissions */\n queuedCount?: number;\n}\n\nfunction getInitialSystemTheme(): 'light' | 'dark' {\n if (typeof window === 'undefined') return 'light';\n return window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light';\n}\n\nexport function GotchaButton({\n size,\n theme,\n customStyles,\n showOnHover,\n touchBehavior,\n onClick,\n isOpen,\n isParentHovered = false,\n animated = true,\n queuedCount = 0,\n}: GotchaButtonProps) {\n const [isTouch, setIsTouch] = useState(false);\n const [tapRevealed, setTapRevealed] = useState(false);\n const [systemTheme, setSystemTheme] = useState<'light' | 'dark'>(getInitialSystemTheme);\n const [isHovered, setIsHovered] = useState(false);\n const [isPressed, setIsPressed] = useState(false);\n const [hasPopped, setHasPopped] = useState(false);\n\n const { themeConfig } = useGotchaContext();\n\n useEffect(() => {\n setIsTouch(isTouchDevice());\n\n if (typeof window === 'undefined') return;\n const darkQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) =>\n setSystemTheme(e.matches ? 'dark' : 'light');\n darkQuery.addEventListener('change', handler);\n return () => darkQuery.removeEventListener('change', handler);\n }, []);\n\n // Determine visibility\n const shouldShow = (() => {\n if (isOpen) return true;\n if (!isTouch && showOnHover) return isParentHovered;\n if (isTouch && touchBehavior === 'tap-to-reveal') return tapRevealed;\n return true;\n })();\n\n // Mark bubble pop as done after first appearance\n useEffect(() => {\n if (shouldShow && !hasPopped) {\n const timer = setTimeout(() => setHasPopped(true), 600);\n return () => clearTimeout(timer);\n }\n }, [shouldShow, hasPopped]);\n\n const handleClick = () => {\n if (isTouch && touchBehavior === 'tap-to-reveal' && !tapRevealed) {\n setTapRevealed(true);\n return;\n }\n onClick();\n };\n\n const buttonSize = getResponsiveSize(size, isTouch);\n const t = useMemo(\n () => resolveTheme(theme, systemTheme, themeConfig),\n [theme, systemTheme, themeConfig]\n );\n\n // Compute transform based on state\n const getTransform = () => {\n if (!shouldShow) return 'scale(0.6)';\n if (isPressed) return 'scale(0.95)';\n if (isHovered) return 'scale(1.08)';\n return 'scale(1)';\n };\n\n const baseStyles: React.CSSProperties = {\n width: buttonSize,\n height: buttonSize,\n borderRadius: '50%',\n border: t.colors.glassBorder,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: t.colors.glassBackground,\n backdropFilter: 'blur(20px) saturate(180%)',\n WebkitBackdropFilter: 'blur(20px) saturate(180%)',\n color: t.colors.glassColor,\n boxShadow: isHovered ? t.colors.glassHoverShadow : t.colors.glassShadow,\n transition: hasPopped ? `all 0.3s ${t.animation.easing.spring}` : 'none',\n opacity: shouldShow ? 1 : 0,\n transform: getTransform(),\n filter: isPressed ? 'brightness(0.95)' : 'brightness(1)',\n pointerEvents: shouldShow ? 'auto' : 'none',\n ...(animated && shouldShow && !hasPopped ? {\n animation: 'gotcha-bubble-pop 500ms cubic-bezier(0.175, 0.885, 0.32, 1.275) both, gotcha-arrive-glow 1200ms ease-in-out 600ms both',\n } : {}),\n ...customStyles?.button,\n };\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => { setIsHovered(false); setIsPressed(false); }}\n onMouseDown={() => setIsPressed(true)}\n onMouseUp={() => setIsPressed(false)}\n onTouchStart={() => setIsPressed(true)}\n onTouchEnd={() => setIsPressed(false)}\n style={baseStyles}\n className={cn('gotcha-button', isOpen && 'gotcha-button--open')}\n aria-label=\"Give feedback on this feature\"\n aria-expanded={isOpen}\n aria-haspopup=\"dialog\"\n >\n <GotchaIcon size={buttonSize * 0.65} animated={animated} />\n {queuedCount > 0 && (\n <div\n aria-label={`${queuedCount} queued`}\n style={{\n position: 'absolute',\n top: -2,\n right: -2,\n width: 8,\n height: 8,\n borderRadius: '50%',\n backgroundColor: t.colors.warning,\n border: '1.5px solid rgba(255,255,255,0.9)',\n }}\n />\n )}\n </button>\n );\n}\n\nfunction GotchaIcon({ size, animated = true }: { size: number; animated?: boolean }) {\n const [mounted, setMounted] = useState(false);\n useEffect(() => { setMounted(true); }, []);\n\n return (\n <span\n aria-hidden=\"true\"\n style={{\n fontFamily: \"'Carter One', cursive\",\n fontSize: size,\n lineHeight: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginTop: size * 0.05,\n marginRight: size * 0.05,\n userSelect: 'none',\n opacity: animated ? 0 : (mounted ? 1 : 0),\n ...(animated && mounted ? {\n animation: 'gotcha-letter-in 350ms cubic-bezier(0.25, 0.46, 0.45, 0.94) 200ms both',\n } : {}),\n }}\n >\n G\n </span>\n );\n}\n","import React from 'react';\n\ninterface SpinnerProps {\n size?: number;\n color?: string;\n}\n\nexport function Spinner({ size = 16, color = 'currentColor' }: SpinnerProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{\n animation: 'gotcha-spin 0.8s linear infinite',\n }}\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke={color}\n strokeWidth=\"2\"\n strokeOpacity=\"0.12\"\n />\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n style={{\n animation: 'gotcha-dash 1.2s ease-in-out infinite',\n }}\n />\n </svg>\n );\n}\n","import React from 'react';\nimport { ResolvedTheme } from '../theme/tokens';\n\ninterface ScreenshotPreviewProps {\n src: string;\n onRemove: () => void;\n resolvedTheme: ResolvedTheme;\n}\n\nexport function ScreenshotPreview({ src, onRemove, resolvedTheme: t }: ScreenshotPreviewProps) {\n return (\n <div style={{\n position: 'relative',\n marginTop: 10,\n borderRadius: t.borders.radius.md,\n overflow: 'hidden',\n border: `1px solid ${t.colors.border}`,\n }}>\n <img\n src={src}\n alt=\"Screenshot\"\n style={{\n display: 'block',\n width: '100%',\n maxHeight: 120,\n objectFit: 'cover',\n }}\n />\n <button\n type=\"button\"\n onClick={onRemove}\n aria-label=\"Remove screenshot\"\n style={{\n position: 'absolute',\n top: 4,\n right: 4,\n width: 22,\n height: 22,\n borderRadius: '50%',\n border: 'none',\n backgroundColor: 'rgba(0,0,0,0.6)',\n color: '#fff',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 12,\n lineHeight: 1,\n }}\n >\n <svg width={10} height={10} viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M1 1L13 13M1 13L13 1\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n );\n}\n","import React, { useState, useEffect, useRef } from 'react';\nimport { GotchaStyles } from '../../types';\nimport { ResolvedTheme } from '../../theme/tokens';\nimport { isTouchDevice } from '../../utils/device';\nimport { Spinner } from '../Spinner';\nimport { ScreenshotPreview } from '../ScreenshotPreview';\n\ninterface FeedbackModeProps {\n resolvedTheme: ResolvedTheme;\n placeholder?: string;\n submitText: string;\n isLoading: boolean;\n onSubmit: (data: { content?: string; rating?: number; isBug?: boolean; screenshot?: string }) => void;\n customStyles?: GotchaStyles;\n initialValues?: {\n content?: string | null;\n rating?: number | null;\n };\n isEditing?: boolean;\n showText?: boolean;\n showRating?: boolean;\n enableBugFlag?: boolean;\n bugFlagLabel?: string;\n enableScreenshot?: boolean;\n}\n\nexport function FeedbackMode({\n resolvedTheme: t,\n placeholder,\n submitText,\n isLoading,\n onSubmit,\n customStyles,\n initialValues,\n isEditing = false,\n showText = true,\n showRating = true,\n enableBugFlag = false,\n bugFlagLabel,\n enableScreenshot = false,\n}: FeedbackModeProps) {\n const [content, setContent] = useState(initialValues?.content || '');\n const [rating, setRating] = useState<number | null>(initialValues?.rating ?? null);\n const [isBug, setIsBug] = useState(false);\n const [isTouch, setIsTouch] = useState(false);\n const [screenshot, setScreenshot] = useState<string | null>(null);\n const [capturingScreenshot, setCapturingScreenshot] = useState(false);\n\n useEffect(() => {\n setIsTouch(isTouchDevice());\n }, []);\n\n useEffect(() => {\n if (initialValues?.content !== undefined) {\n setContent(initialValues.content || '');\n }\n if (initialValues?.rating !== undefined) {\n setRating(initialValues.rating ?? null);\n }\n }, [initialValues?.content, initialValues?.rating]);\n\n const canSubmit = (() => {\n if (showText && showRating) return content.trim().length > 0 || rating !== null;\n if (showText) return content.trim().length > 0;\n if (showRating) return rating !== null;\n return false;\n })();\n\n const handleScreenshotCapture = async () => {\n setCapturingScreenshot(true);\n try {\n const { captureScreenshot } = await import('../../utils/screenshot');\n const result = await captureScreenshot();\n if (result) setScreenshot(result);\n } catch {\n // Capture failed silently\n } finally {\n setCapturingScreenshot(false);\n }\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (!canSubmit) return;\n onSubmit({\n content: showText && content.trim() ? content.trim() : undefined,\n rating: showRating && rating !== null ? rating : undefined,\n isBug: isBug || undefined,\n screenshot: screenshot || undefined,\n });\n };\n\n const inputStyles: React.CSSProperties = {\n width: '100%',\n padding: isTouch ? '12px 14px' : '10px 12px',\n border: `1px solid ${t.colors.inputBorder}`,\n borderRadius: t.borders.radius.md,\n backgroundColor: t.colors.inputBackground,\n color: t.colors.text,\n fontSize: isTouch ? t.typography.fontSize.lg : t.typography.fontSize.md,\n resize: 'none',\n minHeight: isTouch ? 100 : 80,\n fontFamily: t.typography.fontFamily,\n outline: 'none',\n transition: `border-color ${t.animation.duration.fast} ${t.animation.easing.default}, box-shadow ${t.animation.duration.fast} ${t.animation.easing.default}`,\n lineHeight: 1.5,\n boxShadow: `inset 0 1px 2px rgba(0,0,0,0.04)`,\n ...customStyles?.input,\n };\n\n const buttonStyles: React.CSSProperties = {\n width: '100%',\n padding: isTouch ? '14px 16px' : '10px 16px',\n border: t.colors.buttonBorder,\n borderRadius: t.borders.radius.md,\n backgroundColor: t.colors.buttonBackground,\n color: t.colors.buttonColor,\n fontSize: isTouch ? t.typography.fontSize.lg : t.typography.fontSize.md,\n fontWeight: t.typography.fontWeight.medium,\n fontFamily: t.typography.fontFamily,\n cursor: isLoading ? 'not-allowed' : 'pointer',\n transition: `all ${t.animation.duration.fast} ${t.animation.easing.default}`,\n letterSpacing: '0.01em',\n ...customStyles?.submitButton,\n };\n\n return (\n <form onSubmit={handleSubmit}>\n {/* Rating */}\n {showRating && (\n <div style={{\n marginBottom: showText ? (isTouch ? 16 : 12) : 0,\n ...(!showText ? { display: 'flex', justifyContent: 'center', padding: '8px 0' } : {}),\n }}>\n <StarRating value={rating} onChange={setRating} theme={t} isTouch={isTouch} large={!showText} />\n </div>\n )}\n\n {/* Text input */}\n {showText && (\n <textarea\n value={content}\n onChange={(e) => setContent(e.target.value)}\n placeholder={placeholder || 'Share your thoughts...'}\n maxLength={5000}\n style={inputStyles}\n disabled={isLoading}\n aria-label=\"Your feedback\"\n onFocus={(e) => {\n e.currentTarget.style.borderColor = t.colors.inputBorderFocus;\n e.currentTarget.style.boxShadow = `0 0 0 3px ${t.colors.inputFocusRing}`;\n e.currentTarget.style.backgroundColor = t.colors.inputBackgroundFocus;\n }}\n onBlur={(e) => {\n e.currentTarget.style.borderColor = t.colors.inputBorder;\n e.currentTarget.style.boxShadow = 'inset 0 1px 2px rgba(0,0,0,0.04)';\n e.currentTarget.style.backgroundColor = t.colors.inputBackground;\n }}\n />\n )}\n\n {/* Bug flag toggle */}\n {enableBugFlag && (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={isBug}\n onClick={() => setIsBug(!isBug)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 7,\n width: '100%',\n marginTop: 10,\n padding: '7px 10px',\n border: `1px solid ${\n isBug ? t.colors.warningBorder : t.colors.border\n }`,\n borderRadius: 7,\n backgroundColor: isBug ? t.colors.warningSurface : 'transparent',\n cursor: 'pointer',\n transition: `all ${t.animation.duration.fast} ${t.animation.easing.default}`,\n fontFamily: t.typography.fontFamily,\n ...customStyles?.bugFlag,\n }}\n onMouseEnter={(e) => {\n if (!isBug) {\n e.currentTarget.style.backgroundColor = t.colors.surfaceHover === t.colors.inputBackgroundFocus\n ? 'rgba(0,0,0,0.02)' : t.colors.surfaceHover;\n }\n }}\n onMouseLeave={(e) => {\n if (!isBug) {\n e.currentTarget.style.backgroundColor = 'transparent';\n }\n }}\n >\n <svg\n width={14}\n height={14}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={isBug ? t.colors.warningActive : t.colors.textDisabled}\n strokeWidth={1.75}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ flexShrink: 0, transition: `stroke ${t.animation.duration.fast}` }}\n >\n <path d=\"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z\" />\n </svg>\n <span\n style={{\n fontSize: 12,\n fontWeight: isBug ? t.typography.fontWeight.medium : t.typography.fontWeight.normal,\n color: isBug ? t.colors.warningActive : t.colors.textDisabled,\n transition: `color ${t.animation.duration.fast}`,\n letterSpacing: '0.01em',\n }}\n >\n {isBug ? 'Issue reported' : (bugFlagLabel || 'Report an issue')}\n </span>\n <div\n style={{\n marginLeft: 'auto',\n width: 28,\n height: 16,\n borderRadius: 8,\n backgroundColor: isBug ? t.colors.warning : t.colors.border,\n position: 'relative',\n transition: `background-color ${t.animation.duration.fast} ${t.animation.easing.default}`,\n flexShrink: 0,\n }}\n >\n <div\n style={{\n position: 'absolute',\n top: 2,\n left: isBug ? 14 : 2,\n width: 12,\n height: 12,\n borderRadius: '50%',\n backgroundColor: isBug ? '#ffffff' : t.colors.textDisabled,\n transition: `left ${t.animation.duration.fast} ${t.animation.easing.default}, background-color ${t.animation.duration.fast}`,\n boxShadow: '0 1px 2px rgba(0,0,0,0.15)',\n }}\n />\n </div>\n </button>\n )}\n\n {/* Screenshot capture — shown when bug flag is active */}\n {enableBugFlag && enableScreenshot && isBug && !screenshot && (\n <button\n type=\"button\"\n onClick={handleScreenshotCapture}\n disabled={capturingScreenshot}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n width: '100%',\n marginTop: 8,\n padding: '7px 10px',\n border: `1px solid ${t.colors.border}`,\n borderRadius: 7,\n backgroundColor: 'transparent',\n cursor: capturingScreenshot ? 'not-allowed' : 'pointer',\n fontFamily: t.typography.fontFamily,\n fontSize: 12,\n color: t.colors.textSecondary,\n transition: `all ${t.animation.duration.fast} ${t.animation.easing.default}`,\n }}\n onMouseEnter={(e) => { e.currentTarget.style.backgroundColor = t.colors.surfaceHover; }}\n onMouseLeave={(e) => { e.currentTarget.style.backgroundColor = 'transparent'; }}\n >\n {capturingScreenshot ? (\n <Spinner size={14} color={t.colors.textSecondary} />\n ) : (\n <svg width={14} height={14} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.75} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" />\n <circle cx=\"12\" cy=\"10\" r=\"3\" />\n <path d=\"M2 17l4-4 3 3 4-4 9 9\" />\n </svg>\n )}\n {capturingScreenshot ? 'Capturing...' : 'Capture screenshot'}\n </button>\n )}\n\n {/* Screenshot preview */}\n {enableBugFlag && enableScreenshot && isBug && screenshot && (\n <ScreenshotPreview\n src={screenshot}\n onRemove={() => setScreenshot(null)}\n resolvedTheme={t}\n />\n )}\n\n {/* Submit button */}\n <button\n type=\"submit\"\n disabled={isLoading || !canSubmit}\n style={{\n ...buttonStyles,\n marginTop: 12,\n opacity: isLoading ? 0.8 : 1,\n backgroundColor: !canSubmit ? t.colors.buttonBackgroundDisabled : t.colors.buttonBackground,\n color: !canSubmit ? t.colors.buttonColorDisabled : t.colors.buttonColor,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n ...(isLoading ? {\n backgroundImage: `linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.1) 50%, transparent 100%)`,\n backgroundSize: '200% 100%',\n animation: 'gotcha-shimmer 1.5s ease infinite',\n } : {}),\n }}\n onMouseEnter={(e) => {\n if (!e.currentTarget.disabled) {\n e.currentTarget.style.backgroundColor = t.colors.buttonBackgroundHover;\n e.currentTarget.style.transform = 'translateY(-1px)';\n e.currentTarget.style.boxShadow = t.shadows.button;\n }\n }}\n onMouseLeave={(e) => {\n if (!e.currentTarget.disabled) {\n e.currentTarget.style.backgroundColor = t.colors.buttonBackground;\n e.currentTarget.style.transform = 'translateY(0)';\n e.currentTarget.style.boxShadow = 'none';\n }\n }}\n >\n {isLoading && <Spinner size={isTouch ? 18 : 16} color={t.colors.buttonColor} />}\n {isLoading ? (isEditing ? 'Updating...' : 'Submitting...') : (isEditing ? 'Update' : submitText)}\n </button>\n </form>\n );\n}\n\ninterface StarRatingProps {\n value: number | null;\n onChange: (rating: number) => void;\n theme: ResolvedTheme;\n isTouch: boolean;\n large?: boolean;\n}\n\nfunction StarRating({ value, onChange, theme: t, isTouch, large = false }: StarRatingProps) {\n const [hovered, setHovered] = useState<number | null>(null);\n const [pulsing, setPulsing] = useState<number | null>(null);\n const pulseTimerRef = useRef<ReturnType<typeof setTimeout>>();\n const starSize = large ? (isTouch ? 36 : 28) : (isTouch ? 28 : 18);\n const buttonPadding = large ? (isTouch ? 8 : 5) : (isTouch ? 8 : 3);\n\n useEffect(() => {\n return () => { clearTimeout(pulseTimerRef.current); };\n }, []);\n\n const handleClick = (star: number) => {\n setPulsing(star);\n onChange(star);\n clearTimeout(pulseTimerRef.current);\n pulseTimerRef.current = setTimeout(() => setPulsing(null), 300);\n };\n\n return (\n <div\n style={{\n display: 'flex',\n gap: large ? (isTouch ? 8 : 6) : (isTouch ? 6 : 2),\n }}\n role=\"group\"\n aria-label=\"Rating\"\n >\n {[1, 2, 3, 4, 5].map((star) => {\n const isFilled = (hovered ?? value ?? 0) >= star;\n return (\n <button\n key={star}\n type=\"button\"\n onClick={() => handleClick(star)}\n onMouseEnter={() => setHovered(star)}\n onMouseLeave={() => setHovered(null)}\n aria-label={`Rate ${star} out of 5`}\n aria-pressed={value === star}\n style={{\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: buttonPadding,\n color: isFilled ? t.colors.starFilled : t.colors.starEmpty,\n transition: `color 0.15s ${t.animation.easing.default}`,\n transform: pulsing === star ? 'scale(1)' : ((hovered !== null && hovered >= star) ? 'scale(1.1)' : 'scale(1)'),\n animation: pulsing === star ? `gotcha-star-pulse 0.3s ${t.animation.easing.spring}` : 'none',\n filter: isFilled ? `drop-shadow(0 0 3px ${t.colors.starFilled}40)` : 'none',\n transitionDelay: `${(star - 1) * 30}ms`,\n }}\n >\n <svg width={starSize} height={starSize} viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\" />\n </svg>\n </button>\n );\n })}\n </div>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { ResolvedTheme } from '../../theme/tokens';\nimport { isTouchDevice } from '../../utils/device';\nimport { Spinner } from '../Spinner';\n\ninterface VoteModeProps {\n resolvedTheme: ResolvedTheme;\n isLoading: boolean;\n onSubmit: (data: { vote: 'up' | 'down' }) => void;\n initialVote?: 'up' | 'down' | null;\n isEditing?: boolean;\n labels?: { up: string; down: string };\n}\n\nexport function VoteMode({ resolvedTheme: t, isLoading, onSubmit, initialVote, isEditing = false, labels }: VoteModeProps) {\n const [isTouch, setIsTouch] = useState(false);\n const [activeVote, setActiveVote] = useState<'up' | 'down' | null>(initialVote || null);\n const [previousVote, setPreviousVote] = useState<'up' | 'down' | null>(initialVote || null);\n\n useEffect(() => {\n setIsTouch(isTouchDevice());\n }, []);\n\n useEffect(() => {\n if (initialVote !== undefined) {\n setPreviousVote(initialVote);\n setActiveVote(initialVote);\n }\n }, [initialVote]);\n\n useEffect(() => {\n if (!isLoading && !isEditing) {\n setActiveVote(null);\n }\n }, [isLoading, isEditing]);\n\n const handleVote = (vote: 'up' | 'down') => {\n setActiveVote(vote);\n onSubmit({ vote });\n };\n\n const getButtonStyles = (voteType: 'up' | 'down'): React.CSSProperties => {\n const isSelected = previousVote === voteType;\n const color = voteType === 'up' ? t.colors.voteUp : t.colors.voteDown;\n const surface = voteType === 'up' ? t.colors.voteUpSurface : t.colors.voteDownSurface;\n const border = voteType === 'up' ? t.colors.voteUpBorder : t.colors.voteDownBorder;\n\n return {\n flex: 1,\n minWidth: 0,\n overflow: 'hidden' as const,\n padding: isTouch ? '14px 18px' : '10px 14px',\n border: isSelected\n ? `2px solid ${border}`\n : `1px solid ${t.colors.border}`,\n borderRadius: t.borders.radius.lg - 2,\n background: isSelected\n ? `linear-gradient(135deg, ${surface}, ${surface})`\n : t.colors.surface,\n color: isSelected ? color : t.colors.textSecondary,\n fontSize: isTouch ? 28 : 24,\n fontFamily: t.typography.fontFamily,\n cursor: isLoading ? 'not-allowed' : 'pointer',\n transition: `all 0.2s ${t.animation.easing.default}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: isTouch ? 10 : 8,\n };\n };\n\n const iconSize = isTouch ? 24 : 20;\n\n return (\n <div\n style={{\n display: 'flex',\n gap: isTouch ? 12 : 10,\n }}\n role=\"group\"\n aria-label=\"Vote\"\n >\n <button\n type=\"button\"\n onClick={() => handleVote('up')}\n disabled={isLoading}\n style={getButtonStyles('up')}\n aria-label=\"Vote up - I like this\"\n aria-pressed={previousVote === 'up'}\n onMouseEnter={(e) => {\n if (!isLoading) {\n e.currentTarget.style.transform = 'translateY(-2px) scale(1.02)';\n e.currentTarget.style.boxShadow = t.shadows.button;\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.transform = 'translateY(0) scale(1)';\n e.currentTarget.style.boxShadow = 'none';\n }}\n >\n {isLoading && activeVote === 'up' ? (\n <>\n <Spinner size={iconSize} color={t.colors.text} />\n <span style={{ fontSize: isTouch ? 15 : 13, fontWeight: t.typography.fontWeight.medium, letterSpacing: '0.01em' }}>\n {isEditing ? 'Updating...' : 'Sending...'}\n </span>\n </>\n ) : (\n <>\n <ThumbsUpIcon size={iconSize} />\n <span style={{ fontSize: isTouch ? 15 : 13, fontWeight: t.typography.fontWeight.medium, letterSpacing: '0.01em' }}>\n {labels?.up || (previousVote === 'up' ? 'Liked' : 'Like')}\n </span>\n </>\n )}\n </button>\n\n <button\n type=\"button\"\n onClick={() => handleVote('down')}\n disabled={isLoading}\n style={getButtonStyles('down')}\n aria-label=\"Vote down - I don't like this\"\n aria-pressed={previousVote === 'down'}\n onMouseEnter={(e) => {\n if (!isLoading) {\n e.currentTarget.style.transform = 'translateY(-2px) scale(1.02)';\n e.currentTarget.style.boxShadow = t.shadows.button;\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.transform = 'translateY(0) scale(1)';\n e.currentTarget.style.boxShadow = 'none';\n }}\n >\n {isLoading && activeVote === 'down' ? (\n <>\n <Spinner size={iconSize} color={t.colors.text} />\n <span style={{ fontSize: isTouch ? 15 : 13, fontWeight: t.typography.fontWeight.medium, letterSpacing: '0.01em' }}>\n {isEditing ? 'Updating...' : 'Sending...'}\n </span>\n </>\n ) : (\n <>\n <ThumbsDownIcon size={iconSize} />\n <span style={{ fontSize: isTouch ? 15 : 13, fontWeight: t.typography.fontWeight.medium, letterSpacing: '0.01em' }}>\n {labels?.down || (previousVote === 'down' ? 'Disliked' : 'Dislike')}\n </span>\n </>\n )}\n </button>\n </div>\n );\n}\n\nfunction ThumbsUpIcon({ size = 24 }: { size?: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\" />\n </svg>\n );\n}\n\nfunction ThumbsDownIcon({ size = 24 }: { size?: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\" />\n </svg>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { ResolvedTheme } from '../../theme/tokens';\nimport { isTouchDevice } from '../../utils/device';\nimport { Spinner } from '../Spinner';\n\ninterface PollModeProps {\n resolvedTheme: ResolvedTheme;\n options: string[];\n allowMultiple: boolean;\n isLoading: boolean;\n onSubmit: (data: { pollSelected: string[] }) => void;\n initialSelected?: string[] | null;\n isEditing?: boolean;\n}\n\nexport function PollMode({\n resolvedTheme: t,\n options,\n allowMultiple,\n isLoading,\n onSubmit,\n initialSelected,\n isEditing = false,\n}: PollModeProps) {\n const [selected, setSelected] = useState<string[]>(initialSelected || []);\n const [isTouch, setIsTouch] = useState(false);\n\n useEffect(() => {\n setIsTouch(isTouchDevice());\n }, []);\n\n useEffect(() => {\n if (initialSelected) {\n setSelected(initialSelected);\n }\n }, [initialSelected]);\n\n const handleToggle = (option: string) => {\n if (allowMultiple) {\n setSelected((prev) =>\n prev.includes(option) ? prev.filter((o) => o !== option) : [...prev, option]\n );\n } else {\n setSelected((prev) => (prev.includes(option) ? [] : [option]));\n }\n };\n\n const handleSubmit = () => {\n if (selected.length === 0) return;\n onSubmit({ pollSelected: selected });\n };\n\n const getOptionStyles = (option: string, index: number): React.CSSProperties => {\n const isSelected = selected.includes(option);\n return {\n width: '100%',\n padding: isTouch ? '12px 14px' : '9px 12px',\n border: `1px solid ${isSelected ? t.colors.pollSelectedBorder : t.colors.pollBorder}`,\n borderRadius: t.borders.radius.lg - 2,\n backgroundColor: isSelected ? t.colors.pollSelectedBackground : t.colors.pollBackground,\n color: isSelected ? t.colors.pollSelectedColor : t.colors.pollColor,\n fontSize: isTouch ? 15 : t.typography.fontSize.sm,\n fontWeight: isSelected ? t.typography.fontWeight.semibold : t.typography.fontWeight.medium,\n fontFamily: t.typography.fontFamily,\n cursor: isLoading ? 'not-allowed' : 'pointer',\n transition: `all 0.2s ${t.animation.easing.default}`,\n textAlign: 'left' as const,\n letterSpacing: '0.01em',\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n animation: `gotcha-fade-up ${t.animation.duration.normal} ${t.animation.easing.default} both`,\n animationDelay: `${index * 0.05}s`,\n };\n };\n\n return (\n <div>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: isTouch ? 8 : 6,\n }}\n role=\"group\"\n aria-label={allowMultiple ? 'Select one or more options' : 'Select an option'}\n >\n {options.map((option, index) => {\n const isSelected = selected.includes(option);\n return (\n <button\n key={option}\n type=\"button\"\n onClick={() => handleToggle(option)}\n disabled={isLoading}\n style={getOptionStyles(option, index)}\n aria-pressed={isSelected}\n onMouseEnter={(e) => {\n if (!isLoading) {\n e.currentTarget.style.transform = 'translateX(2px)';\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.transform = 'translateX(0)';\n }}\n >\n <span\n style={{\n width: 16,\n height: 16,\n borderRadius: allowMultiple ? 4 : '50%',\n border: `2px solid ${isSelected ? t.colors.pollCheckSelectedBorder : t.colors.pollCheckBorder}`,\n backgroundColor: isSelected ? t.colors.pollCheckSelectedBg : 'transparent',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n transition: `all ${t.animation.duration.fast}`,\n }}\n >\n {isSelected && (\n <svg width={10} height={10} viewBox=\"0 0 12 12\" fill=\"none\">\n <path\n d=\"M2 6l3 3 5-5\"\n stroke=\"#fff\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </span>\n {option}\n </button>\n );\n })}\n </div>\n\n <button\n type=\"button\"\n onClick={handleSubmit}\n disabled={isLoading || selected.length === 0}\n style={{\n width: '100%',\n marginTop: 12,\n padding: isTouch ? '14px 16px' : '10px 16px',\n border: t.colors.buttonBorder,\n borderRadius: t.borders.radius.md,\n backgroundColor: selected.length === 0 ? t.colors.buttonBackgroundDisabled : t.colors.buttonBackground,\n color: selected.length === 0 ? t.colors.buttonColorDisabled : t.colors.buttonColor,\n fontSize: isTouch ? t.typography.fontSize.lg : t.typography.fontSize.md,\n fontWeight: t.typography.fontWeight.medium,\n fontFamily: t.typography.fontFamily,\n cursor: isLoading || selected.length === 0 ? 'not-allowed' : 'pointer',\n transition: `all ${t.animation.duration.fast} ${t.animation.easing.default}`,\n letterSpacing: '0.01em',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n opacity: isLoading ? 0.8 : 1,\n ...(isLoading ? {\n backgroundImage: `linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.1) 50%, transparent 100%)`,\n backgroundSize: '200% 100%',\n animation: 'gotcha-shimmer 1.5s ease infinite',\n } : {}),\n }}\n onMouseEnter={(e) => {\n if (!e.currentTarget.disabled) {\n e.currentTarget.style.backgroundColor = t.colors.buttonBackgroundHover;\n e.currentTarget.style.transform = 'translateY(-1px)';\n e.currentTarget.style.boxShadow = t.shadows.button;\n }\n }}\n onMouseLeave={(e) => {\n if (!e.currentTarget.disabled) {\n e.currentTarget.style.backgroundColor = selected.length === 0\n ? t.colors.buttonBackgroundDisabled\n : t.colors.buttonBackground;\n e.currentTarget.style.transform = 'translateY(0)';\n e.currentTarget.style.boxShadow = 'none';\n }\n }}\n >\n {isLoading && <Spinner size={isTouch ? 18 : 16} color={t.colors.buttonColor} />}\n {isLoading ? (isEditing ? 'Updating...' : 'Submitting...') : (isEditing ? 'Update' : 'Submit')}\n </button>\n </div>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { GotchaStyles } from '../../types';\nimport { ResolvedTheme } from '../../theme/tokens';\nimport { isTouchDevice } from '../../utils/device';\nimport { Spinner } from '../Spinner';\n\ninterface NpsModeProps {\n resolvedTheme: ResolvedTheme;\n submitText: string;\n isLoading: boolean;\n onSubmit: (data: { rating?: number; content?: string }) => void;\n customStyles?: GotchaStyles;\n showFollowUp?: boolean;\n followUpPlaceholder?: string;\n lowLabel?: string;\n highLabel?: string;\n initialValues?: {\n rating?: number | null;\n content?: string | null;\n };\n isEditing?: boolean;\n}\n\nexport function NpsMode({\n resolvedTheme: t,\n submitText,\n isLoading,\n onSubmit,\n customStyles,\n showFollowUp = true,\n followUpPlaceholder,\n lowLabel = 'Not likely',\n highLabel = 'Very likely',\n initialValues,\n isEditing = false,\n}: NpsModeProps) {\n const [score, setScore] = useState<number | null>(initialValues?.rating ?? null);\n const [content, setContent] = useState(initialValues?.content || '');\n const [isTouch, setIsTouch] = useState(false);\n const [hoveredScore, setHoveredScore] = useState<number | null>(null);\n\n useEffect(() => {\n setIsTouch(isTouchDevice());\n }, []);\n\n useEffect(() => {\n if (initialValues?.rating !== undefined) {\n setScore(initialValues.rating ?? null);\n }\n if (initialValues?.content !== undefined) {\n setContent(initialValues.content || '');\n }\n }, [initialValues?.rating, initialValues?.content]);\n\n const canSubmit = score !== null;\n const npsColors = t.colors.npsColors;\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (!canSubmit) return;\n onSubmit({\n rating: score ?? undefined,\n content: showFollowUp && content.trim() ? content.trim() : undefined,\n });\n };\n\n return (\n <form onSubmit={handleSubmit}>\n {/* Score scale */}\n <div>\n {/* Number buttons — always single row */}\n <div\n style={{\n display: 'flex',\n gap: isTouch ? 4 : 6,\n justifyContent: 'center',\n }}\n role=\"group\"\n aria-label=\"NPS Score\"\n >\n {Array.from({ length: 11 }, (_, i) => {\n const selected = score === i;\n const hovered = hoveredScore === i;\n const color = npsColors[i];\n\n return (\n <button\n key={i}\n type=\"button\"\n onClick={() => setScore(i)}\n onMouseEnter={() => setHoveredScore(i)}\n onMouseLeave={() => setHoveredScore(null)}\n aria-label={`Score ${i} out of 10`}\n aria-pressed={selected}\n style={{\n flex: 1,\n minWidth: 0,\n height: isTouch ? 34 : 32,\n borderRadius: t.borders.radius.sm,\n border: selected\n ? `2px solid ${color}`\n : `1.5px solid ${color}25`,\n backgroundColor: selected\n ? color\n : hovered\n ? `${color}25`\n : `${color}0c`,\n color: selected\n ? '#fff'\n : hovered\n ? color\n : `${color}bb`,\n fontSize: 12,\n fontWeight: selected ? t.typography.fontWeight.bold : t.typography.fontWeight.semibold,\n fontFamily: t.typography.fontFamily,\n fontVariantNumeric: 'tabular-nums',\n cursor: 'pointer',\n padding: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: `all 0.2s ${t.animation.easing.spring}`,\n transform: selected ? 'scale(1.08)' : hovered ? 'scale(1.04)' : 'scale(1)',\n boxShadow: selected\n ? `0 0 12px ${color}40`\n : 'none',\n ...customStyles?.npsButton,\n ...(selected ? customStyles?.npsButtonSelected : {}),\n }}\n >\n {i}\n </button>\n );\n })}\n </div>\n\n {/* Labels */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginTop: 6,\n padding: '0 2px',\n ...customStyles?.npsLabels,\n }}\n >\n <span style={{\n fontSize: t.typography.fontSize.xs,\n color: t.colors.textDisabled,\n fontWeight: t.typography.fontWeight.medium,\n letterSpacing: '0.02em',\n }}>\n {lowLabel}\n </span>\n <span style={{\n fontSize: t.typography.fontSize.xs,\n color: t.colors.textDisabled,\n fontWeight: t.typography.fontWeight.medium,\n letterSpacing: '0.02em',\n }}>\n {highLabel}\n </span>\n </div>\n </div>\n\n {/* Follow-up textarea — animated reveal */}\n {showFollowUp && score !== null && (\n <textarea\n value={content}\n onChange={(e) => setContent(e.target.value)}\n placeholder={followUpPlaceholder || 'What\\'s the main reason for your score?'}\n maxLength={5000}\n style={{\n width: '100%',\n padding: isTouch ? '12px 14px' : '10px 12px',\n border: `1px solid ${t.colors.inputBorder}`,\n borderRadius: t.borders.radius.md,\n backgroundColor: t.colors.inputBackground,\n color: t.colors.text,\n fontSize: isTouch ? t.typography.fontSize.lg : t.typography.fontSize.md,\n resize: 'vertical' as const,\n minHeight: isTouch ? 80 : 60,\n fontFamily: t.typography.fontFamily,\n outline: 'none',\n transition: `border-color ${t.animation.duration.fast} ${t.animation.easing.default}, box-shadow ${t.animation.duration.fast} ${t.animation.easing.default}`,\n lineHeight: 1.5,\n animation: `gotcha-expand-in 0.3s ${t.animation.easing.default} both`,\n overflow: 'hidden',\n ...customStyles?.input,\n }}\n disabled={isLoading}\n aria-label=\"Follow-up feedback\"\n onFocus={(e) => {\n e.currentTarget.style.borderColor = t.colors.inputBorderFocus;\n e.currentTarget.style.boxShadow = `0 0 0 3px ${t.colors.inputFocusRing}`;\n e.currentTarget.style.backgroundColor = t.colors.inputBackgroundFocus;\n }}\n onBlur={(e) => {\n e.currentTarget.style.borderColor = t.colors.inputBorder;\n e.currentTarget.style.boxShadow = 'none';\n e.currentTarget.style.backgroundColor = t.colors.inputBackground;\n }}\n />\n )}\n\n {/* Submit button */}\n <button\n type=\"submit\"\n disabled={isLoading || !canSubmit}\n style={{\n width: '100%',\n padding: isTouch ? '14px 16px' : '10px 16px',\n border: t.colors.buttonBorder,\n borderRadius: t.borders.radius.md,\n backgroundColor: !canSubmit ? t.colors.buttonBackgroundDisabled : t.colors.buttonBackground,\n color: !canSubmit ? t.colors.buttonColorDisabled : t.colors.buttonColor,\n fontSize: isTouch ? t.typography.fontSize.lg : t.typography.fontSize.md,\n fontWeight: t.typography.fontWeight.medium,\n fontFamily: t.typography.fontFamily,\n cursor: isLoading ? 'not-allowed' : 'pointer',\n transition: `all ${t.animation.duration.fast} ${t.animation.easing.default}`,\n letterSpacing: '0.01em',\n opacity: isLoading ? 0.8 : 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n marginTop: 12,\n ...(isLoading ? {\n backgroundImage: `linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.1) 50%, transparent 100%)`,\n backgroundSize: '200% 100%',\n animation: 'gotcha-shimmer 1.5s ease infinite',\n } : {}),\n ...customStyles?.submitButton,\n }}\n onMouseEnter={(e) => {\n if (!e.currentTarget.disabled) {\n e.currentTarget.style.backgroundColor = t.colors.buttonBackgroundHover;\n e.currentTarget.style.transform = 'translateY(-1px)';\n e.currentTarget.style.boxShadow = t.shadows.button;\n }\n }}\n onMouseLeave={(e) => {\n if (!e.currentTarget.disabled) {\n e.currentTarget.style.backgroundColor = !canSubmit ? t.colors.buttonBackgroundDisabled : t.colors.buttonBackground;\n e.currentTarget.style.transform = 'translateY(0)';\n e.currentTarget.style.boxShadow = 'none';\n }\n }}\n >\n {isLoading && <Spinner size={isTouch ? 18 : 16} color={t.colors.buttonColor} />}\n {isLoading ? (isEditing ? 'Updating...' : 'Submitting...') : (isEditing ? 'Update' : submitText)}\n </button>\n </form>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { ResolvedTheme } from '../theme/tokens';\nimport { isTouchDevice } from '../utils/device';\nimport { Spinner } from './Spinner';\n\ninterface FollowUpPromptProps {\n resolvedTheme: ResolvedTheme;\n promptText: string;\n placeholder?: string;\n isLoading: boolean;\n onSubmit: (content: string) => void;\n}\n\nexport function FollowUpPrompt({\n resolvedTheme: t,\n promptText,\n placeholder,\n isLoading,\n onSubmit,\n}: FollowUpPromptProps) {\n const [content, setContent] = useState('');\n const [isTouch, setIsTouch] = useState(false);\n\n useEffect(() => {\n setIsTouch(isTouchDevice());\n }, []);\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (!content.trim()) return;\n onSubmit(content.trim());\n };\n\n return (\n <form onSubmit={handleSubmit}>\n <p style={{\n margin: '0 0 12px 0',\n fontSize: t.typography.fontSize.sm,\n color: t.colors.textSecondary,\n lineHeight: 1.4,\n fontFamily: t.typography.fontFamily,\n }}>\n {promptText}\n </p>\n\n <textarea\n value={content}\n onChange={(e) => setContent(e.target.value)}\n placeholder={placeholder || 'Tell us more...'}\n maxLength={5000}\n disabled={isLoading}\n aria-label=\"Follow-up feedback\"\n style={{\n width: '100%',\n padding: isTouch ? '12px 14px' : '10px 12px',\n border: `1px solid ${t.colors.inputBorder}`,\n borderRadius: t.borders.radius.md,\n backgroundColor: t.colors.inputBackground,\n color: t.colors.text,\n fontSize: isTouch ? t.typography.fontSize.lg : t.typography.fontSize.md,\n resize: 'none',\n minHeight: isTouch ? 100 : 80,\n fontFamily: t.typography.fontFamily,\n outline: 'none',\n transition: `border-color ${t.animation.duration.fast} ${t.animation.easing.default}, box-shadow ${t.animation.duration.fast} ${t.animation.easing.default}`,\n lineHeight: 1.5,\n boxShadow: 'inset 0 1px 2px rgba(0,0,0,0.04)',\n }}\n onFocus={(e) => {\n e.currentTarget.style.borderColor = t.colors.inputBorderFocus;\n e.currentTarget.style.boxShadow = `0 0 0 3px ${t.colors.inputFocusRing}`;\n e.currentTarget.style.backgroundColor = t.colors.inputBackgroundFocus;\n }}\n onBlur={(e) => {\n e.currentTarget.style.borderColor = t.colors.inputBorder;\n e.currentTarget.style.boxShadow = 'inset 0 1px 2px rgba(0,0,0,0.04)';\n e.currentTarget.style.backgroundColor = t.colors.inputBackground;\n }}\n />\n\n <button\n type=\"submit\"\n disabled={isLoading || !content.trim()}\n style={{\n width: '100%',\n marginTop: 12,\n padding: isTouch ? '14px 16px' : '10px 16px',\n border: t.colors.buttonBorder,\n borderRadius: t.borders.radius.md,\n backgroundColor: !content.trim() ? t.colors.buttonBackgroundDisabled : t.colors.buttonBackground,\n color: !content.trim() ? t.colors.buttonColorDisabled : t.colors.buttonColor,\n fontSize: isTouch ? t.typography.fontSize.lg : t.typography.fontSize.md,\n fontWeight: t.typography.fontWeight.medium,\n fontFamily: t.typography.fontFamily,\n cursor: isLoading ? 'not-allowed' : 'pointer',\n transition: `all ${t.animation.duration.fast} ${t.animation.easing.default}`,\n letterSpacing: '0.01em',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n opacity: isLoading ? 0.8 : 1,\n }}\n onMouseEnter={(e) => {\n if (!e.currentTarget.disabled) {\n e.currentTarget.style.backgroundColor = t.colors.buttonBackgroundHover;\n e.currentTarget.style.transform = 'translateY(-1px)';\n e.currentTarget.style.boxShadow = t.shadows.button;\n }\n }}\n onMouseLeave={(e) => {\n if (!e.currentTarget.disabled) {\n e.currentTarget.style.backgroundColor = t.colors.buttonBackground;\n e.currentTarget.style.transform = 'translateY(0)';\n e.currentTarget.style.boxShadow = 'none';\n }\n }}\n >\n {isLoading && <Spinner size={isTouch ? 18 : 16} color={t.colors.buttonColor} />}\n {isLoading ? 'Sending...' : 'Submit'}\n </button>\n </form>\n );\n}\n","import React, { useRef, useEffect, useState, useMemo } from 'react';\nimport { Theme, GotchaStyles, ResponseMode, ExistingResponse } from '../types';\nimport { ResolvedTheme } from '../theme/tokens';\nimport { resolveTheme } from '../theme/resolveTheme';\nimport { injectStyles } from '../theme/styles';\nimport { cn } from '../utils/cn';\nimport { useGotchaContext } from './GotchaProvider';\nimport { FeedbackMode } from './modes/FeedbackMode';\nimport { VoteMode } from './modes/VoteMode';\nimport { PollMode } from './modes/PollMode';\nimport { Spinner } from './Spinner';\nimport { NpsMode } from './modes/NpsMode';\nimport { FollowUpPrompt } from './FollowUpPrompt';\n\nexport interface GotchaModalProps {\n mode: ResponseMode;\n theme: Theme;\n customStyles?: GotchaStyles;\n promptText?: string;\n placeholder?: string;\n submitText: string;\n thankYouMessage: string;\n // State\n isLoading: boolean;\n isCheckingExisting?: boolean;\n isSubmitted: boolean;\n phase?: 'form' | 'followUp' | 'success';\n followUpConfig?: { promptText: string; placeholder?: string };\n followUpLoading?: boolean;\n onFollowUpSubmit?: (content: string) => void;\n error: string | null;\n // Edit mode\n existingResponse?: ExistingResponse | null;\n isEditing?: boolean;\n // Vote mode\n voteLabels?: { up: string; down: string };\n // Feedback mode field visibility\n showText?: boolean;\n showRating?: boolean;\n // Poll mode\n options?: string[];\n allowMultiple?: boolean;\n // NPS mode\n npsQuestion?: string;\n npsFollowUp?: boolean;\n npsFollowUpPlaceholder?: string;\n npsLowLabel?: string;\n npsHighLabel?: string;\n // Bug flagging\n enableBugFlag?: boolean;\n bugFlagLabel?: string;\n enableScreenshot?: boolean;\n // Handlers\n onSubmit: (data: { content?: string; rating?: number; vote?: 'up' | 'down'; pollSelected?: string[]; isBug?: boolean; screenshot?: string }) => void;\n onClose: () => void;\n // Position info from parent\n anchorRect?: DOMRect;\n /**\n * When true (desktop portal), use fixed positioning relative to the viewport\n * instead of absolute positioning relative to the container.\n */\n useFixedPosition?: boolean;\n}\n\nexport function GotchaModal({\n mode,\n theme,\n customStyles,\n promptText,\n placeholder,\n submitText,\n thankYouMessage,\n isLoading,\n isCheckingExisting = false,\n isSubmitted,\n phase = 'form',\n followUpConfig,\n followUpLoading = false,\n onFollowUpSubmit,\n error,\n existingResponse,\n isEditing = false,\n showText = true,\n showRating = true,\n voteLabels,\n options,\n allowMultiple = false,\n npsQuestion,\n npsFollowUp = true,\n npsFollowUpPlaceholder,\n npsLowLabel,\n npsHighLabel,\n enableBugFlag = false,\n bugFlagLabel,\n enableScreenshot = false,\n onSubmit,\n onClose,\n anchorRect,\n useFixedPosition = false,\n}: GotchaModalProps) {\n const modalRef = useRef<HTMLDivElement>(null);\n const firstFocusableRef = useRef<HTMLButtonElement>(null);\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n\n const [isMobile, setIsMobile] = useState(false);\n const [systemTheme, setSystemTheme] = useState<'light' | 'dark'>('light');\n\n const { themeConfig } = useGotchaContext();\n\n // Detect mobile and system theme after mount (SSR-safe)\n useEffect(() => {\n setIsMobile(window.innerWidth < 640);\n\n const darkQuery = window.matchMedia('(prefers-color-scheme: dark)');\n setSystemTheme(darkQuery.matches ? 'dark' : 'light');\n\n const handler = (e: MediaQueryListEvent) => setSystemTheme(e.matches ? 'dark' : 'light');\n darkQuery.addEventListener('change', handler);\n return () => darkQuery.removeEventListener('change', handler);\n }, []);\n\n // Resolve theme with provider config\n const t: ResolvedTheme = useMemo(\n () => resolveTheme(theme, systemTheme, themeConfig),\n [theme, systemTheme, themeConfig]\n );\n\n // Re-inject styles when theme changes\n useEffect(() => {\n injectStyles(t);\n }, [t]);\n\n // Determine if modal should appear above or below\n // Only compute on client after mount (anchorRect is only set on client)\n const showAbove = (() => {\n if (typeof window === 'undefined' || !anchorRect) return false;\n const spaceBelow = window.innerHeight - anchorRect.bottom;\n return spaceBelow < 300;\n })();\n\n // Focus trap — use ref for onClose so effect runs once\n useEffect(() => {\n const modal = modalRef.current;\n if (!modal) return;\n\n firstFocusableRef.current?.focus();\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onCloseRef.current();\n return;\n }\n\n if (e.key === 'Tab') {\n const focusableElements = modal.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n if (e.shiftKey && document.activeElement === firstElement) {\n e.preventDefault();\n lastElement?.focus();\n } else if (!e.shiftKey && document.activeElement === lastElement) {\n e.preventDefault();\n firstElement?.focus();\n }\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, []);\n\n const defaultPrompt = mode === 'vote'\n ? 'What do you think?'\n : mode === 'poll'\n ? 'Cast your vote'\n : mode === 'nps'\n ? (npsQuestion || 'How likely are you to recommend us?')\n : 'What do you think of this feature?';\n\n const modalPadding = isMobile ? 24 : 20;\n const modalWidth = mode === 'nps' ? 420 : 340;\n\n // Animation class\n const animationClass = isMobile\n ? 'gotcha-modal-enter-center'\n : showAbove\n ? 'gotcha-modal-enter-above'\n : 'gotcha-modal-enter';\n\n const viewportHeight = typeof window !== 'undefined' ? window.innerHeight : 0;\n\n const modalStyles: React.CSSProperties = isMobile\n ? {\n position: 'fixed',\n left: '50%',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n width: 'calc(100vw - 32px)',\n maxWidth: modalWidth,\n padding: modalPadding,\n borderRadius: t.borders.radius.lg + 2,\n background: t.colors.backgroundGradient,\n color: t.colors.text,\n boxShadow: t.shadows.modal,\n border: `${t.borders.width}px solid ${t.colors.border}`,\n zIndex: 9999,\n fontFamily: t.typography.fontFamily,\n ...customStyles?.modal,\n textAlign: 'left' as const,\n }\n : useFixedPosition && anchorRect && viewportHeight\n ? (() => {\n const viewportWidth = window.innerWidth;\n const edgePadding = 12;\n const centerX = anchorRect.left + anchorRect.width / 2;\n // Clamp so modal stays within viewport\n const idealLeft = centerX - modalWidth / 2;\n const clampedLeft = Math.max(edgePadding, Math.min(idealLeft, viewportWidth - modalWidth - edgePadding));\n return {\n position: 'fixed' as const,\n left: clampedLeft,\n width: modalWidth,\n padding: modalPadding,\n borderRadius: t.borders.radius.lg,\n background: t.colors.backgroundGradient,\n color: t.colors.text,\n boxShadow: t.shadows.modal,\n border: `${t.borders.width}px solid ${t.colors.border}`,\n zIndex: 99999,\n fontFamily: t.typography.fontFamily,\n ...(showAbove\n ? { bottom: viewportHeight - anchorRect.top + 8 }\n : { top: anchorRect.bottom + 8 }),\n ...customStyles?.modal,\n textAlign: 'left' as const,\n };\n })()\n : {\n position: 'absolute' as const,\n left: '50%',\n width: modalWidth,\n padding: modalPadding,\n borderRadius: t.borders.radius.lg,\n background: t.colors.backgroundGradient,\n color: t.colors.text,\n boxShadow: t.shadows.modal,\n border: `${t.borders.width}px solid ${t.colors.border}`,\n zIndex: 9999,\n fontFamily: t.typography.fontFamily,\n ...(showAbove\n ? { bottom: '100%', marginBottom: 8, transform: 'translateX(-50%)' }\n : { top: '100%', marginTop: 8, transform: 'translateX(-50%)' }),\n ...customStyles?.modal,\n textAlign: 'left' as const,\n };\n\n // Stagger delay for form elements (desktop only — mobile centering is disrupted by staggered opacity)\n const fadeUpStyle = (index: number): React.CSSProperties =>\n isMobile\n ? {}\n : {\n animation: `gotcha-fade-up ${t.animation.duration.normal} ${t.animation.easing.default} both`,\n animationDelay: `${index * 0.05}s`,\n };\n\n // \"Gotcha!\" success branding\n const isDefaultThankYou = thankYouMessage === 'Gotcha!' || thankYouMessage === 'Thanks for your feedback!';\n\n return (\n <div\n ref={modalRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={isSubmitted ? 'Feedback submitted' : undefined}\n aria-labelledby={isSubmitted ? undefined : 'gotcha-modal-title'}\n data-gotcha\n style={modalStyles}\n className={cn('gotcha-modal', animationClass)}\n >\n {/* Close button */}\n <button\n ref={firstFocusableRef}\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close feedback form\"\n style={{\n position: 'absolute',\n top: isMobile ? 10 : 6,\n right: isMobile ? 10 : 6,\n width: isMobile ? 40 : 36,\n height: isMobile ? 40 : 36,\n border: 'none',\n background: 'transparent',\n outline: 'none',\n cursor: 'pointer',\n zIndex: 10,\n color: t.colors.closeButton,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: t.borders.radius.sm,\n transition: `all ${t.animation.duration.fast} ${t.animation.easing.default}`,\n ...customStyles?.closeButton,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = t.colors.closeButtonBg;\n e.currentTarget.style.color = t.colors.closeButtonHover;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = t.colors.closeButton;\n }}\n >\n <svg width={isMobile ? 16 : 14} height={isMobile ? 16 : 14} viewBox=\"0 0 14 14\" fill=\"none\">\n <path\n d=\"M1 1L13 13M1 13L13 1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n\n {/* Title */}\n {!isSubmitted && (\n <h2\n id=\"gotcha-modal-title\"\n style={{\n margin: '0 0 16px 0',\n fontSize: isMobile ? t.typography.fontSize.lg : t.typography.fontSize.md,\n fontWeight: t.typography.fontWeight.semibold,\n paddingRight: isMobile ? 44 : 38,\n letterSpacing: '-0.02em',\n lineHeight: 1.4,\n textAlign: 'left',\n fontFamily: t.typography.fontFamily,\n ...fadeUpStyle(0),\n ...customStyles?.title,\n }}\n >\n {promptText || defaultPrompt}\n </h2>\n )}\n\n {/* Success state — \"Gotcha!\" branding moment */}\n {isSubmitted && (\n <div\n style={{\n textAlign: 'center',\n padding: '28px 0 20px',\n }}\n >\n {/* Animated checkmark circle */}\n <div\n style={{\n width: 52,\n height: 52,\n borderRadius: '50%',\n backgroundColor: t.colors.successSurface,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: '0 auto 16px',\n animation: `gotcha-success-pop 0.4s ${t.animation.easing.spring} both, gotcha-glow-pulse 0.8s ease 0.4s`,\n ...customStyles?.successIcon,\n }}\n >\n <svg\n width=\"26\"\n height=\"26\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M20 6L9 17L4 12\"\n stroke={t.colors.success}\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{\n strokeDasharray: 24,\n strokeDashoffset: 0,\n animation: `gotcha-check-draw 0.4s ease 0.2s both`,\n }}\n />\n </svg>\n </div>\n\n {/* Primary message */}\n <p\n style={{\n margin: 0,\n fontSize: isDefaultThankYou ? 22 : t.typography.fontSize.md,\n fontWeight: isDefaultThankYou ? t.typography.fontWeight.bold : t.typography.fontWeight.medium,\n color: t.colors.text,\n fontFamily: isDefaultThankYou ? \"'Carter One', cursive\" : t.typography.fontFamily,\n animation: `gotcha-success-text 0.3s ease 0.3s both`,\n ...customStyles?.successMessage,\n }}\n >\n {isDefaultThankYou ? 'Gotcha!' : thankYouMessage}\n </p>\n\n {/* Subtitle (only for default message) */}\n {isDefaultThankYou && (\n <p\n style={{\n margin: '6px 0 0',\n fontSize: t.typography.fontSize.sm,\n fontWeight: t.typography.fontWeight.normal,\n color: t.colors.textSecondary,\n animation: `gotcha-success-text 0.3s ease 0.45s both`,\n }}\n >\n Thanks for your feedback!\n </p>\n )}\n </div>\n )}\n\n {/* Error state */}\n {error && !isSubmitted && (\n <div\n style={{\n padding: '8px 10px',\n marginBottom: 12,\n borderRadius: t.borders.radius.sm,\n backgroundColor: t.colors.errorSurface,\n border: `1px solid ${t.colors.errorBorder}`,\n color: t.colors.error,\n fontSize: t.typography.fontSize.sm,\n lineHeight: 1.4,\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n ...fadeUpStyle(1),\n ...customStyles?.errorMessage,\n }}\n >\n <svg width={14} height={14} viewBox=\"0 0 24 24\" fill=\"none\" style={{ flexShrink: 0 }}>\n <path d=\"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z\" stroke=\"currentColor\" strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n {error}\n </div>\n )}\n\n {/* Follow-up question */}\n {phase === 'followUp' && followUpConfig && onFollowUpSubmit && (\n <div style={fadeUpStyle(1)}>\n <FollowUpPrompt\n resolvedTheme={t}\n promptText={followUpConfig.promptText}\n placeholder={followUpConfig.placeholder}\n isLoading={followUpLoading}\n onSubmit={onFollowUpSubmit}\n />\n </div>\n )}\n\n {/* Loading state while checking for existing response */}\n {phase === 'form' && isCheckingExisting && (\n <div style={{\n display: 'flex',\n justifyContent: 'center',\n padding: '24px 0',\n ...fadeUpStyle(1),\n }}>\n <Spinner size={24} color={t.colors.textSecondary} />\n </div>\n )}\n\n {/* Form content based on mode */}\n {phase === 'form' && !isCheckingExisting && (\n <div style={fadeUpStyle(1)}>\n {mode === 'feedback' && (\n <FeedbackMode\n resolvedTheme={t}\n placeholder={placeholder}\n submitText={submitText}\n isLoading={isLoading}\n onSubmit={onSubmit}\n customStyles={customStyles}\n initialValues={existingResponse ? {\n content: existingResponse.content,\n rating: existingResponse.rating,\n } : undefined}\n isEditing={isEditing}\n showText={showText}\n showRating={showRating}\n enableBugFlag={enableBugFlag}\n bugFlagLabel={bugFlagLabel}\n enableScreenshot={enableScreenshot}\n />\n )}\n {mode === 'vote' && (\n <VoteMode\n resolvedTheme={t}\n isLoading={isLoading}\n onSubmit={onSubmit}\n initialVote={existingResponse?.vote || undefined}\n isEditing={isEditing}\n labels={voteLabels}\n />\n )}\n {mode === 'nps' && (\n <NpsMode\n resolvedTheme={t}\n submitText={submitText}\n isLoading={isLoading}\n onSubmit={onSubmit}\n showFollowUp={npsFollowUp}\n followUpPlaceholder={npsFollowUpPlaceholder}\n lowLabel={npsLowLabel}\n highLabel={npsHighLabel}\n customStyles={customStyles}\n initialValues={existingResponse ? {\n rating: existingResponse.rating,\n content: existingResponse.content,\n } : undefined}\n isEditing={isEditing}\n />\n )}\n {mode === 'poll' && options && options.length > 0 && (\n <PollMode\n resolvedTheme={t}\n options={options}\n allowMultiple={allowMultiple}\n isLoading={isLoading}\n onSubmit={onSubmit}\n initialSelected={existingResponse?.pollSelected || undefined}\n isEditing={isEditing}\n />\n )}\n </div>\n )}\n\n {/* Screen reader announcement */}\n <div aria-live=\"polite\" className=\"sr-only\" style={{ position: 'absolute', left: -9999 }}>\n {isSubmitted && 'Thank you! Your feedback has been submitted.'}\n {error && `Error: ${error}`}\n </div>\n </div>\n );\n}\n","import React, { useState, useCallback, useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport {\n ResponseMode,\n GotchaUser,\n Position,\n Size,\n Theme,\n TouchBehavior,\n GotchaStyles,\n GotchaResponse,\n GotchaError,\n} from '../types';\nimport { DEFAULTS } from '../constants';\nimport { useGotchaContext } from './GotchaProvider';\nimport { useSubmit } from '../hooks/useSubmit';\nimport { useHideAfterSubmit } from '../hooks/useHideAfterSubmit';\nimport { useTriggerConditions } from '../hooks/useTriggerConditions';\nimport { GotchaButton } from './GotchaButton';\nimport { GotchaModal } from './GotchaModal';\n\nexport interface GotchaProps {\n /** Unique identifier for this element */\n elementId: string;\n\n // User data\n /** User metadata for segmentation */\n user?: GotchaUser;\n\n // Behavior\n /** Feedback mode */\n mode?: ResponseMode;\n\n // Feedback mode field visibility\n /** Show the text input in feedback mode (default: true) */\n showText?: boolean;\n /** Show the star rating in feedback mode (default: true) */\n showRating?: boolean;\n\n // Vote mode specific\n /** Custom labels for vote buttons (default: Like/Dislike) */\n voteLabels?: { up: string; down: string };\n\n // Poll mode specific\n /** Required if mode is 'poll' (2-6 options) */\n options?: string[];\n /** Allow selecting multiple options */\n allowMultiple?: boolean;\n\n // NPS mode specific\n /** Custom NPS question (default: \"How likely are you to recommend us?\") */\n npsQuestion?: string;\n /** Show follow-up textarea after score selection (default: true) */\n npsFollowUp?: boolean;\n /** Placeholder for NPS follow-up textarea */\n npsFollowUpPlaceholder?: string;\n /** Label for low end of NPS scale (default: \"Not likely\") */\n npsLowLabel?: string;\n /** Label for high end of NPS scale (default: \"Very likely\") */\n npsHighLabel?: string;\n\n // Appearance\n /** Button position relative to parent */\n position?: Position;\n /** Button size */\n size?: Size;\n /** Color theme */\n theme?: Theme;\n /** Custom style overrides */\n customStyles?: GotchaStyles;\n /** Control visibility programmatically */\n visible?: boolean;\n /** Only show when parent is hovered (default: true) */\n showOnHover?: boolean;\n /** Mobile behavior (default: 'always-visible') */\n touchBehavior?: TouchBehavior;\n\n // Content\n /** Custom prompt text */\n promptText?: string;\n /** Input placeholder text */\n placeholder?: string;\n /** Submit button text */\n submitText?: string;\n /** Post-submission message */\n thankYouMessage?: string;\n\n // Bug flagging\n /** Show \"Report an issue\" toggle in feedback form (default: false) */\n enableBugFlag?: boolean;\n /** Custom label for the bug flag toggle (default: \"Report an issue\") */\n bugFlagLabel?: string;\n /** Enable screenshot capture when bug flag is toggled (requires html2canvas peer dep, falls back to native API) */\n enableScreenshot?: boolean;\n\n // Deduplication\n /** When true and user has already responded, show submitted state and allow review/edit instead of new submission */\n onePerUser?: boolean;\n /** When onePerUser is true, allow a new submission after this many days. Has no effect without onePerUser. */\n cooldownDays?: number;\n /** After submission, hide the widget for this many days (client-side, localStorage).\n * Independent of cooldownDays — the widget stays hidden for the full duration even if cooldown expires sooner. */\n hideAfterSubmitDays?: number;\n\n // Trigger conditions\n /** Delay showing widget by N seconds after page load */\n showAfterSeconds?: number;\n /** Show widget after user scrolls past this percentage (0-100) */\n showAfterScrollPercent?: number;\n /** Show widget after user has visited N times (uses localStorage) */\n showAfterVisits?: number;\n\n // Follow-up\n /** Show a follow-up question after low rating or negative vote */\n followUp?: {\n /** Rating threshold (inclusive) — e.g., 2 means ratings 1-2 trigger follow-up */\n ratingThreshold?: number;\n /** Also trigger on negative vote */\n onNegativeVote?: boolean;\n /** The prompt text shown */\n promptText: string;\n /** Placeholder for the follow-up textarea */\n placeholder?: string;\n };\n\n // Animation\n /** Enable entrance animations on the button and modal (default: true) */\n animated?: boolean;\n\n // Callbacks\n /** Called after successful submission */\n onSubmit?: (response: GotchaResponse) => void;\n /** Called when modal opens */\n onOpen?: () => void;\n /** Called when modal closes */\n onClose?: () => void;\n /** Called on error */\n onError?: (error: GotchaError) => void;\n}\n\nexport function Gotcha({\n elementId,\n user,\n mode = 'feedback',\n showText = true,\n showRating = true,\n voteLabels,\n options,\n allowMultiple = false,\n npsQuestion,\n npsFollowUp = true,\n npsFollowUpPlaceholder,\n npsLowLabel,\n npsHighLabel,\n enableBugFlag = false,\n bugFlagLabel,\n enableScreenshot = false,\n onePerUser = false,\n cooldownDays,\n hideAfterSubmitDays,\n showAfterSeconds,\n showAfterScrollPercent,\n showAfterVisits,\n followUp,\n animated = true,\n position = DEFAULTS.POSITION,\n size = DEFAULTS.SIZE,\n theme = DEFAULTS.THEME,\n customStyles,\n visible = true,\n showOnHover = DEFAULTS.SHOW_ON_HOVER,\n touchBehavior = DEFAULTS.TOUCH_BEHAVIOR,\n promptText,\n placeholder,\n submitText = DEFAULTS.SUBMIT_TEXT,\n thankYouMessage = DEFAULTS.THANK_YOU_MESSAGE,\n onSubmit,\n onOpen,\n onClose,\n onError,\n}: GotchaProps) {\n const { disabled, activeModalId, openModal, closeModal, defaultUser, client } = useGotchaContext();\n\n const { conditionsMet } = useTriggerConditions({\n elementId,\n showAfterSeconds,\n showAfterScrollPercent,\n showAfterVisits,\n });\n\n const { isHidden, markHidden } = useHideAfterSubmit({\n elementId,\n userId: user?.id || defaultUser?.id,\n hideAfterSubmitDays,\n });\n const [phase, setPhase] = useState<'form' | 'followUp' | 'success'>('form');\n const [lastResponseId, setLastResponseId] = useState<string | null>(null);\n const [followUpLoading, setFollowUpLoading] = useState(false);\n const [queuedCount, setQueuedCount] = useState(0);\n const [isParentHovered, setIsParentHovered] = useState(false);\n const [anchorRect, setAnchorRect] = useState<DOMRect | null>(null);\n const [isMobile, setIsMobile] = useState(false);\n const [hasMounted, setHasMounted] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const autoCloseTimerRef = useRef<ReturnType<typeof setTimeout>>();\n const lastSubmitDataRef = useRef<{ rating?: number; vote?: 'up' | 'down' } | null>(null);\n\n // SSR-safe mount detection\n useEffect(() => {\n setHasMounted(true);\n setIsMobile(window.innerWidth < 640);\n return () => {\n clearTimeout(autoCloseTimerRef.current);\n };\n }, []);\n\n // Track offline queue length\n useEffect(() => {\n setQueuedCount(client.getQueueLength());\n const handleOnline = () => {\n // Queue will be flushed by provider; update count after a delay\n setTimeout(() => setQueuedCount(client.getQueueLength()), 2000);\n };\n window.addEventListener('online', handleOnline);\n return () => window.removeEventListener('online', handleOnline);\n }, [client]);\n\n const isOpen = activeModalId === elementId;\n\n // Reset phase when modal is closed externally (e.g., another modal opens)\n useEffect(() => {\n if (!isOpen) {\n setPhase('form');\n clearTimeout(autoCloseTimerRef.current);\n }\n }, [isOpen]);\n\n // Scroll lock on mobile when modal is open\n useEffect(() => {\n if (!isOpen || !isMobile) return;\n const prev = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n return () => { document.body.style.overflow = prev; };\n }, [isOpen, isMobile]);\n\n // Attach hover listeners to the parent element\n useEffect(() => {\n if (!showOnHover) return;\n\n const container = containerRef.current;\n if (!container) return;\n\n const parent = container.parentElement;\n if (!parent) return;\n\n const handleMouseEnter = () => setIsParentHovered(true);\n const handleMouseLeave = () => setIsParentHovered(false);\n\n parent.addEventListener('mouseenter', handleMouseEnter);\n parent.addEventListener('mouseleave', handleMouseLeave);\n\n return () => {\n parent.removeEventListener('mouseenter', handleMouseEnter);\n parent.removeEventListener('mouseleave', handleMouseLeave);\n };\n }, [showOnHover]);\n\n const { submit, isLoading, isCheckingExisting, error, existingResponse, isEditing } = useSubmit({\n elementId,\n mode,\n pollOptions: options,\n user,\n onePerUser,\n cooldownDays,\n onSuccess: (response) => {\n setLastResponseId(response.id);\n if (hideAfterSubmitDays) markHidden();\n onSubmit?.(response);\n\n // Check if follow-up should trigger\n const shouldFollowUp = followUp && lastSubmitDataRef.current && (\n (followUp.ratingThreshold != null && lastSubmitDataRef.current.rating != null &&\n lastSubmitDataRef.current.rating <= followUp.ratingThreshold) ||\n (followUp.onNegativeVote && lastSubmitDataRef.current.vote === 'down')\n );\n\n if (shouldFollowUp && mode !== 'poll') {\n setPhase('followUp');\n } else {\n setPhase('success');\n autoCloseTimerRef.current = setTimeout(() => {\n closeModal();\n setPhase('form');\n }, 3000);\n }\n },\n onError: (err) => {\n console.warn('[Gotcha] Submission failed:', err instanceof Error ? err.message : err);\n onError?.(err as unknown as GotchaError);\n },\n });\n\n const handleOpen = useCallback(() => {\n if (containerRef.current) {\n // Measure the actual button element, not the container div.\n // The container (inline-flex) can be larger than the button due to\n // line-height, baseline alignment, or inherited layout styles from\n // the parent — causing the modal to appear with a gap.\n const button = containerRef.current.querySelector('button');\n setAnchorRect((button ?? containerRef.current).getBoundingClientRect());\n }\n openModal(elementId);\n onOpen?.();\n }, [elementId, openModal, onOpen]);\n\n const handleClose = useCallback(() => {\n clearTimeout(autoCloseTimerRef.current);\n closeModal();\n setPhase('form');\n onClose?.();\n }, [closeModal, onClose]);\n\n // Wrap submit to capture rating/vote for follow-up check\n const handleSubmit = useCallback(\n (data: { content?: string; rating?: number; vote?: 'up' | 'down'; pollSelected?: string[]; isBug?: boolean }) => {\n lastSubmitDataRef.current = { rating: data.rating, vote: data.vote };\n submit(data);\n },\n [submit]\n );\n\n // Handle follow-up submission\n const handleFollowUpSubmit = useCallback(\n async (content: string) => {\n if (!lastResponseId) return;\n setFollowUpLoading(true);\n try {\n await client.updateResponse(lastResponseId, { content });\n } catch (err) {\n // If follow-up fails, still show success — initial response is already saved\n console.warn('[Gotcha] Follow-up submission failed:', err instanceof Error ? err.message : err);\n } finally {\n setFollowUpLoading(false);\n setPhase('success');\n autoCloseTimerRef.current = setTimeout(() => {\n closeModal();\n setPhase('form');\n }, 3000);\n }\n },\n [lastResponseId, closeModal, client]\n );\n\n const effectiveSubmitText = (onePerUser && isEditing) ? 'Update' : submitText;\n\n if (disabled || !visible || isHidden || !conditionsMet) return null;\n\n const positionStyles: Record<Position, React.CSSProperties> = {\n 'top-right': { position: 'absolute', top: 0, right: 0, transform: 'translate(50%, -50%)' },\n 'top-left': { position: 'absolute', top: 0, left: 0, transform: 'translate(-50%, -50%)' },\n 'bottom-right': { position: 'absolute', bottom: 0, right: 0, transform: 'translate(50%, 50%)' },\n 'bottom-left': { position: 'absolute', bottom: 0, left: 0, transform: 'translate(-50%, 50%)' },\n 'inline': { position: 'relative', display: 'inline-flex' },\n };\n\n const modalProps = {\n mode,\n theme,\n customStyles,\n promptText,\n placeholder,\n submitText: effectiveSubmitText,\n thankYouMessage,\n isLoading,\n isCheckingExisting: onePerUser && isCheckingExisting,\n isSubmitted: phase === 'success',\n phase,\n followUpConfig: followUp,\n followUpLoading,\n onFollowUpSubmit: handleFollowUpSubmit,\n error,\n existingResponse: onePerUser ? existingResponse : null,\n isEditing: onePerUser && isEditing,\n showText,\n showRating,\n voteLabels,\n options,\n allowMultiple,\n npsQuestion,\n npsFollowUp,\n npsFollowUpPlaceholder,\n npsLowLabel,\n npsHighLabel,\n enableBugFlag,\n bugFlagLabel,\n enableScreenshot,\n onSubmit: handleSubmit,\n onClose: handleClose,\n anchorRect: anchorRect || undefined,\n useFixedPosition: !isMobile,\n };\n\n return (\n <div\n ref={containerRef}\n style={{\n ...positionStyles[position],\n zIndex: isOpen ? 10000 : 'auto',\n }}\n className=\"gotcha-container\"\n data-gotcha-element={elementId}\n >\n <GotchaButton\n size={size}\n theme={theme}\n customStyles={customStyles}\n showOnHover={showOnHover}\n touchBehavior={touchBehavior}\n onClick={handleOpen}\n isOpen={isOpen}\n isParentHovered={isParentHovered}\n animated={animated}\n queuedCount={queuedCount}\n />\n\n {/* Desktop: portal without backdrop, anchored via fixed positioning */}\n {isOpen && !isMobile && hasMounted && createPortal(\n <GotchaModal {...modalProps} />,\n document.body\n )}\n\n {/* Mobile: frosted glass backdrop portal */}\n {isOpen && isMobile && hasMounted && createPortal(\n <div\n role=\"presentation\"\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 99999,\n backgroundColor: 'rgba(0,0,0,0.4)',\n backdropFilter: 'blur(8px)',\n WebkitBackdropFilter: 'blur(8px)',\n }}\n className=\"gotcha-overlay-enter\"\n onClick={handleClose}\n >\n <div onClick={(e) => e.stopPropagation()}>\n <GotchaModal {...modalProps} />\n </div>\n </div>,\n document.body\n )}\n </div>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { useGotchaContext } from '../components/GotchaProvider';\nimport { ScoreData } from '../types';\n\ninterface UseScoreOptions {\n elementId: string;\n refreshInterval?: number;\n}\n\ninterface UseScoreResult {\n score: ScoreData | null;\n isLoading: boolean;\n error: string | null;\n}\n\nexport function useScore({ elementId, refreshInterval }: UseScoreOptions): UseScoreResult {\n const { client } = useGotchaContext();\n const [score, setScore] = useState<ScoreData | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n\n const fetchScore = async () => {\n try {\n const data = await client.getScore(elementId);\n if (!cancelled) {\n setScore(data);\n setError(null);\n }\n } catch (err) {\n if (!cancelled) {\n setError(err instanceof Error ? err.message : 'Failed to load score');\n }\n } finally {\n if (!cancelled) {\n setIsLoading(false);\n }\n }\n };\n\n fetchScore();\n\n let intervalId: ReturnType<typeof setInterval> | undefined;\n if (refreshInterval && refreshInterval > 0) {\n intervalId = setInterval(fetchScore, refreshInterval);\n }\n\n return () => {\n cancelled = true;\n if (intervalId) clearInterval(intervalId);\n };\n }, [client, elementId, refreshInterval]);\n\n return { score, isLoading, error };\n}\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { Theme, Size } from '../types';\nimport { useScore } from '../hooks/useScore';\nimport { resolveTheme } from '../theme/resolveTheme';\nimport { useGotchaContext } from './GotchaProvider';\n\nexport type ScoreVariant = 'stars' | 'number' | 'compact' | 'votes';\n\nexport interface GotchaScoreProps {\n elementId: string;\n variant?: ScoreVariant;\n showCount?: boolean;\n size?: Size;\n theme?: Theme;\n refreshInterval?: number;\n style?: React.CSSProperties;\n}\n\nconst SIZE_MAP: Record<Size, {\n fontSize: number;\n ratingFontSize: number;\n starSize: number;\n gap: number;\n pillPx: number;\n pillPy: number;\n barHeight: number;\n iconSize: number;\n}> = {\n sm: { fontSize: 11, ratingFontSize: 13, starSize: 13, gap: 5, pillPx: 8, pillPy: 4, barHeight: 3, iconSize: 12 },\n md: { fontSize: 12.5, ratingFontSize: 15, starSize: 15, gap: 6, pillPx: 10, pillPy: 5, barHeight: 4, iconSize: 14 },\n lg: { fontSize: 14, ratingFontSize: 18, starSize: 18, gap: 8, pillPx: 12, pillPy: 6, barHeight: 5, iconSize: 16 },\n};\n\n/** Crisp, rounded 5-point star SVG with partial fill via clipPath */\nfunction Stars({ rating, size, filledColor, emptyColor }: {\n rating: number;\n size: number;\n filledColor: string;\n emptyColor: string;\n}) {\n const clipId = `gotcha-star-clip-${Math.random().toString(36).slice(2, 8)}`;\n const stars = [];\n for (let i = 1; i <= 5; i++) {\n const fill = Math.min(1, Math.max(0, rating - (i - 1)));\n const id = `${clipId}-${i}`;\n stars.push(\n <svg key={i} width={size} height={size} viewBox=\"0 0 24 24\" style={{ display: 'block' }}>\n <defs>\n <clipPath id={id}>\n <rect x=\"0\" y=\"0\" width={24 * fill} height=\"24\" />\n </clipPath>\n </defs>\n <path\n d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"\n fill={emptyColor}\n />\n <path\n d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"\n fill={filledColor}\n clipPath={`url(#${id})`}\n />\n </svg>\n );\n }\n return <span style={{ display: 'inline-flex', gap: Math.max(1, size * 0.08), alignItems: 'center' }}>{stars}</span>;\n}\n\n/** Compact positive rate bar */\nfunction PositiveBar({ rate, height, filledColor, trackColor }: {\n rate: number;\n height: number;\n filledColor: string;\n trackColor: string;\n}) {\n return (\n <span style={{\n display: 'inline-block',\n width: 48,\n height,\n borderRadius: height,\n backgroundColor: trackColor,\n overflow: 'hidden',\n verticalAlign: 'middle',\n }}>\n <span style={{\n display: 'block',\n width: `${rate}%`,\n height: '100%',\n borderRadius: height,\n background: filledColor,\n transition: 'width 0.6s cubic-bezier(0.4, 0, 0.2, 1)',\n }} />\n </span>\n );\n}\n\n/** Thumbs up SVG icon */\nfunction ThumbIcon({ size, color }: { size: number; color: string }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill={color} style={{ display: 'block' }}>\n <path d=\"M2 20h2c.55 0 1-.45 1-1v-9c0-.55-.45-1-1-1H2v11zm19.83-7.12c.11-.25.17-.52.17-.8V11c0-1.1-.9-2-2-2h-5.5l.92-4.65c.05-.22.02-.46-.08-.66a4.8 4.8 0 00-.88-1.12L14 2 7.59 8.41C7.21 8.79 7 9.3 7 9.83v7.84C7 18.95 8.05 20 9.34 20h8.11c.7 0 1.36-.37 1.72-.97l2.66-6.15z\" />\n </svg>\n );\n}\n\nexport function GotchaScore({\n elementId,\n variant = 'stars',\n showCount = true,\n size = 'md',\n theme = 'auto',\n refreshInterval,\n style,\n}: GotchaScoreProps) {\n const { score, isLoading } = useScore({ elementId, refreshInterval });\n const [systemTheme, setSystemTheme] = useState<'light' | 'dark'>('light');\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const mq = window.matchMedia('(prefers-color-scheme: dark)');\n setSystemTheme(mq.matches ? 'dark' : 'light');\n const handler = (e: MediaQueryListEvent) => setSystemTheme(e.matches ? 'dark' : 'light');\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n }, []);\n\n const { themeConfig } = useGotchaContext();\n const t = useMemo(() => resolveTheme(theme, systemTheme, themeConfig), [theme, systemTheme, themeConfig]);\n\n if (isLoading || !score) return null;\n const s = SIZE_MAP[size];\n\n // Color tokens from resolved theme\n const ratingColor = t.colors.text;\n const mutedColor = t.colors.textDisabled;\n const starFilled = t.colors.starFilled;\n const starEmpty = t.colors.starEmpty;\n const positiveColor = t.colors.voteUp;\n const positiveTrack = t.colors.starEmpty;\n\n const baseStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: s.gap,\n fontFamily: t.typography.fontFamily,\n lineHeight: 1,\n letterSpacing: '-0.01em',\n WebkitFontSmoothing: 'antialiased',\n ...style,\n };\n\n const countText = (n: number, singular: string) => {\n const label = n === 1 ? singular : `${singular}s`;\n return `${n.toLocaleString()} ${label}`;\n };\n\n // ── Votes variant ──────────────────────────────────────────────\n if (variant === 'votes') {\n const { voteCount, positiveRate } = score;\n const total = voteCount.up + voteCount.down;\n if (total === 0) return null;\n\n return (\n <span style={baseStyle}>\n <ThumbIcon size={s.iconSize} color={positiveColor} />\n <span style={{ fontSize: s.ratingFontSize, fontWeight: 600, color: positiveColor, fontVariantNumeric: 'tabular-nums' }}>\n {positiveRate}%\n </span>\n <PositiveBar rate={positiveRate ?? 0} height={s.barHeight} filledColor={positiveColor} trackColor={positiveTrack} />\n {showCount && (\n <span style={{ fontSize: s.fontSize, color: mutedColor, fontWeight: 400 }}>\n {countText(total, 'vote')}\n </span>\n )}\n </span>\n );\n }\n\n // ── Rating-based variants ──────────────────────────────────────\n const { averageRating, totalResponses } = score;\n if (averageRating === null || totalResponses === 0) return null;\n\n const displayRating = averageRating.toFixed(1);\n\n // ── Compact ────────────────────────────────────────────────────\n if (variant === 'compact') {\n return (\n <span style={baseStyle}>\n <svg width={s.starSize} height={s.starSize} viewBox=\"0 0 24 24\" style={{ display: 'block', flexShrink: 0 }}>\n <path\n d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"\n fill={starFilled}\n />\n </svg>\n <span style={{ fontSize: s.ratingFontSize, fontWeight: 700, color: ratingColor, fontVariantNumeric: 'tabular-nums' }}>\n {displayRating}\n </span>\n {showCount && (\n <span style={{ fontSize: s.fontSize, color: mutedColor, fontWeight: 400 }}>\n ({totalResponses.toLocaleString()})\n </span>\n )}\n </span>\n );\n }\n\n // ── Number ─────────────────────────────────────────────────────\n if (variant === 'number') {\n return (\n <span style={baseStyle}>\n <span style={{ fontSize: s.ratingFontSize, fontWeight: 700, color: ratingColor, fontVariantNumeric: 'tabular-nums' }}>\n {displayRating}\n </span>\n <span style={{ fontSize: s.fontSize, color: mutedColor, fontWeight: 400 }}>/ 5</span>\n {showCount && (\n <span style={{\n fontSize: s.fontSize,\n color: mutedColor,\n fontWeight: 400,\n marginLeft: 2,\n }}>\n ({countText(totalResponses, 'response')})\n </span>\n )}\n </span>\n );\n }\n\n // ── Stars (default) ────────────────────────────────────────────\n return (\n <span style={baseStyle}>\n <Stars rating={averageRating} size={s.starSize} filledColor={starFilled} emptyColor={starEmpty} />\n <span style={{ fontSize: s.ratingFontSize, fontWeight: 700, color: ratingColor, fontVariantNumeric: 'tabular-nums' }}>\n {displayRating}\n </span>\n {showCount && (\n <span style={{ fontSize: s.fontSize, color: mutedColor, fontWeight: 400 }}>\n ({countText(totalResponses, 'response')})\n </span>\n )}\n </span>\n );\n}\n","import { useGotchaContext } from '../components/GotchaProvider';\n\n/**\n * Hook to access Gotcha context\n * Must be used within a GotchaProvider\n */\nexport function useGotcha() {\n const { client, disabled, defaultUser, debug, openModal, closeModal, activeModalId } = useGotchaContext();\n\n return {\n /** The API client for manual submissions */\n client,\n /** Whether Gotcha is globally disabled */\n disabled,\n /** Default user metadata */\n defaultUser,\n /** Whether debug mode is enabled */\n debug,\n /** Submit feedback programmatically */\n submitFeedback: client.submitResponse.bind(client),\n /** Open a specific Gotcha modal by elementId */\n openModal,\n /** Close the currently open modal */\n closeModal,\n /** The currently open modal's elementId, or null */\n activeModalId,\n };\n}\n","import { useCallback } from 'react';\nimport { useGotchaContext } from '../components/GotchaProvider';\n\n/**\n * Hook to programmatically open/close a specific Gotcha widget.\n * The corresponding <Gotcha elementId=\"...\"> must be mounted for the modal to render.\n */\nexport function useGotchaTrigger(elementId: string) {\n const { activeModalId, openModal, closeModal } = useGotchaContext();\n\n const open = useCallback(() => openModal(elementId), [openModal, elementId]);\n const close = useCallback(() => closeModal(), [closeModal]);\n\n return {\n open,\n close,\n isOpen: activeModalId === elementId,\n };\n}\n"]}
1
+ {"version":3,"sources":["../node_modules/modern-screenshot/dist/index.mjs","../src/utils/screenshot.ts","../src/constants.ts","../src/utils/localStorage.ts","../src/utils/generateId.ts","../src/utils/anonymous.ts","../src/utils/errorBuffer.ts","../src/utils/contextCollector.ts","../src/utils/offlineQueue.ts","../src/api/client.ts","../src/utils/deepMerge.ts","../src/theme/tokens.ts","../src/theme/resolveTheme.ts","../src/theme/styles.ts","../src/components/GotchaProvider.tsx","../src/hooks/useSubmit.ts","../src/hooks/useHideAfterSubmit.ts","../src/hooks/useTriggerConditions.ts","../src/utils/cn.ts","../src/utils/device.ts","../src/components/GotchaButton.tsx","../src/components/Spinner.tsx","../src/components/ScreenshotPreview.tsx","../src/components/modes/FeedbackMode.tsx","../src/components/modes/VoteMode.tsx","../src/components/modes/PollMode.tsx","../src/components/modes/NpsMode.tsx","../src/components/FollowUpPrompt.tsx","../src/components/GotchaModal.tsx","../src/components/Gotcha.tsx","../src/hooks/useScore.ts","../src/components/GotchaScore.tsx","../src/hooks/useGotcha.ts","../src/hooks/useGotchaTrigger.ts"],"names":["changeJpegDpi","uint8Array","dpi","createPngDataTable","crcTable","n","c","k","calcCrc","pngDataTable","searchStartOfPhys","length","i","_P","_H","_Y","_S","changePngDpi","overwritepHYs","physChunk","crc","crcChunk","startingIndex","chunkLength","finalHeader","detectPhysChunkFromDataUrl","dataUrl","b64index","b64PhysSignature1","b64PhysSignature2","b64PhysSignature3","supportWebp","ownerDocument","canvas","resolveUrl","url","baseUrl","IN_BROWSER","doc","getDocument","base","a","target","isElementNode","createSvg","width","height","svg","XMLNS","svgToDataUrl","removeControlCharacter","xhtml","readBlob","blob","type","resolve","reject","reader","createImage","img","loadMedia","media","options","timeout","userOnError","onWarn","node","timer","removeEventListeners","onResolve","isVideoElement","currentSrc","onLoadeddata","onError","error","isSVGImageElementNode","onLoad","isImageElement","waitUntilLoad","isHTMLElementNode","selectors","el","splitFontFamily","fontFamily","val","createLogger","debug","prefix","PREFIX","uid","label","args","consoleWarn","getDefaultRequestInit","bypassingCache","orCreateContext","isContext","createContext","scale","workerUrl","workerNumber","features","ownerWindow","requests","context","createStyleElement","SUPPORT_WEB_WORKER","worker","event","result","key","resolveBoundingBox","style","cssText","box","imageToCanvas","image","log","drawImageCount","drawImageInterval","loaded","context2d","createCanvas","drawImage","backgroundColor","max","cloneCanvas","dataURL","cloned","ctx","clonedCtx","cloneIframe","iframe","cloneNode","cloneImage","cloneVideo","video","canPlay","cloneElement","isCanvasElement","isIFrameElement","getSandBox","sandbox","uuid","getDefaultStyle","pseudoElement","defaultComputedStyles","nodeName","isSvgNode","isSVGElementNode","attributes","includedAttributes","name","value","sandboxWindow","sandboxDocument","root","computedStyle","styles","len","ignoredStyles","getDiffStyle","defaultStyle","includeStyleProperties","diffStyle","prefixs","prefixTree","applyTo","priority","subIndex","map","copyCssStyles","isRoot","currentParentNodeStyle","clonedStyle","_","IN_CHROME","copyInputValue","isTextareaElement","isInputElement","isSelectElement","copyPseudoClass","copyScrollbar","addWordToFontFamilies","svgStyleElement","svgStyles","currentNodeStyle","copyBy","pseudoClass","content","klasses","cloneStyle","err","allClasses","pseudoClasses","scrollbarPseudoClasses","appendChildNode","child","isStyleElement","isScriptElement","excludeParentNodes","childCloned","restoreScrollPosition","cloneChildNodes","firstChild","isCommentNode","isSlotElement","nodes","chlidCloned","scrollTop","scrollLeft","transform","matrix","b","d","applyCssStyleWithOptions","fontFamilies","onCloneEachNode","isTextNode","cloned2","names","NORMAL_ATTRIBUTE_RE","overflow","textTransform","families","addWordToFontFamilies2","word","family","text","destroyContext","baseFetch","responseType","requestInit","controller","response","blobToDataUrl","contextFetch","rawUrl","requestType","imageDom","acceptOfImage","fetchFn","placeholderImage","font","workers","IN_SAFARI","IN_FIREFOX","request","canFontMinify","fontTexts","needFontMinify","baseFetchOptions","replaceCssUrlToDataUrl","isImage","hasCssUrl","parseCssUrls","toRE","URL_RE","raw","quotation","isDataUrl","escaped","embedCssStyleImage","properties","property","newValue","embedImageElement","originalSrc","embedSvgUse","svgDefsElement","href","svgUrl","id","query","definition","res","svgData","embedNode","tasks","isSVGUseElementNode","embedWebFont","clone","fontCssTexts","filterPreferredFormat","styleSheets","styleSheet","cssRule","index","isCSSImportRule","importIndex","replacedCssText","rule","parseCss","cssRules","sheet","unwrapCssLayers","isCssFontFaceRule","cssText2","source","COMMENTS_RE","matches","KEYFRAMES_RE","IMPORT_RE","UNIFIED_RE","str","preferredFormat","FONT_SRC_RE","match","src","format","URL_WITH_FORMAT_RE","rules","out","isLayerBlockRule","domToForeignObjectSvg","progress","autoDestruct","onCloneNode","onEmbedNode","onCreateForeignObjectSvg","allCssText","count","current","runTask","task","createForeignObjectSvg","foreignObject","domToCanvas","domToDataUrl","quality","SUPPORT_ATOB","SUPPORT_BTOA","body","headerLength","b64Index","stringHeader","restOfData","headerBytes","finalArray","base64Header","domToJpeg","USER_AGENT","init_dist","__esmMin","counter","random","screenshot_exports","__export","captureScreenshot","MAX_SIZE_BYTES","init_screenshot","API_BASE_URL","STORAGE_KEYS","DEFAULTS","RETRY_CONFIG","safeGetItem","safeSetItem","generateId","r","getAnonymousId","stored","buffer","listening","pushError","message","entry","handleError","handleRejection","startErrorCapture","stopErrorCapture","getRecentErrors","collectContext","MAX_QUEUE_SIZE","MAX_AGE_MS","readQueue","items","now","item","writeQueue","enqueue","payload","dequeue","getQueuedItems","getQueueLength","incrementRetries","DEFAULT_RETRY_CONFIG","fetchWithRetry","config","lastError","attempt","delay","createApiClient","apiKey","flushing","headers","method","endpoint","idempotencyKey","data","user","fullPayload","elementId","userId","responseId","updatePayload","UNSAFE_KEYS","deepMerge","override","NPS_COLORS","LIGHT_TOKENS","DARK_TOKENS","createTheme","overrides","resolveTheme","theme","systemTheme","providerConfig","resolved","STYLE_ID","FONT_ID","FONT_FACE_ID","CARTER_ONE_FONT_FACE","injectFontFace","sanitizeCSS","generateStyleTag","easing","duration","textDisabled","borderColor","injectStyles","preconnect","preconnectStatic","link","styleEl","GotchaContext","EMPTY_USER","GotchaProvider","children","disabled","defaultUser","themeConfig","activeModalId","setActiveModalId","useState","client","useMemo","stableDefaultUser","useEffect","handleOnline","openModal","useCallback","closeModal","jsx","useGotchaContext","useContext","isResponseExpired","createdAt","cooldownDays","createdTime","ageMs","cooldownMs","useSubmit","isLoading","setIsLoading","isCheckingExisting","setIsCheckingExisting","setError","existingResponse","setExistingResponse","cancelled","existing","errorMessage","getStorageKey","checkIsHidden","resolvedUserId","hideAfterSubmitDays","hiddenUntilStr","useHideAfterSubmit","isHidden","setIsHidden","markHidden","hiddenUntil","getVisitKey","useTriggerConditions","showAfterSeconds","showAfterScrollPercent","showAfterVisits","hasConditions","timeMet","setTimeMet","scrollMet","setScrollMet","visitsMet","next","start","targetMs","check","checkScroll","scrollHeight","viewportHeight","cn","classes","isTouchDevice","getResponsiveSize","size","isTouch","sizes","getInitialSystemTheme","GotchaButton","customStyles","showOnHover","touchBehavior","onClick","isOpen","isParentHovered","animated","queuedCount","setIsTouch","tapRevealed","setTapRevealed","setSystemTheme","isHovered","setIsHovered","isPressed","setIsPressed","hasPopped","setHasPopped","darkQuery","handler","e","shouldShow","handleClick","buttonSize","t","getTransform","baseStyles","jsxs","GotchaIcon","mounted","setMounted","Spinner","color","ScreenshotPreview","onRemove","FeedbackMode","placeholder","submitText","onSubmit","initialValues","isEditing","showText","showRating","enableBugFlag","bugFlagLabel","enableScreenshot","setContent","rating","setRating","isBug","setIsBug","screenshot","setScreenshot","capturingScreenshot","setCapturingScreenshot","screenshotError","setScreenshotError","canSubmit","handleScreenshotCapture","handleSubmit","inputStyles","buttonStyles","StarRating","onChange","large","hovered","setHovered","pulsing","setPulsing","pulseTimerRef","useRef","starSize","buttonPadding","star","isFilled","VoteMode","initialVote","labels","activeVote","setActiveVote","previousVote","setPreviousVote","handleVote","vote","getButtonStyles","voteType","isSelected","surface","border","iconSize","Fragment","ThumbsUpIcon","ThumbsDownIcon","PollMode","allowMultiple","initialSelected","selected","setSelected","handleToggle","option","prev","o","getOptionStyles","NpsMode","showFollowUp","followUpPlaceholder","lowLabel","highLabel","score","setScore","hoveredScore","setHoveredScore","npsColors","FollowUpPrompt","promptText","GotchaModal","mode","thankYouMessage","isSubmitted","phase","followUpConfig","followUpLoading","onFollowUpSubmit","voteLabels","npsQuestion","npsFollowUp","npsFollowUpPlaceholder","npsLowLabel","npsHighLabel","onClose","anchorRect","useFixedPosition","modalRef","firstFocusableRef","onCloseRef","isMobile","setIsMobile","showAbove","modal","handleKeyDown","focusableElements","firstElement","lastElement","defaultPrompt","modalPadding","modalWidth","animationClass","modalStyles","viewportWidth","edgePadding","idealLeft","fadeUpStyle","isDefaultThankYou","Gotcha","onePerUser","followUp","position","visible","onOpen","conditionsMet","setPhase","lastResponseId","setLastResponseId","setFollowUpLoading","setQueuedCount","setIsParentHovered","setAnchorRect","hasMounted","setHasMounted","containerRef","autoCloseTimerRef","lastSubmitDataRef","container","parent","handleMouseEnter","handleMouseLeave","submit","handleOpen","button","handleClose","handleFollowUpSubmit","effectiveSubmitText","positionStyles","modalProps","createPortal","useScore","refreshInterval","fetchScore","intervalId","SIZE_MAP","Stars","filledColor","emptyColor","clipId","stars","fill","PositiveBar","rate","trackColor","ThumbIcon","GotchaScore","variant","showCount","mq","s","ratingColor","mutedColor","starFilled","starEmpty","positiveColor","positiveTrack","baseStyle","countText","singular","voteCount","positiveRate","total","averageRating","totalResponses","displayRating","useGotcha","useGotchaTrigger","open","close"],"mappings":"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","file":"index.js","sourcesContent":["function changeJpegDpi(uint8Array, dpi) {\n uint8Array[13] = 1;\n uint8Array[14] = dpi >> 8;\n uint8Array[15] = dpi & 255;\n uint8Array[16] = dpi >> 8;\n uint8Array[17] = dpi & 255;\n return uint8Array;\n}\n\nconst _P = \"p\".charCodeAt(0);\nconst _H = \"H\".charCodeAt(0);\nconst _Y = \"Y\".charCodeAt(0);\nconst _S = \"s\".charCodeAt(0);\nlet pngDataTable;\nfunction createPngDataTable() {\n const crcTable = new Int32Array(256);\n for (let n = 0; n < 256; n++) {\n let c = n;\n for (let k = 0; k < 8; k++) {\n c = c & 1 ? 3988292384 ^ c >>> 1 : c >>> 1;\n }\n crcTable[n] = c;\n }\n return crcTable;\n}\nfunction calcCrc(uint8Array) {\n let c = -1;\n if (!pngDataTable)\n pngDataTable = createPngDataTable();\n for (let n = 0; n < uint8Array.length; n++) {\n c = pngDataTable[(c ^ uint8Array[n]) & 255] ^ c >>> 8;\n }\n return c ^ -1;\n}\nfunction searchStartOfPhys(uint8Array) {\n const length = uint8Array.length - 1;\n for (let i = length; i >= 4; i--) {\n if (uint8Array[i - 4] === 9 && uint8Array[i - 3] === _P && uint8Array[i - 2] === _H && uint8Array[i - 1] === _Y && uint8Array[i] === _S) {\n return i - 3;\n }\n }\n return 0;\n}\nfunction changePngDpi(uint8Array, dpi, overwritepHYs = false) {\n const physChunk = new Uint8Array(13);\n dpi *= 39.3701;\n physChunk[0] = _P;\n physChunk[1] = _H;\n physChunk[2] = _Y;\n physChunk[3] = _S;\n physChunk[4] = dpi >>> 24;\n physChunk[5] = dpi >>> 16;\n physChunk[6] = dpi >>> 8;\n physChunk[7] = dpi & 255;\n physChunk[8] = physChunk[4];\n physChunk[9] = physChunk[5];\n physChunk[10] = physChunk[6];\n physChunk[11] = physChunk[7];\n physChunk[12] = 1;\n const crc = calcCrc(physChunk);\n const crcChunk = new Uint8Array(4);\n crcChunk[0] = crc >>> 24;\n crcChunk[1] = crc >>> 16;\n crcChunk[2] = crc >>> 8;\n crcChunk[3] = crc & 255;\n if (overwritepHYs) {\n const startingIndex = searchStartOfPhys(uint8Array);\n uint8Array.set(physChunk, startingIndex);\n uint8Array.set(crcChunk, startingIndex + 13);\n return uint8Array;\n } else {\n const chunkLength = new Uint8Array(4);\n chunkLength[0] = 0;\n chunkLength[1] = 0;\n chunkLength[2] = 0;\n chunkLength[3] = 9;\n const finalHeader = new Uint8Array(54);\n finalHeader.set(uint8Array, 0);\n finalHeader.set(chunkLength, 33);\n finalHeader.set(physChunk, 37);\n finalHeader.set(crcChunk, 50);\n return finalHeader;\n }\n}\nconst b64PhysSignature1 = \"AAlwSFlz\";\nconst b64PhysSignature2 = \"AAAJcEhZ\";\nconst b64PhysSignature3 = \"AAAACXBI\";\nfunction detectPhysChunkFromDataUrl(dataUrl) {\n let b64index = dataUrl.indexOf(b64PhysSignature1);\n if (b64index === -1) {\n b64index = dataUrl.indexOf(b64PhysSignature2);\n }\n if (b64index === -1) {\n b64index = dataUrl.indexOf(b64PhysSignature3);\n }\n return b64index;\n}\n\nconst PREFIX = \"[modern-screenshot]\";\nconst IN_BROWSER = typeof window !== \"undefined\";\nconst SUPPORT_WEB_WORKER = IN_BROWSER && \"Worker\" in window;\nconst SUPPORT_ATOB = IN_BROWSER && \"atob\" in window;\nconst SUPPORT_BTOA = IN_BROWSER && \"btoa\" in window;\nconst USER_AGENT = IN_BROWSER ? window.navigator?.userAgent : \"\";\nconst IN_CHROME = USER_AGENT.includes(\"Chrome\");\nconst IN_SAFARI = USER_AGENT.includes(\"AppleWebKit\") && !IN_CHROME;\nconst IN_FIREFOX = USER_AGENT.includes(\"Firefox\");\nconst isContext = (value) => value && \"__CONTEXT__\" in value;\nconst isCssFontFaceRule = (rule) => rule.constructor.name === \"CSSFontFaceRule\";\nconst isCSSImportRule = (rule) => rule.constructor.name === \"CSSImportRule\";\nconst isLayerBlockRule = (rule) => rule.constructor.name === \"CSSLayerBlockRule\";\nconst isElementNode = (node) => node.nodeType === 1;\nconst isSVGElementNode = (node) => typeof node.className === \"object\";\nconst isSVGImageElementNode = (node) => node.tagName === \"image\";\nconst isSVGUseElementNode = (node) => node.tagName === \"use\";\nconst isHTMLElementNode = (node) => isElementNode(node) && typeof node.style !== \"undefined\" && !isSVGElementNode(node);\nconst isCommentNode = (node) => node.nodeType === 8;\nconst isTextNode = (node) => node.nodeType === 3;\nconst isImageElement = (node) => node.tagName === \"IMG\";\nconst isVideoElement = (node) => node.tagName === \"VIDEO\";\nconst isCanvasElement = (node) => node.tagName === \"CANVAS\";\nconst isTextareaElement = (node) => node.tagName === \"TEXTAREA\";\nconst isInputElement = (node) => node.tagName === \"INPUT\";\nconst isStyleElement = (node) => node.tagName === \"STYLE\";\nconst isScriptElement = (node) => node.tagName === \"SCRIPT\";\nconst isSelectElement = (node) => node.tagName === \"SELECT\";\nconst isSlotElement = (node) => node.tagName === \"SLOT\";\nconst isIFrameElement = (node) => node.tagName === \"IFRAME\";\nconst consoleWarn = (...args) => console.warn(PREFIX, ...args);\nfunction supportWebp(ownerDocument) {\n const canvas = ownerDocument?.createElement?.(\"canvas\");\n if (canvas) {\n canvas.height = canvas.width = 1;\n }\n return Boolean(canvas) && \"toDataURL\" in canvas && Boolean(canvas.toDataURL(\"image/webp\").includes(\"image/webp\"));\n}\nconst isDataUrl = (url) => url.startsWith(\"data:\");\nfunction resolveUrl(url, baseUrl) {\n if (url.match(/^[a-z]+:\\/\\//i))\n return url;\n if (IN_BROWSER && url.match(/^\\/\\//))\n return window.location.protocol + url;\n if (url.match(/^[a-z]+:/i))\n return url;\n if (!IN_BROWSER)\n return url;\n const doc = getDocument().implementation.createHTMLDocument();\n const base = doc.createElement(\"base\");\n const a = doc.createElement(\"a\");\n doc.head.appendChild(base);\n doc.body.appendChild(a);\n if (baseUrl)\n base.href = baseUrl;\n a.href = url;\n return a.href;\n}\nfunction getDocument(target) {\n return (target && isElementNode(target) ? target?.ownerDocument : target) ?? window.document;\n}\nconst XMLNS = \"http://www.w3.org/2000/svg\";\nfunction createSvg(width, height, ownerDocument) {\n const svg = getDocument(ownerDocument).createElementNS(XMLNS, \"svg\");\n svg.setAttributeNS(null, \"width\", width.toString());\n svg.setAttributeNS(null, \"height\", height.toString());\n svg.setAttributeNS(null, \"viewBox\", `0 0 ${width} ${height}`);\n return svg;\n}\nfunction svgToDataUrl(svg, removeControlCharacter) {\n let xhtml = new XMLSerializer().serializeToString(svg);\n if (removeControlCharacter) {\n xhtml = xhtml.replace(/[\\u0000-\\u0008\\v\\f\\u000E-\\u001F\\uD800-\\uDFFF\\uFFFE\\uFFFF]/gu, \"\");\n }\n return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(xhtml)}`;\n}\nasync function canvasToBlob(canvas, type = \"image/png\", quality = 1) {\n try {\n return await new Promise((resolve, reject) => {\n canvas.toBlob((blob) => {\n if (blob) {\n resolve(blob);\n } else {\n reject(new Error(\"Blob is null\"));\n }\n }, type, quality);\n });\n } catch (error) {\n if (SUPPORT_ATOB) {\n return dataUrlToBlob(canvas.toDataURL(type, quality));\n }\n throw error;\n }\n}\nfunction dataUrlToBlob(dataUrl) {\n const [header, base64] = dataUrl.split(\",\");\n const type = header.match(/data:(.+);/)?.[1] ?? void 0;\n const decoded = window.atob(base64);\n const length = decoded.length;\n const buffer = new Uint8Array(length);\n for (let i = 0; i < length; i += 1) {\n buffer[i] = decoded.charCodeAt(i);\n }\n return new Blob([buffer], { type });\n}\nfunction readBlob(blob, type) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result);\n reader.onerror = () => reject(reader.error);\n reader.onabort = () => reject(new Error(`Failed read blob to ${type}`));\n if (type === \"dataUrl\") {\n reader.readAsDataURL(blob);\n } else if (type === \"arrayBuffer\") {\n reader.readAsArrayBuffer(blob);\n }\n });\n}\nconst blobToDataUrl = (blob) => readBlob(blob, \"dataUrl\");\nconst blobToArrayBuffer = (blob) => readBlob(blob, \"arrayBuffer\");\nfunction createImage(url, ownerDocument) {\n const img = getDocument(ownerDocument).createElement(\"img\");\n img.decoding = \"sync\";\n img.loading = \"eager\";\n img.src = url;\n return img;\n}\nfunction loadMedia(media, options) {\n return new Promise((resolve) => {\n const { timeout, ownerDocument, onError: userOnError, onWarn } = options ?? {};\n const node = typeof media === \"string\" ? createImage(media, getDocument(ownerDocument)) : media;\n let timer = null;\n let removeEventListeners = null;\n function onResolve() {\n resolve(node);\n timer && clearTimeout(timer);\n removeEventListeners?.();\n }\n if (timeout) {\n timer = setTimeout(onResolve, timeout);\n }\n if (isVideoElement(node)) {\n const currentSrc = node.currentSrc || node.src;\n if (!currentSrc) {\n if (node.poster) {\n return loadMedia(node.poster, options).then(resolve);\n }\n return onResolve();\n }\n if (node.readyState >= 2) {\n return onResolve();\n }\n const onLoadeddata = onResolve;\n const onError = (error) => {\n onWarn?.(\n \"Failed video load\",\n currentSrc,\n error\n );\n userOnError?.(error);\n onResolve();\n };\n removeEventListeners = () => {\n node.removeEventListener(\"loadeddata\", onLoadeddata);\n node.removeEventListener(\"error\", onError);\n };\n node.addEventListener(\"loadeddata\", onLoadeddata, { once: true });\n node.addEventListener(\"error\", onError, { once: true });\n } else {\n const currentSrc = isSVGImageElementNode(node) ? node.href.baseVal : node.currentSrc || node.src;\n if (!currentSrc) {\n return onResolve();\n }\n const onLoad = async () => {\n if (isImageElement(node) && \"decode\" in node) {\n try {\n await node.decode();\n } catch (error) {\n onWarn?.(\n \"Failed to decode image, trying to render anyway\",\n node.dataset.originalSrc || currentSrc,\n error\n );\n }\n }\n onResolve();\n };\n const onError = (error) => {\n onWarn?.(\n \"Failed image load\",\n node.dataset.originalSrc || currentSrc,\n error\n );\n onResolve();\n };\n if (isImageElement(node) && node.complete) {\n return onLoad();\n }\n removeEventListeners = () => {\n node.removeEventListener(\"load\", onLoad);\n node.removeEventListener(\"error\", onError);\n };\n node.addEventListener(\"load\", onLoad, { once: true });\n node.addEventListener(\"error\", onError, { once: true });\n }\n });\n}\nasync function waitUntilLoad(node, options) {\n if (isHTMLElementNode(node)) {\n if (isImageElement(node) || isVideoElement(node)) {\n await loadMedia(node, options);\n } else {\n await Promise.all(\n [\"img\", \"video\"].flatMap((selectors) => {\n return Array.from(node.querySelectorAll(selectors)).map((el) => loadMedia(el, options));\n })\n );\n }\n }\n}\nconst uuid = /* @__PURE__ */ function uuid2() {\n let counter = 0;\n const random = () => `0000${(Math.random() * 36 ** 4 << 0).toString(36)}`.slice(-4);\n return () => {\n counter += 1;\n return `u${random()}${counter}`;\n };\n}();\nfunction splitFontFamily(fontFamily) {\n return fontFamily?.split(\",\").map((val) => val.trim().replace(/\"|'/g, \"\").toLowerCase()).filter(Boolean);\n}\n\nlet uid = 0;\nfunction createLogger(debug) {\n const prefix = `${PREFIX}[#${uid}]`;\n uid++;\n return {\n // eslint-disable-next-line no-console\n time: (label) => debug && console.time(`${prefix} ${label}`),\n // eslint-disable-next-line no-console\n timeEnd: (label) => debug && console.timeEnd(`${prefix} ${label}`),\n warn: (...args) => debug && consoleWarn(...args)\n };\n}\n\nfunction getDefaultRequestInit(bypassingCache) {\n return {\n cache: bypassingCache ? \"no-cache\" : \"force-cache\"\n };\n}\n\nasync function orCreateContext(node, options) {\n return isContext(node) ? node : createContext(node, { ...options, autoDestruct: true });\n}\nasync function createContext(node, options) {\n const { scale = 1, workerUrl, workerNumber = 1 } = options || {};\n const debug = Boolean(options?.debug);\n const features = options?.features ?? true;\n const ownerDocument = node.ownerDocument ?? (IN_BROWSER ? window.document : void 0);\n const ownerWindow = node.ownerDocument?.defaultView ?? (IN_BROWSER ? window : void 0);\n const requests = /* @__PURE__ */ new Map();\n const context = {\n // Options\n width: 0,\n height: 0,\n quality: 1,\n type: \"image/png\",\n scale,\n backgroundColor: null,\n style: null,\n filter: null,\n maximumCanvasSize: 0,\n timeout: 3e4,\n progress: null,\n debug,\n fetch: {\n requestInit: getDefaultRequestInit(options?.fetch?.bypassingCache),\n placeholderImage: \"data:image/png;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\",\n bypassingCache: false,\n ...options?.fetch\n },\n fetchFn: null,\n font: {},\n drawImageInterval: 100,\n workerUrl: null,\n workerNumber,\n onCloneEachNode: null,\n onCloneNode: null,\n onEmbedNode: null,\n onCreateForeignObjectSvg: null,\n includeStyleProperties: null,\n autoDestruct: false,\n ...options,\n // InternalContext\n __CONTEXT__: true,\n log: createLogger(debug),\n node,\n ownerDocument,\n ownerWindow,\n dpi: scale === 1 ? null : 96 * scale,\n svgStyleElement: createStyleElement(ownerDocument),\n svgDefsElement: ownerDocument?.createElementNS(XMLNS, \"defs\"),\n svgStyles: /* @__PURE__ */ new Map(),\n defaultComputedStyles: /* @__PURE__ */ new Map(),\n workers: [\n ...Array.from({\n length: SUPPORT_WEB_WORKER && workerUrl && workerNumber ? workerNumber : 0\n })\n ].map(() => {\n try {\n const worker = new Worker(workerUrl);\n worker.onmessage = async (event) => {\n const { url, result } = event.data;\n if (result) {\n requests.get(url)?.resolve?.(result);\n } else {\n requests.get(url)?.reject?.(new Error(`Error receiving message from worker: ${url}`));\n }\n };\n worker.onmessageerror = (event) => {\n const { url } = event.data;\n requests.get(url)?.reject?.(new Error(`Error receiving message from worker: ${url}`));\n };\n return worker;\n } catch (error) {\n context.log.warn(\"Failed to new Worker\", error);\n return null;\n }\n }).filter(Boolean),\n fontFamilies: /* @__PURE__ */ new Map(),\n fontCssTexts: /* @__PURE__ */ new Map(),\n acceptOfImage: `${[\n supportWebp(ownerDocument) && \"image/webp\",\n \"image/svg+xml\",\n \"image/*\",\n \"*/*\"\n ].filter(Boolean).join(\",\")};q=0.8`,\n requests,\n drawImageCount: 0,\n tasks: [],\n features,\n isEnable: (key) => {\n if (key === \"restoreScrollPosition\") {\n return typeof features === \"boolean\" ? false : features[key] ?? false;\n }\n if (typeof features === \"boolean\") {\n return features;\n }\n return features[key] ?? true;\n },\n shadowRoots: []\n };\n context.log.time(\"wait until load\");\n await waitUntilLoad(node, { timeout: context.timeout, onWarn: context.log.warn });\n context.log.timeEnd(\"wait until load\");\n const { width, height } = resolveBoundingBox(node, context);\n context.width = width;\n context.height = height;\n return context;\n}\nfunction createStyleElement(ownerDocument) {\n if (!ownerDocument)\n return void 0;\n const style = ownerDocument.createElement(\"style\");\n const cssText = style.ownerDocument.createTextNode(`\n.______background-clip--text {\n background-clip: text;\n -webkit-background-clip: text;\n}\n`);\n style.appendChild(cssText);\n return style;\n}\nfunction resolveBoundingBox(node, context) {\n let { width, height } = context;\n if (isElementNode(node) && (!width || !height)) {\n const box = node.getBoundingClientRect();\n width = width || box.width || Number(node.getAttribute(\"width\")) || 0;\n height = height || box.height || Number(node.getAttribute(\"height\")) || 0;\n }\n return { width, height };\n}\n\nasync function imageToCanvas(image, context) {\n const {\n log,\n timeout,\n drawImageCount,\n drawImageInterval\n } = context;\n log.time(\"image to canvas\");\n const loaded = await loadMedia(image, { timeout, onWarn: context.log.warn });\n const { canvas, context2d } = createCanvas(image.ownerDocument, context);\n const drawImage = () => {\n try {\n context2d?.drawImage(loaded, 0, 0, canvas.width, canvas.height);\n } catch (error) {\n context.log.warn(\"Failed to drawImage\", error);\n }\n };\n drawImage();\n if (context.isEnable(\"fixSvgXmlDecode\")) {\n for (let i = 0; i < drawImageCount; i++) {\n await new Promise((resolve) => {\n setTimeout(() => {\n context2d?.clearRect(0, 0, canvas.width, canvas.height);\n drawImage();\n resolve();\n }, i + drawImageInterval);\n });\n }\n }\n context.drawImageCount = 0;\n log.timeEnd(\"image to canvas\");\n return canvas;\n}\nfunction createCanvas(ownerDocument, context) {\n const { width, height, scale, backgroundColor, maximumCanvasSize: max } = context;\n const canvas = ownerDocument.createElement(\"canvas\");\n canvas.width = Math.floor(width * scale);\n canvas.height = Math.floor(height * scale);\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n if (max) {\n if (canvas.width > max || canvas.height > max) {\n if (canvas.width > max && canvas.height > max) {\n if (canvas.width > canvas.height) {\n canvas.height *= max / canvas.width;\n canvas.width = max;\n } else {\n canvas.width *= max / canvas.height;\n canvas.height = max;\n }\n } else if (canvas.width > max) {\n canvas.height *= max / canvas.width;\n canvas.width = max;\n } else {\n canvas.width *= max / canvas.height;\n canvas.height = max;\n }\n }\n }\n const context2d = canvas.getContext(\"2d\");\n if (context2d && backgroundColor) {\n context2d.fillStyle = backgroundColor;\n context2d.fillRect(0, 0, canvas.width, canvas.height);\n }\n return { canvas, context2d };\n}\n\nfunction cloneCanvas(canvas, context) {\n if (canvas.ownerDocument) {\n try {\n const dataURL = canvas.toDataURL();\n if (dataURL !== \"data:,\") {\n return createImage(dataURL, canvas.ownerDocument);\n }\n } catch (error) {\n context.log.warn(\"Failed to clone canvas\", error);\n }\n }\n const cloned = canvas.cloneNode(false);\n const ctx = canvas.getContext(\"2d\");\n const clonedCtx = cloned.getContext(\"2d\");\n try {\n if (ctx && clonedCtx) {\n clonedCtx.putImageData(\n ctx.getImageData(0, 0, canvas.width, canvas.height),\n 0,\n 0\n );\n }\n return cloned;\n } catch (error) {\n context.log.warn(\"Failed to clone canvas\", error);\n }\n return cloned;\n}\n\nfunction cloneIframe(iframe, context) {\n try {\n if (iframe?.contentDocument?.body) {\n return cloneNode(iframe.contentDocument.body, context);\n }\n } catch (error) {\n context.log.warn(\"Failed to clone iframe\", error);\n }\n return iframe.cloneNode(false);\n}\n\nfunction cloneImage(image) {\n const cloned = image.cloneNode(false);\n if (image.currentSrc && image.currentSrc !== image.src) {\n cloned.src = image.currentSrc;\n cloned.srcset = \"\";\n }\n if (cloned.loading === \"lazy\") {\n cloned.loading = \"eager\";\n }\n return cloned;\n}\n\nasync function cloneVideo(video, context) {\n if (video.ownerDocument && !video.currentSrc && video.poster) {\n return createImage(video.poster, video.ownerDocument);\n }\n const cloned = video.cloneNode(false);\n cloned.crossOrigin = \"anonymous\";\n if (video.currentSrc && video.currentSrc !== video.src) {\n cloned.src = video.currentSrc;\n }\n const ownerDocument = cloned.ownerDocument;\n if (ownerDocument) {\n let canPlay = true;\n await loadMedia(cloned, { onError: () => canPlay = false, onWarn: context.log.warn });\n if (!canPlay) {\n if (video.poster) {\n return createImage(video.poster, video.ownerDocument);\n }\n return cloned;\n }\n cloned.currentTime = video.currentTime;\n await new Promise((resolve) => {\n cloned.addEventListener(\"seeked\", resolve, { once: true });\n });\n const canvas = ownerDocument.createElement(\"canvas\");\n canvas.width = video.offsetWidth;\n canvas.height = video.offsetHeight;\n try {\n const ctx = canvas.getContext(\"2d\");\n if (ctx)\n ctx.drawImage(cloned, 0, 0, canvas.width, canvas.height);\n } catch (error) {\n context.log.warn(\"Failed to clone video\", error);\n if (video.poster) {\n return createImage(video.poster, video.ownerDocument);\n }\n return cloned;\n }\n return cloneCanvas(canvas, context);\n }\n return cloned;\n}\n\nfunction cloneElement(node, context) {\n if (isCanvasElement(node)) {\n return cloneCanvas(node, context);\n }\n if (isIFrameElement(node)) {\n return cloneIframe(node, context);\n }\n if (isImageElement(node)) {\n return cloneImage(node);\n }\n if (isVideoElement(node)) {\n return cloneVideo(node, context);\n }\n return node.cloneNode(false);\n}\n\nfunction getSandBox(context) {\n let sandbox = context.sandbox;\n if (!sandbox) {\n const { ownerDocument } = context;\n try {\n if (ownerDocument) {\n sandbox = ownerDocument.createElement(\"iframe\");\n sandbox.id = `__SANDBOX__${uuid()}`;\n sandbox.width = \"0\";\n sandbox.height = \"0\";\n sandbox.style.visibility = \"hidden\";\n sandbox.style.position = \"fixed\";\n ownerDocument.body.appendChild(sandbox);\n sandbox.srcdoc = '<!DOCTYPE html><meta charset=\"UTF-8\"><title></title><body>';\n context.sandbox = sandbox;\n }\n } catch (error) {\n context.log.warn(\"Failed to getSandBox\", error);\n }\n }\n return sandbox;\n}\n\nconst ignoredStyles = [\n \"width\",\n \"height\",\n \"-webkit-text-fill-color\"\n];\nconst includedAttributes = [\n \"stroke\",\n \"fill\"\n];\nfunction getDefaultStyle(node, pseudoElement, context) {\n const { defaultComputedStyles } = context;\n const nodeName = node.nodeName.toLowerCase();\n const isSvgNode = isSVGElementNode(node) && nodeName !== \"svg\";\n const attributes = isSvgNode ? includedAttributes.map((name) => [name, node.getAttribute(name)]).filter(([, value]) => value !== null) : [];\n const key = [\n isSvgNode && \"svg\",\n nodeName,\n attributes.map((name, value) => `${name}=${value}`).join(\",\"),\n pseudoElement\n ].filter(Boolean).join(\":\");\n if (defaultComputedStyles.has(key))\n return defaultComputedStyles.get(key);\n const sandbox = getSandBox(context);\n const sandboxWindow = sandbox?.contentWindow;\n if (!sandboxWindow)\n return /* @__PURE__ */ new Map();\n const sandboxDocument = sandboxWindow?.document;\n let root;\n let el;\n if (isSvgNode) {\n root = sandboxDocument.createElementNS(XMLNS, \"svg\");\n el = root.ownerDocument.createElementNS(root.namespaceURI, nodeName);\n attributes.forEach(([name, value]) => {\n el.setAttributeNS(null, name, value);\n });\n root.appendChild(el);\n } else {\n root = el = sandboxDocument.createElement(nodeName);\n }\n el.textContent = \" \";\n sandboxDocument.body.appendChild(root);\n const computedStyle = sandboxWindow.getComputedStyle(el, pseudoElement);\n const styles = /* @__PURE__ */ new Map();\n for (let len = computedStyle.length, i = 0; i < len; i++) {\n const name = computedStyle.item(i);\n if (ignoredStyles.includes(name))\n continue;\n styles.set(name, computedStyle.getPropertyValue(name));\n }\n sandboxDocument.body.removeChild(root);\n defaultComputedStyles.set(key, styles);\n return styles;\n}\n\nfunction getDiffStyle(style, defaultStyle, includeStyleProperties) {\n const diffStyle = /* @__PURE__ */ new Map();\n const prefixs = [];\n const prefixTree = /* @__PURE__ */ new Map();\n if (includeStyleProperties) {\n for (const name of includeStyleProperties) {\n applyTo(name);\n }\n } else {\n for (let len = style.length, i = 0; i < len; i++) {\n const name = style.item(i);\n applyTo(name);\n }\n }\n for (let len = prefixs.length, i = 0; i < len; i++) {\n prefixTree.get(prefixs[i])?.forEach((value, name) => diffStyle.set(name, value));\n }\n function applyTo(name) {\n const value = style.getPropertyValue(name);\n const priority = style.getPropertyPriority(name);\n const subIndex = name.lastIndexOf(\"-\");\n const prefix = subIndex > -1 ? name.substring(0, subIndex) : void 0;\n if (prefix) {\n let map = prefixTree.get(prefix);\n if (!map) {\n map = /* @__PURE__ */ new Map();\n prefixTree.set(prefix, map);\n }\n map.set(name, [value, priority]);\n }\n if (defaultStyle.get(name) === value && !priority)\n return;\n if (prefix) {\n prefixs.push(prefix);\n } else {\n diffStyle.set(name, [value, priority]);\n }\n }\n return diffStyle;\n}\n\nfunction copyCssStyles(node, cloned, isRoot, context) {\n const { ownerWindow, includeStyleProperties, currentParentNodeStyle } = context;\n const clonedStyle = cloned.style;\n const computedStyle = ownerWindow.getComputedStyle(node);\n const defaultStyle = getDefaultStyle(node, null, context);\n currentParentNodeStyle?.forEach((_, key) => {\n defaultStyle.delete(key);\n });\n const style = getDiffStyle(computedStyle, defaultStyle, includeStyleProperties);\n style.delete(\"transition-property\");\n style.delete(\"all\");\n style.delete(\"d\");\n style.delete(\"content\");\n if (isRoot) {\n style.delete(\"margin-top\");\n style.delete(\"margin-right\");\n style.delete(\"margin-bottom\");\n style.delete(\"margin-left\");\n style.delete(\"margin-block-start\");\n style.delete(\"margin-block-end\");\n style.delete(\"margin-inline-start\");\n style.delete(\"margin-inline-end\");\n style.set(\"box-sizing\", [\"border-box\", \"\"]);\n }\n if (style.get(\"background-clip\")?.[0] === \"text\") {\n cloned.classList.add(\"______background-clip--text\");\n }\n if (IN_CHROME) {\n if (!style.has(\"font-kerning\"))\n style.set(\"font-kerning\", [\"normal\", \"\"]);\n if ((style.get(\"overflow-x\")?.[0] === \"hidden\" || style.get(\"overflow-y\")?.[0] === \"hidden\") && style.get(\"text-overflow\")?.[0] === \"ellipsis\" && node.scrollWidth === node.clientWidth) {\n style.set(\"text-overflow\", [\"clip\", \"\"]);\n }\n }\n for (let len = clonedStyle.length, i = 0; i < len; i++) {\n clonedStyle.removeProperty(clonedStyle.item(i));\n }\n style.forEach(([value, priority], name) => {\n clonedStyle.setProperty(name, value, priority);\n });\n return style;\n}\n\nfunction copyInputValue(node, cloned) {\n if (isTextareaElement(node) || isInputElement(node) || isSelectElement(node)) {\n cloned.setAttribute(\"value\", node.value);\n }\n}\n\nconst pseudoClasses = [\n \"::before\",\n \"::after\"\n // '::placeholder', TODO\n];\nconst scrollbarPseudoClasses = [\n \"::-webkit-scrollbar\",\n \"::-webkit-scrollbar-button\",\n // '::-webkit-scrollbar:horizontal', TODO\n \"::-webkit-scrollbar-thumb\",\n \"::-webkit-scrollbar-track\",\n \"::-webkit-scrollbar-track-piece\",\n // '::-webkit-scrollbar:vertical', TODO\n \"::-webkit-scrollbar-corner\",\n \"::-webkit-resizer\"\n];\nfunction copyPseudoClass(node, cloned, copyScrollbar, context, addWordToFontFamilies) {\n const { ownerWindow, svgStyleElement, svgStyles, currentNodeStyle } = context;\n if (!svgStyleElement || !ownerWindow)\n return;\n function copyBy(pseudoClass) {\n const computedStyle = ownerWindow.getComputedStyle(node, pseudoClass);\n let content = computedStyle.getPropertyValue(\"content\");\n if (!content || content === \"none\")\n return;\n addWordToFontFamilies?.(content);\n content = content.replace(/(')|(\")|(counter\\(.+\\))/g, \"\");\n const klasses = [uuid()];\n const defaultStyle = getDefaultStyle(node, pseudoClass, context);\n currentNodeStyle?.forEach((_, key) => {\n defaultStyle.delete(key);\n });\n const style = getDiffStyle(computedStyle, defaultStyle, context.includeStyleProperties);\n style.delete(\"content\");\n style.delete(\"-webkit-locale\");\n if (style.get(\"background-clip\")?.[0] === \"text\") {\n cloned.classList.add(\"______background-clip--text\");\n }\n const cloneStyle = [\n `content: '${content}';`\n ];\n style.forEach(([value, priority], name) => {\n cloneStyle.push(`${name}: ${value}${priority ? \" !important\" : \"\"};`);\n });\n if (cloneStyle.length === 1)\n return;\n try {\n cloned.className = [cloned.className, ...klasses].join(\" \");\n } catch (err) {\n context.log.warn(\"Failed to copyPseudoClass\", err);\n return;\n }\n const cssText = cloneStyle.join(\"\\n \");\n let allClasses = svgStyles.get(cssText);\n if (!allClasses) {\n allClasses = [];\n svgStyles.set(cssText, allClasses);\n }\n allClasses.push(`.${klasses[0]}${pseudoClass}`);\n }\n pseudoClasses.forEach(copyBy);\n if (copyScrollbar)\n scrollbarPseudoClasses.forEach(copyBy);\n}\n\nconst excludeParentNodes = /* @__PURE__ */ new Set([\n \"symbol\"\n // test/fixtures/svg.symbol.html\n]);\nasync function appendChildNode(node, cloned, child, context, addWordToFontFamilies) {\n if (isElementNode(child) && (isStyleElement(child) || isScriptElement(child)))\n return;\n if (context.filter && !context.filter(child))\n return;\n if (excludeParentNodes.has(cloned.nodeName) || excludeParentNodes.has(child.nodeName)) {\n context.currentParentNodeStyle = void 0;\n } else {\n context.currentParentNodeStyle = context.currentNodeStyle;\n }\n const childCloned = await cloneNode(child, context, false, addWordToFontFamilies);\n if (context.isEnable(\"restoreScrollPosition\")) {\n restoreScrollPosition(node, childCloned);\n }\n cloned.appendChild(childCloned);\n}\nasync function cloneChildNodes(node, cloned, context, addWordToFontFamilies) {\n let firstChild = node.firstChild;\n if (isElementNode(node)) {\n if (node.shadowRoot) {\n firstChild = node.shadowRoot?.firstChild;\n context.shadowRoots.push(node.shadowRoot);\n }\n }\n for (let child = firstChild; child; child = child.nextSibling) {\n if (isCommentNode(child))\n continue;\n if (isElementNode(child) && isSlotElement(child) && typeof child.assignedNodes === \"function\") {\n const nodes = child.assignedNodes();\n for (let i = 0; i < nodes.length; i++) {\n await appendChildNode(node, cloned, nodes[i], context, addWordToFontFamilies);\n }\n } else {\n await appendChildNode(node, cloned, child, context, addWordToFontFamilies);\n }\n }\n}\nfunction restoreScrollPosition(node, chlidCloned) {\n if (!isHTMLElementNode(node) || !isHTMLElementNode(chlidCloned))\n return;\n const { scrollTop, scrollLeft } = node;\n if (!scrollTop && !scrollLeft) {\n return;\n }\n const { transform } = chlidCloned.style;\n const matrix = new DOMMatrix(transform);\n const { a, b, c, d } = matrix;\n matrix.a = 1;\n matrix.b = 0;\n matrix.c = 0;\n matrix.d = 1;\n matrix.translateSelf(-scrollLeft, -scrollTop);\n matrix.a = a;\n matrix.b = b;\n matrix.c = c;\n matrix.d = d;\n chlidCloned.style.transform = matrix.toString();\n}\nfunction applyCssStyleWithOptions(cloned, context) {\n const { backgroundColor, width, height, style: styles } = context;\n const clonedStyle = cloned.style;\n if (backgroundColor)\n clonedStyle.setProperty(\"background-color\", backgroundColor, \"important\");\n if (width)\n clonedStyle.setProperty(\"width\", `${width}px`, \"important\");\n if (height)\n clonedStyle.setProperty(\"height\", `${height}px`, \"important\");\n if (styles) {\n for (const name in styles) clonedStyle[name] = styles[name];\n }\n}\nconst NORMAL_ATTRIBUTE_RE = /^[\\w-:]+$/;\nasync function cloneNode(node, context, isRoot = false, addWordToFontFamilies) {\n const { ownerDocument, ownerWindow, fontFamilies, onCloneEachNode } = context;\n if (ownerDocument && isTextNode(node)) {\n if (addWordToFontFamilies && /\\S/.test(node.data)) {\n addWordToFontFamilies(node.data);\n }\n return ownerDocument.createTextNode(node.data);\n }\n if (ownerDocument && ownerWindow && isElementNode(node) && (isHTMLElementNode(node) || isSVGElementNode(node))) {\n const cloned2 = await cloneElement(node, context);\n if (context.isEnable(\"removeAbnormalAttributes\")) {\n const names = cloned2.getAttributeNames();\n for (let len = names.length, i = 0; i < len; i++) {\n const name = names[i];\n if (!NORMAL_ATTRIBUTE_RE.test(name)) {\n cloned2.removeAttribute(name);\n }\n }\n }\n const style = context.currentNodeStyle = copyCssStyles(node, cloned2, isRoot, context);\n if (isRoot)\n applyCssStyleWithOptions(cloned2, context);\n let copyScrollbar = false;\n if (context.isEnable(\"copyScrollbar\")) {\n const overflow = [\n style.get(\"overflow-x\")?.[0],\n style.get(\"overflow-y\")?.[0]\n ];\n copyScrollbar = overflow.includes(\"scroll\") || (overflow.includes(\"auto\") || overflow.includes(\"overlay\")) && (node.scrollHeight > node.clientHeight || node.scrollWidth > node.clientWidth);\n }\n const textTransform = style.get(\"text-transform\")?.[0];\n const families = splitFontFamily(style.get(\"font-family\")?.[0]);\n const addWordToFontFamilies2 = families ? (word) => {\n if (textTransform === \"uppercase\") {\n word = word.toUpperCase();\n } else if (textTransform === \"lowercase\") {\n word = word.toLowerCase();\n } else if (textTransform === \"capitalize\") {\n word = word[0].toUpperCase() + word.substring(1);\n }\n families.forEach((family) => {\n let fontFamily = fontFamilies.get(family);\n if (!fontFamily) {\n fontFamilies.set(family, fontFamily = /* @__PURE__ */ new Set());\n }\n word.split(\"\").forEach((text) => fontFamily.add(text));\n });\n } : void 0;\n copyPseudoClass(\n node,\n cloned2,\n copyScrollbar,\n context,\n addWordToFontFamilies2\n );\n copyInputValue(node, cloned2);\n if (!isVideoElement(node)) {\n await cloneChildNodes(\n node,\n cloned2,\n context,\n addWordToFontFamilies2\n );\n }\n await onCloneEachNode?.(cloned2);\n return cloned2;\n }\n const cloned = node.cloneNode(false);\n await cloneChildNodes(node, cloned, context);\n await onCloneEachNode?.(cloned);\n return cloned;\n}\n\nfunction destroyContext(context) {\n context.ownerDocument = void 0;\n context.ownerWindow = void 0;\n context.svgStyleElement = void 0;\n context.svgDefsElement = void 0;\n context.svgStyles.clear();\n context.defaultComputedStyles.clear();\n if (context.sandbox) {\n try {\n context.sandbox.remove();\n } catch (err) {\n context.log.warn(\"Failed to destroyContext\", err);\n }\n context.sandbox = void 0;\n }\n context.workers = [];\n context.fontFamilies.clear();\n context.fontCssTexts.clear();\n context.requests.clear();\n context.tasks = [];\n context.shadowRoots = [];\n}\n\nfunction baseFetch(options) {\n const { url, timeout, responseType, ...requestInit } = options;\n const controller = new AbortController();\n const timer = timeout ? setTimeout(() => controller.abort(), timeout) : void 0;\n return fetch(url, { signal: controller.signal, ...requestInit }).then((response) => {\n if (!response.ok) {\n throw new Error(\"Failed fetch, not 2xx response\", { cause: response });\n }\n switch (responseType) {\n case \"arrayBuffer\":\n return response.arrayBuffer();\n case \"dataUrl\":\n return response.blob().then(blobToDataUrl);\n case \"text\":\n default:\n return response.text();\n }\n }).finally(() => clearTimeout(timer));\n}\nfunction contextFetch(context, options) {\n const { url: rawUrl, requestType = \"text\", responseType = \"text\", imageDom } = options;\n let url = rawUrl;\n const {\n timeout,\n acceptOfImage,\n requests,\n fetchFn,\n fetch: {\n requestInit,\n bypassingCache,\n placeholderImage\n },\n font,\n workers,\n fontFamilies\n } = context;\n if (requestType === \"image\" && (IN_SAFARI || IN_FIREFOX)) {\n context.drawImageCount++;\n }\n let request = requests.get(rawUrl);\n if (!request) {\n if (bypassingCache) {\n if (bypassingCache instanceof RegExp && bypassingCache.test(url)) {\n url += (/\\?/.test(url) ? \"&\" : \"?\") + (/* @__PURE__ */ new Date()).getTime();\n }\n }\n const canFontMinify = requestType.startsWith(\"font\") && font && font.minify;\n const fontTexts = /* @__PURE__ */ new Set();\n if (canFontMinify) {\n const families = requestType.split(\";\")[1].split(\",\");\n families.forEach((family) => {\n if (!fontFamilies.has(family))\n return;\n fontFamilies.get(family).forEach((text) => fontTexts.add(text));\n });\n }\n const needFontMinify = canFontMinify && fontTexts.size;\n const baseFetchOptions = {\n url,\n timeout,\n responseType: needFontMinify ? \"arrayBuffer\" : responseType,\n headers: requestType === \"image\" ? { accept: acceptOfImage } : void 0,\n ...requestInit\n };\n request = {\n type: requestType,\n resolve: void 0,\n reject: void 0,\n response: null\n };\n request.response = (async () => {\n if (fetchFn && requestType === \"image\") {\n const result = await fetchFn(rawUrl);\n if (result)\n return result;\n }\n if (!IN_SAFARI && rawUrl.startsWith(\"http\") && workers.length) {\n return new Promise((resolve, reject) => {\n const worker = workers[requests.size & workers.length - 1];\n worker.postMessage({ rawUrl, ...baseFetchOptions });\n request.resolve = resolve;\n request.reject = reject;\n });\n }\n return baseFetch(baseFetchOptions);\n })().catch((error) => {\n requests.delete(rawUrl);\n if (requestType === \"image\" && placeholderImage) {\n context.log.warn(\"Failed to fetch image base64, trying to use placeholder image\", url);\n return typeof placeholderImage === \"string\" ? placeholderImage : placeholderImage(imageDom);\n }\n throw error;\n });\n requests.set(rawUrl, request);\n }\n return request.response;\n}\n\nasync function replaceCssUrlToDataUrl(cssText, baseUrl, context, isImage) {\n if (!hasCssUrl(cssText))\n return cssText;\n for (const [rawUrl, url] of parseCssUrls(cssText, baseUrl)) {\n try {\n const dataUrl = await contextFetch(\n context,\n {\n url,\n requestType: isImage ? \"image\" : \"text\",\n responseType: \"dataUrl\"\n }\n );\n cssText = cssText.replace(toRE(rawUrl), `$1${dataUrl}$3`);\n } catch (error) {\n context.log.warn(\"Failed to fetch css data url\", rawUrl, error);\n }\n }\n return cssText;\n}\nfunction hasCssUrl(cssText) {\n return /url\\((['\"]?)([^'\"]+?)\\1\\)/.test(cssText);\n}\nconst URL_RE = /url\\((['\"]?)([^'\"]+?)\\1\\)/g;\nfunction parseCssUrls(cssText, baseUrl) {\n const result = [];\n cssText.replace(URL_RE, (raw, quotation, url) => {\n result.push([url, resolveUrl(url, baseUrl)]);\n return raw;\n });\n return result.filter(([url]) => !isDataUrl(url));\n}\nfunction toRE(url) {\n const escaped = url.replace(/([.*+?^${}()|\\[\\]\\/\\\\])/g, \"\\\\$1\");\n return new RegExp(`(url\\\\(['\"]?)(${escaped})(['\"]?\\\\))`, \"g\");\n}\n\nconst properties = [\n \"background-image\",\n \"border-image-source\",\n \"-webkit-border-image\",\n \"-webkit-mask-image\",\n \"list-style-image\"\n];\nfunction embedCssStyleImage(style, context) {\n return properties.map((property) => {\n const value = style.getPropertyValue(property);\n if (!value || value === \"none\") {\n return null;\n }\n if (IN_SAFARI || IN_FIREFOX) {\n context.drawImageCount++;\n }\n return replaceCssUrlToDataUrl(value, null, context, true).then((newValue) => {\n if (!newValue || value === newValue)\n return;\n style.setProperty(\n property,\n newValue,\n style.getPropertyPriority(property)\n );\n });\n }).filter(Boolean);\n}\n\nfunction embedImageElement(cloned, context) {\n if (isImageElement(cloned)) {\n const originalSrc = cloned.currentSrc || cloned.src;\n if (!isDataUrl(originalSrc)) {\n return [\n contextFetch(context, {\n url: originalSrc,\n imageDom: cloned,\n requestType: \"image\",\n responseType: \"dataUrl\"\n }).then((url) => {\n if (!url)\n return;\n cloned.srcset = \"\";\n cloned.dataset.originalSrc = originalSrc;\n cloned.src = url || \"\";\n })\n ];\n }\n if (IN_SAFARI || IN_FIREFOX) {\n context.drawImageCount++;\n }\n } else if (isSVGElementNode(cloned) && !isDataUrl(cloned.href.baseVal)) {\n const originalSrc = cloned.href.baseVal;\n return [\n contextFetch(context, {\n url: originalSrc,\n imageDom: cloned,\n requestType: \"image\",\n responseType: \"dataUrl\"\n }).then((url) => {\n if (!url)\n return;\n cloned.dataset.originalSrc = originalSrc;\n cloned.href.baseVal = url || \"\";\n })\n ];\n }\n return [];\n}\n\nfunction embedSvgUse(cloned, context) {\n const { ownerDocument, svgDefsElement } = context;\n const href = cloned.getAttribute(\"href\") ?? cloned.getAttribute(\"xlink:href\");\n if (!href)\n return [];\n const [svgUrl, id] = href.split(\"#\");\n if (id) {\n const query = `#${id}`;\n const definition = context.shadowRoots.reduce(\n (res, root) => {\n return res ?? root.querySelector(`svg ${query}`);\n },\n ownerDocument?.querySelector(`svg ${query}`)\n );\n if (svgUrl) {\n cloned.setAttribute(\"href\", query);\n }\n if (svgDefsElement?.querySelector(query))\n return [];\n if (definition) {\n svgDefsElement?.appendChild(definition.cloneNode(true));\n return [];\n } else if (svgUrl) {\n return [\n contextFetch(context, {\n url: svgUrl,\n responseType: \"text\"\n }).then((svgData) => {\n svgDefsElement?.insertAdjacentHTML(\"beforeend\", svgData);\n })\n ];\n }\n }\n return [];\n}\n\nfunction embedNode(cloned, context) {\n const { tasks } = context;\n if (isElementNode(cloned)) {\n if (isImageElement(cloned) || isSVGImageElementNode(cloned)) {\n tasks.push(...embedImageElement(cloned, context));\n }\n if (isSVGUseElementNode(cloned)) {\n tasks.push(...embedSvgUse(cloned, context));\n }\n }\n if (isHTMLElementNode(cloned)) {\n tasks.push(...embedCssStyleImage(cloned.style, context));\n }\n cloned.childNodes.forEach((child) => {\n embedNode(child, context);\n });\n}\n\nasync function embedWebFont(clone, context) {\n const {\n ownerDocument,\n svgStyleElement,\n fontFamilies,\n fontCssTexts,\n tasks,\n font\n } = context;\n if (!ownerDocument || !svgStyleElement || !fontFamilies.size) {\n return;\n }\n if (font && font.cssText) {\n const cssText = filterPreferredFormat(font.cssText, context);\n svgStyleElement.appendChild(ownerDocument.createTextNode(`${cssText}\n`));\n } else {\n const styleSheets = Array.from(ownerDocument.styleSheets).filter((styleSheet) => {\n try {\n return \"cssRules\" in styleSheet && Boolean(styleSheet.cssRules.length);\n } catch (error) {\n context.log.warn(`Error while reading CSS rules from ${styleSheet.href}`, error);\n return false;\n }\n });\n await Promise.all(\n styleSheets.flatMap((styleSheet) => {\n return Array.from(styleSheet.cssRules).map(async (cssRule, index) => {\n if (isCSSImportRule(cssRule)) {\n let importIndex = index + 1;\n const baseUrl = cssRule.href;\n let cssText = \"\";\n try {\n cssText = await contextFetch(context, {\n url: baseUrl,\n requestType: \"text\",\n responseType: \"text\"\n });\n } catch (error) {\n context.log.warn(`Error fetch remote css import from ${baseUrl}`, error);\n }\n const replacedCssText = cssText.replace(\n URL_RE,\n (raw, quotation, url) => raw.replace(url, resolveUrl(url, baseUrl))\n );\n for (const rule of parseCss(replacedCssText)) {\n try {\n styleSheet.insertRule(\n rule,\n rule.startsWith(\"@import\") ? importIndex += 1 : styleSheet.cssRules.length\n );\n } catch (error) {\n context.log.warn(\"Error inserting rule from remote css import\", { rule, error });\n }\n }\n }\n });\n })\n );\n const cssRules = [];\n styleSheets.forEach((sheet) => {\n unwrapCssLayers(sheet.cssRules, cssRules);\n });\n cssRules.filter((cssRule) => isCssFontFaceRule(cssRule) && hasCssUrl(cssRule.style.getPropertyValue(\"src\")) && splitFontFamily(cssRule.style.getPropertyValue(\"font-family\"))?.some((val) => fontFamilies.has(val))).forEach((value) => {\n const rule = value;\n const cssText = fontCssTexts.get(rule.cssText);\n if (cssText) {\n svgStyleElement.appendChild(ownerDocument.createTextNode(`${cssText}\n`));\n } else {\n tasks.push(\n replaceCssUrlToDataUrl(\n rule.cssText,\n rule.parentStyleSheet ? rule.parentStyleSheet.href : null,\n context\n ).then((cssText2) => {\n cssText2 = filterPreferredFormat(cssText2, context);\n fontCssTexts.set(rule.cssText, cssText2);\n svgStyleElement.appendChild(ownerDocument.createTextNode(`${cssText2}\n`));\n })\n );\n }\n });\n }\n}\nconst COMMENTS_RE = /(\\/\\*[\\s\\S]*?\\*\\/)/g;\nconst KEYFRAMES_RE = /((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})/gi;\nfunction parseCss(source) {\n if (source == null)\n return [];\n const result = [];\n let cssText = source.replace(COMMENTS_RE, \"\");\n while (true) {\n const matches = KEYFRAMES_RE.exec(cssText);\n if (!matches)\n break;\n result.push(matches[0]);\n }\n cssText = cssText.replace(KEYFRAMES_RE, \"\");\n const IMPORT_RE = /@import[\\s\\S]*?url\\([^)]*\\)[\\s\\S]*?;/gi;\n const UNIFIED_RE = new RegExp(\n // eslint-disable-next-line\n \"((\\\\s*?(?:\\\\/\\\\*[\\\\s\\\\S]*?\\\\*\\\\/)?\\\\s*?@media[\\\\s\\\\S]*?){([\\\\s\\\\S]*?)}\\\\s*?})|(([\\\\s\\\\S]*?){([\\\\s\\\\S]*?)})\",\n \"gi\"\n );\n while (true) {\n let matches = IMPORT_RE.exec(cssText);\n if (!matches) {\n matches = UNIFIED_RE.exec(cssText);\n if (!matches) {\n break;\n } else {\n IMPORT_RE.lastIndex = UNIFIED_RE.lastIndex;\n }\n } else {\n UNIFIED_RE.lastIndex = IMPORT_RE.lastIndex;\n }\n result.push(matches[0]);\n }\n return result;\n}\nconst URL_WITH_FORMAT_RE = /url\\([^)]+\\)\\s*format\\(([\"']?)([^\"']+)\\1\\)/g;\nconst FONT_SRC_RE = /src:\\s*(?:url\\([^)]+\\)\\s*format\\([^)]+\\)[,;]\\s*)+/g;\nfunction filterPreferredFormat(str, context) {\n const { font } = context;\n const preferredFormat = font ? font?.preferredFormat : void 0;\n return preferredFormat ? str.replace(FONT_SRC_RE, (match) => {\n while (true) {\n const [src, , format] = URL_WITH_FORMAT_RE.exec(match) || [];\n if (!format)\n return \"\";\n if (format === preferredFormat)\n return `src: ${src};`;\n }\n }) : str;\n}\nfunction unwrapCssLayers(rules, out = []) {\n for (const rule of Array.from(rules)) {\n if (isLayerBlockRule(rule)) {\n out.push(...unwrapCssLayers(rule.cssRules));\n } else if (\"cssRules\" in rule) {\n unwrapCssLayers(rule.cssRules, out);\n } else {\n out.push(rule);\n }\n }\n return out;\n}\n\nasync function domToForeignObjectSvg(node, options) {\n const context = await orCreateContext(node, options);\n if (isElementNode(context.node) && isSVGElementNode(context.node))\n return context.node;\n const {\n ownerDocument,\n log,\n tasks,\n svgStyleElement,\n svgDefsElement,\n svgStyles,\n font,\n progress,\n autoDestruct,\n onCloneNode,\n onEmbedNode,\n onCreateForeignObjectSvg\n } = context;\n log.time(\"clone node\");\n const clone = await cloneNode(context.node, context, true);\n if (svgStyleElement && ownerDocument) {\n let allCssText = \"\";\n svgStyles.forEach((klasses, cssText) => {\n allCssText += `${klasses.join(\",\\n\")} {\n ${cssText}\n}\n`;\n });\n svgStyleElement.appendChild(ownerDocument.createTextNode(allCssText));\n }\n log.timeEnd(\"clone node\");\n await onCloneNode?.(clone);\n if (font !== false && isElementNode(clone)) {\n log.time(\"embed web font\");\n await embedWebFont(clone, context);\n log.timeEnd(\"embed web font\");\n }\n log.time(\"embed node\");\n embedNode(clone, context);\n const count = tasks.length;\n let current = 0;\n const runTask = async () => {\n while (true) {\n const task = tasks.pop();\n if (!task)\n break;\n try {\n await task;\n } catch (error) {\n context.log.warn(\"Failed to run task\", error);\n }\n progress?.(++current, count);\n }\n };\n progress?.(current, count);\n await Promise.all([...Array.from({ length: 4 })].map(runTask));\n log.timeEnd(\"embed node\");\n await onEmbedNode?.(clone);\n const svg = createForeignObjectSvg(clone, context);\n svgDefsElement && svg.insertBefore(svgDefsElement, svg.children[0]);\n svgStyleElement && svg.insertBefore(svgStyleElement, svg.children[0]);\n autoDestruct && destroyContext(context);\n await onCreateForeignObjectSvg?.(svg);\n return svg;\n}\nfunction createForeignObjectSvg(clone, context) {\n const { width, height } = context;\n const svg = createSvg(width, height, clone.ownerDocument);\n const foreignObject = svg.ownerDocument.createElementNS(svg.namespaceURI, \"foreignObject\");\n foreignObject.setAttributeNS(null, \"x\", \"0%\");\n foreignObject.setAttributeNS(null, \"y\", \"0%\");\n foreignObject.setAttributeNS(null, \"width\", \"100%\");\n foreignObject.setAttributeNS(null, \"height\", \"100%\");\n foreignObject.append(clone);\n svg.appendChild(foreignObject);\n return svg;\n}\n\nasync function domToCanvas(node, options) {\n const context = await orCreateContext(node, options);\n const svg = await domToForeignObjectSvg(context);\n const dataUrl = svgToDataUrl(svg, context.isEnable(\"removeControlCharacter\"));\n if (!context.autoDestruct) {\n context.svgStyleElement = createStyleElement(context.ownerDocument);\n context.svgDefsElement = context.ownerDocument?.createElementNS(XMLNS, \"defs\");\n context.svgStyles.clear();\n }\n const image = createImage(dataUrl, svg.ownerDocument);\n return await imageToCanvas(image, context);\n}\n\nasync function domToBlob(node, options) {\n const context = await orCreateContext(node, options);\n const { log, type, quality, dpi } = context;\n const canvas = await domToCanvas(context);\n log.time(\"canvas to blob\");\n const blob = await canvasToBlob(canvas, type, quality);\n if ([\"image/png\", \"image/jpeg\"].includes(type) && dpi) {\n const arrayBuffer = await blobToArrayBuffer(blob.slice(0, 33));\n let uint8Array = new Uint8Array(arrayBuffer);\n if (type === \"image/png\") {\n uint8Array = changePngDpi(uint8Array, dpi);\n } else if (type === \"image/jpeg\") {\n uint8Array = changeJpegDpi(uint8Array, dpi);\n }\n log.timeEnd(\"canvas to blob\");\n return new Blob([uint8Array, blob.slice(33)], { type });\n }\n log.timeEnd(\"canvas to blob\");\n return blob;\n}\n\nasync function domToDataUrl(node, options) {\n const context = await orCreateContext(node, options);\n const { log, quality, type, dpi } = context;\n const canvas = await domToCanvas(context);\n log.time(\"canvas to data url\");\n let dataUrl = canvas.toDataURL(type, quality);\n if ([\"image/png\", \"image/jpeg\"].includes(type) && dpi && SUPPORT_ATOB && SUPPORT_BTOA) {\n const [format, body] = dataUrl.split(\",\");\n let headerLength = 0;\n let overwritepHYs = false;\n if (type === \"image/png\") {\n const b64Index = detectPhysChunkFromDataUrl(body);\n if (b64Index >= 0) {\n headerLength = Math.ceil((b64Index + 28) / 3) * 4;\n overwritepHYs = true;\n } else {\n headerLength = 33 / 3 * 4;\n }\n } else if (type === \"image/jpeg\") {\n headerLength = 18 / 3 * 4;\n }\n const stringHeader = body.substring(0, headerLength);\n const restOfData = body.substring(headerLength);\n const headerBytes = window.atob(stringHeader);\n const uint8Array = new Uint8Array(headerBytes.length);\n for (let i = 0; i < uint8Array.length; i++) {\n uint8Array[i] = headerBytes.charCodeAt(i);\n }\n const finalArray = type === \"image/png\" ? changePngDpi(uint8Array, dpi, overwritepHYs) : changeJpegDpi(uint8Array, dpi);\n const base64Header = window.btoa(String.fromCharCode(...finalArray));\n dataUrl = [format, \",\", base64Header, restOfData].join(\"\");\n }\n log.timeEnd(\"canvas to data url\");\n return dataUrl;\n}\n\nasync function domToSvg(node, options) {\n const context = await orCreateContext(node, options);\n const { width, height, ownerDocument } = context;\n const dataUrl = await domToDataUrl(context);\n const svg = createSvg(width, height, ownerDocument);\n const svgImage = svg.ownerDocument.createElementNS(svg.namespaceURI, \"image\");\n svgImage.setAttributeNS(null, \"href\", dataUrl);\n svgImage.setAttributeNS(null, \"height\", \"100%\");\n svgImage.setAttributeNS(null, \"width\", \"100%\");\n svg.appendChild(svgImage);\n return svgToDataUrl(svg, context.isEnable(\"removeControlCharacter\"));\n}\n\nasync function domToImage(node, options) {\n const context = await orCreateContext(node, options);\n const { ownerDocument, width, height, scale, type } = context;\n const url = type === \"image/svg+xml\" ? await domToSvg(context) : await domToDataUrl(context);\n const image = createImage(url, ownerDocument);\n image.width = Math.floor(width * scale);\n image.height = Math.floor(height * scale);\n image.style.width = `${width}px`;\n image.style.height = `${height}px`;\n return image;\n}\n\nasync function domToJpeg(node, options) {\n return domToDataUrl(\n await orCreateContext(node, { ...options, type: \"image/jpeg\" })\n );\n}\n\nasync function domToPixel(node, options) {\n const context = await orCreateContext(node, options);\n const canvas = await domToCanvas(context);\n return canvas.getContext(\"2d\").getImageData(0, 0, canvas.width, canvas.height).data;\n}\n\nasync function domToPng(node, options) {\n return domToDataUrl(\n await orCreateContext(node, { ...options, type: \"image/png\" })\n );\n}\n\nasync function domToWebp(node, options) {\n return domToDataUrl(\n await orCreateContext(node, { ...options, type: \"image/webp\" })\n );\n}\n\nexport { createContext, destroyContext, domToBlob, domToCanvas, domToDataUrl, domToForeignObjectSvg, domToImage, domToJpeg, domToPixel, domToPng, domToSvg, domToWebp, loadMedia, waitUntilLoad };\n","import { domToJpeg } from 'modern-screenshot';\n\nconst MAX_SIZE_BYTES = 2 * 1024 * 1024; // 2MB\n\n/**\n * Capture a screenshot of the current page using modern-screenshot.\n * Returns a base64 data URL or null if capture fails.\n */\nexport async function captureScreenshot(): Promise<string | null> {\n try {\n let dataUrl = await domToJpeg(document.body, {\n scale: 1,\n quality: 0.7,\n width: window.innerWidth,\n height: window.innerHeight,\n });\n\n // If too large, retry at lower quality and scale\n if (dataUrl.length > MAX_SIZE_BYTES) {\n dataUrl = await domToJpeg(document.body, {\n scale: 0.5,\n quality: 0.5,\n width: window.innerWidth,\n height: window.innerHeight,\n });\n }\n\n return dataUrl;\n } catch {\n return null;\n }\n}\n","// API URL\nexport const API_BASE_URL = 'https://gotcha.cx/api/v1';\n\n// Error codes\nexport const ERROR_CODES = {\n INVALID_API_KEY: 'INVALID_API_KEY',\n ORIGIN_NOT_ALLOWED: 'ORIGIN_NOT_ALLOWED',\n RATE_LIMITED: 'RATE_LIMITED',\n QUOTA_EXCEEDED: 'QUOTA_EXCEEDED',\n INVALID_REQUEST: 'INVALID_REQUEST',\n USER_NOT_FOUND: 'USER_NOT_FOUND',\n INTERNAL_ERROR: 'INTERNAL_ERROR',\n} as const;\n\n// Local storage keys\nexport const STORAGE_KEYS = {\n ANONYMOUS_ID: 'gotcha_anonymous_id',\n OFFLINE_QUEUE: 'gotcha_offline_queue',\n HIDDEN_UNTIL: 'gotcha_hidden',\n VISIT_COUNT: 'gotcha_visits',\n} as const;\n\n// Default values\nexport const DEFAULTS = {\n POSITION: 'top-right' as const,\n SIZE: 'md' as const,\n THEME: 'light' as const,\n SHOW_ON_HOVER: true,\n TOUCH_BEHAVIOR: 'always-visible' as const,\n SUBMIT_TEXT: 'Submit',\n THANK_YOU_MESSAGE: 'Gotcha!',\n} as const;\n\n// Retry config\nexport const RETRY_CONFIG = {\n MAX_RETRIES: 2,\n BASE_DELAY_MS: 500,\n MAX_DELAY_MS: 5000,\n} as const;\n","export function safeGetItem(key: string): string | null {\n if (typeof window === 'undefined') return null;\n try {\n return localStorage.getItem(key);\n } catch {\n return null;\n }\n}\n\nexport function safeSetItem(key: string, value: string): void {\n if (typeof window === 'undefined') return;\n try {\n localStorage.setItem(key, value);\n } catch {\n // localStorage unavailable (incognito Safari, sandboxed iframes)\n }\n}\n\nexport function safeRemoveItem(key: string): void {\n if (typeof window === 'undefined') return;\n try {\n localStorage.removeItem(key);\n } catch {\n // silently fail\n }\n}\n","/**\n * Generate a UUID v4. Falls back to Math.random for insecure contexts\n * (HTTP, some WebViews) where crypto.randomUUID is unavailable.\n */\nexport function generateId(): string {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n}\n","import { STORAGE_KEYS } from '../constants';\nimport { safeGetItem, safeSetItem, safeRemoveItem } from './localStorage';\nimport { generateId } from './generateId';\n\n/**\n * Get or create an anonymous user ID\n * Stored in localStorage for consistency across sessions\n */\nexport function getAnonymousId(): string {\n const stored = safeGetItem(STORAGE_KEYS.ANONYMOUS_ID);\n if (stored) return stored;\n\n const id = `anon_${generateId()}`;\n safeSetItem(STORAGE_KEYS.ANONYMOUS_ID, id);\n return id;\n}\n\n/**\n * Clear the anonymous ID (useful for testing)\n */\nexport function clearAnonymousId(): void {\n safeRemoveItem(STORAGE_KEYS.ANONYMOUS_ID);\n}\n","const MAX_ERRORS = 10;\nconst MAX_MESSAGE_LENGTH = 200;\n\ninterface CapturedError {\n message: string;\n source?: string;\n timestamp: number;\n}\n\nlet buffer: CapturedError[] = [];\nlet listening = false;\n\nfunction pushError(message: string, source?: string) {\n const entry: CapturedError = {\n message: message.slice(0, MAX_MESSAGE_LENGTH),\n source: source?.slice(0, MAX_MESSAGE_LENGTH),\n timestamp: Date.now(),\n };\n buffer.push(entry);\n if (buffer.length > MAX_ERRORS) {\n buffer.shift();\n }\n}\n\nfunction handleError(event: ErrorEvent) {\n pushError(event.message, event.filename);\n}\n\nfunction handleRejection(event: PromiseRejectionEvent) {\n const message = event.reason instanceof Error\n ? event.reason.message\n : String(event.reason);\n pushError(message);\n}\n\nexport function startErrorCapture(): void {\n if (typeof window === 'undefined' || listening) return;\n window.addEventListener('error', handleError);\n window.addEventListener('unhandledrejection', handleRejection);\n listening = true;\n}\n\nexport function stopErrorCapture(): void {\n if (typeof window === 'undefined' || !listening) return;\n window.removeEventListener('error', handleError);\n window.removeEventListener('unhandledrejection', handleRejection);\n listening = false;\n}\n\nexport function getRecentErrors(): CapturedError[] {\n return [...buffer].reverse();\n}\n","import { SubmissionContext } from '../types';\nimport { getRecentErrors } from './errorBuffer';\n\nexport function collectContext(): SubmissionContext {\n if (typeof window === 'undefined') return {};\n\n return {\n url: window.location.origin + window.location.pathname,\n userAgent: navigator.userAgent,\n viewport: { width: window.innerWidth, height: window.innerHeight },\n language: navigator.language,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n screenResolution: { width: screen.width, height: screen.height },\n recentErrors: getRecentErrors(),\n };\n}\n","import { STORAGE_KEYS } from '../constants';\nimport { safeGetItem, safeSetItem } from './localStorage';\nimport { generateId } from './generateId';\n\nconst MAX_QUEUE_SIZE = 50;\nconst MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000; // 7 days\n\nexport interface OfflineQueueItem {\n id: string;\n payload: Record<string, unknown>;\n type: 'create' | 'update';\n queuedAt: number;\n retries: number;\n}\n\nfunction readQueue(): OfflineQueueItem[] {\n const raw = safeGetItem(STORAGE_KEYS.OFFLINE_QUEUE);\n if (!raw) return [];\n try {\n const items = JSON.parse(raw) as OfflineQueueItem[];\n // Drop items older than 7 days\n const now = Date.now();\n return items.filter(item => now - item.queuedAt < MAX_AGE_MS);\n } catch {\n return [];\n }\n}\n\nfunction writeQueue(items: OfflineQueueItem[]): void {\n safeSetItem(STORAGE_KEYS.OFFLINE_QUEUE, JSON.stringify(items));\n}\n\nexport function enqueue(payload: Record<string, unknown>, type: 'create' | 'update' = 'create'): void {\n const items = readQueue();\n if (items.length >= MAX_QUEUE_SIZE) return;\n items.push({\n id: generateId(),\n payload,\n type,\n queuedAt: Date.now(),\n retries: 0,\n });\n writeQueue(items);\n}\n\nexport function dequeue(id: string): void {\n const items = readQueue().filter(item => item.id !== id);\n writeQueue(items);\n}\n\nexport function getQueuedItems(): OfflineQueueItem[] {\n return readQueue();\n}\n\nexport function getQueueLength(): number {\n return readQueue().length;\n}\n\nexport function incrementRetries(id: string): void {\n const items = readQueue().map(item =>\n item.id === id ? { ...item, retries: item.retries + 1 } : item\n );\n // Drop items with too many retries\n writeQueue(items.filter(item => item.retries <= 5));\n}\n","import { API_BASE_URL, RETRY_CONFIG } from '../constants';\nimport { SubmitResponsePayload, GotchaResponse, GotchaError, ExistingResponse, VoteType, ScoreData } from '../types';\nimport { getAnonymousId } from '../utils/anonymous';\nimport { generateId } from '../utils/generateId';\nimport { collectContext } from '../utils/contextCollector';\nimport { enqueue, getQueuedItems, dequeue, incrementRetries, getQueueLength } from '../utils/offlineQueue';\n\ninterface ApiClientConfig {\n apiKey: string;\n baseUrl?: string;\n debug?: boolean;\n}\n\ninterface RetryConfig {\n maxRetries: number;\n baseDelayMs: number;\n maxDelayMs: number;\n}\n\nconst DEFAULT_RETRY_CONFIG: RetryConfig = {\n maxRetries: RETRY_CONFIG.MAX_RETRIES,\n baseDelayMs: RETRY_CONFIG.BASE_DELAY_MS,\n maxDelayMs: RETRY_CONFIG.MAX_DELAY_MS,\n};\n\n/**\n * Fetch with automatic retry and exponential backoff\n */\nasync function fetchWithRetry(\n url: string,\n options: RequestInit,\n config: RetryConfig = DEFAULT_RETRY_CONFIG,\n debug: boolean = false\n): Promise<Response> {\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt <= config.maxRetries; attempt++) {\n try {\n if (debug && attempt > 0) {\n console.log(`[Gotcha] Retry attempt ${attempt}/${config.maxRetries}`);\n }\n\n const response = await fetch(url, options);\n\n // Don't retry client errors (4xx) except 429 (rate limit)\n if (response.status >= 400 && response.status < 500 && response.status !== 429) {\n return response;\n }\n\n // Success - return immediately\n if (response.ok) {\n return response;\n }\n\n lastError = new Error(`HTTP ${response.status}`);\n } catch (error) {\n // Network error - retry\n lastError = error as Error;\n if (debug) {\n console.log(`[Gotcha] Network error: ${lastError.message}`);\n }\n }\n\n // Don't delay after last attempt\n if (attempt < config.maxRetries) {\n const delay = Math.min(\n config.baseDelayMs * Math.pow(2, attempt),\n config.maxDelayMs\n );\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n\n throw lastError;\n}\n\nexport function createApiClient(config: ApiClientConfig) {\n const { apiKey, baseUrl = API_BASE_URL, debug = false } = config;\n\n let flushing = false;\n\n const headers = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${apiKey}`,\n };\n\n async function request<T>(\n method: string,\n endpoint: string,\n body?: unknown\n ): Promise<T> {\n const url = `${baseUrl}${endpoint}`;\n const idempotencyKey = generateId();\n\n if (debug) {\n console.log(`[Gotcha] ${method} ${endpoint}`, body);\n }\n\n const response = await fetchWithRetry(\n url,\n {\n method,\n headers: {\n ...headers,\n 'Idempotency-Key': idempotencyKey,\n },\n body: body ? JSON.stringify(body) : undefined,\n },\n DEFAULT_RETRY_CONFIG,\n debug\n );\n\n let data: Record<string, unknown>;\n try {\n data = await response.json();\n } catch {\n throw { code: 'PARSE_ERROR', message: 'Invalid response from server', status: response.status } as GotchaError;\n }\n\n if (!response.ok) {\n const error = data.error as GotchaError;\n if (debug) {\n console.error(`[Gotcha] Error: ${error.code} - ${error.message}`);\n }\n throw error;\n }\n\n if (debug) {\n console.log(`[Gotcha] Response:`, data);\n }\n\n return data as T;\n }\n\n return {\n /**\n * Submit a response (feedback, vote, etc.)\n */\n async submitResponse(\n payload: Omit<SubmitResponsePayload, 'context'>\n ): Promise<GotchaResponse> {\n // Ensure user has an ID (anonymous if not provided)\n const user = payload.user || {};\n if (!user.id) {\n user.id = getAnonymousId();\n }\n\n const fullPayload: SubmitResponsePayload = {\n ...payload,\n user,\n context: collectContext(),\n // Only include isBug if true\n ...(payload.isBug ? { isBug: true } : {}),\n };\n\n // Queue if offline\n if (typeof navigator !== 'undefined' && !navigator.onLine) {\n enqueue(fullPayload as unknown as Record<string, unknown>, 'create');\n return {\n id: generateId(),\n status: 'queued' as const,\n createdAt: new Date().toISOString(),\n };\n }\n\n try {\n return await request<GotchaResponse>('POST', '/responses', fullPayload);\n } catch (err) {\n // On network failure, queue for later\n if (err instanceof TypeError && typeof navigator !== 'undefined' && !navigator.onLine) {\n enqueue(fullPayload as unknown as Record<string, unknown>, 'create');\n return {\n id: generateId(),\n status: 'queued' as const,\n createdAt: new Date().toISOString(),\n };\n }\n throw err;\n }\n },\n\n /**\n * Check if a user has an existing response for an element\n */\n async checkExistingResponse(\n elementId: string,\n userId: string\n ): Promise<ExistingResponse | null> {\n const url = `${baseUrl}/responses/check?elementId=${encodeURIComponent(elementId)}&userId=${encodeURIComponent(userId)}`;\n\n if (debug) {\n console.log(`[Gotcha] GET /responses/check`);\n }\n\n const response = await fetchWithRetry(\n url,\n {\n method: 'GET',\n headers,\n },\n DEFAULT_RETRY_CONFIG,\n debug\n );\n\n const data = await response.json();\n\n if (!response.ok) {\n const error = data.error as GotchaError;\n if (debug) {\n console.error(`[Gotcha] Error: ${error.code} - ${error.message}`);\n }\n throw error;\n }\n\n if (data.exists) {\n if (debug) {\n console.log(`[Gotcha] Found existing response:`, data.response);\n }\n return data.response as ExistingResponse;\n }\n\n return null;\n },\n\n /**\n * Update an existing response\n */\n async updateResponse(\n id: string,\n payload: {\n content?: string;\n title?: string;\n rating?: number;\n vote?: VoteType;\n pollSelected?: string[];\n },\n userId?: string\n ): Promise<GotchaResponse> {\n const url = `${baseUrl}/responses/${id}${userId ? `?userId=${encodeURIComponent(userId)}` : ''}`;\n\n if (debug) {\n console.log(`[Gotcha] PATCH /responses/${id}`, payload);\n }\n\n const response = await fetchWithRetry(\n url,\n {\n method: 'PATCH',\n headers,\n body: JSON.stringify(payload),\n },\n DEFAULT_RETRY_CONFIG,\n debug\n );\n\n const data = await response.json();\n\n if (!response.ok) {\n const error = data.error as GotchaError;\n if (debug) {\n console.error(`[Gotcha] Error: ${error.code} - ${error.message}`);\n }\n throw error;\n }\n\n if (debug) {\n console.log(`[Gotcha] Response updated:`, data);\n }\n\n return data as GotchaResponse;\n },\n\n /**\n * Get aggregate score data for an element\n */\n async getScore(elementId: string): Promise<ScoreData> {\n const url = `${baseUrl}/scores/${encodeURIComponent(elementId)}`;\n\n if (debug) {\n console.log(`[Gotcha] GET /scores/${elementId}`);\n }\n\n const response = await fetchWithRetry(\n url,\n {\n method: 'GET',\n headers,\n },\n DEFAULT_RETRY_CONFIG,\n debug\n );\n\n const data = await response.json();\n\n if (!response.ok) {\n const error = data.error as GotchaError;\n if (debug) {\n console.error(`[Gotcha] Error: ${error.code} - ${error.message}`);\n }\n throw error;\n }\n\n if (debug) {\n console.log(`[Gotcha] Score:`, data);\n }\n\n return data as ScoreData;\n },\n\n /**\n * Flag a response as a bug report\n */\n async flagAsBug(responseId: string): Promise<{ ticketId: string; status: string }> {\n const url = `${baseUrl}/responses/${encodeURIComponent(responseId)}/bug`;\n\n if (debug) {\n console.log(`[Gotcha] POST /responses/${responseId}/bug`);\n }\n\n const response = await fetchWithRetry(\n url,\n {\n method: 'POST',\n headers,\n },\n DEFAULT_RETRY_CONFIG,\n debug\n );\n\n const data = await response.json();\n\n if (!response.ok) {\n const error = data.error as GotchaError;\n if (debug) {\n console.error(`[Gotcha] Error: ${error.code} - ${error.message}`);\n }\n throw error;\n }\n\n if (debug) {\n console.log(`[Gotcha] Bug flagged:`, data);\n }\n\n return data as { ticketId: string; status: string };\n },\n\n /**\n * Flush queued offline submissions\n */\n async flushQueue(): Promise<void> {\n if (flushing) return;\n flushing = true;\n try {\n const items = getQueuedItems();\n for (const item of items) {\n try {\n if (item.type === 'update' && item.payload.responseId) {\n const { responseId, ...updatePayload } = item.payload;\n await request('PATCH', `/responses/${responseId}`, updatePayload);\n } else {\n await request('POST', '/responses', item.payload);\n }\n dequeue(item.id);\n } catch {\n incrementRetries(item.id);\n }\n }\n } finally {\n flushing = false;\n }\n },\n\n /**\n * Get count of queued offline submissions\n */\n getQueueLength,\n\n /**\n * Get the base URL (for debugging)\n */\n getBaseUrl(): string {\n return baseUrl;\n },\n };\n}\n\nexport type ApiClient = ReturnType<typeof createApiClient>;\n","const UNSAFE_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function deepMerge(base: any, override: any): any {\n const result = { ...base };\n for (const key of Object.keys(override)) {\n if (UNSAFE_KEYS.has(key)) continue;\n const val = override[key];\n if (val !== undefined && val !== null && typeof val === 'object' && !Array.isArray(val)) {\n result[key] = deepMerge(base[key] ?? {}, val);\n } else if (val !== undefined) {\n result[key] = val;\n }\n }\n return result;\n}\n","// ============================================\n// THEME TOKEN SYSTEM\n// ============================================\n\nexport interface GotchaThemeColors {\n primary: string;\n primaryHover: string;\n primaryText: string;\n background: string;\n backgroundGradient: string;\n surface: string;\n surfaceHover: string;\n text: string;\n textSecondary: string;\n textDisabled: string;\n border: string;\n borderFocus: string;\n success: string;\n successSurface: string;\n error: string;\n errorSurface: string;\n errorBorder: string;\n warning: string;\n warningActive: string;\n warningSurface: string;\n warningBorder: string;\n starFilled: string;\n starEmpty: string;\n voteUp: string;\n voteUpSurface: string;\n voteUpBorder: string;\n voteDown: string;\n voteDownSurface: string;\n voteDownBorder: string;\n npsColors: string[];\n buttonBackground: string;\n buttonBackgroundHover: string;\n buttonBackgroundDisabled: string;\n buttonColor: string;\n buttonColorDisabled: string;\n buttonBorder: string;\n buttonShadow: string;\n backdropColor: string;\n closeButton: string;\n closeButtonHover: string;\n closeButtonBg: string;\n // Glass button\n glassBackground: string;\n glassBorder: string;\n glassColor: string;\n glassShadow: string;\n glassHoverShadow: string;\n // Input\n inputBackground: string;\n inputBackgroundFocus: string;\n inputBorder: string;\n inputBorderFocus: string;\n inputFocusRing: string;\n // Poll\n pollBorder: string;\n pollSelectedBorder: string;\n pollBackground: string;\n pollSelectedBackground: string;\n pollColor: string;\n pollSelectedColor: string;\n pollCheckBorder: string;\n pollCheckSelectedBorder: string;\n pollCheckSelectedBg: string;\n}\n\nexport interface GotchaThemeTypography {\n fontFamily: string;\n fontSize: {\n xs: number;\n sm: number;\n md: number;\n lg: number;\n };\n fontWeight: {\n normal: number;\n medium: number;\n semibold: number;\n bold: number;\n };\n}\n\nexport interface GotchaThemeBorders {\n radius: {\n sm: number;\n md: number;\n lg: number;\n full: string;\n };\n width: number;\n}\n\nexport interface GotchaThemeShadows {\n sm: string;\n md: string;\n lg: string;\n modal: string;\n button: string;\n}\n\nexport interface GotchaThemeAnimation {\n duration: {\n fast: string;\n normal: string;\n slow: string;\n };\n easing: {\n default: string;\n spring: string;\n };\n}\n\nexport interface GotchaThemeConfig {\n colors?: Partial<GotchaThemeColors>;\n typography?: Partial<GotchaThemeTypography>;\n borders?: Partial<GotchaThemeBorders>;\n shadows?: Partial<GotchaThemeShadows>;\n animation?: Partial<GotchaThemeAnimation>;\n}\n\nexport interface ResolvedTheme {\n colors: GotchaThemeColors;\n typography: GotchaThemeTypography;\n borders: GotchaThemeBorders;\n shadows: GotchaThemeShadows;\n animation: GotchaThemeAnimation;\n}\n\n// ── NPS score colors ─────────────────────────────────────────\nconst NPS_COLORS = [\n '#ef4444', '#f05540', '#f1663c', '#f27738', '#f38834',\n '#f59e0b', '#d4a30e', '#b3a812', '#79b841', '#45c870', '#10b981',\n];\n\n// ── Light preset ─────────────────────────────────────────────\nexport const LIGHT_TOKENS: ResolvedTheme = {\n colors: {\n primary: '#1e293b',\n primaryHover: '#334155',\n primaryText: '#ffffff',\n background: '#ffffff',\n backgroundGradient: 'linear-gradient(180deg, #ffffff 0%, #f8fafc 100%)',\n surface: '#fafbfc',\n surfaceHover: '#ffffff',\n text: '#111827',\n textSecondary: '#374151',\n textDisabled: '#94a3b8',\n border: '#e2e8f0',\n borderFocus: '#1e293b',\n success: '#059669',\n successSurface: 'rgba(5,150,105,0.08)',\n error: '#dc2626',\n errorSurface: '#fef2f2',\n errorBorder: 'rgba(220,38,38,0.1)',\n warning: '#d97706',\n warningActive: '#b45309',\n warningSurface: 'rgba(251,191,36,0.08)',\n warningBorder: 'rgba(217,119,6,0.25)',\n starFilled: '#f59e0b',\n starEmpty: '#e2e8f0',\n voteUp: '#10b981',\n voteUpSurface: 'rgba(16,185,129,0.06)',\n voteUpBorder: 'rgba(16,185,129,0.25)',\n voteDown: '#ef4444',\n voteDownSurface: 'rgba(239,68,68,0.06)',\n voteDownBorder: 'rgba(239,68,68,0.25)',\n npsColors: NPS_COLORS,\n buttonBackground: '#1e293b',\n buttonBackgroundHover: '#334155',\n buttonBackgroundDisabled: '#e2e8f0',\n buttonColor: '#ffffff',\n buttonColorDisabled: '#94a3b8',\n buttonBorder: 'none',\n buttonShadow: 'none',\n backdropColor: 'rgba(0,0,0,0.4)',\n closeButton: '#9ca3af',\n closeButtonHover: '#6b7280',\n closeButtonBg: 'rgba(0,0,0,0.04)',\n glassBackground: 'linear-gradient(160deg, rgba(255,255,255,0.7) 0%, rgba(200,210,230,0.4) 40%, rgba(180,192,220,0.5) 100%)',\n glassBorder: 'none',\n glassColor: 'rgba(0,0,0,0.75)',\n glassShadow: '0 3px 12px rgba(0,0,0,0.12), 0 0 1px rgba(0,0,0,0.2)',\n glassHoverShadow: '0 6px 20px rgba(0,0,0,0.18), 0 0 1px rgba(0,0,0,0.25)',\n inputBackground: '#fafbfc',\n inputBackgroundFocus: '#ffffff',\n inputBorder: '#e2e8f0',\n inputBorderFocus: '#1e293b',\n inputFocusRing: 'rgba(30,41,59,0.15)',\n pollBorder: '#e2e8f0',\n pollSelectedBorder: 'rgba(30,41,59,0.25)',\n pollBackground: '#fafbfc',\n pollSelectedBackground: 'rgba(30,41,59,0.05)',\n pollColor: '#374151',\n pollSelectedColor: '#1e293b',\n pollCheckBorder: '#cbd5e1',\n pollCheckSelectedBorder: '#1e293b',\n pollCheckSelectedBg: '#1e293b',\n },\n typography: {\n fontFamily: \"'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\",\n fontSize: { xs: 11, sm: 13, md: 14, lg: 16 },\n fontWeight: { normal: 400, medium: 500, semibold: 600, bold: 700 },\n },\n borders: {\n radius: { sm: 8, md: 10, lg: 14, full: '50%' },\n width: 1,\n },\n shadows: {\n sm: '0 1px 2px rgba(0,0,0,0.04)',\n md: '0 4px 12px rgba(0,0,0,0.06)',\n lg: '0 12px 32px rgba(0,0,0,0.06)',\n modal: '0 1px 2px rgba(0,0,0,0.04), 0 4px 12px rgba(0,0,0,0.06), 0 12px 32px rgba(0,0,0,0.06), 0 24px 48px rgba(0,0,0,0.04)',\n button: '0 2px 8px rgba(0,0,0,0.06)',\n },\n animation: {\n duration: { fast: '0.15s', normal: '0.25s', slow: '0.4s' },\n easing: {\n default: 'cubic-bezier(0.4, 0, 0.2, 1)',\n spring: 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n },\n },\n};\n\n// ── Dark preset ──────────────────────────────────────────────\nexport const DARK_TOKENS: ResolvedTheme = {\n colors: {\n primary: '#e2e8f0',\n primaryHover: '#cbd5e1',\n primaryText: '#1e293b',\n background: '#1a1f2e',\n backgroundGradient: 'linear-gradient(180deg, #1a1f2e 0%, #151925 100%)',\n surface: 'rgba(55,65,81,0.5)',\n surfaceHover: 'rgba(55,65,81,0.7)',\n text: '#f9fafb',\n textSecondary: '#d1d5db',\n textDisabled: '#6b7280',\n border: 'rgba(255,255,255,0.08)',\n borderFocus: 'rgba(255,255,255,0.2)',\n success: '#10b981',\n successSurface: 'rgba(16,185,129,0.1)',\n error: '#fecaca',\n errorSurface: 'rgba(127,29,29,0.3)',\n errorBorder: 'rgba(254,202,202,0.1)',\n warning: '#fbbf24',\n warningActive: '#fbbf24',\n warningSurface: 'rgba(245,158,11,0.08)',\n warningBorder: 'rgba(245,158,11,0.3)',\n starFilled: '#f59e0b',\n starEmpty: 'rgba(255,255,255,0.12)',\n voteUp: '#10b981',\n voteUpSurface: 'rgba(16,185,129,0.08)',\n voteUpBorder: 'rgba(16,185,129,0.3)',\n voteDown: '#ef4444',\n voteDownSurface: 'rgba(239,68,68,0.08)',\n voteDownBorder: 'rgba(239,68,68,0.3)',\n npsColors: NPS_COLORS,\n buttonBackground: '#e2e8f0',\n buttonBackgroundHover: '#cbd5e1',\n buttonBackgroundDisabled: '#374151',\n buttonColor: '#1e293b',\n buttonColorDisabled: '#6b7280',\n buttonBorder: 'none',\n buttonShadow: 'none',\n backdropColor: 'rgba(0,0,0,0.5)',\n closeButton: '#6b7280',\n closeButtonHover: '#9ca3af',\n closeButtonBg: 'rgba(255,255,255,0.06)',\n glassBackground: 'linear-gradient(180deg, rgba(255,255,255,0.16) 0%, rgba(255,255,255,0.04) 60%, rgba(0,0,0,0.05) 100%)',\n glassBorder: '1px solid rgba(255,255,255,0.15)',\n glassColor: 'rgba(255,255,255,0.88)',\n glassShadow: '0 4px 14px rgba(0,0,0,0.45), 0 1px 3px rgba(0,0,0,0.35)',\n glassHoverShadow: '0 8px 24px rgba(0,0,0,0.55), 0 1px 3px rgba(0,0,0,0.4)',\n inputBackground: 'rgba(55,65,81,0.5)',\n inputBackgroundFocus: 'rgba(55,65,81,0.7)',\n inputBorder: 'rgba(255,255,255,0.08)',\n inputBorderFocus: 'rgba(255,255,255,0.2)',\n inputFocusRing: 'rgba(255,255,255,0.06)',\n pollBorder: 'rgba(255,255,255,0.08)',\n pollSelectedBorder: 'rgba(226,232,240,0.25)',\n pollBackground: 'rgba(55,65,81,0.5)',\n pollSelectedBackground: 'rgba(226,232,240,0.08)',\n pollColor: '#d1d5db',\n pollSelectedColor: '#e2e8f0',\n pollCheckBorder: 'rgba(255,255,255,0.2)',\n pollCheckSelectedBorder: '#e2e8f0',\n pollCheckSelectedBg: '#e2e8f0',\n },\n typography: {\n fontFamily: \"'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\",\n fontSize: { xs: 11, sm: 13, md: 14, lg: 16 },\n fontWeight: { normal: 400, medium: 500, semibold: 600, bold: 700 },\n },\n borders: {\n radius: { sm: 8, md: 10, lg: 14, full: '50%' },\n width: 1,\n },\n shadows: {\n sm: '0 1px 2px rgba(0,0,0,0.2)',\n md: '0 4px 12px rgba(0,0,0,0.3)',\n lg: '0 12px 32px rgba(0,0,0,0.2)',\n modal: '0 1px 2px rgba(0,0,0,0.2), 0 4px 12px rgba(0,0,0,0.3), 0 12px 32px rgba(0,0,0,0.2), 0 24px 48px rgba(0,0,0,0.15)',\n button: '0 2px 8px rgba(0,0,0,0.15)',\n },\n animation: {\n duration: { fast: '0.15s', normal: '0.25s', slow: '0.4s' },\n easing: {\n default: 'cubic-bezier(0.4, 0, 0.2, 1)',\n spring: 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n },\n },\n};\n\n// ── Helper ───────────────────────────────────────────────────\n\nimport { deepMerge } from '../utils/deepMerge';\n\n/** Create a custom theme by merging partial overrides onto a preset */\nexport function createTheme(\n base: 'light' | 'dark',\n overrides: GotchaThemeConfig,\n): GotchaThemeConfig {\n const preset = base === 'dark' ? DARK_TOKENS : LIGHT_TOKENS;\n return deepMerge(preset, overrides) as GotchaThemeConfig;\n}\n","import { LIGHT_TOKENS, DARK_TOKENS, GotchaThemeConfig, ResolvedTheme } from './tokens';\nimport { deepMerge } from '../utils/deepMerge';\n\n/**\n * Resolve a complete theme from the base preset + optional provider & instance overrides.\n * Returns a fully-resolved object with no undefined values.\n */\nexport function resolveTheme(\n theme: 'light' | 'dark' | 'auto' | 'custom',\n systemTheme: 'light' | 'dark',\n providerConfig?: GotchaThemeConfig,\n): ResolvedTheme {\n const effectiveTheme = theme === 'auto' || theme === 'custom' ? systemTheme : theme;\n let resolved: ResolvedTheme = effectiveTheme === 'dark'\n ? deepMerge({}, DARK_TOKENS) as ResolvedTheme\n : deepMerge({}, LIGHT_TOKENS) as ResolvedTheme;\n\n if (providerConfig) {\n resolved = deepMerge(resolved, providerConfig) as ResolvedTheme;\n }\n\n return resolved;\n}\n","import { ResolvedTheme } from './tokens';\n\nconst STYLE_ID = 'gotcha-styles';\nconst FONT_ID = 'gotcha-dm-sans';\nconst FONT_FACE_ID = 'gotcha-carter-one';\n\n/**\n * The Carter One @font-face CSS with base64-embedded woff2.\n * Uses font-display: block to prevent any fallback font from showing.\n * Since the font is base64-encoded (instant decode), the block period is negligible.\n */\nconst CARTER_ONE_FONT_FACE = `\n@font-face {\n font-family: 'Carter One';\n font-style: normal;\n font-weight: 400;\n font-display: block;\n src: url(data:font/woff2;base64,d09GMgABAAAAAAK4AA4AAAAABOwAAAJlAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhQbXhwaBmAANBEICoFUgW8BNgIkAwgLBgAEIAWCUgcgGwoEUVQMHgC+OLCNaQVfBAoIrXGAIhjLIIM0CxavPfqMrzmLh6/9fufu20XEQyQzNNPOUEmimUZJpKLdIu3RKOU3O1hXc5D3YTdAbu+mRHU5AAIwC231R25qGGbpnwecyr34QQKM3gHMKMzOM4ogDSwQSreJE9bjISamQdCMwAAgeI0+S7qoy5j8TCDK8Ff4Fwm5+ecJhCwh9EgmsJiTo6S+/WkCPCU8DpCqr+hWKM/FBMRyfLPqV2LSlzBEIhqLxeGhIADg+rwoHxx58Oipm4301FUpgID4K8fAChoJFSYwAhNYKyDLAjudDimd9wA18hGDDvNkBE6AByBJiLpXVM2jgyht94hWK9yPQD+5lb948fAQKnfCK1PjBQWRayfW+hltCzAs9B8eX54Xd5g7vrzpiTswCeXB/VG5PNObmFr711KPrLKC6/mxys5avigCA+uFj8HGq+ErmaRDt/31k1XtfRtcI0pNluOCFEOOmVEOTg5eYn77Hq9Y0SJxu+bSBW5skqWS0VLXOvNJxgyRhVECycL7u2cb2pmOGdolPK+ORsLma1IHQCAY6I5NjWKsNzQVPeDnvzc7Pth+aTYMKHpqoEcCwSM4A6sVYPt/AIoeTckToLx4hELyieAj16Z4TKDbKYzIJOAW2JNhIptMhjyRlbXedjaymDv75i5jb1xkyVYiV4okyfIhmnG0EGNDIyMkVgmkUIJcmbJkQmLEi5Ehjz7iJF06pJeel1ETYiCBP/+OePouYuTKlyAX4iVTAl8JkhRIFyN3UpqAdTHa1nfVAy3Kk3LL2Ejf0Gch0McAqJNIAwAA) format('woff2');\n unicode-range: U+0047;\n}`.trim();\n\n/**\n * Inject Carter One @font-face at module load time (top-level side effect).\n * This ensures the font is registered with the browser BEFORE any React\n * component renders, eliminating FOUT completely.\n */\nfunction injectFontFace(): void {\n if (typeof document === 'undefined') return;\n if (document.getElementById(FONT_FACE_ID)) return;\n\n const style = document.createElement('style');\n style.id = FONT_FACE_ID;\n style.textContent = CARTER_ONE_FONT_FACE;\n document.head.appendChild(style);\n}\n\n// Execute immediately when this module is imported\ninjectFontFace();\n\n/** Strip characters that could break out of a CSS value context */\nfunction sanitizeCSS(value: string): string {\n return value.replace(/[{}<>;@\\\\]/g, '');\n}\n\n/**\n * Generate the full CSS string for all Gotcha animations, fonts, and base styles.\n */\nexport function generateStyleTag(theme: ResolvedTheme): string {\n const easing = {\n default: sanitizeCSS(theme.animation.easing.default),\n spring: sanitizeCSS(theme.animation.easing.spring),\n };\n const duration = {\n normal: sanitizeCSS(theme.animation.duration.normal),\n };\n const fontFamily = sanitizeCSS(theme.typography.fontFamily);\n const textDisabled = sanitizeCSS(theme.colors.textDisabled);\n const borderColor = sanitizeCSS(theme.colors.border);\n\n return `\n/* ── Gotcha Keyframe Animations ────────────────────────────── */\n\n@keyframes gotcha-modal-in {\n from { opacity: 0; transform: scale(0.92) translateY(-6px); }\n to { opacity: 1; transform: scale(1) translateY(0); }\n}\n\n@keyframes gotcha-modal-in-above {\n from { opacity: 0; transform: scale(0.92) translateY(6px); }\n to { opacity: 1; transform: scale(1) translateY(0); }\n}\n\n@keyframes gotcha-modal-in-center {\n from { opacity: 0; transform: translate(-50%, -50%) scale(0.92); }\n to { opacity: 1; transform: translate(-50%, -50%) scale(1); }\n}\n\n@keyframes gotcha-success-pop {\n 0% { transform: scale(0); opacity: 0; }\n 50% { transform: scale(1.15); }\n 100% { transform: scale(1); opacity: 1; }\n}\n\n@keyframes gotcha-success-text {\n from { opacity: 0; transform: translateY(6px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes gotcha-check-draw {\n from { stroke-dashoffset: 24; }\n to { stroke-dashoffset: 0; }\n}\n\n@keyframes gotcha-glow-pulse {\n 0%, 100% { box-shadow: 0 0 0 0 rgba(16,185,129,0.3); }\n 50% { box-shadow: 0 0 0 8px rgba(16,185,129,0); }\n}\n\n@keyframes gotcha-star-pulse {\n 0% { transform: scale(1); }\n 40% { transform: scale(1.3); }\n 100% { transform: scale(1); }\n}\n\n@keyframes gotcha-shimmer {\n 0% { background-position: -200% 0; }\n 100% { background-position: 200% 0; }\n}\n\n@keyframes gotcha-fade-up {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes gotcha-overlay-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes gotcha-expand-in {\n from { opacity: 0; max-height: 0; margin-top: 0; }\n to { opacity: 1; max-height: 200px; margin-top: 12px; }\n}\n\n@keyframes gotcha-bubble-pop {\n 0% { transform: scale(0); opacity: 0; filter: blur(4px); }\n 40% { opacity: 1; filter: blur(0px); }\n 65% { transform: scale(1.08); }\n 82% { transform: scale(0.97); }\n 100% { transform: scale(1); opacity: 1; filter: blur(0px); }\n}\n\n@keyframes gotcha-letter-in {\n 0% { opacity: 0; transform: scale(0.6) translateY(2px); filter: blur(3px); }\n 100% { opacity: 1; transform: scale(1) translateY(0); filter: blur(0px); }\n}\n\n@keyframes gotcha-arrive-glow {\n 0%, 100% { box-shadow: 0 3px 12px rgba(0,0,0,0.12), 0 0 1px rgba(0,0,0,0.2); }\n 50% { box-shadow: 0 4px 16px rgba(0,0,0,0.18), 0 0 1px rgba(0,0,0,0.25); }\n}\n\n@keyframes gotcha-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n@keyframes gotcha-dash {\n 0% { stroke-dasharray: 1, 62; stroke-dashoffset: 0; }\n 50% { stroke-dasharray: 40, 62; stroke-dashoffset: -12; }\n 100% { stroke-dasharray: 1, 62; stroke-dashoffset: -62; }\n}\n\n/* ── Base Styles ───────────────────────────────────────────── */\n\n[data-gotcha] {\n font-family: ${fontFamily};\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n[data-gotcha] *, [data-gotcha] *::before, [data-gotcha] *::after {\n box-sizing: border-box;\n}\n\n[data-gotcha] button {\n outline: none;\n}\n\n[data-gotcha] button:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px ${borderColor};\n}\n\n.gotcha-root textarea::placeholder {\n color: ${textDisabled};\n}\n\n/* ── Animation Utilities ───────────────────────────────────── */\n\n.gotcha-fade-up {\n animation: gotcha-fade-up ${duration.normal} ${easing.default} both;\n}\n\n.gotcha-modal-enter {\n animation: gotcha-modal-in 0.3s ${easing.spring} both;\n}\n\n.gotcha-modal-enter-above {\n animation: gotcha-modal-in-above 0.3s ${easing.spring} both;\n}\n\n.gotcha-modal-enter-center {\n animation: gotcha-modal-in-center 0.3s ${easing.spring} both;\n}\n\n.gotcha-overlay-enter {\n animation: gotcha-overlay-in 0.2s ${easing.default} both;\n}\n\n/* ── Reduced Motion ────────────────────────────────────────── */\n\n@media (prefers-reduced-motion: reduce) {\n [data-gotcha] *, [data-gotcha] *::before, [data-gotcha] *::after {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n }\n}\n`.trim();\n}\n\n/**\n * Inject the style tag into the document head (idempotent).\n */\nexport function injectStyles(theme: ResolvedTheme): void {\n if (typeof document === 'undefined') return;\n\n // Inject DM Sans from Google Fonts with preconnect\n if (!document.getElementById(FONT_ID)) {\n // Preconnect to Google Fonts\n const preconnect = document.createElement('link');\n preconnect.rel = 'preconnect';\n preconnect.href = 'https://fonts.googleapis.com';\n document.head.appendChild(preconnect);\n\n const preconnectStatic = document.createElement('link');\n preconnectStatic.rel = 'preconnect';\n preconnectStatic.href = 'https://fonts.gstatic.com';\n preconnectStatic.crossOrigin = 'anonymous';\n document.head.appendChild(preconnectStatic);\n\n // Load DM Sans from Google Fonts (Carter One is base64-embedded above)\n const link = document.createElement('link');\n link.id = FONT_ID;\n link.rel = 'stylesheet';\n link.href = 'https://fonts.googleapis.com/css2?family=Carter+One&family=DM+Sans:wght@400;500;600;700&display=swap';\n document.head.appendChild(link);\n }\n\n // Inject or update style tag\n let styleEl = document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n if (!styleEl) {\n styleEl = document.createElement('style');\n styleEl.id = STYLE_ID;\n document.head.appendChild(styleEl);\n }\n styleEl.textContent = generateStyleTag(theme);\n}\n","import React, { createContext, useContext, useMemo, useState, useCallback, useEffect } from 'react';\nimport { createApiClient, ApiClient } from '../api/client';\nimport { GotchaUser } from '../types';\nimport { GotchaThemeConfig } from '../theme/tokens';\nimport { resolveTheme } from '../theme/resolveTheme';\nimport { injectStyles } from '../theme/styles';\nimport { startErrorCapture, stopErrorCapture } from '../utils/errorBuffer';\n\nexport interface GotchaProviderProps {\n /** Your Gotcha API key */\n apiKey: string;\n /** React children */\n children: React.ReactNode;\n /** Override the API base URL (for testing/staging) */\n baseUrl?: string;\n /** Enable debug logging */\n debug?: boolean;\n /** Disable all Gotcha buttons globally */\n disabled?: boolean;\n /** Default user metadata applied to all submissions */\n defaultUser?: GotchaUser;\n /** Theme configuration overrides applied to all instances */\n themeConfig?: GotchaThemeConfig;\n}\n\nexport interface GotchaContextValue {\n client: ApiClient;\n disabled: boolean;\n defaultUser: GotchaUser;\n debug: boolean;\n // Modal management - only one open at a time\n activeModalId: string | null;\n openModal: (elementId: string) => void;\n closeModal: () => void;\n // Theme\n themeConfig?: GotchaThemeConfig;\n}\n\nconst GotchaContext = createContext<GotchaContextValue | null>(null);\n\nconst EMPTY_USER: GotchaUser = {};\n\nexport function GotchaProvider({\n apiKey,\n children,\n baseUrl,\n debug = false,\n disabled = false,\n defaultUser,\n themeConfig,\n}: GotchaProviderProps) {\n const [activeModalId, setActiveModalId] = useState<string | null>(null);\n\n if (baseUrl && !baseUrl.startsWith('https://') && !baseUrl.startsWith('/') && !baseUrl.includes('localhost')) {\n console.warn('[Gotcha] baseUrl should use HTTPS in production:', baseUrl);\n }\n\n const client = useMemo(\n () => createApiClient({ apiKey, baseUrl, debug }),\n [apiKey, baseUrl, debug]\n );\n\n // Stabilize defaultUser reference\n const stableDefaultUser = useMemo(\n () => defaultUser ?? EMPTY_USER,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [JSON.stringify(defaultUser)]\n );\n\n // Inject styles on mount. Carter One @font-face is injected at module-load time\n // (styles.ts:37) so it's already available before this runs.\n useEffect(() => {\n const resolved = resolveTheme('light', 'light', themeConfig);\n injectStyles(resolved);\n }, [themeConfig]);\n\n // Capture JS errors for context enrichment\n useEffect(() => {\n startErrorCapture();\n return () => stopErrorCapture();\n }, []);\n\n // Flush offline queue on reconnect and on mount\n useEffect(() => {\n client.flushQueue();\n const handleOnline = () => client.flushQueue();\n window.addEventListener('online', handleOnline);\n return () => window.removeEventListener('online', handleOnline);\n }, [client]);\n\n const openModal = useCallback((elementId: string) => {\n setActiveModalId(elementId);\n }, []);\n\n const closeModal = useCallback(() => {\n setActiveModalId(null);\n }, []);\n\n const value: GotchaContextValue = useMemo(\n () => ({\n client,\n disabled,\n defaultUser: stableDefaultUser,\n debug,\n activeModalId,\n openModal,\n closeModal,\n themeConfig,\n }),\n [client, disabled, stableDefaultUser, debug, activeModalId, openModal, closeModal, themeConfig]\n );\n\n return (\n <GotchaContext.Provider value={value}>{children}</GotchaContext.Provider>\n );\n}\n\nexport function useGotchaContext(): GotchaContextValue {\n const context = useContext(GotchaContext);\n if (!context) {\n throw new Error('useGotchaContext must be used within a GotchaProvider');\n }\n return context;\n}\n","import { useState, useCallback, useEffect } from 'react';\nimport { useGotchaContext } from '../components/GotchaProvider';\nimport { ResponseMode, GotchaUser, GotchaResponse, VoteType, ExistingResponse } from '../types';\n\ninterface UseSubmitOptions {\n elementId: string;\n mode: ResponseMode;\n pollOptions?: string[];\n user?: GotchaUser;\n onePerUser?: boolean;\n /** When onePerUser is true, allow a new submission after this many days */\n cooldownDays?: number;\n onSuccess?: (response: GotchaResponse) => void;\n onError?: (error: Error) => void;\n}\n\ninterface SubmitData {\n content?: string;\n title?: string;\n rating?: number;\n vote?: VoteType;\n pollSelected?: string[];\n isBug?: boolean;\n screenshot?: string;\n}\n\nfunction isResponseExpired(createdAt: string, cooldownDays: number): boolean {\n const createdTime = new Date(createdAt).getTime();\n if (isNaN(createdTime)) return true;\n const ageMs = Date.now() - createdTime;\n const cooldownMs = cooldownDays * 24 * 60 * 60 * 1000;\n return ageMs >= cooldownMs;\n}\n\nexport function useSubmit(options: UseSubmitOptions) {\n const { client, defaultUser } = useGotchaContext();\n const [isLoading, setIsLoading] = useState(false);\n const [isCheckingExisting, setIsCheckingExisting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [existingResponse, setExistingResponse] = useState<ExistingResponse | null>(null);\n\n // Check for existing response when user ID is provided and onePerUser is enabled\n useEffect(() => {\n if (process.env.NODE_ENV !== 'production' && options.cooldownDays && !options.onePerUser) {\n console.warn('[Gotcha] cooldownDays has no effect without onePerUser=true');\n }\n\n const userId = options.user?.id || defaultUser?.id;\n if (!userId || !options.onePerUser) {\n setExistingResponse(null);\n return;\n }\n\n let cancelled = false;\n\n const checkExisting = async () => {\n setIsCheckingExisting(true);\n try {\n const existing = await client.checkExistingResponse(options.elementId, userId);\n if (!cancelled) {\n if (existing && options.cooldownDays && options.cooldownDays > 0 &&\n isResponseExpired(existing.createdAt, options.cooldownDays)) {\n setExistingResponse(null);\n } else {\n setExistingResponse(existing);\n }\n }\n } catch {\n // Ignore errors - just means no existing response found\n if (!cancelled) {\n setExistingResponse(null);\n }\n } finally {\n if (!cancelled) {\n setIsCheckingExisting(false);\n }\n }\n };\n\n checkExisting();\n\n return () => {\n cancelled = true;\n };\n }, [client, options.elementId, options.user?.id, defaultUser?.id, options.onePerUser, options.cooldownDays]);\n\n const submit = useCallback(\n async (data: SubmitData) => {\n setIsLoading(true);\n setError(null);\n\n try {\n const userId = options.user?.id || defaultUser?.id;\n let response: GotchaResponse;\n\n // If onePerUser is enabled and we have an existing response, update instead of create\n if (options.onePerUser && existingResponse && userId) {\n response = await client.updateResponse(\n existingResponse.id,\n {\n content: data.content,\n title: data.title,\n rating: data.rating,\n vote: data.vote,\n pollSelected: data.pollSelected,\n },\n userId\n );\n } else {\n response = await client.submitResponse({\n elementId: options.elementId,\n mode: options.mode,\n content: data.content,\n title: data.title,\n rating: data.rating,\n vote: data.vote,\n pollOptions: options.pollOptions,\n pollSelected: data.pollSelected,\n isBug: data.isBug,\n screenshot: data.screenshot,\n user: { ...defaultUser, ...options.user },\n });\n }\n\n // Update existingResponse so isEditing flips to true after first submit (only for onePerUser)\n if (options.onePerUser) {\n setExistingResponse({\n id: response.id,\n mode: options.mode,\n content: data.content ?? null,\n title: data.title ?? null,\n rating: data.rating ?? null,\n vote: data.vote ?? null,\n pollSelected: data.pollSelected ?? null,\n createdAt: response.createdAt,\n });\n }\n\n options.onSuccess?.(response);\n return response;\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Something went wrong';\n setError(errorMessage);\n options.onError?.(err instanceof Error ? err : new Error(errorMessage));\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client, defaultUser, options, existingResponse]\n );\n\n return {\n submit,\n isLoading,\n isCheckingExisting,\n error,\n existingResponse,\n isEditing: !!existingResponse,\n clearError: () => setError(null),\n };\n}\n","import { useState, useCallback, useEffect, useMemo } from 'react';\nimport { STORAGE_KEYS } from '../constants';\nimport { getAnonymousId } from '../utils/anonymous';\nimport { safeGetItem, safeSetItem } from '../utils/localStorage';\n\ninterface UseHideAfterSubmitOptions {\n elementId: string;\n userId?: string;\n hideAfterSubmitDays?: number;\n}\n\nfunction getStorageKey(elementId: string, userId: string): string {\n return `${STORAGE_KEYS.HIDDEN_UNTIL}_${elementId}_${userId}`;\n}\n\nfunction checkIsHidden(elementId: string, resolvedUserId: string, hideAfterSubmitDays?: number): boolean {\n if (!hideAfterSubmitDays || hideAfterSubmitDays <= 0) return false;\n const key = getStorageKey(elementId, resolvedUserId);\n const hiddenUntilStr = safeGetItem(key);\n if (!hiddenUntilStr) return false;\n return new Date(hiddenUntilStr).getTime() > Date.now();\n}\n\nexport function useHideAfterSubmit(options: UseHideAfterSubmitOptions) {\n const { elementId, userId, hideAfterSubmitDays } = options;\n const resolvedUserId = useMemo(() => userId || getAnonymousId(), [userId]);\n\n const [isHidden, setIsHidden] = useState(() =>\n checkIsHidden(elementId, resolvedUserId, hideAfterSubmitDays)\n );\n\n // Re-evaluate when props change dynamically\n useEffect(() => {\n setIsHidden(checkIsHidden(elementId, resolvedUserId, hideAfterSubmitDays));\n }, [elementId, resolvedUserId, hideAfterSubmitDays]);\n\n const markHidden = useCallback(() => {\n if (!hideAfterSubmitDays || hideAfterSubmitDays <= 0) return;\n\n const key = getStorageKey(elementId, resolvedUserId);\n const hiddenUntil = new Date(\n Date.now() + hideAfterSubmitDays * 24 * 60 * 60 * 1000\n );\n safeSetItem(key, hiddenUntil.toISOString());\n setIsHidden(true);\n }, [elementId, resolvedUserId, hideAfterSubmitDays]);\n\n return { isHidden, markHidden };\n}\n","import { useState, useEffect } from 'react';\nimport { STORAGE_KEYS } from '../constants';\nimport { safeGetItem, safeSetItem } from '../utils/localStorage';\n\ninterface UseTriggerConditionsOptions {\n elementId: string;\n showAfterSeconds?: number;\n showAfterScrollPercent?: number;\n showAfterVisits?: number;\n}\n\nfunction getVisitKey(elementId: string): string {\n return `${STORAGE_KEYS.VISIT_COUNT}_${elementId}`;\n}\n\nexport function useTriggerConditions(options: UseTriggerConditionsOptions) {\n const { elementId, showAfterSeconds, showAfterScrollPercent, showAfterVisits } = options;\n\n const hasConditions = showAfterSeconds != null || showAfterScrollPercent != null || showAfterVisits != null;\n\n const [timeMet, setTimeMet] = useState(!showAfterSeconds);\n const [scrollMet, setScrollMet] = useState(!showAfterScrollPercent);\n const [visitsMet] = useState(() => {\n if (!showAfterVisits) return true;\n const key = getVisitKey(elementId);\n const current = parseInt(safeGetItem(key) || '0', 10);\n const next = current + 1;\n safeSetItem(key, String(next));\n return next >= showAfterVisits;\n });\n\n // Time delay\n useEffect(() => {\n if (!showAfterSeconds || showAfterSeconds <= 0) return;\n\n const start = Date.now();\n const targetMs = showAfterSeconds * 1000;\n\n const check = () => {\n if (Date.now() - start >= targetMs) {\n setTimeMet(true);\n } else {\n timer = setTimeout(check, Math.min(1000, targetMs - (Date.now() - start)));\n }\n };\n\n let timer = setTimeout(check, Math.min(1000, targetMs));\n return () => clearTimeout(timer);\n }, [showAfterSeconds]);\n\n // Scroll depth\n useEffect(() => {\n if (!showAfterScrollPercent || showAfterScrollPercent <= 0) return;\n\n const checkScroll = () => {\n const scrollHeight = document.documentElement.scrollHeight;\n const viewportHeight = window.innerHeight;\n\n // If page can't scroll, condition is auto-met\n if (scrollHeight <= viewportHeight) {\n setScrollMet(true);\n return;\n }\n\n const scrolled = (window.scrollY + viewportHeight) / scrollHeight * 100;\n if (scrolled >= showAfterScrollPercent) {\n setScrollMet(true);\n }\n };\n\n checkScroll();\n if (!scrollMet) {\n window.addEventListener('scroll', checkScroll, { passive: true });\n return () => window.removeEventListener('scroll', checkScroll);\n }\n }, [showAfterScrollPercent, scrollMet]);\n\n return {\n conditionsMet: !hasConditions || (timeMet && scrollMet && visitsMet),\n };\n}\n","/**\n * Simple class name utility\n * Combines class names, filtering out falsy values\n */\nexport function cn(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(' ');\n}\n","/**\n * Detect if the device supports touch\n */\nexport const isTouchDevice = (): boolean => {\n if (typeof window === 'undefined') return false;\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n};\n\n/**\n * Get the appropriate size based on device type\n */\nexport const getResponsiveSize = (\n size: 'sm' | 'md' | 'lg',\n isTouch: boolean\n): number => {\n const sizes = {\n sm: { desktop: 24, mobile: 28 },\n md: { desktop: 32, mobile: 34 },\n lg: { desktop: 40, mobile: 40 },\n };\n\n return isTouch ? sizes[size].mobile : sizes[size].desktop;\n};\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { Size, Theme, GotchaStyles } from '../types';\nimport { cn } from '../utils/cn';\nimport { isTouchDevice, getResponsiveSize } from '../utils/device';\nimport { resolveTheme } from '../theme/resolveTheme';\nimport { useGotchaContext } from './GotchaProvider';\n\nexport interface GotchaButtonProps {\n size: Size;\n theme: Theme;\n customStyles?: GotchaStyles;\n showOnHover: boolean;\n touchBehavior: 'always-visible' | 'tap-to-reveal';\n onClick: () => void;\n isOpen: boolean;\n isParentHovered?: boolean;\n /** Enable entrance animations (default: true) */\n animated?: boolean;\n /** Number of queued offline submissions */\n queuedCount?: number;\n}\n\nfunction getInitialSystemTheme(): 'light' | 'dark' {\n if (typeof window === 'undefined') return 'light';\n return window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light';\n}\n\nexport function GotchaButton({\n size,\n theme,\n customStyles,\n showOnHover,\n touchBehavior,\n onClick,\n isOpen,\n isParentHovered = false,\n animated = true,\n queuedCount = 0,\n}: GotchaButtonProps) {\n const [isTouch, setIsTouch] = useState(false);\n const [tapRevealed, setTapRevealed] = useState(false);\n const [systemTheme, setSystemTheme] = useState<'light' | 'dark'>(getInitialSystemTheme);\n const [isHovered, setIsHovered] = useState(false);\n const [isPressed, setIsPressed] = useState(false);\n const [hasPopped, setHasPopped] = useState(false);\n\n const { themeConfig } = useGotchaContext();\n\n useEffect(() => {\n setIsTouch(isTouchDevice());\n\n if (typeof window === 'undefined') return;\n const darkQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) =>\n setSystemTheme(e.matches ? 'dark' : 'light');\n darkQuery.addEventListener('change', handler);\n return () => darkQuery.removeEventListener('change', handler);\n }, []);\n\n // Determine visibility\n const shouldShow = (() => {\n if (isOpen) return true;\n if (!isTouch && showOnHover) return isParentHovered;\n if (isTouch && touchBehavior === 'tap-to-reveal') return tapRevealed;\n return true;\n })();\n\n // Mark bubble pop as done after first appearance\n useEffect(() => {\n if (shouldShow && !hasPopped) {\n const timer = setTimeout(() => setHasPopped(true), 600);\n return () => clearTimeout(timer);\n }\n }, [shouldShow, hasPopped]);\n\n const handleClick = () => {\n if (isTouch && touchBehavior === 'tap-to-reveal' && !tapRevealed) {\n setTapRevealed(true);\n return;\n }\n onClick();\n };\n\n const buttonSize = getResponsiveSize(size, isTouch);\n const t = useMemo(\n () => resolveTheme(theme, systemTheme, themeConfig),\n [theme, systemTheme, themeConfig]\n );\n\n // Compute transform based on state\n const getTransform = () => {\n if (!shouldShow) return 'scale(0.6)';\n if (isPressed) return 'scale(0.95)';\n if (isHovered) return 'scale(1.08)';\n return 'scale(1)';\n };\n\n const baseStyles: React.CSSProperties = {\n width: buttonSize,\n height: buttonSize,\n borderRadius: '50%',\n border: t.colors.glassBorder,\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: t.colors.glassBackground,\n backdropFilter: 'blur(20px) saturate(180%)',\n WebkitBackdropFilter: 'blur(20px) saturate(180%)',\n color: t.colors.glassColor,\n boxShadow: isHovered ? t.colors.glassHoverShadow : t.colors.glassShadow,\n transition: hasPopped ? `all 0.3s ${t.animation.easing.spring}` : 'none',\n opacity: shouldShow ? 1 : 0,\n transform: getTransform(),\n filter: isPressed ? 'brightness(0.95)' : 'brightness(1)',\n pointerEvents: shouldShow ? 'auto' : 'none',\n ...(animated && shouldShow && !hasPopped ? {\n animation: 'gotcha-bubble-pop 500ms cubic-bezier(0.175, 0.885, 0.32, 1.275) both, gotcha-arrive-glow 1200ms ease-in-out 600ms both',\n } : {}),\n ...customStyles?.button,\n };\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => { setIsHovered(false); setIsPressed(false); }}\n onMouseDown={() => setIsPressed(true)}\n onMouseUp={() => setIsPressed(false)}\n onTouchStart={() => setIsPressed(true)}\n onTouchEnd={() => setIsPressed(false)}\n style={baseStyles}\n className={cn('gotcha-button', isOpen && 'gotcha-button--open')}\n aria-label=\"Give feedback on this feature\"\n aria-expanded={isOpen}\n aria-haspopup=\"dialog\"\n >\n <GotchaIcon size={buttonSize * 0.65} animated={animated} />\n {queuedCount > 0 && (\n <div\n aria-label={`${queuedCount} queued`}\n style={{\n position: 'absolute',\n top: -2,\n right: -2,\n width: 8,\n height: 8,\n borderRadius: '50%',\n backgroundColor: t.colors.warning,\n border: '1.5px solid rgba(255,255,255,0.9)',\n }}\n />\n )}\n </button>\n );\n}\n\nfunction GotchaIcon({ size, animated = true }: { size: number; animated?: boolean }) {\n const [mounted, setMounted] = useState(false);\n useEffect(() => { setMounted(true); }, []);\n\n return (\n <span\n aria-hidden=\"true\"\n style={{\n fontFamily: \"'Carter One', cursive\",\n fontSize: size,\n lineHeight: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginTop: size * 0.05,\n marginRight: size * 0.05,\n userSelect: 'none',\n opacity: animated ? 0 : (mounted ? 1 : 0),\n ...(animated && mounted ? {\n animation: 'gotcha-letter-in 350ms cubic-bezier(0.25, 0.46, 0.45, 0.94) 200ms both',\n } : {}),\n }}\n >\n G\n </span>\n );\n}\n","import React from 'react';\n\ninterface SpinnerProps {\n size?: number;\n color?: string;\n}\n\nexport function Spinner({ size = 16, color = 'currentColor' }: SpinnerProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{\n animation: 'gotcha-spin 0.8s linear infinite',\n }}\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke={color}\n strokeWidth=\"2\"\n strokeOpacity=\"0.12\"\n />\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke={color}\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n style={{\n animation: 'gotcha-dash 1.2s ease-in-out infinite',\n }}\n />\n </svg>\n );\n}\n","import React from 'react';\nimport { ResolvedTheme } from '../theme/tokens';\n\ninterface ScreenshotPreviewProps {\n src: string;\n onRemove: () => void;\n resolvedTheme: ResolvedTheme;\n}\n\nexport function ScreenshotPreview({ src, onRemove, resolvedTheme: t }: ScreenshotPreviewProps) {\n return (\n <div style={{\n position: 'relative',\n marginTop: 10,\n borderRadius: t.borders.radius.md,\n overflow: 'hidden',\n border: `1px solid ${t.colors.border}`,\n }}>\n <img\n src={src}\n alt=\"Screenshot\"\n style={{\n display: 'block',\n width: '100%',\n maxHeight: 120,\n objectFit: 'cover',\n }}\n />\n <button\n type=\"button\"\n onClick={onRemove}\n aria-label=\"Remove screenshot\"\n style={{\n position: 'absolute',\n top: 4,\n right: 4,\n width: 22,\n height: 22,\n borderRadius: '50%',\n border: 'none',\n backgroundColor: 'rgba(0,0,0,0.6)',\n color: '#fff',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 12,\n lineHeight: 1,\n }}\n >\n <svg width={10} height={10} viewBox=\"0 0 14 14\" fill=\"none\">\n <path d=\"M1 1L13 13M1 13L13 1\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n );\n}\n","import React, { useState, useEffect, useRef } from 'react';\nimport { GotchaStyles } from '../../types';\nimport { ResolvedTheme } from '../../theme/tokens';\nimport { isTouchDevice } from '../../utils/device';\nimport { Spinner } from '../Spinner';\nimport { ScreenshotPreview } from '../ScreenshotPreview';\n\ninterface FeedbackModeProps {\n resolvedTheme: ResolvedTheme;\n placeholder?: string;\n submitText: string;\n isLoading: boolean;\n onSubmit: (data: { content?: string; rating?: number; isBug?: boolean; screenshot?: string }) => void;\n customStyles?: GotchaStyles;\n initialValues?: {\n content?: string | null;\n rating?: number | null;\n };\n isEditing?: boolean;\n showText?: boolean;\n showRating?: boolean;\n enableBugFlag?: boolean;\n bugFlagLabel?: string;\n enableScreenshot?: boolean;\n}\n\nexport function FeedbackMode({\n resolvedTheme: t,\n placeholder,\n submitText,\n isLoading,\n onSubmit,\n customStyles,\n initialValues,\n isEditing = false,\n showText = true,\n showRating = true,\n enableBugFlag = false,\n bugFlagLabel,\n enableScreenshot = false,\n}: FeedbackModeProps) {\n const [content, setContent] = useState(initialValues?.content || '');\n const [rating, setRating] = useState<number | null>(initialValues?.rating ?? null);\n const [isBug, setIsBug] = useState(false);\n const [isTouch, setIsTouch] = useState(false);\n const [screenshot, setScreenshot] = useState<string | null>(null);\n const [capturingScreenshot, setCapturingScreenshot] = useState(false);\n const [screenshotError, setScreenshotError] = useState(false);\n\n useEffect(() => {\n setIsTouch(isTouchDevice());\n }, []);\n\n useEffect(() => {\n if (initialValues?.content !== undefined) {\n setContent(initialValues.content || '');\n }\n if (initialValues?.rating !== undefined) {\n setRating(initialValues.rating ?? null);\n }\n }, [initialValues?.content, initialValues?.rating]);\n\n const canSubmit = (() => {\n if (showText && showRating) return content.trim().length > 0 || rating !== null;\n if (showText) return content.trim().length > 0;\n if (showRating) return rating !== null;\n return false;\n })();\n\n const handleScreenshotCapture = async () => {\n setCapturingScreenshot(true);\n setScreenshotError(false);\n try {\n const { captureScreenshot } = await import('../../utils/screenshot');\n const result = await captureScreenshot();\n if (result) {\n setScreenshot(result);\n } else {\n setScreenshotError(true);\n setTimeout(() => setScreenshotError(false), 3000);\n }\n } catch {\n setScreenshotError(true);\n setTimeout(() => setScreenshotError(false), 3000);\n } finally {\n setCapturingScreenshot(false);\n }\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (!canSubmit) return;\n onSubmit({\n content: showText && content.trim() ? content.trim() : undefined,\n rating: showRating && rating !== null ? rating : undefined,\n isBug: isBug || undefined,\n screenshot: screenshot || undefined,\n });\n };\n\n const inputStyles: React.CSSProperties = {\n width: '100%',\n padding: isTouch ? '12px 14px' : '10px 12px',\n border: `1px solid ${t.colors.inputBorder}`,\n borderRadius: t.borders.radius.md,\n backgroundColor: t.colors.inputBackground,\n color: t.colors.text,\n fontSize: isTouch ? t.typography.fontSize.lg : t.typography.fontSize.md,\n resize: 'none',\n minHeight: isTouch ? 100 : 80,\n fontFamily: t.typography.fontFamily,\n outline: 'none',\n transition: `border-color ${t.animation.duration.fast} ${t.animation.easing.default}, box-shadow ${t.animation.duration.fast} ${t.animation.easing.default}`,\n lineHeight: 1.5,\n boxShadow: `inset 0 1px 2px rgba(0,0,0,0.04)`,\n ...customStyles?.input,\n };\n\n const buttonStyles: React.CSSProperties = {\n width: '100%',\n padding: isTouch ? '14px 16px' : '10px 16px',\n border: t.colors.buttonBorder,\n borderRadius: t.borders.radius.md,\n backgroundColor: t.colors.buttonBackground,\n color: t.colors.buttonColor,\n fontSize: isTouch ? t.typography.fontSize.lg : t.typography.fontSize.md,\n fontWeight: t.typography.fontWeight.medium,\n fontFamily: t.typography.fontFamily,\n cursor: isLoading ? 'not-allowed' : 'pointer',\n transition: `all ${t.animation.duration.fast} ${t.animation.easing.default}`,\n letterSpacing: '0.01em',\n ...customStyles?.submitButton,\n };\n\n return (\n <form onSubmit={handleSubmit}>\n {/* Rating */}\n {showRating && (\n <div style={{\n marginBottom: showText ? (isTouch ? 16 : 12) : 0,\n ...(!showText ? { display: 'flex', justifyContent: 'center', padding: '8px 0' } : {}),\n }}>\n <StarRating value={rating} onChange={setRating} theme={t} isTouch={isTouch} large={!showText} />\n </div>\n )}\n\n {/* Text input */}\n {showText && (\n <textarea\n value={content}\n onChange={(e) => setContent(e.target.value)}\n placeholder={placeholder || 'Share your thoughts...'}\n maxLength={5000}\n style={inputStyles}\n disabled={isLoading}\n aria-label=\"Your feedback\"\n onFocus={(e) => {\n e.currentTarget.style.borderColor = t.colors.inputBorderFocus;\n e.currentTarget.style.boxShadow = `0 0 0 3px ${t.colors.inputFocusRing}`;\n e.currentTarget.style.backgroundColor = t.colors.inputBackgroundFocus;\n }}\n onBlur={(e) => {\n e.currentTarget.style.borderColor = t.colors.inputBorder;\n e.currentTarget.style.boxShadow = 'inset 0 1px 2px rgba(0,0,0,0.04)';\n e.currentTarget.style.backgroundColor = t.colors.inputBackground;\n }}\n />\n )}\n\n {/* Bug flag toggle */}\n {enableBugFlag && (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={isBug}\n onClick={() => setIsBug(!isBug)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 7,\n width: '100%',\n marginTop: 10,\n padding: '7px 10px',\n border: `1px solid ${\n isBug ? t.colors.warningBorder : t.colors.border\n }`,\n borderRadius: 7,\n backgroundColor: isBug ? t.colors.warningSurface : 'transparent',\n cursor: 'pointer',\n transition: `all ${t.animation.duration.fast} ${t.animation.easing.default}`,\n fontFamily: t.typography.fontFamily,\n ...customStyles?.bugFlag,\n }}\n onMouseEnter={(e) => {\n if (!isBug) {\n e.currentTarget.style.backgroundColor = t.colors.surfaceHover === t.colors.inputBackgroundFocus\n ? 'rgba(0,0,0,0.02)' : t.colors.surfaceHover;\n }\n }}\n onMouseLeave={(e) => {\n if (!isBug) {\n e.currentTarget.style.backgroundColor = 'transparent';\n }\n }}\n >\n <svg\n width={14}\n height={14}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke={isBug ? t.colors.warningActive : t.colors.textDisabled}\n strokeWidth={1.75}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{ flexShrink: 0, transition: `stroke ${t.animation.duration.fast}` }}\n >\n <path d=\"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z\" />\n </svg>\n <span\n style={{\n fontSize: 12,\n fontWeight: isBug ? t.typography.fontWeight.medium : t.typography.fontWeight.normal,\n color: isBug ? t.colors.warningActive : t.colors.textDisabled,\n transition: `color ${t.animation.duration.fast}`,\n letterSpacing: '0.01em',\n }}\n >\n {isBug ? 'Issue reported' : (bugFlagLabel || 'Report an issue')}\n </span>\n <div\n style={{\n marginLeft: 'auto',\n width: 28,\n height: 16,\n borderRadius: 8,\n backgroundColor: isBug ? t.colors.warning : t.colors.border,\n position: 'relative',\n transition: `background-color ${t.animation.duration.fast} ${t.animation.easing.default}`,\n flexShrink: 0,\n }}\n >\n <div\n style={{\n position: 'absolute',\n top: 2,\n left: isBug ? 14 : 2,\n width: 12,\n height: 12,\n borderRadius: '50%',\n backgroundColor: isBug ? '#ffffff' : t.colors.textDisabled,\n transition: `left ${t.animation.duration.fast} ${t.animation.easing.default}, background-color ${t.animation.duration.fast}`,\n boxShadow: '0 1px 2px rgba(0,0,0,0.15)',\n }}\n />\n </div>\n </button>\n )}\n\n {/* Screenshot capture — shown when bug flag is active */}\n {enableBugFlag && enableScreenshot && isBug && !screenshot && (\n <button\n type=\"button\"\n onClick={handleScreenshotCapture}\n disabled={capturingScreenshot}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n width: '100%',\n marginTop: 8,\n padding: '7px 10px',\n border: `1px solid ${t.colors.border}`,\n borderRadius: 7,\n backgroundColor: 'transparent',\n cursor: capturingScreenshot ? 'not-allowed' : 'pointer',\n fontFamily: t.typography.fontFamily,\n fontSize: 12,\n color: t.colors.textSecondary,\n transition: `all ${t.animation.duration.fast} ${t.animation.easing.default}`,\n }}\n onMouseEnter={(e) => { e.currentTarget.style.backgroundColor = t.colors.surfaceHover; }}\n onMouseLeave={(e) => { e.currentTarget.style.backgroundColor = 'transparent'; }}\n >\n {capturingScreenshot ? (\n <Spinner size={14} color={t.colors.textSecondary} />\n ) : (\n <svg width={14} height={14} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth={1.75} strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" />\n <circle cx=\"12\" cy=\"10\" r=\"3\" />\n <path d=\"M2 17l4-4 3 3 4-4 9 9\" />\n </svg>\n )}\n {capturingScreenshot ? 'Capturing...' : 'Capture screenshot'}\n </button>\n )}\n\n {screenshotError && (\n <div style={{\n fontSize: 11,\n color: t.colors.textSecondary,\n marginTop: 4,\n padding: '4px 0',\n fontFamily: t.typography.fontFamily,\n }}>\n Screenshot capture unavailable\n </div>\n )}\n\n {/* Screenshot preview */}\n {enableBugFlag && enableScreenshot && isBug && screenshot && (\n <ScreenshotPreview\n src={screenshot}\n onRemove={() => setScreenshot(null)}\n resolvedTheme={t}\n />\n )}\n\n {/* Submit button */}\n <button\n type=\"submit\"\n disabled={isLoading || !canSubmit}\n style={{\n ...buttonStyles,\n marginTop: 12,\n opacity: isLoading ? 0.8 : 1,\n backgroundColor: !canSubmit ? t.colors.buttonBackgroundDisabled : t.colors.buttonBackground,\n color: !canSubmit ? t.colors.buttonColorDisabled : t.colors.buttonColor,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n ...(isLoading ? {\n backgroundImage: `linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.1) 50%, transparent 100%)`,\n backgroundSize: '200% 100%',\n animation: 'gotcha-shimmer 1.5s ease infinite',\n } : {}),\n }}\n onMouseEnter={(e) => {\n if (!e.currentTarget.disabled) {\n e.currentTarget.style.backgroundColor = t.colors.buttonBackgroundHover;\n e.currentTarget.style.transform = 'translateY(-1px)';\n e.currentTarget.style.boxShadow = t.shadows.button;\n }\n }}\n onMouseLeave={(e) => {\n if (!e.currentTarget.disabled) {\n e.currentTarget.style.backgroundColor = t.colors.buttonBackground;\n e.currentTarget.style.transform = 'translateY(0)';\n e.currentTarget.style.boxShadow = 'none';\n }\n }}\n >\n {isLoading && <Spinner size={isTouch ? 18 : 16} color={t.colors.buttonColor} />}\n {isLoading ? (isEditing ? 'Updating...' : 'Submitting...') : (isEditing ? 'Update' : submitText)}\n </button>\n </form>\n );\n}\n\ninterface StarRatingProps {\n value: number | null;\n onChange: (rating: number) => void;\n theme: ResolvedTheme;\n isTouch: boolean;\n large?: boolean;\n}\n\nfunction StarRating({ value, onChange, theme: t, isTouch, large = false }: StarRatingProps) {\n const [hovered, setHovered] = useState<number | null>(null);\n const [pulsing, setPulsing] = useState<number | null>(null);\n const pulseTimerRef = useRef<ReturnType<typeof setTimeout>>();\n const starSize = large ? (isTouch ? 36 : 28) : (isTouch ? 28 : 18);\n const buttonPadding = large ? (isTouch ? 8 : 5) : (isTouch ? 8 : 3);\n\n useEffect(() => {\n return () => { clearTimeout(pulseTimerRef.current); };\n }, []);\n\n const handleClick = (star: number) => {\n setPulsing(star);\n onChange(star);\n clearTimeout(pulseTimerRef.current);\n pulseTimerRef.current = setTimeout(() => setPulsing(null), 300);\n };\n\n return (\n <div\n style={{\n display: 'flex',\n gap: large ? (isTouch ? 8 : 6) : (isTouch ? 6 : 2),\n }}\n role=\"group\"\n aria-label=\"Rating\"\n >\n {[1, 2, 3, 4, 5].map((star) => {\n const isFilled = (hovered ?? value ?? 0) >= star;\n return (\n <button\n key={star}\n type=\"button\"\n onClick={() => handleClick(star)}\n onMouseEnter={() => setHovered(star)}\n onMouseLeave={() => setHovered(null)}\n aria-label={`Rate ${star} out of 5`}\n aria-pressed={value === star}\n style={{\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: buttonPadding,\n color: isFilled ? t.colors.starFilled : t.colors.starEmpty,\n transition: `color 0.15s ${t.animation.easing.default}`,\n transform: pulsing === star ? 'scale(1)' : ((hovered !== null && hovered >= star) ? 'scale(1.1)' : 'scale(1)'),\n animation: pulsing === star ? `gotcha-star-pulse 0.3s ${t.animation.easing.spring}` : 'none',\n filter: isFilled ? `drop-shadow(0 0 3px ${t.colors.starFilled}40)` : 'none',\n transitionDelay: `${(star - 1) * 30}ms`,\n }}\n >\n <svg width={starSize} height={starSize} viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\" />\n </svg>\n </button>\n );\n })}\n </div>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { ResolvedTheme } from '../../theme/tokens';\nimport { isTouchDevice } from '../../utils/device';\nimport { Spinner } from '../Spinner';\n\ninterface VoteModeProps {\n resolvedTheme: ResolvedTheme;\n isLoading: boolean;\n onSubmit: (data: { vote: 'up' | 'down' }) => void;\n initialVote?: 'up' | 'down' | null;\n isEditing?: boolean;\n labels?: { up: string; down: string };\n}\n\nexport function VoteMode({ resolvedTheme: t, isLoading, onSubmit, initialVote, isEditing = false, labels }: VoteModeProps) {\n const [isTouch, setIsTouch] = useState(false);\n const [activeVote, setActiveVote] = useState<'up' | 'down' | null>(initialVote || null);\n const [previousVote, setPreviousVote] = useState<'up' | 'down' | null>(initialVote || null);\n\n useEffect(() => {\n setIsTouch(isTouchDevice());\n }, []);\n\n useEffect(() => {\n if (initialVote !== undefined) {\n setPreviousVote(initialVote);\n setActiveVote(initialVote);\n }\n }, [initialVote]);\n\n useEffect(() => {\n if (!isLoading && !isEditing) {\n setActiveVote(null);\n }\n }, [isLoading, isEditing]);\n\n const handleVote = (vote: 'up' | 'down') => {\n setActiveVote(vote);\n onSubmit({ vote });\n };\n\n const getButtonStyles = (voteType: 'up' | 'down'): React.CSSProperties => {\n const isSelected = previousVote === voteType;\n const color = voteType === 'up' ? t.colors.voteUp : t.colors.voteDown;\n const surface = voteType === 'up' ? t.colors.voteUpSurface : t.colors.voteDownSurface;\n const border = voteType === 'up' ? t.colors.voteUpBorder : t.colors.voteDownBorder;\n\n return {\n flex: 1,\n minWidth: 0,\n overflow: 'hidden' as const,\n padding: isTouch ? '14px 18px' : '10px 14px',\n border: isSelected\n ? `2px solid ${border}`\n : `1px solid ${t.colors.border}`,\n borderRadius: t.borders.radius.lg - 2,\n background: isSelected\n ? `linear-gradient(135deg, ${surface}, ${surface})`\n : t.colors.surface,\n color: isSelected ? color : t.colors.textSecondary,\n fontSize: isTouch ? 28 : 24,\n fontFamily: t.typography.fontFamily,\n cursor: isLoading ? 'not-allowed' : 'pointer',\n transition: `all 0.2s ${t.animation.easing.default}`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: isTouch ? 10 : 8,\n };\n };\n\n const iconSize = isTouch ? 24 : 20;\n\n return (\n <div\n style={{\n display: 'flex',\n gap: isTouch ? 12 : 10,\n }}\n role=\"group\"\n aria-label=\"Vote\"\n >\n <button\n type=\"button\"\n onClick={() => handleVote('up')}\n disabled={isLoading}\n style={getButtonStyles('up')}\n aria-label=\"Vote up - I like this\"\n aria-pressed={previousVote === 'up'}\n onMouseEnter={(e) => {\n if (!isLoading) {\n e.currentTarget.style.transform = 'translateY(-2px) scale(1.02)';\n e.currentTarget.style.boxShadow = t.shadows.button;\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.transform = 'translateY(0) scale(1)';\n e.currentTarget.style.boxShadow = 'none';\n }}\n >\n {isLoading && activeVote === 'up' ? (\n <>\n <Spinner size={iconSize} color={t.colors.text} />\n <span style={{ fontSize: isTouch ? 15 : 13, fontWeight: t.typography.fontWeight.medium, letterSpacing: '0.01em' }}>\n {isEditing ? 'Updating...' : 'Sending...'}\n </span>\n </>\n ) : (\n <>\n <ThumbsUpIcon size={iconSize} />\n <span style={{ fontSize: isTouch ? 15 : 13, fontWeight: t.typography.fontWeight.medium, letterSpacing: '0.01em' }}>\n {labels?.up || (previousVote === 'up' ? 'Liked' : 'Like')}\n </span>\n </>\n )}\n </button>\n\n <button\n type=\"button\"\n onClick={() => handleVote('down')}\n disabled={isLoading}\n style={getButtonStyles('down')}\n aria-label=\"Vote down - I don't like this\"\n aria-pressed={previousVote === 'down'}\n onMouseEnter={(e) => {\n if (!isLoading) {\n e.currentTarget.style.transform = 'translateY(-2px) scale(1.02)';\n e.currentTarget.style.boxShadow = t.shadows.button;\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.transform = 'translateY(0) scale(1)';\n e.currentTarget.style.boxShadow = 'none';\n }}\n >\n {isLoading && activeVote === 'down' ? (\n <>\n <Spinner size={iconSize} color={t.colors.text} />\n <span style={{ fontSize: isTouch ? 15 : 13, fontWeight: t.typography.fontWeight.medium, letterSpacing: '0.01em' }}>\n {isEditing ? 'Updating...' : 'Sending...'}\n </span>\n </>\n ) : (\n <>\n <ThumbsDownIcon size={iconSize} />\n <span style={{ fontSize: isTouch ? 15 : 13, fontWeight: t.typography.fontWeight.medium, letterSpacing: '0.01em' }}>\n {labels?.down || (previousVote === 'down' ? 'Disliked' : 'Dislike')}\n </span>\n </>\n )}\n </button>\n </div>\n );\n}\n\nfunction ThumbsUpIcon({ size = 24 }: { size?: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\" />\n </svg>\n );\n}\n\nfunction ThumbsDownIcon({ size = 24 }: { size?: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\" />\n </svg>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { ResolvedTheme } from '../../theme/tokens';\nimport { isTouchDevice } from '../../utils/device';\nimport { Spinner } from '../Spinner';\n\ninterface PollModeProps {\n resolvedTheme: ResolvedTheme;\n options: string[];\n allowMultiple: boolean;\n isLoading: boolean;\n onSubmit: (data: { pollSelected: string[] }) => void;\n initialSelected?: string[] | null;\n isEditing?: boolean;\n}\n\nexport function PollMode({\n resolvedTheme: t,\n options,\n allowMultiple,\n isLoading,\n onSubmit,\n initialSelected,\n isEditing = false,\n}: PollModeProps) {\n const [selected, setSelected] = useState<string[]>(initialSelected || []);\n const [isTouch, setIsTouch] = useState(false);\n\n useEffect(() => {\n setIsTouch(isTouchDevice());\n }, []);\n\n useEffect(() => {\n if (initialSelected) {\n setSelected(initialSelected);\n }\n }, [initialSelected]);\n\n const handleToggle = (option: string) => {\n if (allowMultiple) {\n setSelected((prev) =>\n prev.includes(option) ? prev.filter((o) => o !== option) : [...prev, option]\n );\n } else {\n setSelected((prev) => (prev.includes(option) ? [] : [option]));\n }\n };\n\n const handleSubmit = () => {\n if (selected.length === 0) return;\n onSubmit({ pollSelected: selected });\n };\n\n const getOptionStyles = (option: string, index: number): React.CSSProperties => {\n const isSelected = selected.includes(option);\n return {\n width: '100%',\n padding: isTouch ? '12px 14px' : '9px 12px',\n border: `1px solid ${isSelected ? t.colors.pollSelectedBorder : t.colors.pollBorder}`,\n borderRadius: t.borders.radius.lg - 2,\n backgroundColor: isSelected ? t.colors.pollSelectedBackground : t.colors.pollBackground,\n color: isSelected ? t.colors.pollSelectedColor : t.colors.pollColor,\n fontSize: isTouch ? 15 : t.typography.fontSize.sm,\n fontWeight: isSelected ? t.typography.fontWeight.semibold : t.typography.fontWeight.medium,\n fontFamily: t.typography.fontFamily,\n cursor: isLoading ? 'not-allowed' : 'pointer',\n transition: `all 0.2s ${t.animation.easing.default}`,\n textAlign: 'left' as const,\n letterSpacing: '0.01em',\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n animation: `gotcha-fade-up ${t.animation.duration.normal} ${t.animation.easing.default} both`,\n animationDelay: `${index * 0.05}s`,\n };\n };\n\n return (\n <div>\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: isTouch ? 8 : 6,\n }}\n role=\"group\"\n aria-label={allowMultiple ? 'Select one or more options' : 'Select an option'}\n >\n {options.map((option, index) => {\n const isSelected = selected.includes(option);\n return (\n <button\n key={option}\n type=\"button\"\n onClick={() => handleToggle(option)}\n disabled={isLoading}\n style={getOptionStyles(option, index)}\n aria-pressed={isSelected}\n onMouseEnter={(e) => {\n if (!isLoading) {\n e.currentTarget.style.transform = 'translateX(2px)';\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.transform = 'translateX(0)';\n }}\n >\n <span\n style={{\n width: 16,\n height: 16,\n borderRadius: allowMultiple ? 4 : '50%',\n border: `2px solid ${isSelected ? t.colors.pollCheckSelectedBorder : t.colors.pollCheckBorder}`,\n backgroundColor: isSelected ? t.colors.pollCheckSelectedBg : 'transparent',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n transition: `all ${t.animation.duration.fast}`,\n }}\n >\n {isSelected && (\n <svg width={10} height={10} viewBox=\"0 0 12 12\" fill=\"none\">\n <path\n d=\"M2 6l3 3 5-5\"\n stroke=\"#fff\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </span>\n {option}\n </button>\n );\n })}\n </div>\n\n <button\n type=\"button\"\n onClick={handleSubmit}\n disabled={isLoading || selected.length === 0}\n style={{\n width: '100%',\n marginTop: 12,\n padding: isTouch ? '14px 16px' : '10px 16px',\n border: t.colors.buttonBorder,\n borderRadius: t.borders.radius.md,\n backgroundColor: selected.length === 0 ? t.colors.buttonBackgroundDisabled : t.colors.buttonBackground,\n color: selected.length === 0 ? t.colors.buttonColorDisabled : t.colors.buttonColor,\n fontSize: isTouch ? t.typography.fontSize.lg : t.typography.fontSize.md,\n fontWeight: t.typography.fontWeight.medium,\n fontFamily: t.typography.fontFamily,\n cursor: isLoading || selected.length === 0 ? 'not-allowed' : 'pointer',\n transition: `all ${t.animation.duration.fast} ${t.animation.easing.default}`,\n letterSpacing: '0.01em',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n opacity: isLoading ? 0.8 : 1,\n ...(isLoading ? {\n backgroundImage: `linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.1) 50%, transparent 100%)`,\n backgroundSize: '200% 100%',\n animation: 'gotcha-shimmer 1.5s ease infinite',\n } : {}),\n }}\n onMouseEnter={(e) => {\n if (!e.currentTarget.disabled) {\n e.currentTarget.style.backgroundColor = t.colors.buttonBackgroundHover;\n e.currentTarget.style.transform = 'translateY(-1px)';\n e.currentTarget.style.boxShadow = t.shadows.button;\n }\n }}\n onMouseLeave={(e) => {\n if (!e.currentTarget.disabled) {\n e.currentTarget.style.backgroundColor = selected.length === 0\n ? t.colors.buttonBackgroundDisabled\n : t.colors.buttonBackground;\n e.currentTarget.style.transform = 'translateY(0)';\n e.currentTarget.style.boxShadow = 'none';\n }\n }}\n >\n {isLoading && <Spinner size={isTouch ? 18 : 16} color={t.colors.buttonColor} />}\n {isLoading ? (isEditing ? 'Updating...' : 'Submitting...') : (isEditing ? 'Update' : 'Submit')}\n </button>\n </div>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { GotchaStyles } from '../../types';\nimport { ResolvedTheme } from '../../theme/tokens';\nimport { isTouchDevice } from '../../utils/device';\nimport { Spinner } from '../Spinner';\n\ninterface NpsModeProps {\n resolvedTheme: ResolvedTheme;\n submitText: string;\n isLoading: boolean;\n onSubmit: (data: { rating?: number; content?: string }) => void;\n customStyles?: GotchaStyles;\n showFollowUp?: boolean;\n followUpPlaceholder?: string;\n lowLabel?: string;\n highLabel?: string;\n initialValues?: {\n rating?: number | null;\n content?: string | null;\n };\n isEditing?: boolean;\n}\n\nexport function NpsMode({\n resolvedTheme: t,\n submitText,\n isLoading,\n onSubmit,\n customStyles,\n showFollowUp = true,\n followUpPlaceholder,\n lowLabel = 'Not likely',\n highLabel = 'Very likely',\n initialValues,\n isEditing = false,\n}: NpsModeProps) {\n const [score, setScore] = useState<number | null>(initialValues?.rating ?? null);\n const [content, setContent] = useState(initialValues?.content || '');\n const [isTouch, setIsTouch] = useState(false);\n const [hoveredScore, setHoveredScore] = useState<number | null>(null);\n\n useEffect(() => {\n setIsTouch(isTouchDevice());\n }, []);\n\n useEffect(() => {\n if (initialValues?.rating !== undefined) {\n setScore(initialValues.rating ?? null);\n }\n if (initialValues?.content !== undefined) {\n setContent(initialValues.content || '');\n }\n }, [initialValues?.rating, initialValues?.content]);\n\n const canSubmit = score !== null;\n const npsColors = t.colors.npsColors;\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (!canSubmit) return;\n onSubmit({\n rating: score ?? undefined,\n content: showFollowUp && content.trim() ? content.trim() : undefined,\n });\n };\n\n return (\n <form onSubmit={handleSubmit}>\n {/* Score scale */}\n <div>\n {/* Number buttons — always single row */}\n <div\n style={{\n display: 'flex',\n gap: isTouch ? 4 : 6,\n justifyContent: 'center',\n }}\n role=\"group\"\n aria-label=\"NPS Score\"\n >\n {Array.from({ length: 11 }, (_, i) => {\n const selected = score === i;\n const hovered = hoveredScore === i;\n const color = npsColors[i];\n\n return (\n <button\n key={i}\n type=\"button\"\n onClick={() => setScore(i)}\n onMouseEnter={() => setHoveredScore(i)}\n onMouseLeave={() => setHoveredScore(null)}\n aria-label={`Score ${i} out of 10`}\n aria-pressed={selected}\n style={{\n flex: 1,\n minWidth: 0,\n height: isTouch ? 34 : 32,\n borderRadius: t.borders.radius.sm,\n border: selected\n ? `2px solid ${color}`\n : `1.5px solid ${color}25`,\n backgroundColor: selected\n ? color\n : hovered\n ? `${color}25`\n : `${color}0c`,\n color: selected\n ? '#fff'\n : hovered\n ? color\n : `${color}bb`,\n fontSize: 12,\n fontWeight: selected ? t.typography.fontWeight.bold : t.typography.fontWeight.semibold,\n fontFamily: t.typography.fontFamily,\n fontVariantNumeric: 'tabular-nums',\n cursor: 'pointer',\n padding: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: `all 0.2s ${t.animation.easing.spring}`,\n transform: selected ? 'scale(1.08)' : hovered ? 'scale(1.04)' : 'scale(1)',\n boxShadow: selected\n ? `0 0 12px ${color}40`\n : 'none',\n ...customStyles?.npsButton,\n ...(selected ? customStyles?.npsButtonSelected : {}),\n }}\n >\n {i}\n </button>\n );\n })}\n </div>\n\n {/* Labels */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginTop: 6,\n padding: '0 2px',\n ...customStyles?.npsLabels,\n }}\n >\n <span style={{\n fontSize: t.typography.fontSize.xs,\n color: t.colors.textDisabled,\n fontWeight: t.typography.fontWeight.medium,\n letterSpacing: '0.02em',\n }}>\n {lowLabel}\n </span>\n <span style={{\n fontSize: t.typography.fontSize.xs,\n color: t.colors.textDisabled,\n fontWeight: t.typography.fontWeight.medium,\n letterSpacing: '0.02em',\n }}>\n {highLabel}\n </span>\n </div>\n </div>\n\n {/* Follow-up textarea — animated reveal */}\n {showFollowUp && score !== null && (\n <textarea\n value={content}\n onChange={(e) => setContent(e.target.value)}\n placeholder={followUpPlaceholder || 'What\\'s the main reason for your score?'}\n maxLength={5000}\n style={{\n width: '100%',\n padding: isTouch ? '12px 14px' : '10px 12px',\n border: `1px solid ${t.colors.inputBorder}`,\n borderRadius: t.borders.radius.md,\n backgroundColor: t.colors.inputBackground,\n color: t.colors.text,\n fontSize: isTouch ? t.typography.fontSize.lg : t.typography.fontSize.md,\n resize: 'vertical' as const,\n minHeight: isTouch ? 80 : 60,\n fontFamily: t.typography.fontFamily,\n outline: 'none',\n transition: `border-color ${t.animation.duration.fast} ${t.animation.easing.default}, box-shadow ${t.animation.duration.fast} ${t.animation.easing.default}`,\n lineHeight: 1.5,\n animation: `gotcha-expand-in 0.3s ${t.animation.easing.default} both`,\n overflow: 'hidden',\n ...customStyles?.input,\n }}\n disabled={isLoading}\n aria-label=\"Follow-up feedback\"\n onFocus={(e) => {\n e.currentTarget.style.borderColor = t.colors.inputBorderFocus;\n e.currentTarget.style.boxShadow = `0 0 0 3px ${t.colors.inputFocusRing}`;\n e.currentTarget.style.backgroundColor = t.colors.inputBackgroundFocus;\n }}\n onBlur={(e) => {\n e.currentTarget.style.borderColor = t.colors.inputBorder;\n e.currentTarget.style.boxShadow = 'none';\n e.currentTarget.style.backgroundColor = t.colors.inputBackground;\n }}\n />\n )}\n\n {/* Submit button */}\n <button\n type=\"submit\"\n disabled={isLoading || !canSubmit}\n style={{\n width: '100%',\n padding: isTouch ? '14px 16px' : '10px 16px',\n border: t.colors.buttonBorder,\n borderRadius: t.borders.radius.md,\n backgroundColor: !canSubmit ? t.colors.buttonBackgroundDisabled : t.colors.buttonBackground,\n color: !canSubmit ? t.colors.buttonColorDisabled : t.colors.buttonColor,\n fontSize: isTouch ? t.typography.fontSize.lg : t.typography.fontSize.md,\n fontWeight: t.typography.fontWeight.medium,\n fontFamily: t.typography.fontFamily,\n cursor: isLoading ? 'not-allowed' : 'pointer',\n transition: `all ${t.animation.duration.fast} ${t.animation.easing.default}`,\n letterSpacing: '0.01em',\n opacity: isLoading ? 0.8 : 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n marginTop: 12,\n ...(isLoading ? {\n backgroundImage: `linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.1) 50%, transparent 100%)`,\n backgroundSize: '200% 100%',\n animation: 'gotcha-shimmer 1.5s ease infinite',\n } : {}),\n ...customStyles?.submitButton,\n }}\n onMouseEnter={(e) => {\n if (!e.currentTarget.disabled) {\n e.currentTarget.style.backgroundColor = t.colors.buttonBackgroundHover;\n e.currentTarget.style.transform = 'translateY(-1px)';\n e.currentTarget.style.boxShadow = t.shadows.button;\n }\n }}\n onMouseLeave={(e) => {\n if (!e.currentTarget.disabled) {\n e.currentTarget.style.backgroundColor = !canSubmit ? t.colors.buttonBackgroundDisabled : t.colors.buttonBackground;\n e.currentTarget.style.transform = 'translateY(0)';\n e.currentTarget.style.boxShadow = 'none';\n }\n }}\n >\n {isLoading && <Spinner size={isTouch ? 18 : 16} color={t.colors.buttonColor} />}\n {isLoading ? (isEditing ? 'Updating...' : 'Submitting...') : (isEditing ? 'Update' : submitText)}\n </button>\n </form>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { ResolvedTheme } from '../theme/tokens';\nimport { isTouchDevice } from '../utils/device';\nimport { Spinner } from './Spinner';\n\ninterface FollowUpPromptProps {\n resolvedTheme: ResolvedTheme;\n promptText: string;\n placeholder?: string;\n isLoading: boolean;\n onSubmit: (content: string) => void;\n}\n\nexport function FollowUpPrompt({\n resolvedTheme: t,\n promptText,\n placeholder,\n isLoading,\n onSubmit,\n}: FollowUpPromptProps) {\n const [content, setContent] = useState('');\n const [isTouch, setIsTouch] = useState(false);\n\n useEffect(() => {\n setIsTouch(isTouchDevice());\n }, []);\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n if (!content.trim()) return;\n onSubmit(content.trim());\n };\n\n return (\n <form onSubmit={handleSubmit}>\n <p style={{\n margin: '0 0 12px 0',\n fontSize: t.typography.fontSize.sm,\n color: t.colors.textSecondary,\n lineHeight: 1.4,\n fontFamily: t.typography.fontFamily,\n }}>\n {promptText}\n </p>\n\n <textarea\n value={content}\n onChange={(e) => setContent(e.target.value)}\n placeholder={placeholder || 'Tell us more...'}\n maxLength={5000}\n disabled={isLoading}\n aria-label=\"Follow-up feedback\"\n style={{\n width: '100%',\n padding: isTouch ? '12px 14px' : '10px 12px',\n border: `1px solid ${t.colors.inputBorder}`,\n borderRadius: t.borders.radius.md,\n backgroundColor: t.colors.inputBackground,\n color: t.colors.text,\n fontSize: isTouch ? t.typography.fontSize.lg : t.typography.fontSize.md,\n resize: 'none',\n minHeight: isTouch ? 100 : 80,\n fontFamily: t.typography.fontFamily,\n outline: 'none',\n transition: `border-color ${t.animation.duration.fast} ${t.animation.easing.default}, box-shadow ${t.animation.duration.fast} ${t.animation.easing.default}`,\n lineHeight: 1.5,\n boxShadow: 'inset 0 1px 2px rgba(0,0,0,0.04)',\n }}\n onFocus={(e) => {\n e.currentTarget.style.borderColor = t.colors.inputBorderFocus;\n e.currentTarget.style.boxShadow = `0 0 0 3px ${t.colors.inputFocusRing}`;\n e.currentTarget.style.backgroundColor = t.colors.inputBackgroundFocus;\n }}\n onBlur={(e) => {\n e.currentTarget.style.borderColor = t.colors.inputBorder;\n e.currentTarget.style.boxShadow = 'inset 0 1px 2px rgba(0,0,0,0.04)';\n e.currentTarget.style.backgroundColor = t.colors.inputBackground;\n }}\n />\n\n <button\n type=\"submit\"\n disabled={isLoading || !content.trim()}\n style={{\n width: '100%',\n marginTop: 12,\n padding: isTouch ? '14px 16px' : '10px 16px',\n border: t.colors.buttonBorder,\n borderRadius: t.borders.radius.md,\n backgroundColor: !content.trim() ? t.colors.buttonBackgroundDisabled : t.colors.buttonBackground,\n color: !content.trim() ? t.colors.buttonColorDisabled : t.colors.buttonColor,\n fontSize: isTouch ? t.typography.fontSize.lg : t.typography.fontSize.md,\n fontWeight: t.typography.fontWeight.medium,\n fontFamily: t.typography.fontFamily,\n cursor: isLoading ? 'not-allowed' : 'pointer',\n transition: `all ${t.animation.duration.fast} ${t.animation.easing.default}`,\n letterSpacing: '0.01em',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n opacity: isLoading ? 0.8 : 1,\n }}\n onMouseEnter={(e) => {\n if (!e.currentTarget.disabled) {\n e.currentTarget.style.backgroundColor = t.colors.buttonBackgroundHover;\n e.currentTarget.style.transform = 'translateY(-1px)';\n e.currentTarget.style.boxShadow = t.shadows.button;\n }\n }}\n onMouseLeave={(e) => {\n if (!e.currentTarget.disabled) {\n e.currentTarget.style.backgroundColor = t.colors.buttonBackground;\n e.currentTarget.style.transform = 'translateY(0)';\n e.currentTarget.style.boxShadow = 'none';\n }\n }}\n >\n {isLoading && <Spinner size={isTouch ? 18 : 16} color={t.colors.buttonColor} />}\n {isLoading ? 'Sending...' : 'Submit'}\n </button>\n </form>\n );\n}\n","import React, { useRef, useEffect, useState, useMemo } from 'react';\nimport { Theme, GotchaStyles, ResponseMode, ExistingResponse } from '../types';\nimport { ResolvedTheme } from '../theme/tokens';\nimport { resolveTheme } from '../theme/resolveTheme';\nimport { injectStyles } from '../theme/styles';\nimport { cn } from '../utils/cn';\nimport { useGotchaContext } from './GotchaProvider';\nimport { FeedbackMode } from './modes/FeedbackMode';\nimport { VoteMode } from './modes/VoteMode';\nimport { PollMode } from './modes/PollMode';\nimport { Spinner } from './Spinner';\nimport { NpsMode } from './modes/NpsMode';\nimport { FollowUpPrompt } from './FollowUpPrompt';\n\nexport interface GotchaModalProps {\n mode: ResponseMode;\n theme: Theme;\n customStyles?: GotchaStyles;\n promptText?: string;\n placeholder?: string;\n submitText: string;\n thankYouMessage: string;\n // State\n isLoading: boolean;\n isCheckingExisting?: boolean;\n isSubmitted: boolean;\n phase?: 'form' | 'followUp' | 'success';\n followUpConfig?: { promptText: string; placeholder?: string };\n followUpLoading?: boolean;\n onFollowUpSubmit?: (content: string) => void;\n error: string | null;\n // Edit mode\n existingResponse?: ExistingResponse | null;\n isEditing?: boolean;\n // Vote mode\n voteLabels?: { up: string; down: string };\n // Feedback mode field visibility\n showText?: boolean;\n showRating?: boolean;\n // Poll mode\n options?: string[];\n allowMultiple?: boolean;\n // NPS mode\n npsQuestion?: string;\n npsFollowUp?: boolean;\n npsFollowUpPlaceholder?: string;\n npsLowLabel?: string;\n npsHighLabel?: string;\n // Bug flagging\n enableBugFlag?: boolean;\n bugFlagLabel?: string;\n enableScreenshot?: boolean;\n // Handlers\n onSubmit: (data: { content?: string; rating?: number; vote?: 'up' | 'down'; pollSelected?: string[]; isBug?: boolean; screenshot?: string }) => void;\n onClose: () => void;\n // Position info from parent\n anchorRect?: DOMRect;\n /**\n * When true (desktop portal), use fixed positioning relative to the viewport\n * instead of absolute positioning relative to the container.\n */\n useFixedPosition?: boolean;\n}\n\nexport function GotchaModal({\n mode,\n theme,\n customStyles,\n promptText,\n placeholder,\n submitText,\n thankYouMessage,\n isLoading,\n isCheckingExisting = false,\n isSubmitted,\n phase = 'form',\n followUpConfig,\n followUpLoading = false,\n onFollowUpSubmit,\n error,\n existingResponse,\n isEditing = false,\n showText = true,\n showRating = true,\n voteLabels,\n options,\n allowMultiple = false,\n npsQuestion,\n npsFollowUp = true,\n npsFollowUpPlaceholder,\n npsLowLabel,\n npsHighLabel,\n enableBugFlag = false,\n bugFlagLabel,\n enableScreenshot = false,\n onSubmit,\n onClose,\n anchorRect,\n useFixedPosition = false,\n}: GotchaModalProps) {\n const modalRef = useRef<HTMLDivElement>(null);\n const firstFocusableRef = useRef<HTMLButtonElement>(null);\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n\n const [isMobile, setIsMobile] = useState(false);\n const [systemTheme, setSystemTheme] = useState<'light' | 'dark'>('light');\n\n const { themeConfig } = useGotchaContext();\n\n // Detect mobile and system theme after mount (SSR-safe)\n useEffect(() => {\n setIsMobile(window.innerWidth < 640);\n\n const darkQuery = window.matchMedia('(prefers-color-scheme: dark)');\n setSystemTheme(darkQuery.matches ? 'dark' : 'light');\n\n const handler = (e: MediaQueryListEvent) => setSystemTheme(e.matches ? 'dark' : 'light');\n darkQuery.addEventListener('change', handler);\n return () => darkQuery.removeEventListener('change', handler);\n }, []);\n\n // Resolve theme with provider config\n const t: ResolvedTheme = useMemo(\n () => resolveTheme(theme, systemTheme, themeConfig),\n [theme, systemTheme, themeConfig]\n );\n\n // Re-inject styles when theme changes\n useEffect(() => {\n injectStyles(t);\n }, [t]);\n\n // Determine if modal should appear above or below\n // Only compute on client after mount (anchorRect is only set on client)\n const showAbove = (() => {\n if (typeof window === 'undefined' || !anchorRect) return false;\n const spaceBelow = window.innerHeight - anchorRect.bottom;\n return spaceBelow < 300;\n })();\n\n // Focus trap — use ref for onClose so effect runs once\n useEffect(() => {\n const modal = modalRef.current;\n if (!modal) return;\n\n firstFocusableRef.current?.focus();\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onCloseRef.current();\n return;\n }\n\n if (e.key === 'Tab') {\n const focusableElements = modal.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n if (e.shiftKey && document.activeElement === firstElement) {\n e.preventDefault();\n lastElement?.focus();\n } else if (!e.shiftKey && document.activeElement === lastElement) {\n e.preventDefault();\n firstElement?.focus();\n }\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, []);\n\n const defaultPrompt = mode === 'vote'\n ? 'What do you think?'\n : mode === 'poll'\n ? 'Cast your vote'\n : mode === 'nps'\n ? (npsQuestion || 'How likely are you to recommend us?')\n : 'What do you think of this feature?';\n\n const modalPadding = isMobile ? 24 : 20;\n const modalWidth = mode === 'nps' ? 420 : 340;\n\n // Animation class\n const animationClass = isMobile\n ? 'gotcha-modal-enter-center'\n : showAbove\n ? 'gotcha-modal-enter-above'\n : 'gotcha-modal-enter';\n\n const viewportHeight = typeof window !== 'undefined' ? window.innerHeight : 0;\n\n const modalStyles: React.CSSProperties = isMobile\n ? {\n position: 'fixed',\n left: '50%',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n width: 'calc(100vw - 32px)',\n maxWidth: modalWidth,\n padding: modalPadding,\n borderRadius: t.borders.radius.lg + 2,\n background: t.colors.backgroundGradient,\n color: t.colors.text,\n boxShadow: t.shadows.modal,\n border: `${t.borders.width}px solid ${t.colors.border}`,\n zIndex: 9999,\n fontFamily: t.typography.fontFamily,\n ...customStyles?.modal,\n textAlign: 'left' as const,\n }\n : useFixedPosition && anchorRect && viewportHeight\n ? (() => {\n const viewportWidth = window.innerWidth;\n const edgePadding = 24;\n const centerX = anchorRect.left + anchorRect.width / 2;\n // Clamp so modal stays within viewport\n const idealLeft = centerX - modalWidth / 2;\n const clampedLeft = Math.max(edgePadding, Math.min(idealLeft, viewportWidth - modalWidth - edgePadding));\n return {\n position: 'fixed' as const,\n left: clampedLeft,\n width: modalWidth,\n padding: modalPadding,\n borderRadius: t.borders.radius.lg,\n background: t.colors.backgroundGradient,\n color: t.colors.text,\n boxShadow: t.shadows.modal,\n border: `${t.borders.width}px solid ${t.colors.border}`,\n zIndex: 99999,\n fontFamily: t.typography.fontFamily,\n ...(showAbove\n ? { bottom: viewportHeight - anchorRect.top + 8 }\n : { top: anchorRect.bottom + 8 }),\n ...customStyles?.modal,\n textAlign: 'left' as const,\n };\n })()\n : {\n position: 'absolute' as const,\n left: '50%',\n width: modalWidth,\n padding: modalPadding,\n borderRadius: t.borders.radius.lg,\n background: t.colors.backgroundGradient,\n color: t.colors.text,\n boxShadow: t.shadows.modal,\n border: `${t.borders.width}px solid ${t.colors.border}`,\n zIndex: 9999,\n fontFamily: t.typography.fontFamily,\n ...(showAbove\n ? { bottom: '100%', marginBottom: 8, transform: 'translateX(-50%)' }\n : { top: '100%', marginTop: 8, transform: 'translateX(-50%)' }),\n ...customStyles?.modal,\n textAlign: 'left' as const,\n };\n\n // Stagger delay for form elements (desktop only — mobile centering is disrupted by staggered opacity)\n const fadeUpStyle = (index: number): React.CSSProperties =>\n isMobile\n ? {}\n : {\n animation: `gotcha-fade-up ${t.animation.duration.normal} ${t.animation.easing.default} both`,\n animationDelay: `${index * 0.05}s`,\n };\n\n // \"Gotcha!\" success branding\n const isDefaultThankYou = thankYouMessage === 'Gotcha!' || thankYouMessage === 'Thanks for your feedback!';\n\n return (\n <div\n ref={modalRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={isSubmitted ? 'Feedback submitted' : undefined}\n aria-labelledby={isSubmitted ? undefined : 'gotcha-modal-title'}\n data-gotcha\n style={modalStyles}\n className={cn('gotcha-modal', animationClass)}\n >\n {/* Close button */}\n <button\n ref={firstFocusableRef}\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close feedback form\"\n style={{\n position: 'absolute',\n top: isMobile ? 10 : 6,\n right: isMobile ? 10 : 6,\n width: isMobile ? 40 : 36,\n height: isMobile ? 40 : 36,\n border: 'none',\n background: 'transparent',\n outline: 'none',\n cursor: 'pointer',\n zIndex: 10,\n color: t.colors.closeButton,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: t.borders.radius.sm,\n transition: `all ${t.animation.duration.fast} ${t.animation.easing.default}`,\n ...customStyles?.closeButton,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = t.colors.closeButtonBg;\n e.currentTarget.style.color = t.colors.closeButtonHover;\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n e.currentTarget.style.color = t.colors.closeButton;\n }}\n >\n <svg width={isMobile ? 16 : 14} height={isMobile ? 16 : 14} viewBox=\"0 0 14 14\" fill=\"none\">\n <path\n d=\"M1 1L13 13M1 13L13 1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n\n {/* Title */}\n {!isSubmitted && (\n <h2\n id=\"gotcha-modal-title\"\n style={{\n margin: '0 0 16px 0',\n fontSize: isMobile ? t.typography.fontSize.lg : t.typography.fontSize.md,\n fontWeight: t.typography.fontWeight.semibold,\n paddingRight: isMobile ? 44 : 38,\n letterSpacing: '-0.02em',\n lineHeight: 1.4,\n textAlign: 'left',\n fontFamily: t.typography.fontFamily,\n ...fadeUpStyle(0),\n ...customStyles?.title,\n }}\n >\n {promptText || defaultPrompt}\n </h2>\n )}\n\n {/* Success state — \"Gotcha!\" branding moment */}\n {isSubmitted && (\n <div\n style={{\n textAlign: 'center',\n padding: '28px 0 20px',\n }}\n >\n {/* Animated checkmark circle */}\n <div\n style={{\n width: 52,\n height: 52,\n borderRadius: '50%',\n backgroundColor: t.colors.successSurface,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: '0 auto 16px',\n animation: `gotcha-success-pop 0.4s ${t.animation.easing.spring} both, gotcha-glow-pulse 0.8s ease 0.4s`,\n ...customStyles?.successIcon,\n }}\n >\n <svg\n width=\"26\"\n height=\"26\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M20 6L9 17L4 12\"\n stroke={t.colors.success}\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n style={{\n strokeDasharray: 24,\n strokeDashoffset: 0,\n animation: `gotcha-check-draw 0.4s ease 0.2s both`,\n }}\n />\n </svg>\n </div>\n\n {/* Primary message */}\n <p\n style={{\n margin: 0,\n fontSize: isDefaultThankYou ? 22 : t.typography.fontSize.md,\n fontWeight: isDefaultThankYou ? t.typography.fontWeight.bold : t.typography.fontWeight.medium,\n color: t.colors.text,\n fontFamily: isDefaultThankYou ? \"'Carter One', cursive\" : t.typography.fontFamily,\n animation: `gotcha-success-text 0.3s ease 0.3s both`,\n ...customStyles?.successMessage,\n }}\n >\n {isDefaultThankYou ? 'Gotcha!' : thankYouMessage}\n </p>\n\n {/* Subtitle (only for default message) */}\n {isDefaultThankYou && (\n <p\n style={{\n margin: '6px 0 0',\n fontSize: t.typography.fontSize.sm,\n fontWeight: t.typography.fontWeight.normal,\n color: t.colors.textSecondary,\n animation: `gotcha-success-text 0.3s ease 0.45s both`,\n }}\n >\n Thanks for your feedback!\n </p>\n )}\n </div>\n )}\n\n {/* Error state */}\n {error && !isSubmitted && (\n <div\n style={{\n padding: '8px 10px',\n marginBottom: 12,\n borderRadius: t.borders.radius.sm,\n backgroundColor: t.colors.errorSurface,\n border: `1px solid ${t.colors.errorBorder}`,\n color: t.colors.error,\n fontSize: t.typography.fontSize.sm,\n lineHeight: 1.4,\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n ...fadeUpStyle(1),\n ...customStyles?.errorMessage,\n }}\n >\n <svg width={14} height={14} viewBox=\"0 0 24 24\" fill=\"none\" style={{ flexShrink: 0 }}>\n <path d=\"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z\" stroke=\"currentColor\" strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n {error}\n </div>\n )}\n\n {/* Follow-up question */}\n {phase === 'followUp' && followUpConfig && onFollowUpSubmit && (\n <div style={fadeUpStyle(1)}>\n <FollowUpPrompt\n resolvedTheme={t}\n promptText={followUpConfig.promptText}\n placeholder={followUpConfig.placeholder}\n isLoading={followUpLoading}\n onSubmit={onFollowUpSubmit}\n />\n </div>\n )}\n\n {/* Loading state while checking for existing response */}\n {phase === 'form' && isCheckingExisting && (\n <div style={{\n display: 'flex',\n justifyContent: 'center',\n padding: '24px 0',\n ...fadeUpStyle(1),\n }}>\n <Spinner size={24} color={t.colors.textSecondary} />\n </div>\n )}\n\n {/* Form content based on mode */}\n {phase === 'form' && !isCheckingExisting && (\n <div style={fadeUpStyle(1)}>\n {mode === 'feedback' && (\n <FeedbackMode\n resolvedTheme={t}\n placeholder={placeholder}\n submitText={submitText}\n isLoading={isLoading}\n onSubmit={onSubmit}\n customStyles={customStyles}\n initialValues={existingResponse ? {\n content: existingResponse.content,\n rating: existingResponse.rating,\n } : undefined}\n isEditing={isEditing}\n showText={showText}\n showRating={showRating}\n enableBugFlag={enableBugFlag}\n bugFlagLabel={bugFlagLabel}\n enableScreenshot={enableScreenshot}\n />\n )}\n {mode === 'vote' && (\n <VoteMode\n resolvedTheme={t}\n isLoading={isLoading}\n onSubmit={onSubmit}\n initialVote={existingResponse?.vote || undefined}\n isEditing={isEditing}\n labels={voteLabels}\n />\n )}\n {mode === 'nps' && (\n <NpsMode\n resolvedTheme={t}\n submitText={submitText}\n isLoading={isLoading}\n onSubmit={onSubmit}\n showFollowUp={npsFollowUp}\n followUpPlaceholder={npsFollowUpPlaceholder}\n lowLabel={npsLowLabel}\n highLabel={npsHighLabel}\n customStyles={customStyles}\n initialValues={existingResponse ? {\n rating: existingResponse.rating,\n content: existingResponse.content,\n } : undefined}\n isEditing={isEditing}\n />\n )}\n {mode === 'poll' && options && options.length > 0 && (\n <PollMode\n resolvedTheme={t}\n options={options}\n allowMultiple={allowMultiple}\n isLoading={isLoading}\n onSubmit={onSubmit}\n initialSelected={existingResponse?.pollSelected || undefined}\n isEditing={isEditing}\n />\n )}\n </div>\n )}\n\n {/* Screen reader announcement */}\n <div aria-live=\"polite\" className=\"sr-only\" style={{ position: 'absolute', left: -9999 }}>\n {isSubmitted && 'Thank you! Your feedback has been submitted.'}\n {error && `Error: ${error}`}\n </div>\n </div>\n );\n}\n","import React, { useState, useCallback, useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport {\n ResponseMode,\n GotchaUser,\n Position,\n Size,\n Theme,\n TouchBehavior,\n GotchaStyles,\n GotchaResponse,\n GotchaError,\n} from '../types';\nimport { DEFAULTS } from '../constants';\nimport { useGotchaContext } from './GotchaProvider';\nimport { useSubmit } from '../hooks/useSubmit';\nimport { useHideAfterSubmit } from '../hooks/useHideAfterSubmit';\nimport { useTriggerConditions } from '../hooks/useTriggerConditions';\nimport { GotchaButton } from './GotchaButton';\nimport { GotchaModal } from './GotchaModal';\n\nexport interface GotchaProps {\n /** Unique identifier for this element */\n elementId: string;\n\n // User data\n /** User metadata for segmentation */\n user?: GotchaUser;\n\n // Behavior\n /** Feedback mode */\n mode?: ResponseMode;\n\n // Feedback mode field visibility\n /** Show the text input in feedback mode (default: true) */\n showText?: boolean;\n /** Show the star rating in feedback mode (default: true) */\n showRating?: boolean;\n\n // Vote mode specific\n /** Custom labels for vote buttons (default: Like/Dislike) */\n voteLabels?: { up: string; down: string };\n\n // Poll mode specific\n /** Required if mode is 'poll' (2-6 options) */\n options?: string[];\n /** Allow selecting multiple options */\n allowMultiple?: boolean;\n\n // NPS mode specific\n /** Custom NPS question (default: \"How likely are you to recommend us?\") */\n npsQuestion?: string;\n /** Show follow-up textarea after score selection (default: true) */\n npsFollowUp?: boolean;\n /** Placeholder for NPS follow-up textarea */\n npsFollowUpPlaceholder?: string;\n /** Label for low end of NPS scale (default: \"Not likely\") */\n npsLowLabel?: string;\n /** Label for high end of NPS scale (default: \"Very likely\") */\n npsHighLabel?: string;\n\n // Appearance\n /** Button position relative to parent */\n position?: Position;\n /** Button size */\n size?: Size;\n /** Color theme */\n theme?: Theme;\n /** Custom style overrides */\n customStyles?: GotchaStyles;\n /** Control visibility programmatically */\n visible?: boolean;\n /** Only show when parent is hovered (default: true) */\n showOnHover?: boolean;\n /** Mobile behavior (default: 'always-visible') */\n touchBehavior?: TouchBehavior;\n\n // Content\n /** Custom prompt text */\n promptText?: string;\n /** Input placeholder text */\n placeholder?: string;\n /** Submit button text */\n submitText?: string;\n /** Post-submission message */\n thankYouMessage?: string;\n\n // Bug flagging\n /** Show \"Report an issue\" toggle in feedback form (default: false) */\n enableBugFlag?: boolean;\n /** Custom label for the bug flag toggle (default: \"Report an issue\") */\n bugFlagLabel?: string;\n /** Enable screenshot capture when bug flag is toggled (uses modern-screenshot, bundled — no extra install needed) */\n enableScreenshot?: boolean;\n\n // Deduplication\n /** When true and user has already responded, show submitted state and allow review/edit instead of new submission */\n onePerUser?: boolean;\n /** When onePerUser is true, allow a new submission after this many days. Has no effect without onePerUser. */\n cooldownDays?: number;\n /** After submission, hide the widget for this many days (client-side, localStorage).\n * Independent of cooldownDays — the widget stays hidden for the full duration even if cooldown expires sooner. */\n hideAfterSubmitDays?: number;\n\n // Trigger conditions\n /** Delay showing widget by N seconds after page load */\n showAfterSeconds?: number;\n /** Show widget after user scrolls past this percentage (0-100) */\n showAfterScrollPercent?: number;\n /** Show widget after user has visited N times (uses localStorage) */\n showAfterVisits?: number;\n\n // Follow-up\n /** Show a follow-up question after low rating or negative vote */\n followUp?: {\n /** Rating threshold (inclusive) — e.g., 2 means ratings 1-2 trigger follow-up */\n ratingThreshold?: number;\n /** Also trigger on negative vote */\n onNegativeVote?: boolean;\n /** The prompt text shown */\n promptText: string;\n /** Placeholder for the follow-up textarea */\n placeholder?: string;\n };\n\n // Animation\n /** Enable entrance animations on the button and modal (default: true) */\n animated?: boolean;\n\n // Callbacks\n /** Called after successful submission */\n onSubmit?: (response: GotchaResponse) => void;\n /** Called when modal opens */\n onOpen?: () => void;\n /** Called when modal closes */\n onClose?: () => void;\n /** Called on error */\n onError?: (error: GotchaError) => void;\n}\n\nexport function Gotcha({\n elementId,\n user,\n mode = 'feedback',\n showText = true,\n showRating = true,\n voteLabels,\n options,\n allowMultiple = false,\n npsQuestion,\n npsFollowUp = true,\n npsFollowUpPlaceholder,\n npsLowLabel,\n npsHighLabel,\n enableBugFlag = false,\n bugFlagLabel,\n enableScreenshot = false,\n onePerUser = false,\n cooldownDays,\n hideAfterSubmitDays,\n showAfterSeconds,\n showAfterScrollPercent,\n showAfterVisits,\n followUp,\n animated = true,\n position = DEFAULTS.POSITION,\n size = DEFAULTS.SIZE,\n theme = DEFAULTS.THEME,\n customStyles,\n visible = true,\n showOnHover = DEFAULTS.SHOW_ON_HOVER,\n touchBehavior = DEFAULTS.TOUCH_BEHAVIOR,\n promptText,\n placeholder,\n submitText = DEFAULTS.SUBMIT_TEXT,\n thankYouMessage = DEFAULTS.THANK_YOU_MESSAGE,\n onSubmit,\n onOpen,\n onClose,\n onError,\n}: GotchaProps) {\n const { disabled, activeModalId, openModal, closeModal, defaultUser, client } = useGotchaContext();\n\n const { conditionsMet } = useTriggerConditions({\n elementId,\n showAfterSeconds,\n showAfterScrollPercent,\n showAfterVisits,\n });\n\n const { isHidden, markHidden } = useHideAfterSubmit({\n elementId,\n userId: user?.id || defaultUser?.id,\n hideAfterSubmitDays,\n });\n const [phase, setPhase] = useState<'form' | 'followUp' | 'success'>('form');\n const [lastResponseId, setLastResponseId] = useState<string | null>(null);\n const [followUpLoading, setFollowUpLoading] = useState(false);\n const [queuedCount, setQueuedCount] = useState(0);\n const [isParentHovered, setIsParentHovered] = useState(false);\n const [anchorRect, setAnchorRect] = useState<DOMRect | null>(null);\n const [isMobile, setIsMobile] = useState(false);\n const [hasMounted, setHasMounted] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const autoCloseTimerRef = useRef<ReturnType<typeof setTimeout>>();\n const lastSubmitDataRef = useRef<{ rating?: number; vote?: 'up' | 'down' } | null>(null);\n\n // SSR-safe mount detection\n useEffect(() => {\n setHasMounted(true);\n setIsMobile(window.innerWidth < 640);\n return () => {\n clearTimeout(autoCloseTimerRef.current);\n };\n }, []);\n\n // Track offline queue length\n useEffect(() => {\n setQueuedCount(client.getQueueLength());\n const handleOnline = () => {\n // Queue will be flushed by provider; update count after a delay\n setTimeout(() => setQueuedCount(client.getQueueLength()), 2000);\n };\n window.addEventListener('online', handleOnline);\n return () => window.removeEventListener('online', handleOnline);\n }, [client]);\n\n const isOpen = activeModalId === elementId;\n\n // Reset phase when modal is closed externally (e.g., another modal opens)\n useEffect(() => {\n if (!isOpen) {\n setPhase('form');\n clearTimeout(autoCloseTimerRef.current);\n }\n }, [isOpen]);\n\n // Scroll lock on mobile when modal is open\n useEffect(() => {\n if (!isOpen || !isMobile) return;\n const prev = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n return () => { document.body.style.overflow = prev; };\n }, [isOpen, isMobile]);\n\n // Attach hover listeners to the parent element\n useEffect(() => {\n if (!showOnHover) return;\n\n const container = containerRef.current;\n if (!container) return;\n\n const parent = container.parentElement;\n if (!parent) return;\n\n const handleMouseEnter = () => setIsParentHovered(true);\n const handleMouseLeave = () => setIsParentHovered(false);\n\n parent.addEventListener('mouseenter', handleMouseEnter);\n parent.addEventListener('mouseleave', handleMouseLeave);\n\n return () => {\n parent.removeEventListener('mouseenter', handleMouseEnter);\n parent.removeEventListener('mouseleave', handleMouseLeave);\n };\n }, [showOnHover]);\n\n const { submit, isLoading, isCheckingExisting, error, existingResponse, isEditing } = useSubmit({\n elementId,\n mode,\n pollOptions: options,\n user,\n onePerUser,\n cooldownDays,\n onSuccess: (response) => {\n setLastResponseId(response.id);\n if (hideAfterSubmitDays) markHidden();\n onSubmit?.(response);\n\n // Check if follow-up should trigger\n const shouldFollowUp = followUp && lastSubmitDataRef.current && (\n (followUp.ratingThreshold != null && lastSubmitDataRef.current.rating != null &&\n lastSubmitDataRef.current.rating <= followUp.ratingThreshold) ||\n (followUp.onNegativeVote && lastSubmitDataRef.current.vote === 'down')\n );\n\n if (shouldFollowUp && mode !== 'poll') {\n setPhase('followUp');\n } else {\n setPhase('success');\n autoCloseTimerRef.current = setTimeout(() => {\n closeModal();\n setPhase('form');\n }, 3000);\n }\n },\n onError: (err) => {\n console.warn('[Gotcha] Submission failed:', err instanceof Error ? err.message : err);\n onError?.(err as unknown as GotchaError);\n },\n });\n\n const handleOpen = useCallback(() => {\n if (containerRef.current) {\n // Measure the actual button element, not the container div.\n // The container (inline-flex) can be larger than the button due to\n // line-height, baseline alignment, or inherited layout styles from\n // the parent — causing the modal to appear with a gap.\n const button = containerRef.current.querySelector('button');\n setAnchorRect((button ?? containerRef.current).getBoundingClientRect());\n }\n openModal(elementId);\n onOpen?.();\n }, [elementId, openModal, onOpen]);\n\n const handleClose = useCallback(() => {\n clearTimeout(autoCloseTimerRef.current);\n closeModal();\n setPhase('form');\n onClose?.();\n }, [closeModal, onClose]);\n\n // Wrap submit to capture rating/vote for follow-up check\n const handleSubmit = useCallback(\n (data: { content?: string; rating?: number; vote?: 'up' | 'down'; pollSelected?: string[]; isBug?: boolean }) => {\n lastSubmitDataRef.current = { rating: data.rating, vote: data.vote };\n submit(data);\n },\n [submit]\n );\n\n // Handle follow-up submission\n const handleFollowUpSubmit = useCallback(\n async (content: string) => {\n if (!lastResponseId) return;\n setFollowUpLoading(true);\n try {\n await client.updateResponse(lastResponseId, { content });\n } catch (err) {\n // If follow-up fails, still show success — initial response is already saved\n console.warn('[Gotcha] Follow-up submission failed:', err instanceof Error ? err.message : err);\n } finally {\n setFollowUpLoading(false);\n setPhase('success');\n autoCloseTimerRef.current = setTimeout(() => {\n closeModal();\n setPhase('form');\n }, 3000);\n }\n },\n [lastResponseId, closeModal, client]\n );\n\n const effectiveSubmitText = (onePerUser && isEditing) ? 'Update' : submitText;\n\n if (disabled || !visible || isHidden || !conditionsMet) return null;\n\n const positionStyles: Record<Position, React.CSSProperties> = {\n 'top-right': { position: 'absolute', top: 0, right: 0, transform: 'translate(50%, -50%)' },\n 'top-left': { position: 'absolute', top: 0, left: 0, transform: 'translate(-50%, -50%)' },\n 'bottom-right': { position: 'absolute', bottom: 0, right: 0, transform: 'translate(50%, 50%)' },\n 'bottom-left': { position: 'absolute', bottom: 0, left: 0, transform: 'translate(-50%, 50%)' },\n 'inline': { position: 'relative', display: 'inline-flex' },\n };\n\n const modalProps = {\n mode,\n theme,\n customStyles,\n promptText,\n placeholder,\n submitText: effectiveSubmitText,\n thankYouMessage,\n isLoading,\n isCheckingExisting: onePerUser && isCheckingExisting,\n isSubmitted: phase === 'success',\n phase,\n followUpConfig: followUp,\n followUpLoading,\n onFollowUpSubmit: handleFollowUpSubmit,\n error,\n existingResponse: onePerUser ? existingResponse : null,\n isEditing: onePerUser && isEditing,\n showText,\n showRating,\n voteLabels,\n options,\n allowMultiple,\n npsQuestion,\n npsFollowUp,\n npsFollowUpPlaceholder,\n npsLowLabel,\n npsHighLabel,\n enableBugFlag,\n bugFlagLabel,\n enableScreenshot,\n onSubmit: handleSubmit,\n onClose: handleClose,\n anchorRect: anchorRect || undefined,\n useFixedPosition: !isMobile,\n };\n\n return (\n <div\n ref={containerRef}\n style={{\n ...positionStyles[position],\n zIndex: isOpen ? 10000 : 'auto',\n }}\n className=\"gotcha-container\"\n data-gotcha-element={elementId}\n >\n <GotchaButton\n size={size}\n theme={theme}\n customStyles={customStyles}\n showOnHover={showOnHover}\n touchBehavior={touchBehavior}\n onClick={handleOpen}\n isOpen={isOpen}\n isParentHovered={isParentHovered}\n animated={animated}\n queuedCount={queuedCount}\n />\n\n {/* Desktop: portal without backdrop, anchored via fixed positioning */}\n {isOpen && !isMobile && hasMounted && createPortal(\n <GotchaModal {...modalProps} />,\n document.body\n )}\n\n {/* Mobile: frosted glass backdrop portal */}\n {isOpen && isMobile && hasMounted && createPortal(\n <div\n role=\"presentation\"\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 99999,\n backgroundColor: 'rgba(0,0,0,0.4)',\n backdropFilter: 'blur(8px)',\n WebkitBackdropFilter: 'blur(8px)',\n }}\n className=\"gotcha-overlay-enter\"\n onClick={handleClose}\n >\n <div onClick={(e) => e.stopPropagation()}>\n <GotchaModal {...modalProps} />\n </div>\n </div>,\n document.body\n )}\n </div>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { useGotchaContext } from '../components/GotchaProvider';\nimport { ScoreData } from '../types';\n\ninterface UseScoreOptions {\n elementId: string;\n refreshInterval?: number;\n}\n\ninterface UseScoreResult {\n score: ScoreData | null;\n isLoading: boolean;\n error: string | null;\n}\n\nexport function useScore({ elementId, refreshInterval }: UseScoreOptions): UseScoreResult {\n const { client } = useGotchaContext();\n const [score, setScore] = useState<ScoreData | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n\n const fetchScore = async () => {\n try {\n const data = await client.getScore(elementId);\n if (!cancelled) {\n setScore(data);\n setError(null);\n }\n } catch (err) {\n if (!cancelled) {\n setError(err instanceof Error ? err.message : 'Failed to load score');\n }\n } finally {\n if (!cancelled) {\n setIsLoading(false);\n }\n }\n };\n\n fetchScore();\n\n let intervalId: ReturnType<typeof setInterval> | undefined;\n if (refreshInterval && refreshInterval > 0) {\n intervalId = setInterval(fetchScore, refreshInterval);\n }\n\n return () => {\n cancelled = true;\n if (intervalId) clearInterval(intervalId);\n };\n }, [client, elementId, refreshInterval]);\n\n return { score, isLoading, error };\n}\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { Theme, Size } from '../types';\nimport { useScore } from '../hooks/useScore';\nimport { resolveTheme } from '../theme/resolveTheme';\nimport { useGotchaContext } from './GotchaProvider';\n\nexport type ScoreVariant = 'stars' | 'number' | 'compact' | 'votes';\n\nexport interface GotchaScoreProps {\n elementId: string;\n variant?: ScoreVariant;\n showCount?: boolean;\n size?: Size;\n theme?: Theme;\n refreshInterval?: number;\n style?: React.CSSProperties;\n}\n\nconst SIZE_MAP: Record<Size, {\n fontSize: number;\n ratingFontSize: number;\n starSize: number;\n gap: number;\n pillPx: number;\n pillPy: number;\n barHeight: number;\n iconSize: number;\n}> = {\n sm: { fontSize: 11, ratingFontSize: 13, starSize: 13, gap: 5, pillPx: 8, pillPy: 4, barHeight: 3, iconSize: 12 },\n md: { fontSize: 12.5, ratingFontSize: 15, starSize: 15, gap: 6, pillPx: 10, pillPy: 5, barHeight: 4, iconSize: 14 },\n lg: { fontSize: 14, ratingFontSize: 18, starSize: 18, gap: 8, pillPx: 12, pillPy: 6, barHeight: 5, iconSize: 16 },\n};\n\n/** Crisp, rounded 5-point star SVG with partial fill via clipPath */\nfunction Stars({ rating, size, filledColor, emptyColor }: {\n rating: number;\n size: number;\n filledColor: string;\n emptyColor: string;\n}) {\n const clipId = `gotcha-star-clip-${Math.random().toString(36).slice(2, 8)}`;\n const stars = [];\n for (let i = 1; i <= 5; i++) {\n const fill = Math.min(1, Math.max(0, rating - (i - 1)));\n const id = `${clipId}-${i}`;\n stars.push(\n <svg key={i} width={size} height={size} viewBox=\"0 0 24 24\" style={{ display: 'block' }}>\n <defs>\n <clipPath id={id}>\n <rect x=\"0\" y=\"0\" width={24 * fill} height=\"24\" />\n </clipPath>\n </defs>\n <path\n d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"\n fill={emptyColor}\n />\n <path\n d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"\n fill={filledColor}\n clipPath={`url(#${id})`}\n />\n </svg>\n );\n }\n return <span style={{ display: 'inline-flex', gap: Math.max(1, size * 0.08), alignItems: 'center' }}>{stars}</span>;\n}\n\n/** Compact positive rate bar */\nfunction PositiveBar({ rate, height, filledColor, trackColor }: {\n rate: number;\n height: number;\n filledColor: string;\n trackColor: string;\n}) {\n return (\n <span style={{\n display: 'inline-block',\n width: 48,\n height,\n borderRadius: height,\n backgroundColor: trackColor,\n overflow: 'hidden',\n verticalAlign: 'middle',\n }}>\n <span style={{\n display: 'block',\n width: `${rate}%`,\n height: '100%',\n borderRadius: height,\n background: filledColor,\n transition: 'width 0.6s cubic-bezier(0.4, 0, 0.2, 1)',\n }} />\n </span>\n );\n}\n\n/** Thumbs up SVG icon */\nfunction ThumbIcon({ size, color }: { size: number; color: string }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill={color} style={{ display: 'block' }}>\n <path d=\"M2 20h2c.55 0 1-.45 1-1v-9c0-.55-.45-1-1-1H2v11zm19.83-7.12c.11-.25.17-.52.17-.8V11c0-1.1-.9-2-2-2h-5.5l.92-4.65c.05-.22.02-.46-.08-.66a4.8 4.8 0 00-.88-1.12L14 2 7.59 8.41C7.21 8.79 7 9.3 7 9.83v7.84C7 18.95 8.05 20 9.34 20h8.11c.7 0 1.36-.37 1.72-.97l2.66-6.15z\" />\n </svg>\n );\n}\n\nexport function GotchaScore({\n elementId,\n variant = 'stars',\n showCount = true,\n size = 'md',\n theme = 'auto',\n refreshInterval,\n style,\n}: GotchaScoreProps) {\n const { score, isLoading } = useScore({ elementId, refreshInterval });\n const [systemTheme, setSystemTheme] = useState<'light' | 'dark'>('light');\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const mq = window.matchMedia('(prefers-color-scheme: dark)');\n setSystemTheme(mq.matches ? 'dark' : 'light');\n const handler = (e: MediaQueryListEvent) => setSystemTheme(e.matches ? 'dark' : 'light');\n mq.addEventListener('change', handler);\n return () => mq.removeEventListener('change', handler);\n }, []);\n\n const { themeConfig } = useGotchaContext();\n const t = useMemo(() => resolveTheme(theme, systemTheme, themeConfig), [theme, systemTheme, themeConfig]);\n\n if (isLoading || !score) return null;\n const s = SIZE_MAP[size];\n\n // Color tokens from resolved theme\n const ratingColor = t.colors.text;\n const mutedColor = t.colors.textDisabled;\n const starFilled = t.colors.starFilled;\n const starEmpty = t.colors.starEmpty;\n const positiveColor = t.colors.voteUp;\n const positiveTrack = t.colors.starEmpty;\n\n const baseStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: s.gap,\n fontFamily: t.typography.fontFamily,\n lineHeight: 1,\n letterSpacing: '-0.01em',\n WebkitFontSmoothing: 'antialiased',\n ...style,\n };\n\n const countText = (n: number, singular: string) => {\n const label = n === 1 ? singular : `${singular}s`;\n return `${n.toLocaleString()} ${label}`;\n };\n\n // ── Votes variant ──────────────────────────────────────────────\n if (variant === 'votes') {\n const { voteCount, positiveRate } = score;\n const total = voteCount.up + voteCount.down;\n if (total === 0) return null;\n\n return (\n <span style={baseStyle}>\n <ThumbIcon size={s.iconSize} color={positiveColor} />\n <span style={{ fontSize: s.ratingFontSize, fontWeight: 600, color: positiveColor, fontVariantNumeric: 'tabular-nums' }}>\n {positiveRate}%\n </span>\n <PositiveBar rate={positiveRate ?? 0} height={s.barHeight} filledColor={positiveColor} trackColor={positiveTrack} />\n {showCount && (\n <span style={{ fontSize: s.fontSize, color: mutedColor, fontWeight: 400 }}>\n {countText(total, 'vote')}\n </span>\n )}\n </span>\n );\n }\n\n // ── Rating-based variants ──────────────────────────────────────\n const { averageRating, totalResponses } = score;\n if (averageRating === null || totalResponses === 0) return null;\n\n const displayRating = averageRating.toFixed(1);\n\n // ── Compact ────────────────────────────────────────────────────\n if (variant === 'compact') {\n return (\n <span style={baseStyle}>\n <svg width={s.starSize} height={s.starSize} viewBox=\"0 0 24 24\" style={{ display: 'block', flexShrink: 0 }}>\n <path\n d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"\n fill={starFilled}\n />\n </svg>\n <span style={{ fontSize: s.ratingFontSize, fontWeight: 700, color: ratingColor, fontVariantNumeric: 'tabular-nums' }}>\n {displayRating}\n </span>\n {showCount && (\n <span style={{ fontSize: s.fontSize, color: mutedColor, fontWeight: 400 }}>\n ({totalResponses.toLocaleString()})\n </span>\n )}\n </span>\n );\n }\n\n // ── Number ─────────────────────────────────────────────────────\n if (variant === 'number') {\n return (\n <span style={baseStyle}>\n <span style={{ fontSize: s.ratingFontSize, fontWeight: 700, color: ratingColor, fontVariantNumeric: 'tabular-nums' }}>\n {displayRating}\n </span>\n <span style={{ fontSize: s.fontSize, color: mutedColor, fontWeight: 400 }}>/ 5</span>\n {showCount && (\n <span style={{\n fontSize: s.fontSize,\n color: mutedColor,\n fontWeight: 400,\n marginLeft: 2,\n }}>\n ({countText(totalResponses, 'response')})\n </span>\n )}\n </span>\n );\n }\n\n // ── Stars (default) ────────────────────────────────────────────\n return (\n <span style={baseStyle}>\n <Stars rating={averageRating} size={s.starSize} filledColor={starFilled} emptyColor={starEmpty} />\n <span style={{ fontSize: s.ratingFontSize, fontWeight: 700, color: ratingColor, fontVariantNumeric: 'tabular-nums' }}>\n {displayRating}\n </span>\n {showCount && (\n <span style={{ fontSize: s.fontSize, color: mutedColor, fontWeight: 400 }}>\n ({countText(totalResponses, 'response')})\n </span>\n )}\n </span>\n );\n}\n","import { useGotchaContext } from '../components/GotchaProvider';\n\n/**\n * Hook to access Gotcha context\n * Must be used within a GotchaProvider\n */\nexport function useGotcha() {\n const { client, disabled, defaultUser, debug, openModal, closeModal, activeModalId } = useGotchaContext();\n\n return {\n /** The API client for manual submissions */\n client,\n /** Whether Gotcha is globally disabled */\n disabled,\n /** Default user metadata */\n defaultUser,\n /** Whether debug mode is enabled */\n debug,\n /** Submit feedback programmatically */\n submitFeedback: client.submitResponse.bind(client),\n /** Open a specific Gotcha modal by elementId */\n openModal,\n /** Close the currently open modal */\n closeModal,\n /** The currently open modal's elementId, or null */\n activeModalId,\n };\n}\n","import { useCallback } from 'react';\nimport { useGotchaContext } from '../components/GotchaProvider';\n\n/**\n * Hook to programmatically open/close a specific Gotcha widget.\n * The corresponding <Gotcha elementId=\"...\"> must be mounted for the modal to render.\n */\nexport function useGotchaTrigger(elementId: string) {\n const { activeModalId, openModal, closeModal } = useGotchaContext();\n\n const open = useCallback(() => openModal(elementId), [openModal, elementId]);\n const close = useCallback(() => closeModal(), [closeModal]);\n\n return {\n open,\n close,\n isOpen: activeModalId === elementId,\n };\n}\n"]}