@census-ai/census-sdk 0.2.3 → 0.2.4
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/react/index.cjs +42 -2
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.js +42 -2
- package/dist/react/index.js.map +1 -1
- package/package.json +1 -1
package/dist/react/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/client.ts","../../src/react/context.tsx","../../src/react/hooks.ts","../../src/react/components/FeedbackButton.tsx","../../src/react/components/KnowledgeBase.tsx","../../src/react/components/Requests.tsx","../../src/react/components/HelpCenter.tsx"],"names":["DEFAULT_BASE_URL","CensusClient","config","prefix","user","options","validTypes","response","params","queryString","url","slugOrId","error","feedbackId","eventType","properties","events","event","guideId","path","method","body","headers","errorMessage","args","createCensus","CensusContext","createContext","CensusProvider","apiKey","baseUrl","debug","theme","children","isReady","setIsReady","useState","isIdentified","setIsIdentified","client","useMemo","useEffect","value","jsx","useCensus","context","useContext","useCensusContext","useIdentify","isIdentifying","setIsIdentifying","setError","err","useFeedback","isSubmitting","setIsSubmitting","isSuccess","setIsSuccess","setFeedbackId","submitFeedback","useCallback","result","reset","useArticles","data","setData","isLoading","setIsLoading","fetchArticles","useArticle","article","setArticle","fetchArticle","defaultSettings","useRequests","fetchRequests","useVote","isVoting","setIsVoting","useTrack","track","trackBatch","useFeatureGroups","featureGroups","setFeatureGroups","fetchFeatureGroups","defaultStyles","positionStyles","feedbackTypeLabels","feedbackTypeEmojis","getThemeStyles","FeedbackButton","position","text","allowedTypes","themeProp","onSubmit","onError","contextTheme","isOpen","setIsOpen","selectedType","setSelectedType","message","setMessage","themeStyles","handleOpen","handleClose","handleSubmit","e","feedbackData","jsxs","Fragment","FeedbackModal","onClose","onTypeChange","onMessageChange","type","KnowledgeBase","showSearch","showCategories","defaultCategory","className","onArticleView","searchQuery","setSearchQuery","selectedCategory","setSelectedCategory","selectedArticleSlug","setSelectedArticleSlug","articles","isLoadingArticles","articlesError","selectedArticle","isLoadingArticle","articleError","categories","cats","handleArticleClick","handleBack","category","typeConfig","statusConfig","formatDate","dateString","FORM_TYPES","Requests","status","limit","showEmptyState","onRequestClick","hoveredId","setHoveredId","showForm","setShowForm","formType","setFormType","formMessage","setFormMessage","localVotes","setLocalVotes","requests","refetch","settings","vote","handleRequestClick","request","handleVote","currentCount","currentHasVoted","prev","getVoteInfo","local","renderForm","t","canVote","typeInfo","statusInfo","isHovered","voteInfo","defaultTabLabels","feedbackTypeConfig","SearchIcon","BookIcon","ChevronRightIcon","ChevronDownIcon","ArrowLeftIcon","ClockIcon","LayersIcon","MessageIcon","PlusIcon","LoaderIcon","styles","spinnerStyles","HelpCenter","tabs","defaultTab","tabLabels","activeTab","setActiveTab","setSelectedArticle","expandedGroups","setExpandedGroups","selectedFeatureId","setSelectedFeatureId","searchInputRef","useRef","articlesLoading","fullArticle","articleLoading","requestsLoading","refetchRequests","groupsLoading","mergedLabels","handleKeyDown","toggleGroup","groupId","next","filteredArticles","renderArticleDetail","renderArticles","renderRequestForm","renderRequests","tab","group","feature"],"mappings":"gFAoBA,IAAMA,GAAmB,uBAAA,CAkBZC,EAAAA,CAAN,KAAmB,CAMxB,WAAA,CAAYC,EAAsB,CAFlC,IAAA,CAAQ,cAA+B,IAAA,CAGrC,GAAI,CAACA,CAAAA,CAAO,MAAA,CACV,MAAM,IAAI,KAAA,CAAM,4BAA4B,CAAA,CAIxB,CAAC,WAAY,UAAA,CAAY,UAAA,CAAY,UAAU,CAAA,CAClD,IAAA,CAAKC,GAAUD,CAAAA,CAAO,MAAA,CAAO,WAAWC,CAAM,CAAC,GAChE,OAAA,CAAQ,IAAA,CAAK,4DAA4D,CAAA,CAG3E,IAAA,CAAK,OAASD,CAAAA,CAAO,MAAA,CACrB,KAAK,OAAA,CAAUA,CAAAA,CAAO,SAAWF,EAAAA,CACjC,IAAA,CAAK,MAAQE,CAAAA,CAAO,KAAA,EAAS,MAE7B,IAAA,CAAK,GAAA,CAAI,6BAA8B,IAAA,CAAK,OAAO,EACrD,CAmBA,MAAM,SAASE,CAAAA,CAAmC,CAChD,GAAI,CAACA,CAAAA,CAAK,OACR,MAAM,IAAI,MAAM,2CAA2C,CAAA,CAG7D,KAAK,aAAA,CAAgBA,CAAAA,CAAK,OAE1B,MAAM,IAAA,CAAK,QAAQ,mBAAA,CAAqB,MAAA,CAAQ,CAC9C,MAAA,CAAQA,EAAK,MAAA,CACb,KAAA,CAAOA,EAAK,KAAA,CACZ,IAAA,CAAMA,EAAK,IAAA,CACX,SAAA,CAAWA,EAAK,SAAA,CAChB,QAAA,CAAUA,EAAK,QAAA,CACf,cAAA,CAAgBA,EAAK,cAAA,CACrB,gBAAA,CAAkBA,EAAK,gBAAA,CACvB,kBAAA,CAAoBA,EAAK,kBAAA,CACzB,gBAAA,CAAkBA,EAAK,gBACzB,CAAC,EAED,IAAA,CAAK,GAAA,CAAI,mBAAoBA,CAAAA,CAAK,MAAM,EAC1C,CAMA,KAAA,EAAc,CACZ,IAAA,CAAK,aAAA,CAAgB,KACrB,IAAA,CAAK,GAAA,CAAI,qBAAqB,EAChC,CA8BA,MAAM,cAAA,CAAeC,CAAAA,CAA2D,CAC9E,IAAMC,CAAAA,CAAa,CAAC,UAAA,CAAY,YAAA,CAAc,kBAAmB,gBAAgB,CAAA,CACjF,GAAI,CAACD,CAAAA,CAAQ,MAAQ,CAACC,CAAAA,CAAW,SAASD,CAAAA,CAAQ,IAAI,EACpD,MAAM,IAAI,MAAM,CAAA,6BAAA,EAAgCC,CAAAA,CAAW,KAAK,IAAI,CAAC,EAAE,CAAA,CAGzE,GAAID,EAAQ,IAAA,GAAS,gBAAA,CAAA,CACnB,GAAIA,CAAAA,CAAQ,MAAA,GAAW,QAAaA,CAAAA,CAAQ,OAAA,GAAY,OACtD,MAAM,IAAI,MAAM,yDAAyD,CAAA,CAAA,KAAA,GAElE,CAACA,CAAAA,CAAQ,QAClB,MAAM,IAAI,MAAM,oDAAoD,CAAA,CAGtE,IAAME,CAAAA,CAAW,MAAM,KAAK,OAAA,CAC1B,mBAAA,CACA,OACA,CACE,IAAA,CAAMF,EAAQ,IAAA,CACd,OAAA,CAASA,EAAQ,OAAA,CACjB,MAAA,CAAQA,EAAQ,MAAA,CAChB,OAAA,CAASA,EAAQ,OAAA,CACjB,MAAA,CAAQ,KAAK,aAAA,CACb,SAAA,CAAWA,EAAQ,SAAA,CACnB,OAAA,CAAS,OAAO,MAAA,CAAW,GAAA,CAAc,OAAO,QAAA,CAAS,IAAA,CAAO,OAChE,QAAA,CAAUA,CAAAA,CAAQ,QACpB,CACF,CAAA,CAEA,YAAK,GAAA,CAAI,qBAAA,CAAuBE,EAAS,UAAU,CAAA,CAC5C,CAAE,UAAA,CAAYA,CAAAA,CAAS,UAAW,CAC3C,CAoBA,MAAM,WAAA,CAAYF,CAAAA,CAAsD,CACtE,IAAMG,CAAAA,CAAS,IAAI,eAAA,CACfH,CAAAA,EAAS,UAAUG,CAAAA,CAAO,GAAA,CAAI,WAAYH,CAAAA,CAAQ,QAAQ,EAC1DA,CAAAA,EAAS,MAAA,EAAQG,EAAO,GAAA,CAAI,QAAA,CAAUH,EAAQ,MAAM,CAAA,CACpDA,GAAS,KAAA,EAAOG,CAAAA,CAAO,IAAI,OAAA,CAAS,MAAA,CAAOH,EAAQ,KAAK,CAAC,EACzDA,CAAAA,EAAS,MAAA,EAAQG,CAAAA,CAAO,GAAA,CAAI,SAAU,MAAA,CAAOH,CAAAA,CAAQ,MAAM,CAAC,CAAA,CAEhE,IAAMI,CAAAA,CAAcD,CAAAA,CAAO,UAAS,CAC9BE,CAAAA,CAAM,oBAAoBD,CAAAA,CAAc,CAAA,CAAA,EAAIA,CAAW,CAAA,CAAA,CAAK,EAAE,GAE9DF,CAAAA,CAAW,MAAM,KAAK,OAAA,CAA0BG,CAAAA,CAAK,KAAK,CAAA,CAChE,OAAA,IAAA,CAAK,IAAI,mBAAA,CAAqBH,CAAAA,CAAS,SAAS,MAAM,CAAA,CAC/CA,CACT,CAgBA,MAAM,WAAWI,CAAAA,CAA2C,CAC1D,GAAI,CACF,IAAMJ,EAAW,MAAM,IAAA,CAAK,QAC1B,CAAA,kBAAA,EAAqB,kBAAA,CAAmBI,CAAQ,CAAC,CAAA,CAAA,CACjD,KACF,CAAA,CACA,OAAA,IAAA,CAAK,IAAI,kBAAA,CAAoBA,CAAQ,EAC9BJ,CAAAA,CAAS,OAClB,OAASK,CAAAA,CAAO,CACd,GAAKA,CAAAA,CAAsB,MAAA,GAAW,IACpC,OAAO,IAAA,CAET,MAAMA,CACR,CACF,CAgBA,MAAM,gBAAA,EAAmD,CACvD,IAAML,CAAAA,CAAW,MAAM,IAAA,CAAK,OAAA,CAC1B,0BACA,KACF,CAAA,CACA,YAAK,GAAA,CAAI,yBAAA,CAA2BA,EAAS,cAAA,CAAe,MAAM,EAC3DA,CACT,CAqBA,MAAM,WAAA,CAAYF,EAAsD,CACtE,GAAI,CAAC,IAAA,CAAK,aAAA,CACR,MAAM,IAAI,KAAA,CAAM,kFAAkF,CAAA,CAGpG,IAAMG,EAAS,IAAI,eAAA,CACnBA,EAAO,GAAA,CAAI,QAAA,CAAU,KAAK,aAAa,CAAA,CACnCH,GAAS,MAAA,EAAQG,CAAAA,CAAO,IAAI,QAAA,CAAUH,CAAAA,CAAQ,MAAM,CAAA,CACpDA,CAAAA,EAAS,MAAMG,CAAAA,CAAO,GAAA,CAAI,OAAQH,CAAAA,CAAQ,IAAI,EAC9CA,CAAAA,EAAS,KAAA,EAAOG,EAAO,GAAA,CAAI,OAAA,CAAS,OAAOH,CAAAA,CAAQ,KAAK,CAAC,CAAA,CACzDA,CAAAA,EAAS,QAAQG,CAAAA,CAAO,GAAA,CAAI,SAAU,MAAA,CAAOH,CAAAA,CAAQ,MAAM,CAAC,CAAA,CAEhE,IAAME,CAAAA,CAAW,MAAM,KAAK,OAAA,CAC1B,CAAA,kBAAA,EAAqBC,EAAO,QAAA,EAAU,GACtC,KACF,CAAA,CACA,YAAK,GAAA,CAAI,mBAAA,CAAqBD,EAAS,QAAA,CAAS,MAAM,EAC/CA,CACT,CAmBA,MAAM,IAAA,CAAKM,CAAAA,CAKR,CACD,GAAI,CAAC,KAAK,aAAA,CACR,MAAM,IAAI,KAAA,CAAM,uEAAuE,EAGzF,GAAI,CAACA,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,2CAA2C,EAG7D,IAAMN,CAAAA,CAAW,MAAM,IAAA,CAAK,OAAA,CAKzB,yBAA0B,MAAA,CAAQ,CACnC,WAAAM,CAAAA,CACA,MAAA,CAAQ,KAAK,aACf,CAAC,EAED,OAAA,IAAA,CAAK,GAAA,CAAI,eAAgBN,CAAAA,CAAS,MAAA,CAAQ,gBAAiBM,CAAU,CAAA,CAC9DN,CACT,CAiBA,MAAM,MAAMO,CAAAA,CAAmBC,CAAAA,CAAqD,CAClF,GAAI,CAACD,EACH,MAAM,IAAI,MAAM,2CAA2C,CAAA,CAG7D,MAAM,IAAA,CAAK,OAAA,CAAQ,kBAAmB,MAAA,CAAQ,CAC5C,UAAAA,CAAAA,CACA,MAAA,CAAQ,KAAK,aAAA,CACb,UAAA,CAAAC,CACF,CAAC,CAAA,CAED,KAAK,GAAA,CAAI,gBAAA,CAAkBD,CAAS,EACtC,CAkBA,MAAM,UAAA,CAAWT,CAAAA,CAA4C,CAC3D,GAAI,CAACA,EAAQ,MAAA,EAAUA,CAAAA,CAAQ,OAAO,MAAA,GAAW,CAAA,CAC/C,MAAM,IAAI,KAAA,CAAM,wCAAwC,CAAA,CAG1D,GAAIA,EAAQ,MAAA,CAAO,MAAA,CAAS,IAC1B,MAAM,IAAI,MAAM,sCAAsC,CAAA,CAGxD,IAAMW,CAAAA,CAASX,CAAAA,CAAQ,MAAA,CAAO,GAAA,CAAKY,IAAW,CAC5C,SAAA,CAAWA,EAAM,SAAA,CACjB,MAAA,CAAQ,KAAK,aAAA,CACb,SAAA,CAAWA,EAAM,SAAA,CACjB,SAAA,CAAWA,EAAM,SAAA,CACjB,UAAA,CAAYA,EAAM,UACpB,CAAA,CAAE,EAEF,MAAM,IAAA,CAAK,QAAQ,iBAAA,CAAmB,MAAA,CAAQ,CAAE,MAAA,CAAAD,CAAO,CAAC,CAAA,CAExD,IAAA,CAAK,IAAI,uBAAA,CAAyBX,CAAAA,CAAQ,OAAO,MAAM,EACzD,CAcA,MAAM,SAAA,EAAqC,CACzC,IAAMG,CAAAA,CAAS,IAAI,eAAA,CACf,IAAA,CAAK,eACPA,CAAAA,CAAO,GAAA,CAAI,SAAU,IAAA,CAAK,aAAa,EAGzC,IAAMC,CAAAA,CAAcD,EAAO,QAAA,EAAS,CAC9BE,EAAM,CAAA,eAAA,EAAkBD,CAAAA,CAAc,IAAIA,CAAW,CAAA,CAAA,CAAK,EAAE,CAAA,CAAA,CAE5DF,CAAAA,CAAW,MAAM,IAAA,CAAK,OAAA,CAAwBG,EAAK,KAAK,CAAA,CAC9D,YAAK,GAAA,CAAI,iBAAA,CAAmBH,EAAS,MAAA,CAAO,MAAM,EAC3CA,CACT,CAgBA,MAAM,QAAA,CAASI,CAAAA,CAAyC,CACtD,GAAI,CACF,IAAMH,CAAAA,CAAS,IAAI,gBACf,IAAA,CAAK,aAAA,EACPA,EAAO,GAAA,CAAI,QAAA,CAAU,KAAK,aAAa,CAAA,CAGzC,IAAMC,CAAAA,CAAcD,CAAAA,CAAO,UAAS,CAC9BE,CAAAA,CAAM,mBAAmB,kBAAA,CAAmBC,CAAQ,CAAC,CAAA,EAAGF,CAAAA,CAAc,IAAIA,CAAW,CAAA,CAAA,CAAK,EAAE,CAAA,CAAA,CAE5FF,CAAAA,CAAW,MAAM,IAAA,CAAK,OAAA,CAA0BG,EAAK,KAAK,CAAA,CAChE,YAAK,GAAA,CAAI,gBAAA,CAAkBC,CAAQ,CAAA,CAC5BJ,CAAAA,CAAS,KAClB,CAAA,MAASK,CAAAA,CAAO,CACd,GAAKA,CAAAA,CAAsB,SAAW,GAAA,CACpC,OAAO,KAET,MAAMA,CACR,CACF,CAmBA,MAAM,gBAAgBK,CAAAA,CAA2C,CAC/D,GAAI,CAACA,CAAAA,CAAM,SAAW,CAACA,CAAAA,CAAM,WAAa,CAACA,CAAAA,CAAM,UAC/C,MAAM,IAAI,MAAM,8EAA8E,CAAA,CAGhG,MAAM,IAAA,CAAK,OAAA,CAAQ,yBAA0B,MAAA,CAAQ,CACnD,QAASA,CAAAA,CAAM,OAAA,CACf,UAAWA,CAAAA,CAAM,SAAA,CACjB,OAAQA,CAAAA,CAAM,MAAA,CACd,UAAWA,CAAAA,CAAM,SAAA,CACjB,QAASA,CAAAA,CAAM,OAAA,GAAY,OAAO,MAAA,CAAW,GAAA,CAAc,OAAO,QAAA,CAAS,IAAA,CAAO,MAAA,CAAA,CAClF,SAAA,CAAWA,EAAM,SAAA,CACjB,MAAA,CAAQA,EAAM,MAAA,EAAU,IAAA,CAAK,cAC7B,QAAA,CAAUA,CAAAA,CAAM,QAClB,CAAC,CAAA,CAED,KAAK,GAAA,CAAI,sBAAA,CAAwBA,EAAM,SAAA,CAAWA,CAAAA,CAAM,OAAO,EACjE,CAaA,MAAM,kBAAA,CAAmBC,CAAAA,CAAgC,CACvD,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,sDAAsD,CAAA,CAGxE,GAAI,CAAC,IAAA,CAAK,cACR,MAAM,IAAI,MAAM,wFAAwF,CAAA,CAG1G,MAAM,IAAA,CAAK,OAAA,CAAQ,2BAA4B,MAAA,CAAQ,CACrD,QAAAA,CAAAA,CACA,MAAA,CAAQ,KAAK,aACf,CAAC,EAED,IAAA,CAAK,GAAA,CAAI,0BAA2BA,CAAO,EAC7C,CAKA,gBAAA,EAAkC,CAChC,OAAO,IAAA,CAAK,aACd,CAKA,YAAA,EAAwB,CACtB,OAAO,IAAA,CAAK,aAAA,GAAkB,IAChC,CAKA,MAAc,QAAWC,CAAAA,CAAcC,CAAAA,CAAgBC,EAA4B,CACjF,IAAMX,EAAM,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,EAAGS,CAAI,GAE5BG,CAAAA,CAAkC,CACtC,eAAgB,IAAA,CAAK,MACvB,CAAA,CAEID,CAAAA,GACFC,EAAQ,cAAc,CAAA,CAAI,oBAG5B,IAAA,CAAK,GAAA,CAAI,GAAGF,CAAM,CAAA,CAAA,EAAID,CAAI,CAAA,CAAA,CAAIE,CAAI,EAElC,IAAMd,CAAAA,CAAW,MAAM,KAAA,CAAMG,CAAAA,CAAK,CAChC,MAAA,CAAAU,CAAAA,CACA,QAAAE,CAAAA,CACA,IAAA,CAAMD,EAAO,IAAA,CAAK,SAAA,CAAUA,CAAI,CAAA,CAAI,MACtC,CAAC,CAAA,CAED,GAAI,CAACd,CAAAA,CAAS,EAAA,CAAI,CAChB,IAAIgB,CAAAA,CAAe,8BAA8BhB,CAAAA,CAAS,MAAM,GAChE,GAAI,CAEFgB,GADkB,MAAMhB,CAAAA,CAAS,MAAK,EACb,KAAA,EAASgB,EACpC,CAAA,KAAQ,CAER,CAMA,MAJ2B,CACzB,MAAOA,CAAAA,CACP,MAAA,CAAQhB,EAAS,MACnB,CAEF,CAEA,OAAOA,CAAAA,CAAS,MAClB,CAKQ,OAAOiB,CAAAA,CAAuB,CAChC,KAAK,KAAA,EACP,OAAA,CAAQ,IAAI,UAAA,CAAY,GAAGA,CAAI,EAEnC,CACF,EAkBO,SAASC,EAAAA,CAAavB,EAAoC,CAC/D,OAAO,IAAID,EAAAA,CAAaC,CAAM,CAChC,CC1lBA,IAAMwB,EAAAA,CAAgBC,mBAAAA,CAAyC,IAAI,CAAA,CAsB5D,SAASC,GAAe,CAC7B,MAAA,CAAAC,EACA,OAAA,CAAAC,CAAAA,CACA,MAAAC,CAAAA,CACA,IAAA,CAAA3B,EACA,KAAA,CAAA4B,CAAAA,CAAQ,EAAC,CACT,QAAA,CAAAC,CACF,CAAA,CAAwB,CACtB,GAAM,CAACC,CAAAA,CAASC,CAAU,CAAA,CAAIC,cAAAA,CAAS,KAAK,CAAA,CACtC,CAACC,EAAcC,CAAe,CAAA,CAAIF,eAAS,KAAK,CAAA,CAEhDG,EAASC,aAAAA,CAAQ,IACdf,GAAa,CAAE,MAAA,CAAAI,EAAQ,OAAA,CAAAC,CAAAA,CAAS,MAAAC,CAAM,CAAC,EAC7C,CAACF,CAAAA,CAAQC,EAASC,CAAK,CAAC,EAG3BU,eAAAA,CAAU,IAAM,CACVrC,CAAAA,CACFmC,CAAAA,CACG,SAASnC,CAAI,CAAA,CACb,KAAK,IAAM,CACVkC,EAAgB,IAAI,CAAA,CACpBH,EAAW,IAAI,EACjB,CAAC,CAAA,CACA,KAAA,CAAOvB,GAAU,CAChB,OAAA,CAAQ,MAAM,mCAAA,CAAqCA,CAAK,EACxDuB,CAAAA,CAAW,IAAI,EACjB,CAAC,CAAA,CAEHA,EAAW,IAAI,EAEnB,CAAA,CAAG,CAACI,EAAQnC,CAAI,CAAC,EAEjB,IAAMsC,CAAAA,CAA4BF,cAChC,KAAO,CACL,OAAAD,CAAAA,CACA,KAAA,CAAAP,EACA,OAAA,CAAAE,CAAAA,CACA,aAAAG,CACF,CAAA,CAAA,CACA,CAACE,CAAAA,CAAQP,CAAAA,CAAOE,EAASG,CAAY,CACvC,EAEA,OAAOM,cAAAA,CAACjB,GAAc,QAAA,CAAd,CAAuB,MAAOgB,CAAAA,CAAQ,QAAA,CAAAT,EAAS,CACzD,CAqBO,SAASW,EAAAA,EAA0B,CACxC,IAAMC,CAAAA,CAAUC,gBAAAA,CAAWpB,EAAa,CAAA,CACxC,GAAI,CAACmB,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,gDAAgD,EAElE,OAAOA,CAAAA,CAAQ,MACjB,CAQO,SAASE,GAAuC,CACrD,IAAMF,EAAUC,gBAAAA,CAAWpB,EAAa,EACxC,GAAI,CAACmB,EACH,MAAM,IAAI,MAAM,uDAAuD,CAAA,CAEzE,OAAOA,CACT,CAsBO,SAASG,EAAAA,EAAc,CAC5B,GAAM,CAAE,MAAA,CAAAT,CAAO,CAAA,CAAIQ,CAAAA,GACb,CAACE,CAAAA,CAAeC,CAAgB,CAAA,CAAId,cAAAA,CAAS,KAAK,CAAA,CAClD,CAACxB,CAAAA,CAAOuC,CAAQ,EAAIf,cAAAA,CAAuB,IAAI,EAmBrD,OAAO,CACL,SAlBe,MAAOhC,CAAAA,EAAuB,CAC7C8C,CAAAA,CAAiB,IAAI,EACrBC,CAAAA,CAAS,IAAI,EACb,GAAI,CACF,MAAMZ,CAAAA,CAAO,QAAA,CAASnC,CAAI,EAC5B,CAAA,MAASgD,EAAK,CACZ,MAAAD,EAASC,CAAAA,YAAe,KAAA,CAAQA,EAAM,IAAI,KAAA,CAAM,yBAAyB,CAAC,CAAA,CACpEA,CACR,CAAA,OAAE,CACAF,EAAiB,KAAK,EACxB,CACF,CAAA,CAQE,KAAA,CANY,IAAM,CAClBX,CAAAA,CAAO,QACT,CAAA,CAKE,cAAAU,CAAAA,CACA,YAAA,CAAcV,EAAO,YAAA,EAAa,CAClC,MAAA3B,CACF,CACF,CCpIO,SAASyC,CAAAA,EAAc,CAC5B,GAAM,CAAE,MAAA,CAAAd,CAAO,CAAA,CAAIQ,CAAAA,GACb,CAACO,CAAAA,CAAcC,CAAe,CAAA,CAAInB,cAAAA,CAAS,KAAK,CAAA,CAChD,CAACoB,EAAWC,CAAY,CAAA,CAAIrB,eAAS,KAAK,CAAA,CAC1C,CAACxB,CAAAA,CAAOuC,CAAQ,CAAA,CAAIf,cAAAA,CAAuB,IAAI,CAAA,CAC/C,CAACvB,EAAY6C,CAAa,CAAA,CAAItB,eAAwB,IAAI,CAAA,CAE1DuB,EAAiBC,iBAAAA,CACrB,MAAOvD,GAA6B,CAClCkD,CAAAA,CAAgB,IAAI,CAAA,CACpBE,CAAAA,CAAa,KAAK,CAAA,CAClBN,CAAAA,CAAS,IAAI,CAAA,CACbO,CAAAA,CAAc,IAAI,CAAA,CAElB,GAAI,CACF,IAAMG,CAAAA,CAAS,MAAMtB,CAAAA,CAAO,cAAA,CAAelC,CAAO,CAAA,CAClD,OAAAqD,EAAcG,CAAAA,CAAO,UAAU,EAC/BJ,CAAAA,CAAa,CAAA,CAAI,EACVI,CACT,CAAA,MAAST,EAAK,CACZ,IAAMxC,EAAQwC,CAAAA,YAAe,KAAA,CAAQA,EAAM,IAAI,KAAA,CAAM,2BAA2B,CAAA,CAChF,MAAAD,EAASvC,CAAK,CAAA,CACRA,CACR,CAAA,OAAE,CACA2C,EAAgB,KAAK,EACvB,CACF,CAAA,CACA,CAAChB,CAAM,CACT,CAAA,CAEMuB,EAAQF,iBAAAA,CAAY,IAAM,CAC9BH,CAAAA,CAAa,KAAK,EAClBN,CAAAA,CAAS,IAAI,EACbO,CAAAA,CAAc,IAAI,EACpB,CAAA,CAAG,EAAE,CAAA,CAEL,OAAO,CACL,cAAA,CAAAC,EACA,KAAA,CAAAG,CAAAA,CACA,aAAAR,CAAAA,CACA,SAAA,CAAAE,EACA,KAAA,CAAA5C,CAAAA,CACA,WAAAC,CACF,CACF,CA0BO,SAASkD,EAAAA,CAAY1D,EAA2B,CACrD,GAAM,CAAE,MAAA,CAAAkC,CAAAA,CAAQ,QAAAL,CAAQ,CAAA,CAAIa,GAAiB,CACvC,CAACiB,EAAMC,CAAO,CAAA,CAAI7B,eAAkC,IAAI,CAAA,CACxD,CAAC8B,CAAAA,CAAWC,CAAY,EAAI/B,cAAAA,CAAS,IAAI,EACzC,CAACxB,CAAAA,CAAOuC,CAAQ,CAAA,CAAIf,cAAAA,CAAuB,IAAI,CAAA,CAE/CgC,CAAAA,CAAgBR,kBAAY,SAAY,CAC5CO,EAAa,IAAI,CAAA,CACjBhB,EAAS,IAAI,CAAA,CAEb,GAAI,CACF,IAAMU,EAAS,MAAMtB,CAAAA,CAAO,YAAYlC,CAAO,CAAA,CAC/C4D,EAAQJ,CAAM,EAChB,OAAST,CAAAA,CAAK,CACZD,EAASC,CAAAA,YAAe,KAAA,CAAQA,EAAM,IAAI,KAAA,CAAM,0BAA0B,CAAC,EAC7E,QAAE,CACAe,CAAAA,CAAa,KAAK,EACpB,CACF,EAAG,CAAC5B,CAAAA,CAAQlC,GAAS,QAAA,CAAUA,CAAAA,EAAS,OAAQA,CAAAA,EAAS,KAAA,CAAOA,GAAS,MAAM,CAAC,EAEhF,OAAAoC,eAAAA,CAAU,IAAM,CACVP,CAAAA,EACFkC,IAEJ,CAAA,CAAG,CAAClC,CAAAA,CAASkC,CAAa,CAAC,CAAA,CAEpB,CACL,SAAUJ,CAAAA,EAAM,QAAA,EAAY,EAAC,CAC7B,UAAA,CAAYA,GAAM,UAAA,CAClB,SAAA,CAAAE,EACA,KAAA,CAAAtD,CAAAA,CACA,QAASwD,CACX,CACF,CA0BO,SAASC,EAAAA,CAAW1D,EAAkB,CAC3C,GAAM,CAAE,MAAA,CAAA4B,CAAAA,CAAQ,QAAAL,CAAQ,CAAA,CAAIa,GAAiB,CACvC,CAACuB,EAASC,CAAU,CAAA,CAAInC,eAAyB,IAAI,CAAA,CACrD,CAAC8B,CAAAA,CAAWC,CAAY,EAAI/B,cAAAA,CAAS,IAAI,EACzC,CAACxB,CAAAA,CAAOuC,CAAQ,CAAA,CAAIf,cAAAA,CAAuB,IAAI,CAAA,CAE/CoC,CAAAA,CAAeZ,kBAAY,SAAY,CAC3C,GAAI,CAACjD,CAAAA,CAAU,CACb4D,CAAAA,CAAW,IAAI,EACfJ,CAAAA,CAAa,KAAK,EAClB,MACF,CAEAA,EAAa,IAAI,CAAA,CACjBhB,EAAS,IAAI,CAAA,CAEb,GAAI,CACF,IAAMU,CAAAA,CAAS,MAAMtB,EAAO,UAAA,CAAW5B,CAAQ,EAC/C4D,CAAAA,CAAWV,CAAM,EACnB,CAAA,MAAST,CAAAA,CAAK,CACZD,CAAAA,CAASC,CAAAA,YAAe,MAAQA,CAAAA,CAAM,IAAI,MAAM,yBAAyB,CAAC,EAC5E,CAAA,OAAE,CACAe,EAAa,KAAK,EACpB,CACF,CAAA,CAAG,CAAC5B,EAAQ5B,CAAQ,CAAC,EAErB,OAAA8B,eAAAA,CAAU,IAAM,CACVP,CAAAA,EACFsC,IAEJ,CAAA,CAAG,CAACtC,CAAAA,CAASsC,CAAY,CAAC,CAAA,CAEnB,CACL,QAAAF,CAAAA,CACA,SAAA,CAAAJ,EACA,KAAA,CAAAtD,CAAAA,CACA,QAAS4D,CACX,CACF,CAEA,IAAMC,EAAAA,CAAoC,CACxC,kBAAA,CAAoB,KAAA,CACpB,YAAa,KAAA,CACb,oBAAA,CAAsB,IACxB,CAAA,CA0BO,SAASC,GAAYrE,CAAAA,CAA2B,CACrD,GAAM,CAAE,MAAA,CAAAkC,EAAQ,OAAA,CAAAL,CAAAA,CAAS,aAAAG,CAAa,CAAA,CAAIU,GAAiB,CACrD,CAACiB,EAAMC,CAAO,CAAA,CAAI7B,eAAkC,IAAI,CAAA,CACxD,CAAC8B,CAAAA,CAAWC,CAAY,EAAI/B,cAAAA,CAAS,IAAI,CAAA,CACzC,CAACxB,EAAOuC,CAAQ,CAAA,CAAIf,eAAuB,IAAI,CAAA,CAE/CuC,EAAgBf,iBAAAA,CAAY,SAAY,CAC5C,GAAI,CAACvB,EAAc,CACjB4B,CAAAA,CAAQ,IAAI,CAAA,CACZE,CAAAA,CAAa,KAAK,CAAA,CAClB,MACF,CAEAA,CAAAA,CAAa,IAAI,EACjBhB,CAAAA,CAAS,IAAI,EAEb,GAAI,CACF,IAAMU,CAAAA,CAAS,MAAMtB,EAAO,WAAA,CAAYlC,CAAO,EAC/C4D,CAAAA,CAAQJ,CAAM,EAChB,CAAA,MAAST,CAAAA,CAAK,CACZD,CAAAA,CAASC,CAAAA,YAAe,MAAQA,CAAAA,CAAM,IAAI,MAAM,0BAA0B,CAAC,EAC7E,CAAA,OAAE,CACAe,EAAa,KAAK,EACpB,CACF,CAAA,CAAG,CAAC5B,EAAQF,CAAAA,CAAchC,CAAAA,EAAS,OAAQA,CAAAA,EAAS,IAAA,CAAMA,GAAS,KAAA,CAAOA,CAAAA,EAAS,MAAM,CAAC,CAAA,CAE1F,OAAAoC,eAAAA,CAAU,IAAM,CACVP,CAAAA,GACEG,CAAAA,CACFsC,GAAc,CAGdR,CAAAA,CAAa,KAAK,CAAA,EAGxB,CAAA,CAAG,CAACjC,CAAAA,CAASG,CAAAA,CAAcsC,CAAa,CAAC,CAAA,CAElC,CACL,QAAA,CAAUX,CAAAA,EAAM,QAAA,EAAY,GAC5B,UAAA,CAAYA,CAAAA,EAAM,WAClB,QAAA,CAAUA,CAAAA,EAAM,UAAYS,EAAAA,CAC5B,SAAA,CAAAP,EACA,KAAA,CAAAtD,CAAAA,CACA,QAAS+D,CACX,CACF,CAyBO,SAASC,EAAAA,EAAU,CACxB,GAAM,CAAE,OAAArC,CAAO,CAAA,CAAIQ,GAAiB,CAC9B,CAAC8B,EAAUC,CAAW,CAAA,CAAI1C,eAAS,KAAK,CAAA,CACxC,CAACxB,CAAAA,CAAOuC,CAAQ,EAAIf,cAAAA,CAAuB,IAAI,EAqBrD,OAAO,CACL,KApBWwB,iBAAAA,CACX,MAAO/C,GAAuB,CAC5BiE,CAAAA,CAAY,IAAI,CAAA,CAChB3B,CAAAA,CAAS,IAAI,CAAA,CAEb,GAAI,CAEF,OADe,MAAMZ,EAAO,IAAA,CAAK1B,CAAU,CAE7C,CAAA,MAASuC,CAAAA,CAAK,CACZ,IAAMxC,CAAAA,CAAQwC,aAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAM,gBAAgB,EACrE,MAAAD,CAAAA,CAASvC,CAAK,CAAA,CACRA,CACR,QAAE,CACAkE,CAAAA,CAAY,KAAK,EACnB,CACF,EACA,CAACvC,CAAM,CACT,CAAA,CAIE,QAAA,CAAAsC,EACA,KAAA,CAAAjE,CACF,CACF,CAoBO,SAASmE,EAAAA,EAAW,CACzB,GAAM,CAAE,MAAA,CAAAxC,CAAO,CAAA,CAAIQ,CAAAA,GAEbiC,CAAAA,CAAQpB,iBAAAA,CACZ,MAAO9C,CAAAA,CAAmBC,CAAAA,GAAyC,CACjE,MAAMwB,CAAAA,CAAO,MAAMzB,CAAAA,CAAWC,CAAU,EAC1C,CAAA,CACA,CAACwB,CAAM,CACT,CAAA,CAEM0C,EAAarB,iBAAAA,CACjB,MACE5C,GAMG,CACH,MAAMuB,EAAO,UAAA,CAAW,CAAE,OAAAvB,CAAO,CAAC,EACpC,CAAA,CACA,CAACuB,CAAM,CACT,CAAA,CAEA,OAAO,CACL,KAAA,CAAAyC,EACA,UAAA,CAAAC,CACF,CACF,CA2BO,SAASC,IAAmB,CACjC,GAAM,CAAE,MAAA,CAAA3C,CAAAA,CAAQ,QAAAL,CAAQ,CAAA,CAAIa,GAAiB,CACvC,CAACoC,EAAeC,CAAgB,CAAA,CAAIhD,eAAyB,EAAE,EAC/D,CAAC8B,CAAAA,CAAWC,CAAY,CAAA,CAAI/B,cAAAA,CAAS,IAAI,CAAA,CACzC,CAACxB,EAAOuC,CAAQ,CAAA,CAAIf,eAAuB,IAAI,CAAA,CAE/CiD,EAAqBzB,iBAAAA,CAAY,SAAY,CACjDO,CAAAA,CAAa,IAAI,CAAA,CACjBhB,CAAAA,CAAS,IAAI,CAAA,CAEb,GAAI,CACF,IAAMU,CAAAA,CAAS,MAAMtB,CAAAA,CAAO,gBAAA,GAC5B6C,CAAAA,CAAiBvB,CAAAA,CAAO,cAAc,EACxC,CAAA,MAAST,EAAK,CACZD,CAAAA,CAASC,aAAe,KAAA,CAAQA,CAAAA,CAAM,IAAI,KAAA,CAAM,gCAAgC,CAAC,EACnF,CAAA,OAAE,CACAe,CAAAA,CAAa,KAAK,EACpB,CACF,CAAA,CAAG,CAAC5B,CAAM,CAAC,EAEX,OAAAE,eAAAA,CAAU,IAAM,CACVP,CAAAA,EACFmD,IAEJ,CAAA,CAAG,CAACnD,CAAAA,CAASmD,CAAkB,CAAC,CAAA,CAEzB,CACL,cAAAF,CAAAA,CACA,SAAA,CAAAjB,EACA,KAAA,CAAAtD,CAAAA,CACA,QAASyE,CACX,CACF,CCxbA,IAAMC,EAAgB,CACpB,MAAA,CAAQ,CACN,QAAA,CAAU,OAAA,CACV,QAAS,WAAA,CACT,MAAA,CAAQ,OACR,YAAA,CAAc,KAAA,CACd,OAAQ,SAAA,CACR,UAAA,CAAY,uCACZ,QAAA,CAAU,MAAA,CACV,UAAA,CAAY,KAAA,CACZ,UAAW,gCAAA,CACX,UAAA,CAAY,kCACZ,MAAA,CAAQ,IACV,EACA,KAAA,CAAO,CACL,SAAU,OAAA,CACV,KAAA,CAAO,EACP,OAAA,CAAS,MAAA,CACT,WAAY,QAAA,CACZ,cAAA,CAAgB,SAChB,eAAA,CAAiB,oBAAA,CACjB,OAAQ,GACV,CAAA,CACA,aAAc,CACZ,eAAA,CAAiB,QACjB,YAAA,CAAc,MAAA,CACd,QAAS,MAAA,CACT,KAAA,CAAO,OACP,QAAA,CAAU,OAAA,CACV,OAAQ,MAAA,CACR,SAAA,CAAW,iCACX,UAAA,CAAY,sCACd,EAWA,QAAA,CAAU,CACR,KAAA,CAAO,MAAA,CACP,QAAS,WAAA,CACT,MAAA,CAAQ,oBACR,YAAA,CAAc,KAAA,CACd,SAAU,MAAA,CACV,YAAA,CAAc,OACd,SAAA,CAAW,OAAA,CACX,OAAQ,UAAA,CACR,SAAA,CAAW,aACX,UAAA,CAAY,SACd,EACA,YAAA,CAAc,CACZ,MAAO,MAAA,CACP,OAAA,CAAS,OACT,MAAA,CAAQ,MAAA,CACR,YAAA,CAAc,KAAA,CACd,OAAQ,SAAA,CACR,QAAA,CAAU,OACV,UAAA,CAAY,KAAA,CACZ,WAAY,cACd,CAAA,CACA,WAAY,CACV,OAAA,CAAS,WACT,MAAA,CAAQ,mBAAA,CACR,aAAc,KAAA,CACd,MAAA,CAAQ,UACR,QAAA,CAAU,MAAA,CACV,gBAAiB,OAAA,CACjB,UAAA,CAAY,WACZ,WAAA,CAAa,KAAA,CACb,aAAc,KAChB,CACF,EAEMC,EAAAA,CAAiB,CACrB,eAAgB,CAAE,MAAA,CAAQ,OAAQ,KAAA,CAAO,MAAO,EAChD,aAAA,CAAe,CAAE,OAAQ,MAAA,CAAQ,IAAA,CAAM,MAAO,CAAA,CAC9C,WAAA,CAAa,CAAE,GAAA,CAAK,MAAA,CAAQ,MAAO,MAAO,CAAA,CAC1C,WAAY,CAAE,GAAA,CAAK,OAAQ,IAAA,CAAM,MAAO,CAC1C,CAAA,CAEMC,EAAAA,CAAmD,CACvD,QAAA,CAAU,kBAAA,CACV,WAAY,YAAA,CACZ,eAAA,CAAiB,kBACjB,cAAA,CAAgB,gBAClB,EAEMC,EAAAA,CAAmD,CACvD,SAAU,WAAA,CACV,UAAA,CAAY,YACZ,eAAA,CAAiB,WAAA,CACjB,eAAgB,QAClB,CAAA,CAEA,SAASC,EAAAA,CAAe1D,CAAAA,CAAoB,CAC1C,OAAO,CACL,aAAcA,CAAAA,CAAM,YAAA,EAAgB,UACpC,SAAA,CAAWA,CAAAA,CAAM,WAAa,SAAA,CAC9B,eAAA,CAAiBA,EAAM,eAAA,EAAmB,SAAA,CAC1C,aAAcA,CAAAA,CAAM,YAAA,EAAgB,MACpC,UAAA,CAAYA,CAAAA,CAAM,YAAc,sCAClC,CACF,CAwBO,SAAS2D,EAAAA,CAAe,CAC7B,QAAA,CAAAC,CAAAA,CAAW,eACX,IAAA,CAAAC,CAAAA,CAAO,WACP,YAAA,CAAAC,CAAAA,CAAe,CAAC,UAAA,CAAY,YAAA,CAAc,iBAAiB,CAAA,CAC3D,KAAA,CAAOC,EACP,QAAA,CAAAC,CAAAA,CACA,QAAAC,CAAAA,CACA,QAAA,CAAAhE,CACF,CAAA,CAAwB,CACtB,GAAM,CAAE,KAAA,CAAOiE,CAAa,CAAA,CAAInD,CAAAA,GAC1B,CAAE,cAAA,CAAAY,EAAgB,YAAA,CAAAL,CAAAA,CAAc,UAAAE,CAAAA,CAAW,KAAA,CAAAM,CAAM,CAAA,CAAIT,CAAAA,GAErD,CAAC8C,CAAAA,CAAQC,CAAS,CAAA,CAAIhE,cAAAA,CAAS,KAAK,CAAA,CACpC,CAACiE,EAAcC,CAAe,CAAA,CAAIlE,eAAuB0D,CAAAA,CAAa,CAAC,CAAC,CAAA,CACxE,CAACS,EAASC,CAAU,CAAA,CAAIpE,eAAS,EAAE,CAAA,CAEnCJ,EAAQ,CAAE,GAAGkE,EAAc,GAAGH,CAAU,EACxCU,CAAAA,CAAcf,EAAAA,CAAe1D,CAAK,CAAA,CAElC0E,EAAa9C,iBAAAA,CAAY,IAAM,CACnCwC,CAAAA,CAAU,IAAI,EACdtC,CAAAA,GACF,EAAG,CAACA,CAAK,CAAC,CAAA,CAEJ6C,CAAAA,CAAc/C,kBAAY,IAAM,CACpCwC,EAAU,KAAK,CAAA,CACfI,EAAW,EAAE,CAAA,CACbF,EAAgBR,CAAAA,CAAa,CAAC,CAAC,EACjC,CAAA,CAAG,CAACA,CAAY,CAAC,EAEXc,CAAAA,CAAehD,iBAAAA,CACnB,MAAOiD,CAAAA,EAAuB,CAC5BA,EAAE,cAAA,EAAe,CAEjB,IAAMC,CAAAA,CAAe,CACnB,KAAMT,CAAAA,CACN,OAAA,CAAAE,CACF,CAAA,CAEA,GAAI,CACF,MAAM5C,CAAAA,CAAemD,CAAY,CAAA,CACjCd,CAAAA,GAAWc,CAAY,CAAA,CAEvB,UAAA,CAAWH,EAAa,IAAI,EAC9B,OAASvD,CAAAA,CAAK,CACZ6C,IAAU7C,CAAAA,YAAe,KAAA,CAAQA,EAAM,IAAI,KAAA,CAAM,2BAA2B,CAAC,EAC/E,CACF,CAAA,CACA,CAACiD,EAAcE,CAAAA,CAAS5C,CAAAA,CAAgBqC,EAAUC,CAAAA,CAASU,CAAW,CACxE,CAAA,CAGA,OAAI1E,EAEA8E,eAAAA,CAAAC,mBAAAA,CAAA,CACE,QAAA,CAAA,CAAArE,cAAAA,CAAC,KAAA,CAAA,CAAI,OAAA,CAAS+D,EAAY,KAAA,CAAO,CAAE,OAAQ,SAAU,CAAA,CAClD,SAAAzE,CAAAA,CACH,CAAA,CACCkE,GACCxD,cAAAA,CAACsE,EAAAA,CAAA,CACC,MAAA,CAAQd,CAAAA,CACR,QAASQ,CAAAA,CACT,YAAA,CAAcN,EACd,YAAA,CAAcC,CAAAA,CACd,aAAcR,CAAAA,CACd,OAAA,CAASS,EACT,eAAA,CAAiBC,CAAAA,CACjB,SAAUI,CAAAA,CACV,YAAA,CAActD,EACd,SAAA,CAAWE,CAAAA,CACX,YAAaiD,CAAAA,CACf,CAAA,CAAA,CAEJ,EAKFM,eAAAA,CAAAC,mBAAAA,CAAA,CACE,QAAA,CAAA,CAAArE,cAAAA,CAAC,UACC,OAAA,CAAS+D,CAAAA,CACT,MAAO,CACL,GAAGpB,EAAc,MAAA,CACjB,GAAGC,GAAeK,CAAQ,CAAA,CAC1B,gBAAiBa,CAAAA,CAAY,YAAA,CAC7B,MAAO,OAAA,CACP,YAAA,CAAcA,EAAY,YAAA,CAC1B,UAAA,CAAYA,EAAY,UAC1B,CAAA,CACA,aAAW,oBAAA,CAEV,QAAA,CAAAZ,EACH,CAAA,CACCM,CAAAA,EACCxD,eAACsE,EAAAA,CAAA,CACC,OAAQd,CAAAA,CACR,OAAA,CAASQ,EACT,YAAA,CAAcN,CAAAA,CACd,aAAcC,CAAAA,CACd,YAAA,CAAcR,EACd,OAAA,CAASS,CAAAA,CACT,gBAAiBC,CAAAA,CACjB,QAAA,CAAUI,EACV,YAAA,CAActD,CAAAA,CACd,SAAA,CAAWE,CAAAA,CACX,YAAaiD,CAAAA,CACf,CAAA,CAAA,CAEJ,CAEJ,CAgBA,SAASQ,GAAc,CACrB,MAAA,CAAAd,EACA,OAAA,CAAAe,CAAAA,CACA,aAAAb,CAAAA,CACA,YAAA,CAAAc,EACA,YAAA,CAAArB,CAAAA,CACA,QAAAS,CAAAA,CACA,eAAA,CAAAa,EACA,QAAA,CAAApB,CAAAA,CACA,aAAA1C,CAAAA,CACA,SAAA,CAAAE,EACA,WAAA,CAAAiD,CACF,EAAuB,CACrB,OAAKN,EAED3C,CAAAA,CAEAb,cAAAA,CAAC,OAAI,KAAA,CAAO2C,CAAAA,CAAc,MAAO,OAAA,CAAS4B,CAAAA,CACxC,SAAAH,eAAAA,CAAC,KAAA,CAAA,CACC,MAAO,CACL,GAAGzB,EAAc,YAAA,CACjB,SAAA,CAAW,SACX,UAAA,CAAYmB,CAAAA,CAAY,UAC1B,CAAA,CACA,OAAA,CAAUI,GAAMA,CAAAA,CAAE,eAAA,GAElB,QAAA,CAAA,CAAAlE,cAAAA,CAAC,OAAI,KAAA,CAAO,CAAE,SAAU,MAAA,CAAQ,YAAA,CAAc,MAAO,CAAA,CAAG,QAAA,CAAA,WAAA,CAAE,EAC1DA,cAAAA,CAAC,IAAA,CAAA,CAAG,MAAO,CAAE,MAAA,CAAQ,YAAa,KAAA,CAAO8D,CAAAA,CAAY,SAAU,CAAA,CAAG,QAAA,CAAA,2BAAA,CAElE,EACA9D,cAAAA,CAAC,GAAA,CAAA,CAAE,MAAO,CAAE,MAAA,CAAQ,EAAG,KAAA,CAAO,MAAO,CAAA,CAAG,QAAA,CAAA,6CAAA,CAA2C,GACrF,CAAA,CACF,CAAA,CAKFA,eAAC,KAAA,CAAA,CAAI,KAAA,CAAO2C,EAAc,KAAA,CAAO,OAAA,CAAS4B,EACxC,QAAA,CAAAH,eAAAA,CAAC,OACC,KAAA,CAAO,CACL,GAAGzB,CAAAA,CAAc,YAAA,CACjB,WAAYmB,CAAAA,CAAY,UAC1B,EACA,OAAA,CAAUI,CAAAA,EAAMA,EAAE,eAAA,EAAgB,CAElC,UAAAE,eAAAA,CAAC,KAAA,CAAA,CACC,MAAO,CACL,OAAA,CAAS,OACT,cAAA,CAAgB,eAAA,CAChB,WAAY,QAAA,CACZ,YAAA,CAAc,MAChB,CAAA,CAEA,QAAA,CAAA,CAAApE,eAAC,IAAA,CAAA,CAAG,KAAA,CAAO,CAAE,MAAA,CAAQ,CAAA,CAAG,MAAO8D,CAAAA,CAAY,SAAU,EAAG,QAAA,CAAA,eAAA,CAAa,CAAA,CACrE9D,eAAC,QAAA,CAAA,CACC,OAAA,CAASuE,EACT,KAAA,CAAO,CACL,WAAY,MAAA,CACZ,MAAA,CAAQ,OACR,QAAA,CAAU,MAAA,CACV,OAAQ,SAAA,CACR,KAAA,CAAO,OACP,OAAA,CAAS,GAAA,CACT,WAAY,GACd,CAAA,CACA,aAAW,OAAA,CACZ,QAAA,CAAA,MAAA,CAED,GACF,CAAA,CAEAH,eAAAA,CAAC,QAAK,QAAA,CAAUf,CAAAA,CAEd,UAAAe,eAAAA,CAAC,KAAA,CAAA,CAAI,MAAO,CAAE,YAAA,CAAc,MAAO,CAAA,CACjC,QAAA,CAAA,CAAApE,cAAAA,CAAC,OAAA,CAAA,CACC,MAAO,CACL,OAAA,CAAS,QACT,YAAA,CAAc,KAAA,CACd,SAAU,MAAA,CACV,KAAA,CAAO,OACP,UAAA,CAAY,KACd,EACD,QAAA,CAAA,wBAAA,CAED,CAAA,CACAA,eAAC,KAAA,CAAA,CAAI,KAAA,CAAO,CAAE,OAAA,CAAS,MAAA,CAAQ,SAAU,MAAO,CAAA,CAC7C,SAAAmD,CAAAA,CAAa,GAAA,CAAKuB,GACjBN,eAAAA,CAAC,QAAA,CAAA,CAEC,KAAK,QAAA,CACL,OAAA,CAAS,IAAMI,CAAAA,CAAaE,CAAI,EAChC,KAAA,CAAO,CACL,GAAG/B,CAAAA,CAAc,UAAA,CACjB,gBAAiBe,CAAAA,GAAiBgB,CAAAA,CAAOZ,EAAY,YAAA,CAAe,OAAA,CACpE,MAAOJ,CAAAA,GAAiBgB,CAAAA,CAAO,QAAUZ,CAAAA,CAAY,SAAA,CACrD,YAAaJ,CAAAA,GAAiBgB,CAAAA,CAAOZ,EAAY,YAAA,CAAe,SAClE,EAEC,QAAA,CAAA,CAAAhB,EAAAA,CAAmB4B,CAAI,CAAA,CAAE,GAAA,CAAE7B,GAAmB6B,CAAI,CAAA,CAAA,CAAA,CAV9CA,CAWP,CACD,CAAA,CACH,GACF,CAAA,CAGAN,eAAAA,CAAC,OACC,QAAA,CAAA,CAAApE,cAAAA,CAAC,SACC,KAAA,CAAO,CACL,QAAS,OAAA,CACT,YAAA,CAAc,MACd,QAAA,CAAU,MAAA,CACV,MAAO,MAAA,CACP,UAAA,CAAY,KACd,CAAA,CACD,QAAA,CAAA,cAAA,CAED,CAAA,CACAA,cAAAA,CAAC,YACC,KAAA,CAAO4D,CAAAA,CACP,SAAWM,CAAAA,EAAMO,CAAAA,CAAgBP,EAAE,MAAA,CAAO,KAAK,EAC/C,WAAA,CACER,CAAAA,GAAiB,aACb,4CAAA,CACAA,CAAAA,GAAiB,kBACf,wCAAA,CACA,wBAAA,CAER,MAAOf,CAAAA,CAAc,QAAA,CACrB,SAAQ,IAAA,CACV,CAAA,CAAA,CACF,EAEA3C,cAAAA,CAAC,QAAA,CAAA,CACC,KAAK,QAAA,CACL,QAAA,CAAUW,GAAgB,CAACiD,CAAAA,CAAQ,MAAK,CACxC,KAAA,CAAO,CACL,GAAGjB,CAAAA,CAAc,aACjB,eAAA,CAAiBmB,CAAAA,CAAY,aAC7B,KAAA,CAAO,OAAA,CACP,QAASnD,CAAAA,EAAgB,CAACiD,EAAQ,IAAA,EAAK,CAAI,GAAM,CAAA,CACjD,MAAA,CAAQjD,GAAgB,CAACiD,CAAAA,CAAQ,MAAK,CAAI,aAAA,CAAgB,SAC5D,CAAA,CAEC,QAAA,CAAAjD,EAAe,YAAA,CAAe,eAAA,CACjC,GACF,CAAA,CAAA,CACF,CAAA,CACF,EAtIkB,IAwItB,CCtZA,IAAMgC,EAAgB,CACpB,SAAA,CAAW,CACT,UAAA,CAAY,sCAAA,CACZ,SAAU,OACZ,CAAA,CACA,WAAA,CAAa,CACX,MAAO,MAAA,CACP,OAAA,CAAS,YACT,MAAA,CAAQ,mBAAA,CACR,aAAc,KAAA,CACd,QAAA,CAAU,OACV,YAAA,CAAc,MAAA,CACd,UAAW,YACb,CAAA,CACA,eAAgB,CACd,OAAA,CAAS,WACT,MAAA,CAAQ,mBAAA,CACR,aAAc,MAAA,CACd,MAAA,CAAQ,UACR,QAAA,CAAU,MAAA,CACV,gBAAiB,OAAA,CACjB,UAAA,CAAY,WACZ,WAAA,CAAa,KAAA,CACb,aAAc,KAChB,CAAA,CACA,YAAa,CACX,OAAA,CAAS,OACT,MAAA,CAAQ,mBAAA,CACR,aAAc,KAAA,CACd,YAAA,CAAc,OACd,MAAA,CAAQ,SAAA,CACR,WAAY,oCAAA,CACZ,eAAA,CAAiB,OACnB,CAAA,CACA,YAAA,CAAc,CACZ,MAAA,CAAQ,WAAA,CACR,SAAU,MAAA,CACV,UAAA,CAAY,KACd,CAAA,CACA,kBAAA,CAAoB,CAClB,MAAA,CAAQ,CAAA,CACR,SAAU,MAAA,CACV,KAAA,CAAO,OACP,UAAA,CAAY,GACd,EACA,WAAA,CAAa,CACX,QAAS,MAAA,CACT,GAAA,CAAK,OACL,SAAA,CAAW,MAAA,CACX,SAAU,MAAA,CACV,KAAA,CAAO,MACT,CAAA,CACA,UAAA,CAAY,CACV,OAAA,CAAS,aAAA,CACT,WAAY,QAAA,CACZ,GAAA,CAAK,MACL,OAAA,CAAS,OAAA,CACT,OAAQ,MAAA,CACR,UAAA,CAAY,OACZ,MAAA,CAAQ,SAAA,CACR,SAAU,MAAA,CACV,KAAA,CAAO,OACP,YAAA,CAAc,MAChB,EACA,cAAA,CAAgB,CACd,WAAY,GAAA,CACZ,QAAA,CAAU,MACZ,CAAA,CACA,OAAA,CAAS,CACP,SAAA,CAAW,QAAA,CACX,QAAS,MAAA,CACT,KAAA,CAAO,MACT,CAAA,CACA,KAAA,CAAO,CACL,OAAA,CAAS,MAAA,CACT,gBAAiB,SAAA,CACjB,YAAA,CAAc,MACd,KAAA,CAAO,SAAA,CACP,UAAW,QACb,CAAA,CACA,MAAO,CACL,SAAA,CAAW,SACX,OAAA,CAAS,MAAA,CACT,MAAO,MACT,CACF,EAEA,SAASI,EAAAA,CAAe1D,EAAoB,CAC1C,OAAO,CACL,YAAA,CAAcA,CAAAA,CAAM,cAAgB,SAAA,CACpC,SAAA,CAAWA,EAAM,SAAA,EAAa,SAAA,CAC9B,gBAAiBA,CAAAA,CAAM,eAAA,EAAmB,UAC1C,YAAA,CAAcA,CAAAA,CAAM,cAAgB,KAAA,CACpC,UAAA,CAAYA,EAAM,UAAA,EAAc,sCAClC,CACF,CAuBO,SAASsF,GAAc,CAC5B,UAAA,CAAAC,EAAa,IAAA,CACb,cAAA,CAAAC,EAAiB,IAAA,CACjB,eAAA,CAAAC,EACA,KAAA,CAAO1B,CAAAA,CACP,SAAA,CAAA2B,CAAAA,CACA,cAAAC,CACF,CAAA,CAAuB,CACrB,GAAM,CAAE,MAAOzB,CAAa,CAAA,CAAInD,GAAiB,CAC3C,CAAC6E,EAAaC,CAAc,CAAA,CAAIzF,eAAS,EAAE,CAAA,CAC3C,CAAC0F,CAAAA,CAAkBC,CAAmB,EAAI3F,cAAAA,CAA6BqF,CAAe,EACtF,CAACO,CAAAA,CAAqBC,CAAsB,CAAA,CAAI7F,cAAAA,CAAwB,IAAI,CAAA,CAE5EJ,CAAAA,CAAQ,CAAE,GAAGkE,CAAAA,CAAc,GAAGH,CAAU,CAAA,CACxCU,EAAcf,EAAAA,CAAe1D,CAAK,EAElC,CACJ,QAAA,CAAAkG,EACA,SAAA,CAAWC,CAAAA,CACX,MAAOC,CACT,CAAA,CAAIrE,GAAY,CACd,QAAA,CAAU+D,EACV,MAAA,CAAQF,CAAAA,EAAe,MACzB,CAAC,CAAA,CAEK,CACJ,OAAA,CAASS,CAAAA,CACT,UAAWC,CAAAA,CACX,KAAA,CAAOC,CACT,CAAA,CAAIlE,EAAAA,CAAW2D,GAAuB,EAAE,CAAA,CAGlCQ,EAAahG,aAAAA,CAAQ,IAAM,CAC/B,IAAMiG,CAAAA,CAAO,IAAI,GAAA,CACjB,OAAAP,EAAS,OAAA,CAAS5D,CAAAA,EAAY,CACxBA,CAAAA,CAAQ,QAAA,EACVmE,EAAK,GAAA,CAAInE,CAAAA,CAAQ,QAAQ,EAE7B,CAAC,CAAA,CACM,KAAA,CAAM,KAAKmE,CAAI,CAAA,CAAE,MAC1B,CAAA,CAAG,CAACP,CAAQ,CAAC,EAEPQ,CAAAA,CAAsBpE,CAAAA,EAAqB,CAC/C2D,CAAAA,CAAuB3D,CAAAA,CAAQ,IAAI,CAAA,CACnCqD,CAAAA,GAAgBrD,CAAO,EACzB,CAAA,CAEMqE,EAAa,IAAM,CACvBV,EAAuB,IAAI,EAC7B,EAGA,OAAID,CAAAA,CACEM,EAEA3F,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO,CAAE,GAAG2C,EAAc,SAAA,CAAW,UAAA,CAAYmB,EAAY,UAAW,CAAA,CAAG,UAAWiB,CAAAA,CACzF,QAAA,CAAA/E,eAAC,KAAA,CAAA,CAAI,KAAA,CAAO2C,EAAc,OAAA,CAAS,QAAA,CAAA,oBAAA,CAAkB,EACvD,CAAA,CAIAiD,CAAAA,CAEAxB,gBAAC,KAAA,CAAA,CAAI,KAAA,CAAO,CAAE,GAAGzB,CAAAA,CAAc,UAAW,UAAA,CAAYmB,CAAAA,CAAY,UAAW,CAAA,CAAG,SAAA,CAAWiB,EACzF,QAAA,CAAA,CAAA/E,cAAAA,CAAC,UAAO,OAAA,CAASgG,CAAAA,CAAY,MAAOrD,CAAAA,CAAc,UAAA,CAAY,mCAE9D,CAAA,CACA3C,cAAAA,CAAC,OAAI,KAAA,CAAO2C,CAAAA,CAAc,MAAO,QAAA,CAAA,2CAAA,CAAyC,CAAA,CAAA,CAC5E,EAIC+C,CAAAA,CAYHtB,eAAAA,CAAC,OAAI,KAAA,CAAO,CAAE,GAAGzB,CAAAA,CAAc,SAAA,CAAW,UAAA,CAAYmB,CAAAA,CAAY,UAAW,CAAA,CAAG,SAAA,CAAWiB,EACzF,QAAA,CAAA,CAAA/E,cAAAA,CAAC,UAAO,OAAA,CAASgG,CAAAA,CAAY,MAAOrD,CAAAA,CAAc,UAAA,CAAY,mCAE9D,CAAA,CACAyB,eAAAA,CAAC,WACC,QAAA,CAAA,CAAApE,cAAAA,CAAC,MAAG,KAAA,CAAO,CAAE,OAAQ,YAAA,CAAc,KAAA,CAAO8D,EAAY,SAAU,CAAA,CAC7D,SAAA4B,CAAAA,CAAgB,KAAA,CACnB,EACCA,CAAAA,CAAgB,iBAAA,EACftB,gBAAC,KAAA,CAAA,CAAI,KAAA,CAAO,CAAE,QAAA,CAAU,MAAA,CAAQ,MAAO,MAAA,CAAQ,YAAA,CAAc,MAAO,CAAA,CACjE,QAAA,CAAA,CAAAsB,EAAgB,iBAAA,CAAkB,WAAA,CAAA,CACrC,EAEDA,CAAAA,CAAgB,YAAA,CACf1F,eAAC,KAAA,CAAA,CACC,KAAA,CAAO,CAAE,GAAG2C,CAAAA,CAAc,eAAgB,KAAA,CAAOmB,CAAAA,CAAY,SAAU,CAAA,CACvE,uBAAA,CAAyB,CAAE,MAAA,CAAQ4B,CAAAA,CAAgB,YAAa,CAAA,CAClE,CAAA,CAEA1F,eAAC,KAAA,CAAA,CAAI,KAAA,CAAO,CAAE,GAAG2C,CAAAA,CAAc,eAAgB,KAAA,CAAOmB,CAAAA,CAAY,SAAU,CAAA,CACzE,QAAA,CAAA,OAAO4B,EAAgB,OAAA,EAAY,QAAA,CAChCA,EAAgB,OAAA,CAChB,uBAAA,CACN,GAEJ,CAAA,CAAA,CACF,CAAA,CApCEtB,gBAAC,KAAA,CAAA,CAAI,KAAA,CAAO,CAAE,GAAGzB,EAAc,SAAA,CAAW,UAAA,CAAYmB,EAAY,UAAW,CAAA,CAAG,UAAWiB,CAAAA,CACzF,QAAA,CAAA,CAAA/E,eAAC,QAAA,CAAA,CAAO,OAAA,CAASgG,EAAY,KAAA,CAAOrD,CAAAA,CAAc,WAAY,QAAA,CAAA,yBAAA,CAE9D,CAAA,CACA3C,eAAC,KAAA,CAAA,CAAI,KAAA,CAAO2C,EAAc,KAAA,CAAO,QAAA,CAAA,oBAAA,CAAkB,GACrD,CAAA,CAqCJyB,eAAAA,CAAC,OAAI,KAAA,CAAO,CAAE,GAAGzB,CAAAA,CAAc,SAAA,CAAW,WAAYmB,CAAAA,CAAY,UAAW,EAAG,SAAA,CAAWiB,CAAAA,CAExF,UAAAH,CAAAA,EACC5E,cAAAA,CAAC,SACC,IAAA,CAAK,MAAA,CACL,YAAY,oBAAA,CACZ,KAAA,CAAOiF,EACP,QAAA,CAAWf,CAAAA,EAAMgB,EAAehB,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC9C,KAAA,CAAOvB,EAAc,WAAA,CACvB,CAAA,CAIDkC,GAAkBgB,CAAAA,CAAW,MAAA,CAAS,GACrCzB,eAAAA,CAAC,KAAA,CAAA,CAAI,MAAO,CAAE,YAAA,CAAc,MAAO,CAAA,CACjC,QAAA,CAAA,CAAApE,eAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAMoF,CAAAA,CAAoB,MAAS,EAC5C,KAAA,CAAO,CACL,GAAGzC,CAAAA,CAAc,cAAA,CACjB,gBAAkBwC,CAAAA,CAA8C,OAAA,CAA3BrB,EAAY,YAAA,CACjD,KAAA,CAAQqB,EAA6BrB,CAAAA,CAAY,SAAA,CAAtB,OAAA,CAC3B,WAAA,CAAcqB,EAA8C,SAAA,CAA3BrB,CAAAA,CAAY,YAC/C,CAAA,CACD,QAAA,CAAA,KAAA,CAED,EACC+B,CAAAA,CAAW,GAAA,CAAKI,GACfjG,cAAAA,CAAC,QAAA,CAAA,CAEC,QAAS,IAAMoF,CAAAA,CAAoBa,CAAQ,CAAA,CAC3C,KAAA,CAAO,CACL,GAAGtD,CAAAA,CAAc,eACjB,eAAA,CAAiBwC,CAAAA,GAAqBc,EAAWnC,CAAAA,CAAY,YAAA,CAAe,QAC5E,KAAA,CAAOqB,CAAAA,GAAqBc,EAAW,OAAA,CAAUnC,CAAAA,CAAY,UAC7D,WAAA,CAAaqB,CAAAA,GAAqBc,EAAWnC,CAAAA,CAAY,YAAA,CAAe,SAC1E,CAAA,CAEC,QAAA,CAAAmC,GATIA,CAUP,CACD,GACH,CAAA,CAIDT,CAAAA,EAAqBxF,eAAC,KAAA,CAAA,CAAI,KAAA,CAAO2C,EAAc,OAAA,CAAS,QAAA,CAAA,qBAAA,CAAmB,EAG3E8C,CAAAA,EACCzF,cAAAA,CAAC,OAAI,KAAA,CAAO2C,CAAAA,CAAc,MAAO,QAAA,CAAA,4CAAA,CAA0C,CAAA,CAI5E,CAAC6C,CAAAA,EAAqB,CAACC,GAAiBF,CAAAA,CAAS,MAAA,GAAW,GAC3DvF,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO2C,CAAAA,CAAc,KAAA,CACvB,SAAAsC,CAAAA,CACG,CAAA,uBAAA,EAA0BA,CAAW,CAAA,CAAA,CAAA,CACrC,4BAAA,CACN,EAID,CAACO,CAAAA,EAAqB,CAACC,CAAAA,EAAiBF,CAAAA,CAAS,OAAS,CAAA,EACzDvF,cAAAA,CAAC,OACE,QAAA,CAAAuF,CAAAA,CAAS,GAAA,CAAK5D,CAAAA,EACbyC,gBAAC,KAAA,CAAA,CAEC,OAAA,CAAS,IAAM2B,CAAAA,CAAmBpE,CAAO,EACzC,KAAA,CAAOgB,CAAAA,CAAc,YACrB,IAAA,CAAK,QAAA,CACL,SAAU,CAAA,CACV,SAAA,CAAYuB,GAAM,CAAA,CACZA,CAAAA,CAAE,MAAQ,OAAA,EAAWA,CAAAA,CAAE,MAAQ,GAAA,GACjC6B,CAAAA,CAAmBpE,CAAO,EAE9B,CAAA,CAEA,UAAA3B,cAAAA,CAAC,IAAA,CAAA,CAAG,MAAO,CAAE,GAAG2C,EAAc,YAAA,CAAc,KAAA,CAAOmB,EAAY,SAAU,CAAA,CACtE,SAAAnC,CAAAA,CAAQ,KAAA,CACX,EACCA,CAAAA,CAAQ,eAAA,EACP3B,eAAC,GAAA,CAAA,CAAE,KAAA,CAAO2C,EAAc,kBAAA,CAAqB,QAAA,CAAAhB,EAAQ,eAAA,CAAgB,CAAA,CAEvEyC,gBAAC,KAAA,CAAA,CAAI,KAAA,CAAOzB,EAAc,WAAA,CACvB,QAAA,CAAA,CAAAhB,EAAQ,QAAA,EAAY3B,cAAAA,CAAC,QAAM,QAAA,CAAA2B,CAAAA,CAAQ,SAAS,CAAA,CAC5CA,CAAAA,CAAQ,mBAAqByC,eAAAA,CAAC,MAAA,CAAA,CAAM,UAAAzC,CAAAA,CAAQ,iBAAA,CAAkB,aAAS,CAAA,CAAA,CAC1E,CAAA,CAAA,CAAA,CApBKA,EAAQ,EAqBf,CACD,EACH,CAAA,CAAA,CAEJ,CAEJ,CCpUA,IAAMgB,CAAAA,CAAgB,CACpB,SAAA,CAAW,CACT,WAAY,sCACd,CAAA,CACA,KAAM,CACJ,SAAA,CAAW,OACX,OAAA,CAAS,CAAA,CACT,OAAQ,CAAA,CACR,OAAA,CAAS,OACT,aAAA,CAAe,QAAA,CACf,IAAK,MACP,CAAA,CACA,KAAM,CACJ,MAAA,CAAQ,oBACR,YAAA,CAAc,KAAA,CACd,QAAS,MAAA,CACT,eAAA,CAAiB,UACjB,MAAA,CAAQ,SAAA,CACR,WAAY,sCACd,CAAA,CACA,UAAW,CACT,WAAA,CAAa,UACb,SAAA,CAAW,8BACb,EACA,MAAA,CAAQ,CACN,QAAS,MAAA,CACT,UAAA,CAAY,SACZ,cAAA,CAAgB,eAAA,CAChB,IAAK,KAAA,CACL,YAAA,CAAc,KAChB,CAAA,CACA,MAAA,CAAQ,CACN,OAAA,CAAS,MAAA,CACT,WAAY,QAAA,CACZ,GAAA,CAAK,KACP,CAAA,CACA,KAAA,CAAO,CACL,OAAA,CAAS,aAAA,CACT,WAAY,QAAA,CACZ,GAAA,CAAK,MACL,OAAA,CAAS,SAAA,CACT,aAAc,QAAA,CACd,QAAA,CAAU,OACV,UAAA,CAAY,GACd,EACA,OAAA,CAAS,CACP,SAAU,MAAA,CACV,KAAA,CAAO,UACP,MAAA,CAAQ,CAAA,CACR,WAAY,GACd,CAAA,CACA,KAAM,CACJ,OAAA,CAAS,OACT,GAAA,CAAK,MAAA,CACL,UAAW,KAAA,CACX,QAAA,CAAU,OACV,KAAA,CAAO,SACT,EACA,KAAA,CAAO,CACL,UAAW,QAAA,CACX,OAAA,CAAS,YACT,KAAA,CAAO,SACT,EACA,SAAA,CAAW,CACT,MAAO,MAAA,CACP,MAAA,CAAQ,OACR,MAAA,CAAQ,aAAA,CACR,MAAO,SACT,CAAA,CACA,QAAS,CACP,SAAA,CAAW,SACX,OAAA,CAAS,MAAA,CACT,MAAO,SACT,CAAA,CACA,MAAO,CACL,SAAA,CAAW,SACX,OAAA,CAAS,MAAA,CACT,MAAO,SACT,CAAA,CACA,WAAY,CACV,OAAA,CAAS,OACT,aAAA,CAAe,QAAA,CACf,WAAY,QAAA,CACZ,cAAA,CAAgB,SAChB,OAAA,CAAS,KAAA,CACT,aAAc,KAAA,CACd,MAAA,CAAQ,oBACR,eAAA,CAAiB,SAAA,CACjB,OAAQ,SAAA,CACR,QAAA,CAAU,OACV,UAAA,CAAY,WACd,EACA,gBAAA,CAAkB,CAChB,gBAAiB,SAAA,CACjB,WAAA,CAAa,UACb,KAAA,CAAO,SACT,EACA,SAAA,CAAW,CACT,SAAU,MAAA,CACV,UAAA,CAAY,IACZ,KAAA,CAAO,SACT,CAAA,CACA,YAAA,CAAc,CACZ,OAAA,CAAS,MAAA,CACT,IAAK,MACP,CAAA,CACA,YAAa,CACX,IAAA,CAAM,CACR,CAAA,CACA,IAAA,CAAM,CACJ,YAAA,CAAc,MAAA,CACd,QAAS,MAAA,CACT,eAAA,CAAiB,UACjB,YAAA,CAAc,KAAA,CACd,OAAQ,mBACV,CAAA,CACA,WAAY,CACV,OAAA,CAAS,OACT,UAAA,CAAY,QAAA,CACZ,eAAgB,eAAA,CAChB,YAAA,CAAc,MAChB,CAAA,CACA,SAAA,CAAW,CACT,QAAA,CAAU,MAAA,CACV,WAAY,GAAA,CACZ,KAAA,CAAO,UACP,MAAA,CAAQ,CACV,EACA,YAAA,CAAc,CACZ,QAAS,MAAA,CACT,GAAA,CAAK,MACL,YAAA,CAAc,MAChB,EACA,UAAA,CAAY,CACV,QAAS,UAAA,CACT,YAAA,CAAc,MACd,MAAA,CAAQ,mBAAA,CACR,gBAAiB,SAAA,CACjB,QAAA,CAAU,OACV,MAAA,CAAQ,SAAA,CACR,WAAY,WACd,CAAA,CACA,iBAAkB,CAChB,eAAA,CAAiB,UACjB,WAAA,CAAa,SAAA,CACb,MAAO,SACT,CAAA,CACA,SAAU,CACR,KAAA,CAAO,OACP,OAAA,CAAS,WAAA,CACT,aAAc,KAAA,CACd,MAAA,CAAQ,oBACR,QAAA,CAAU,MAAA,CACV,MAAA,CAAQ,UAAA,CACR,UAAW,MAAA,CACX,UAAA,CAAY,UACZ,YAAA,CAAc,MAChB,EACA,YAAA,CAAc,CACZ,QAAS,UAAA,CACT,YAAA,CAAc,MACd,MAAA,CAAQ,MAAA,CACR,gBAAiB,SAAA,CACjB,KAAA,CAAO,UACP,QAAA,CAAU,MAAA,CACV,WAAY,GAAA,CACZ,MAAA,CAAQ,UACR,UAAA,CAAY,eACd,EACA,cAAA,CAAgB,CACd,QAAS,MAAA,CACT,eAAA,CAAiB,UACjB,YAAA,CAAc,KAAA,CACd,MAAO,SAAA,CACP,QAAA,CAAU,OACV,YAAA,CAAc,MAChB,EACA,QAAA,CAAU,CACR,QAAS,aAAA,CACT,UAAA,CAAY,SACZ,OAAA,CAAS,SAAA,CACT,aAAc,QAAA,CACd,QAAA,CAAU,OACV,UAAA,CAAY,GAAA,CACZ,gBAAiB,SAAA,CACjB,KAAA,CAAO,UACP,UAAA,CAAY,KACd,CACF,CAAA,CAEMuD,EAAAA,CAAiF,CACrF,QAAA,CAAU,CAAE,MAAO,UAAA,CAAY,KAAA,CAAO,UAAW,EAAA,CAAI,SAAU,EAC/D,UAAA,CAAY,CAAE,MAAO,YAAA,CAAc,KAAA,CAAO,UAAW,EAAA,CAAI,SAAU,EACnE,eAAA,CAAiB,CAAE,MAAO,iBAAA,CAAmB,KAAA,CAAO,UAAW,EAAA,CAAI,SAAU,CAAA,CAC7E,cAAA,CAAgB,CAAE,KAAA,CAAO,gBAAA,CAAkB,MAAO,SAAA,CAAW,EAAA,CAAI,SAAU,CAC7E,CAAA,CAEMC,GAA6E,CACjF,GAAA,CAAK,CAAE,KAAA,CAAO,KAAA,CAAO,MAAO,SAAA,CAAW,EAAA,CAAI,SAAU,CAAA,CACrD,QAAA,CAAU,CAAE,KAAA,CAAO,UAAA,CAAY,MAAO,SAAA,CAAW,EAAA,CAAI,SAAU,CAAA,CAC/D,WAAA,CAAa,CAAE,KAAA,CAAO,aAAA,CAAe,MAAO,SAAA,CAAW,EAAA,CAAI,SAAU,CAAA,CACrE,QAAA,CAAU,CAAE,KAAA,CAAO,UAAA,CAAY,MAAO,SAAA,CAAW,EAAA,CAAI,SAAU,CAAA,CAC/D,MAAA,CAAQ,CAAE,KAAA,CAAO,QAAA,CAAU,MAAO,SAAA,CAAW,EAAA,CAAI,SAAU,CAC7D,CAAA,CAEA,SAASC,EAAAA,CAAWC,CAAAA,CAA4B,CAE9C,OADa,IAAI,KAAKA,CAAU,CAAA,CACpB,mBAAmB,OAAA,CAAS,CACtC,MAAO,OAAA,CACP,GAAA,CAAK,UACL,IAAA,CAAM,SACR,CAAC,CACH,CAEA,IAAMC,EAAAA,CAAuD,CAC3D,CAAE,KAAA,CAAO,UAAA,CAAY,MAAO,UAAW,CAAA,CACvC,CAAE,KAAA,CAAO,YAAA,CAAc,MAAO,KAAM,CAAA,CACpC,CAAE,KAAA,CAAO,kBAAmB,KAAA,CAAO,SAAU,CAC/C,CAAA,CAmBO,SAASC,GAAS,CACvB,MAAA,CAAAC,EACA,IAAA,CAAA9B,CAAAA,CACA,MAAA+B,CAAAA,CAAQ,EAAA,CACR,UAAA1B,CAAAA,CACA,cAAA,CAAA2B,EAAiB,IAAA,CACjB,cAAA,CAAAC,CACF,CAAA,CAAkB,CAChB,GAAM,CAAE,YAAA,CAAAjH,CAAa,CAAA,CAAIU,CAAAA,GACnB,CAACwG,CAAAA,CAAWC,CAAY,CAAA,CAAIpH,cAAAA,CAAwB,IAAI,CAAA,CACxD,CAACqH,EAAUC,CAAW,CAAA,CAAItH,eAAS,KAAK,CAAA,CACxC,CAACuH,CAAAA,CAAUC,CAAW,EAAIxH,cAAAA,CAAuB,UAAU,EAC3D,CAACyH,CAAAA,CAAaC,CAAc,CAAA,CAAI1H,cAAAA,CAAS,EAAE,CAAA,CAC3C,CAAC2H,EAAYC,CAAa,CAAA,CAAI5H,eAA+D,EAAE,EAE/F,CAAE,QAAA,CAAA6H,EAAU,SAAA,CAAA/F,CAAAA,CAAW,MAAAtD,CAAAA,CAAO,OAAA,CAAAsJ,EAAS,QAAA,CAAAC,CAAS,EAAIzF,EAAAA,CAAY,CACpE,OAAAyE,CAAAA,CACA,IAAA,CAAA9B,EACA,KAAA,CAAA+B,CACF,CAAC,CAAA,CAEK,CAAE,KAAAgB,CAAAA,CAAM,QAAA,CAAAvF,CAAS,CAAA,CAAID,IAAQ,CAC7B,CAAE,eAAAjB,CAAAA,CAAgB,YAAA,CAAAL,EAAc,SAAA,CAAAE,EAAAA,CAAW,MAAAM,CAAM,CAAA,CAAIT,GAAY,CAEjEgH,EAAAA,CAAqBzG,kBACxB0G,CAAAA,EAAqB,CACpBhB,IAAiBgB,CAAO,EAC1B,EACA,CAAChB,CAAc,CACjB,CAAA,CAEMiB,EAAAA,CAAa3G,kBACjB,MAAO/C,CAAAA,CAAoB2J,EAAsBC,CAAAA,GAA6B,CAC5E,GAAI,CAAA5F,CAAAA,CAGJ,CAAAmF,CAAAA,CAAeU,CAAAA,GAAU,CACvB,GAAGA,CAAAA,CACH,CAAC7J,CAAU,EAAG,CACZ,KAAA,CAAO4J,CAAAA,CAAkBD,EAAe,CAAA,CAAIA,CAAAA,CAAe,EAC3D,QAAA,CAAU,CAACC,CACb,CACF,CAAA,CAAE,EAEF,GAAI,CACF,IAAM5G,CAAAA,CAAS,MAAMuG,EAAKvJ,CAAU,CAAA,CAEpCmJ,EAAeU,CAAAA,GAAU,CACvB,GAAGA,CAAAA,CACH,CAAC7J,CAAU,EAAG,CACZ,MAAOgD,CAAAA,CAAO,UAAA,CACd,SAAUA,CAAAA,CAAO,cACnB,CACF,CAAA,CAAE,EACJ,MAAQ,CAENmG,CAAAA,CAAeU,IAAU,CACvB,GAAGA,EACH,CAAC7J,CAAU,EAAG,CACZ,MAAO2J,CAAAA,CACP,QAAA,CAAUC,CACZ,CACF,CAAA,CAAE,EACJ,CAAA,CACF,CAAA,CACA,CAACL,CAAAA,CAAMvF,CAAQ,CACjB,CAAA,CAEM+B,EAAAA,CAAehD,kBACnB,MAAOiD,CAAAA,EAAuB,CAE5B,GADAA,CAAAA,CAAE,gBAAe,CACb,EAAA,CAACgD,EAAY,IAAA,EAAK,EAAKvG,GAE3B,GAAI,CACF,MAAMK,CAAAA,CAAe,CACnB,KAAMgG,CAAAA,CACN,OAAA,CAASE,CACX,CAAC,CAAA,CACDC,EAAe,EAAE,CAAA,CACjBJ,EAAY,CAAA,CAAK,CAAA,CAEjB,WAAW,IAAM,CACfQ,GAAQ,CACRpG,CAAAA,GACF,CAAA,CAAG,GAAG,EACR,CAAA,KAAQ,CAER,CACF,CAAA,CACA,CAAC6F,EAAUE,CAAAA,CAAavG,CAAAA,CAAcK,EAAgBuG,CAAAA,CAASpG,CAAK,CACtE,CAAA,CAEM6G,EAAAA,CAAeL,GAAqB,CACxC,IAAMM,EAAQb,CAAAA,CAAWO,CAAAA,CAAQ,EAAE,CAAA,CACnC,OAAO,CACL,KAAA,CAAOM,CAAAA,EAAO,OAASN,CAAAA,CAAQ,UAAA,CAC/B,SAAUM,CAAAA,EAAO,QAAA,EAAYN,EAAQ,cACvC,CACF,EAEA,GAAI,CAACjI,CAAAA,CACH,OAAOgH,EACL1G,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO2C,CAAAA,CAAc,KAAA,CACxB,SAAA3C,cAAAA,CAAC,GAAA,CAAA,CAAE,iDAAqC,CAAA,CAC1C,CAAA,CACE,KAGN,GAAIuB,CAAAA,CACF,OACEvB,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO2C,CAAAA,CAAc,OAAA,CACxB,SAAA3C,cAAAA,CAAC,GAAA,CAAA,CAAE,+BAAmB,CAAA,CACxB,CAAA,CAIJ,GAAI/B,CAAAA,CACF,OACE+B,eAAC,KAAA,CAAA,CAAI,KAAA,CAAO2C,EAAc,KAAA,CACxB,QAAA,CAAAyB,gBAAC,GAAA,CAAA,CAAE,QAAA,CAAA,CAAA,2BAAA,CAAyBpE,eAAC,QAAA,CAAA,CAAO,OAAA,CAASuH,EAAS,KAAA,CAAO,CAAE,MAAO,SAAA,CAAW,cAAA,CAAgB,YAAa,UAAA,CAAY,MAAA,CAAQ,OAAQ,MAAA,CAAQ,MAAA,CAAQ,SAAU,CAAA,CAAG,QAAA,CAAA,WAAA,CAAS,GAAS,CAAA,CAC3L,CAAA,CAKJ,IAAMW,EAAAA,CAAa,IACZV,EAAS,oBAAA,CAEV3G,EAAAA,CAEAb,eAAC,KAAA,CAAA,CAAI,KAAA,CAAO2C,EAAc,cAAA,CAAgB,QAAA,CAAA,kDAAA,CAE1C,EAICmE,CAAAA,CAqBH1C,eAAAA,CAAC,QAAK,QAAA,CAAUH,EAAAA,CAAc,MAAOtB,CAAAA,CAAc,IAAA,CACjD,UAAAyB,eAAAA,CAAC,KAAA,CAAA,CAAI,MAAOzB,CAAAA,CAAc,UAAA,CACxB,UAAA3C,cAAAA,CAAC,GAAA,CAAA,CAAE,MAAO2C,CAAAA,CAAc,SAAA,CAAW,4BAAgB,CAAA,CACnD3C,cAAAA,CAAC,UACC,IAAA,CAAK,QAAA,CACL,QAAS,IAAM+G,CAAAA,CAAY,KAAK,CAAA,CAChC,KAAA,CAAO,CAAE,UAAA,CAAY,MAAA,CAAQ,OAAQ,MAAA,CAAQ,MAAA,CAAQ,UAAW,KAAA,CAAO,SAAU,EAClF,QAAA,CAAA,QAAA,CAED,CAAA,CAAA,CACF,EACA/G,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO2C,CAAAA,CAAc,YAAA,CACvB,SAAA2D,EAAAA,CAAW,GAAA,CAAK6B,GACfnI,cAAAA,CAAC,QAAA,CAAA,CAEC,KAAK,QAAA,CACL,OAAA,CAAS,IAAMiH,CAAAA,CAAYkB,CAAAA,CAAE,KAAK,CAAA,CAClC,KAAA,CAAO,CACL,GAAGxF,CAAAA,CAAc,WACjB,GAAIqE,CAAAA,GAAamB,EAAE,KAAA,CAAQxF,CAAAA,CAAc,iBAAmB,EAC9D,EAEC,QAAA,CAAAwF,CAAAA,CAAE,OAREA,CAAAA,CAAE,KAST,CACD,CAAA,CACH,CAAA,CACAnI,eAAC,UAAA,CAAA,CACC,KAAA,CAAOkH,EACP,QAAA,CAAWhD,CAAAA,EAAMiD,EAAejD,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC9C,WAAA,CAAY,2BACZ,KAAA,CAAOvB,CAAAA,CAAc,SACrB,QAAA,CAAQ,IAAA,CACV,EACA3C,cAAAA,CAAC,QAAA,CAAA,CACC,KAAK,QAAA,CACL,KAAA,CAAO,CACL,GAAG2C,CAAAA,CAAc,aACjB,OAAA,CAAShC,CAAAA,CAAe,EAAA,CAAM,CAChC,EACA,QAAA,CAAUA,CAAAA,CAET,SAAAA,CAAAA,CAAe,eAAA,CAAkB,SACpC,CAAA,CAAA,CACF,CAAA,CA9DEyD,gBAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAM2C,CAAAA,CAAY,IAAI,EAC/B,KAAA,CAAO,CACL,GAAGpE,CAAAA,CAAc,YAAA,CACjB,aAAc,MAAA,CACd,OAAA,CAAS,OACT,UAAA,CAAY,QAAA,CACZ,IAAK,KACP,CAAA,CAEA,UAAA3C,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAM,IAAA,CAAK,MAAA,CAAO,KAAK,IAAA,CAAK,MAAA,CAAO,QAAQ,WAAA,CAAY,MAAA,CAAO,eACjE,QAAA,CAAAA,cAAAA,CAAC,QAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,EAAG,CAAA,CAAE,gBAAA,CAAiB,EACxF,CAAA,CAAM,aAAA,CAAA,CAER,EA1BuC,IAAA,CA8E7C,GAAIsH,EAAS,MAAA,GAAW,CAAA,EAAKZ,EAC3B,OACEtC,eAAAA,CAAC,OAAI,KAAA,CAAOzB,CAAAA,CAAc,UAAW,SAAA,CAAWoC,CAAAA,CAC7C,UAAAmD,EAAAA,EAAW,CACZ9D,gBAAC,KAAA,CAAA,CAAI,KAAA,CAAOzB,EAAc,KAAA,CACxB,QAAA,CAAA,CAAA3C,eAAC,KAAA,CAAA,CACC,KAAA,CAAO2C,EAAc,SAAA,CACrB,IAAA,CAAK,OACL,MAAA,CAAO,cAAA,CACP,QAAQ,WAAA,CAER,QAAA,CAAA3C,cAAAA,CAAC,MAAA,CAAA,CACC,cAAc,OAAA,CACd,cAAA,CAAe,QACf,WAAA,CAAa,GAAA,CACb,EAAE,2GAAA,CACJ,CAAA,CACF,EACAA,cAAAA,CAAC,GAAA,CAAA,CAAE,MAAO,CAAE,MAAA,CAAQ,EAAG,UAAA,CAAY,GAAA,CAAK,MAAO,SAAU,CAAA,CAAG,2BAAe,CAAA,CAC3EA,cAAAA,CAAC,KAAE,KAAA,CAAO,CAAE,OAAQ,SAAA,CAAW,QAAA,CAAU,MAAO,CAAA,CAC7C,QAAA,CAAAwH,EAAS,oBAAA,CACN,kCAAA,CACA,mFACN,CAAA,CAAA,CACF,CAAA,CAAA,CACF,EAIJ,IAAMY,CAAAA,CAAUZ,EAAS,WAAA,EAAeA,CAAAA,CAAS,qBAAuB,KAAA,CAExE,OACEpD,gBAAC,KAAA,CAAA,CAAI,KAAA,CAAOzB,EAAc,SAAA,CAAW,SAAA,CAAWoC,EAC7C,QAAA,CAAA,CAAAmD,EAAAA,GACDlI,cAAAA,CAAC,IAAA,CAAA,CAAG,MAAO2C,CAAAA,CAAc,IAAA,CACtB,SAAA2E,CAAAA,CAAS,GAAA,CAAKK,GAAY,CACzB,IAAMU,EAAWnC,EAAAA,CAAWyB,CAAAA,CAAQ,aAAa,CAAA,EAAKzB,EAAAA,CAAW,SAC3DoC,CAAAA,CAAanC,EAAAA,CAAawB,EAAQ,MAAM,CAAA,EAAKxB,GAAa,GAAA,CAC1DoC,CAAAA,CAAY3B,IAAce,CAAAA,CAAQ,EAAA,CAClCa,EAAWR,EAAAA,CAAYL,CAAO,EAEpC,OACE3H,cAAAA,CAAC,IAAA,CAAA,CAEC,KAAA,CAAO,CACL,GAAG2C,CAAAA,CAAc,KACjB,GAAI4F,CAAAA,CAAY5F,EAAc,SAAA,CAAY,EAC5C,CAAA,CACA,YAAA,CAAc,IAAMkE,CAAAA,CAAac,CAAAA,CAAQ,EAAE,CAAA,CAC3C,YAAA,CAAc,IAAMd,CAAAA,CAAa,IAAI,EAErC,QAAA,CAAAzC,eAAAA,CAAC,OAAI,KAAA,CAAOgE,CAAAA,CAAUzF,EAAc,YAAA,CAAe,MAAA,CAChD,UAAAyF,CAAAA,EACChE,eAAAA,CAAC,UACC,OAAA,CAAUF,CAAAA,EAAM,CACdA,CAAAA,CAAE,eAAA,GACF0D,EAAAA,CAAWD,CAAAA,CAAQ,GAAIa,CAAAA,CAAS,KAAA,CAAOA,EAAS,QAAQ,EAC1D,EACA,QAAA,CAAUtG,CAAAA,CACV,MAAO,CACL,GAAGS,EAAc,UAAA,CACjB,GAAI6F,EAAS,QAAA,CAAW7F,CAAAA,CAAc,iBAAmB,EAC3D,EACA,KAAA,CAAO6F,CAAAA,CAAS,SAAW,aAAA,CAAgB,qBAAA,CAE3C,UAAAxI,cAAAA,CAAC,KAAA,CAAA,CACC,MAAM,IAAA,CACN,MAAA,CAAO,KACP,OAAA,CAAQ,WAAA,CACR,KAAMwI,CAAAA,CAAS,QAAA,CAAW,eAAiB,MAAA,CAC3C,MAAA,CAAO,eACP,WAAA,CAAa,CAAA,CAEb,SAAAxI,cAAAA,CAAC,MAAA,CAAA,CACC,cAAc,OAAA,CACd,cAAA,CAAe,OAAA,CACf,CAAA,CAAE,gBACJ,CAAA,CACF,CAAA,CACAA,eAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CACX,GAAG2C,CAAAA,CAAc,UACjB,GAAI6F,CAAAA,CAAS,SAAW,CAAE,KAAA,CAAO,SAAU,CAAA,CAAI,EACjD,CAAA,CACG,QAAA,CAAAA,EAAS,KAAA,CACZ,CAAA,CAAA,CACF,EAEFpE,eAAAA,CAAC,KAAA,CAAA,CACC,MAAOgE,CAAAA,CAAUzF,CAAAA,CAAc,YAAc,MAAA,CAC7C,OAAA,CAAS,IAAM+E,EAAAA,CAAmBC,CAAO,EACzC,IAAA,CAAK,QAAA,CACL,SAAU,CAAA,CACV,SAAA,CAAYzD,GAAM,CAAA,CACZA,CAAAA,CAAE,MAAQ,OAAA,EAAWA,CAAAA,CAAE,MAAQ,GAAA,GACjCwD,EAAAA,CAAmBC,CAAO,EAE9B,CAAA,CAEA,UAAA3H,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO2C,CAAAA,CAAc,MAAA,CACxB,SAAAyB,eAAAA,CAAC,KAAA,CAAA,CAAI,MAAOzB,CAAAA,CAAc,MAAA,CACxB,UAAA3C,cAAAA,CAAC,MAAA,CAAA,CACC,MAAO,CACL,GAAG2C,EAAc,KAAA,CACjB,KAAA,CAAO0F,EAAS,KAAA,CAChB,eAAA,CAAiBA,EAAS,EAC5B,CAAA,CAEC,SAAAA,CAAAA,CAAS,KAAA,CACZ,EACArI,cAAAA,CAAC,MAAA,CAAA,CACC,MAAO,CACL,GAAG2C,EAAc,KAAA,CACjB,KAAA,CAAO2F,CAAAA,CAAW,KAAA,CAClB,gBAAiBA,CAAAA,CAAW,EAC9B,EAEC,QAAA,CAAAA,CAAAA,CAAW,MACd,CAAA,CACCX,CAAAA,CAAQ,QACP3H,cAAAA,CAAC,MAAA,CAAA,CAAK,MAAO2C,CAAAA,CAAc,QAAA,CAAU,eAAG,CAAA,CAAA,CAE5C,CAAA,CACF,EACA3C,cAAAA,CAAC,GAAA,CAAA,CAAE,MAAO2C,CAAAA,CAAc,OAAA,CACrB,SAAAgF,CAAAA,CAAQ,OAAA,EAAW,sBACtB,CAAA,CACAvD,eAAAA,CAAC,OAAI,KAAA,CAAOzB,CAAAA,CAAc,KACxB,QAAA,CAAA,CAAA3C,cAAAA,CAAC,QAAM,QAAA,CAAAoG,EAAAA,CAAWuB,EAAQ,UAAU,CAAA,CAAE,EACrC,CAACS,CAAAA,EAAWI,EAAS,KAAA,CAAQ,CAAA,EAC5BpE,gBAAC,MAAA,CAAA,CAAM,QAAA,CAAA,CAAAoE,EAAS,KAAA,CAAM,OAAA,CAAMA,EAAS,KAAA,GAAU,CAAA,CAAI,IAAM,EAAA,CAAA,CAAG,CAAA,CAE7Db,EAAQ,QAAA,EACPvD,eAAAA,CAAC,QAAK,KAAA,CAAO,CAAE,SAAU,QAAA,CAAU,YAAA,CAAc,WAAY,UAAA,CAAY,QAAA,CAAU,SAAU,OAAQ,CAAA,CAAG,mBAC/FuD,CAAAA,CAAQ,QAAA,CAAA,CACjB,GAEJ,CAAA,CAAA,CACF,CAAA,CAAA,CACF,GA/FKA,CAAAA,CAAQ,EAgGf,CAEJ,CAAC,CAAA,CACH,GACF,CAEJ,CChkBA,IAAMc,EAAAA,CAAkD,CACtD,SAAU,eAAA,CACV,QAAA,CAAU,aACZ,CAAA,CAEMC,EAAAA,CAAyF,CAC7F,QAAA,CAAU,CAAE,MAAO,UAAA,CAAY,KAAA,CAAO,UAAW,EAAA,CAAI,SAAU,EAC/D,UAAA,CAAY,CAAE,MAAO,YAAA,CAAc,KAAA,CAAO,UAAW,EAAA,CAAI,SAAU,EACnE,eAAA,CAAiB,CAAE,MAAO,iBAAA,CAAmB,KAAA,CAAO,UAAW,EAAA,CAAI,SAAU,EAC7E,cAAA,CAAgB,CAAE,MAAO,gBAAA,CAAkB,KAAA,CAAO,UAAW,EAAA,CAAI,SAAU,CAC7E,CAAA,CAEMvC,EAAAA,CAA6E,CACjF,GAAA,CAAK,CAAE,MAAO,KAAA,CAAO,KAAA,CAAO,UAAW,EAAA,CAAI,SAAU,EACrD,QAAA,CAAU,CAAE,MAAO,UAAA,CAAY,KAAA,CAAO,UAAW,EAAA,CAAI,SAAU,EAC/D,WAAA,CAAa,CAAE,MAAO,aAAA,CAAe,KAAA,CAAO,UAAW,EAAA,CAAI,SAAU,EACrE,QAAA,CAAU,CAAE,MAAO,UAAA,CAAY,KAAA,CAAO,SAAA,CAAW,EAAA,CAAI,SAAU,CAAA,CAC/D,MAAA,CAAQ,CAAE,KAAA,CAAO,QAAA,CAAU,MAAO,SAAA,CAAW,EAAA,CAAI,SAAU,CAC7D,CAAA,CAEA,SAASC,EAAAA,CAAWC,CAAAA,CAA4B,CAC9C,OAAO,IAAI,KAAKA,CAAU,CAAA,CAAE,mBAAmB,OAAA,CAAS,CACtD,MAAO,OAAA,CACP,GAAA,CAAK,UACL,IAAA,CAAM,SACR,CAAC,CACH,CAEA,IAAMC,EAAAA,CAAuD,CAC3D,CAAE,KAAA,CAAO,UAAA,CAAY,MAAO,UAAW,CAAA,CACvC,CAAE,KAAA,CAAO,YAAA,CAAc,MAAO,KAAM,CAAA,CACpC,CAAE,KAAA,CAAO,iBAAA,CAAmB,MAAO,SAAU,CAC/C,EAGMqC,EAAAA,CAAa,IACjB3I,eAAC,KAAA,CAAA,CAAI,KAAA,CAAM,KAAK,MAAA,CAAO,IAAA,CAAK,KAAK,MAAA,CAAO,MAAA,CAAO,eAAe,OAAA,CAAQ,WAAA,CACpE,SAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,cAAc,OAAA,CAAQ,cAAA,CAAe,QAAQ,WAAA,CAAa,CAAA,CAAG,EAAE,6CAAA,CAA8C,CAAA,CACrH,EAGI4I,EAAAA,CAAW,IACf5I,eAAC,KAAA,CAAA,CAAI,KAAA,CAAM,KAAK,MAAA,CAAO,IAAA,CAAK,KAAK,MAAA,CAAO,MAAA,CAAO,eAAe,OAAA,CAAQ,WAAA,CACpE,SAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,cAAc,OAAA,CAAQ,cAAA,CAAe,QAAQ,WAAA,CAAa,GAAA,CAAK,EAAE,oPAAA,CAAqP,CAAA,CAC9T,EAGI6I,EAAAA,CAAmB,IACvB7I,eAAC,KAAA,CAAA,CAAI,KAAA,CAAM,KAAK,MAAA,CAAO,IAAA,CAAK,KAAK,MAAA,CAAO,MAAA,CAAO,eAAe,OAAA,CAAQ,WAAA,CACpE,SAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,cAAc,OAAA,CAAQ,cAAA,CAAe,QAAQ,WAAA,CAAa,CAAA,CAAG,EAAE,cAAA,CAAe,CAAA,CACtF,EAGI8I,EAAAA,CAAkB,IACtB9I,eAAC,KAAA,CAAA,CAAI,KAAA,CAAM,KAAK,MAAA,CAAO,IAAA,CAAK,KAAK,MAAA,CAAO,MAAA,CAAO,eAAe,OAAA,CAAQ,WAAA,CACpE,SAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,cAAc,OAAA,CAAQ,cAAA,CAAe,QAAQ,WAAA,CAAa,CAAA,CAAG,EAAE,gBAAA,CAAiB,CAAA,CACxF,EAGI+I,EAAAA,CAAgB,IACpB/I,eAAC,KAAA,CAAA,CAAI,KAAA,CAAM,KAAK,MAAA,CAAO,IAAA,CAAK,KAAK,MAAA,CAAO,MAAA,CAAO,eAAe,OAAA,CAAQ,WAAA,CACpE,SAAAA,cAAAA,CAAC,MAAA,CAAA,CAAK,cAAc,OAAA,CAAQ,cAAA,CAAe,QAAQ,WAAA,CAAa,CAAA,CAAG,EAAE,6BAAA,CAA8B,CAAA,CACrG,CAAA,CAGIgJ,EAAAA,CAAY,IAChBhJ,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAM,IAAA,CAAK,MAAA,CAAO,KAAK,IAAA,CAAK,MAAA,CAAO,OAAO,cAAA,CAAe,OAAA,CAAQ,YACpE,QAAA,CAAAA,cAAAA,CAAC,QAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,EAAG,CAAA,CAAE,6CAAA,CAA8C,EACrH,CAAA,CAGIiJ,EAAAA,CAAa,IACjBjJ,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAM,IAAA,CAAK,MAAA,CAAO,KAAK,IAAA,CAAK,MAAA,CAAO,OAAO,cAAA,CAAe,OAAA,CAAQ,YACpE,QAAA,CAAAA,cAAAA,CAAC,QAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,EAAG,CAAA,CAAE,wJAAA,CAAyJ,EAChO,CAAA,CAGIkJ,EAAAA,CAAc,IAClBlJ,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAM,IAAA,CAAK,MAAA,CAAO,KAAK,IAAA,CAAK,MAAA,CAAO,OAAO,cAAA,CAAe,OAAA,CAAQ,YACpE,QAAA,CAAAA,cAAAA,CAAC,QAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,IAAK,CAAA,CAAE,2GAAA,CAA4G,EACrL,CAAA,CAGImJ,EAAAA,CAAW,IACfnJ,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAM,IAAA,CAAK,MAAA,CAAO,KAAK,IAAA,CAAK,MAAA,CAAO,OAAO,cAAA,CAAe,OAAA,CAAQ,WAAA,CACpE,QAAA,CAAAA,eAAC,MAAA,CAAA,CAAK,aAAA,CAAc,QAAQ,cAAA,CAAe,OAAA,CAAQ,YAAa,CAAA,CAAG,CAAA,CAAE,iBAAiB,CAAA,CACxF,CAAA,CAGIoJ,GAAa,IACjBpJ,cAAAA,CAAC,OAAI,KAAA,CAAM,IAAA,CAAK,OAAO,IAAA,CAAK,IAAA,CAAK,OAAO,MAAA,CAAO,cAAA,CAAe,QAAQ,WAAA,CAAY,KAAA,CAAO,CAAE,SAAA,CAAW,yBAA0B,EAC9H,QAAA,CAAAA,cAAAA,CAAC,QAAK,aAAA,CAAc,OAAA,CAAQ,eAAe,OAAA,CAAQ,WAAA,CAAa,EAAG,CAAA,CAAE,iHAAA,CAAkH,EACzL,CAAA,CAGIqJ,CAAAA,CAAS,CACb,SAAA,CAAW,CACT,WAAY,sCAAA,CACZ,SAAA,CAAW,OACb,CAAA,CACA,IAAA,CAAM,CACJ,OAAA,CAAS,MAAA,CACT,oBAAqB,WAAA,CACrB,GAAA,CAAK,MACP,CAAA,CACA,OAAA,CAAS,CACP,QAAA,CAAU,QAAA,CACV,IAAK,MAAA,CACL,MAAA,CAAQ,aACV,CAAA,CACA,IAAA,CAAM,CACJ,QAAA,CAAU,CACZ,EACA,IAAA,CAAM,CACJ,QAAS,MAAA,CACT,GAAA,CAAK,MACL,OAAA,CAAS,KAAA,CACT,gBAAiB,SAAA,CACjB,YAAA,CAAc,MACd,YAAA,CAAc,MAChB,EACA,GAAA,CAAK,CACH,IAAA,CAAM,CAAA,CACN,QAAS,UAAA,CACT,QAAA,CAAU,OACV,UAAA,CAAY,GAAA,CACZ,OAAQ,MAAA,CACR,YAAA,CAAc,MACd,MAAA,CAAQ,SAAA,CACR,WAAY,WAAA,CACZ,eAAA,CAAiB,cACjB,KAAA,CAAO,SACT,EACA,SAAA,CAAW,CACT,gBAAiB,SAAA,CACjB,KAAA,CAAO,UACP,SAAA,CAAW,+BACb,EACA,eAAA,CAAiB,CACf,SAAU,UAAA,CACV,YAAA,CAAc,MAChB,CAAA,CACA,UAAA,CAAY,CACV,QAAA,CAAU,UAAA,CACV,KAAM,MAAA,CACN,GAAA,CAAK,MACL,SAAA,CAAW,kBAAA,CACX,MAAO,SACT,CAAA,CACA,YAAa,CACX,KAAA,CAAO,OACP,OAAA,CAAS,mBAAA,CACT,SAAU,MAAA,CACV,MAAA,CAAQ,oBACR,YAAA,CAAc,KAAA,CACd,QAAS,MACX,CAAA,CACA,aAAc,CACZ,QAAA,CAAU,OACV,UAAA,CAAY,GAAA,CACZ,cAAe,WAAA,CACf,aAAA,CAAe,SACf,KAAA,CAAO,SAAA,CACP,aAAc,MAChB,CAAA,CACA,QAAS,CACP,SAAA,CAAW,OACX,OAAA,CAAS,CAAA,CACT,OAAQ,CACV,CAAA,CACA,QAAS,CACP,OAAA,CAAS,OACT,UAAA,CAAY,QAAA,CACZ,cAAA,CAAgB,eAAA,CAChB,MAAO,MAAA,CACP,OAAA,CAAS,WACT,QAAA,CAAU,MAAA,CACV,MAAO,SAAA,CACP,eAAA,CAAiB,cACjB,MAAA,CAAQ,MAAA,CACR,aAAc,KAAA,CACd,MAAA,CAAQ,UACR,SAAA,CAAW,MACb,EACA,aAAA,CAAe,CACb,gBAAiB,SAAA,CACjB,KAAA,CAAO,UACP,UAAA,CAAY,GACd,EACA,MAAA,CAAQ,CACN,WAAY,MAAA,CACZ,SAAA,CAAW,MACX,WAAA,CAAa,MAAA,CACb,WAAY,mBACd,CAAA,CACA,YAAa,CACX,OAAA,CAAS,OACT,mBAAA,CAAqB,uCAAA,CACrB,IAAK,MACP,CAAA,CACA,YAAa,CACX,OAAA,CAAS,OACT,UAAA,CAAY,YAAA,CACZ,IAAK,MAAA,CACL,OAAA,CAAS,OACT,MAAA,CAAQ,mBAAA,CACR,aAAc,KAAA,CACd,eAAA,CAAiB,UACjB,MAAA,CAAQ,SAAA,CACR,WAAY,WAAA,CACZ,SAAA,CAAW,MACb,CAAA,CACA,WAAA,CAAa,CACX,UAAA,CAAY,CAAA,CACZ,MAAO,MAAA,CACP,MAAA,CAAQ,OACR,OAAA,CAAS,MAAA,CACT,WAAY,QAAA,CACZ,cAAA,CAAgB,SAChB,eAAA,CAAiB,SAAA,CACjB,aAAc,KAAA,CACd,KAAA,CAAO,SACT,CAAA,CACA,cAAA,CAAgB,CACd,IAAA,CAAM,EACN,QAAA,CAAU,CACZ,EACA,YAAA,CAAc,CACZ,SAAU,MAAA,CACV,UAAA,CAAY,IACZ,KAAA,CAAO,SAAA,CACP,OAAQ,CACV,CAAA,CACA,YAAa,CACX,QAAA,CAAU,OACV,KAAA,CAAO,SAAA,CACP,OAAQ,SAAA,CACR,OAAA,CAAS,cACT,eAAA,CAAiB,CAAA,CACjB,gBAAiB,UAAA,CACjB,QAAA,CAAU,QACZ,CAAA,CACA,WAAA,CAAa,CACX,QAAA,CAAU,MAAA,CACV,MAAO,SAAA,CACP,SAAA,CAAW,KACb,CAAA,CACA,UAAA,CAAY,CACV,OAAA,CAAS,aAAA,CACT,WAAY,QAAA,CACZ,GAAA,CAAK,MACL,OAAA,CAAS,OAAA,CACT,SAAU,MAAA,CACV,KAAA,CAAO,UACP,eAAA,CAAiB,aAAA,CACjB,OAAQ,MAAA,CACR,MAAA,CAAQ,UACR,YAAA,CAAc,MAChB,EACA,aAAA,CAAe,CACb,SAAU,OACZ,CAAA,CACA,mBAAoB,CAClB,QAAA,CAAU,OACV,UAAA,CAAY,GAAA,CACZ,MAAO,SAAA,CACP,MAAA,CAAQ,CACV,CAAA,CACA,iBAAA,CAAmB,CACjB,OAAA,CAAS,MAAA,CACT,WAAY,QAAA,CACZ,GAAA,CAAK,MACL,QAAA,CAAU,MAAA,CACV,MAAO,SAAA,CACP,SAAA,CAAW,KACb,CAAA,CACA,qBAAsB,CACpB,SAAA,CAAW,OACX,QAAA,CAAU,MAAA,CACV,WAAY,GAAA,CACZ,KAAA,CAAO,SACT,CAAA,CACA,UAAA,CAAY,CACV,SAAA,CAAW,QAAA,CACX,QAAS,WAAA,CACT,KAAA,CAAO,SACT,CAAA,CACA,SAAA,CAAW,CACT,KAAA,CAAO,SAAA,CACP,aAAc,MAChB,CAAA,CACA,WAAY,CACV,QAAA,CAAU,OACV,UAAA,CAAY,GAAA,CACZ,MAAO,SAAA,CACP,MAAA,CAAQ,SACV,CAAA,CACA,SAAA,CAAW,CACT,QAAA,CAAU,MAAA,CACV,OAAQ,CACV,CAAA,CACA,QAAS,CACP,OAAA,CAAS,OACT,UAAA,CAAY,QAAA,CACZ,eAAgB,QAAA,CAChB,GAAA,CAAK,MACL,OAAA,CAAS,MAAA,CACT,MAAO,SAAA,CACP,QAAA,CAAU,MACZ,CAAA,CAEA,WAAA,CAAa,CACX,MAAA,CAAQ,mBAAA,CACR,aAAc,KAAA,CACd,OAAA,CAAS,OACT,eAAA,CAAiB,SAAA,CACjB,aAAc,MAChB,CAAA,CACA,cAAe,CACb,OAAA,CAAS,OACT,UAAA,CAAY,QAAA,CACZ,IAAK,KAAA,CACL,YAAA,CAAc,KAChB,CAAA,CACA,KAAA,CAAO,CACL,OAAA,CAAS,aAAA,CACT,WAAY,QAAA,CACZ,OAAA,CAAS,SAAA,CACT,YAAA,CAAc,SACd,QAAA,CAAU,MAAA,CACV,WAAY,GACd,CAAA,CACA,eAAgB,CACd,QAAA,CAAU,OACV,KAAA,CAAO,SAAA,CACP,OAAQ,CAAA,CACR,UAAA,CAAY,GACd,CAAA,CACA,WAAA,CAAa,CACX,OAAA,CAAS,MAAA,CACT,IAAK,MAAA,CACL,SAAA,CAAW,MACX,QAAA,CAAU,MAAA,CACV,MAAO,SACT,CAAA,CACA,KAAM,CACJ,OAAA,CAAS,OACT,eAAA,CAAiB,SAAA,CACjB,aAAc,KAAA,CACd,MAAA,CAAQ,oBACR,YAAA,CAAc,MAChB,EACA,UAAA,CAAY,CACV,QAAS,MAAA,CACT,UAAA,CAAY,SACZ,cAAA,CAAgB,eAAA,CAChB,aAAc,MAChB,CAAA,CACA,UAAW,CACT,QAAA,CAAU,OACV,UAAA,CAAY,GAAA,CACZ,MAAO,SAAA,CACP,MAAA,CAAQ,CACV,CAAA,CACA,YAAA,CAAc,CACZ,OAAA,CAAS,MAAA,CACT,IAAK,KAAA,CACL,YAAA,CAAc,MAChB,CAAA,CACA,UAAA,CAAY,CACV,OAAA,CAAS,UAAA,CACT,aAAc,KAAA,CACd,MAAA,CAAQ,oBACR,eAAA,CAAiB,SAAA,CACjB,SAAU,MAAA,CACV,MAAA,CAAQ,UACR,UAAA,CAAY,WACd,EACA,gBAAA,CAAkB,CAChB,gBAAiB,SAAA,CACjB,WAAA,CAAa,UACb,KAAA,CAAO,SACT,EACA,QAAA,CAAU,CACR,MAAO,MAAA,CACP,OAAA,CAAS,YACT,YAAA,CAAc,KAAA,CACd,OAAQ,mBAAA,CACR,QAAA,CAAU,OACV,MAAA,CAAQ,UAAA,CACR,UAAW,MAAA,CACX,UAAA,CAAY,UACZ,YAAA,CAAc,MAAA,CACd,UAAW,YACb,CAAA,CACA,aAAc,CACZ,OAAA,CAAS,WACT,YAAA,CAAc,KAAA,CACd,OAAQ,MAAA,CACR,eAAA,CAAiB,UACjB,KAAA,CAAO,SAAA,CACP,SAAU,MAAA,CACV,UAAA,CAAY,IACZ,MAAA,CAAQ,SAAA,CACR,WAAY,eACd,CAAA,CACA,iBAAkB,CAChB,OAAA,CAAS,cACT,UAAA,CAAY,QAAA,CACZ,IAAK,KAAA,CACL,OAAA,CAAS,WACT,YAAA,CAAc,KAAA,CACd,OAAQ,MAAA,CACR,eAAA,CAAiB,UACjB,KAAA,CAAO,SAAA,CACP,SAAU,MAAA,CACV,UAAA,CAAY,IACZ,MAAA,CAAQ,SAAA,CACR,aAAc,MAChB,CAAA,CACA,eAAgB,CACd,OAAA,CAAS,OACT,eAAA,CAAiB,SAAA,CACjB,aAAc,KAAA,CACd,KAAA,CAAO,UACP,QAAA,CAAU,MAAA,CACV,aAAc,MAChB,CACF,EAGMC,EAAAA,CAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAOf,SAASC,EAAAA,CAAW,CACzB,IAAA,CAAAC,EAAO,CAAC,UAAA,CAAY,UAAU,CAAA,CAC9B,UAAA,CAAAC,CAAAA,CAAa,UAAA,CACb,SAAA,CAAAC,EAAY,EAAC,CACb,UAAA,CAAA9E,CAAAA,CAAa,IAAA,CACb,SAAA,CAAAG,CACF,CAAA,CAAoB,CAClB,GAAM,CAAC4E,CAAAA,CAAWC,CAAY,CAAA,CAAInK,cAAAA,CAAwBgK,CAAU,CAAA,CAC9D,CAACxE,CAAAA,CAAaC,CAAc,CAAA,CAAIzF,cAAAA,CAAS,EAAE,CAAA,CAC3C,CAACiG,CAAAA,CAAiBmE,CAAkB,CAAA,CAAIpK,cAAAA,CAAyB,IAAI,CAAA,CACrE,CAACqK,CAAAA,CAAgBC,CAAiB,CAAA,CAAItK,eAAsB,IAAI,GAAK,CAAA,CACrE,CAACuK,CAAAA,CAAmBC,CAAoB,CAAA,CAAIxK,cAAAA,CAAwB,IAAI,CAAA,CACxE,CAACqH,CAAAA,CAAUC,CAAW,CAAA,CAAItH,cAAAA,CAAS,KAAK,CAAA,CACxC,CAACuH,CAAAA,CAAUC,CAAW,CAAA,CAAIxH,cAAAA,CAAuB,UAAU,CAAA,CAC3D,CAACyH,CAAAA,CAAaC,CAAc,CAAA,CAAI1H,cAAAA,CAAS,EAAE,CAAA,CAC3CyK,CAAAA,CAAiBC,YAAAA,CAAyB,IAAI,CAAA,CAE9C,CAAE,YAAA,CAAAzK,CAAa,CAAA,CAAIU,CAAAA,EAAiB,CACpC,CAAE,QAAA,CAAAmF,CAAAA,CAAU,UAAW6E,CAAgB,CAAA,CAAIhJ,EAAAA,CAAY,CAAE,MAAA,CAAQ6D,CAAAA,EAAe,MAAU,CAAC,EAC3F,CAAE,OAAA,CAASoF,CAAAA,CAAa,SAAA,CAAWC,EAAe,CAAA,CAAI5I,EAAAA,CAAWgE,CAAAA,EAAiB,MAAQ,EAAE,CAAA,CAC5F,CAAE,QAAA,CAAA4B,CAAAA,CAAU,SAAA,CAAWiD,EAAAA,CAAiB,OAAA,CAASC,GAAiB,QAAA,CAAAhD,EAAS,CAAA,CAAIzF,EAAAA,CAAY,CAAE,KAAA,CAAO,EAAG,CAAC,EACxG,CAAE,aAAA,CAAAS,EAAAA,CAAe,SAAA,CAAWiI,EAAc,CAAA,CAAIlI,EAAAA,EAAiB,CAC/D,CAAE,eAAAvB,CAAAA,CAAgB,YAAA,CAAAL,CAAAA,CAAc,SAAA,CAAAE,CAAAA,CAAW,KAAA,CAAAM,CAAM,CAAA,CAAIT,GAAY,CAEjEgK,CAAAA,CAAe,CAAE,GAAGjC,EAAAA,CAAkB,GAAGiB,CAAU,CAAA,CAGzD5J,gBAAU,IAAM,CACd,IAAM6K,CAAAA,CAAiBzG,CAAAA,EAAqB,CAAA,CACrCA,CAAAA,CAAE,OAAA,EAAWA,EAAE,OAAA,GAAYA,CAAAA,CAAE,GAAA,GAAQ,GAAA,GACxCA,CAAAA,CAAE,cAAA,EAAe,CACjBgG,CAAAA,CAAe,SAAS,KAAA,EAAM,EAElC,CAAA,CACA,OAAA,QAAA,CAAS,gBAAA,CAAiB,SAAA,CAAWS,CAAa,CAAA,CAC3C,IAAM,QAAA,CAAS,mBAAA,CAAoB,SAAA,CAAWA,CAAa,CACpE,CAAA,CAAG,EAAE,EAEL,IAAMC,CAAAA,CAAeC,CAAAA,EAAoB,CACvCd,CAAAA,CAAmBhC,CAAAA,EAAS,CAC1B,IAAM+C,EAAO,IAAI,GAAA,CAAI/C,CAAI,CAAA,CACzB,OAAI+C,CAAAA,CAAK,GAAA,CAAID,CAAO,EAClBC,CAAAA,CAAK,MAAA,CAAOD,CAAO,CAAA,CAEnBC,CAAAA,CAAK,GAAA,CAAID,CAAO,CAAA,CAEXC,CACT,CAAC,EACH,CAAA,CAEMC,CAAAA,CAAmBlL,aAAAA,CAAQ,IACxB0F,CAAAA,CAAS,MAAA,CAAQ5D,GACC,CAACqI,CAAAA,EAAsBrI,CAAAA,CAAgB,UAAA,GAAeqI,CAE9E,CAAA,CACA,CAACzE,CAAAA,CAAUyE,CAAiB,CAAC,CAAA,CAE1B/F,EAAAA,CAAehD,iBAAAA,CACnB,MAAOiD,CAAAA,EAAuB,CAE5B,GADAA,EAAE,cAAA,EAAe,CACb,EAAA,CAACgD,CAAAA,CAAY,IAAA,EAAK,EAAKvG,CAAAA,CAAAA,CAE3B,GAAI,CACF,MAAMK,CAAAA,CAAe,CACnB,IAAA,CAAMgG,CAAAA,CACN,OAAA,CAASE,CACX,CAAC,EACDC,CAAAA,CAAe,EAAE,CAAA,CACjBJ,CAAAA,CAAY,CAAA,CAAK,CAAA,CACjB,UAAA,CAAW,IAAM,CACfyD,EAAAA,EAAgB,CAChBrJ,CAAAA,GACF,EAAG,GAAG,EACR,CAAA,KAAQ,CAER,CACF,CAAA,CACA,CAAC6F,CAAAA,CAAUE,CAAAA,CAAavG,CAAAA,CAAcK,CAAAA,CAAgBwJ,EAAAA,CAAiBrJ,CAAK,CAC9E,CAAA,CAEM6J,EAAAA,CAAsB,IACtBV,EAAAA,EAAkB,CAACD,CAAAA,CAEnBjG,eAAAA,CAAC,KAAA,CAAA,CAAI,MAAOiF,CAAAA,CAAO,OAAA,CACjB,QAAA,CAAA,CAAArJ,cAAAA,CAACoJ,EAAAA,CAAA,EAAW,CAAA,CACZpJ,cAAAA,CAAC,QAAK,QAAA,CAAA,oBAAA,CAAkB,CAAA,CAAA,CAC1B,CAAA,CAKFoE,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOiF,CAAAA,CAAO,aAAA,CACjB,UAAAjF,eAAAA,CAAC,QAAA,CAAA,CAAO,OAAA,CAAS,IAAMyF,CAAAA,CAAmB,IAAI,CAAA,CAAG,KAAA,CAAOR,EAAO,UAAA,CAC7D,QAAA,CAAA,CAAArJ,cAAAA,CAAC+I,EAAAA,CAAA,EAAc,CAAA,CAAE,kBAAA,CAAA,CAEnB,CAAA,CAEA/I,eAAC,IAAA,CAAA,CAAG,KAAA,CAAOqJ,CAAAA,CAAO,kBAAA,CAAqB,QAAA,CAAAgB,CAAAA,CAAY,KAAA,CAAM,CAAA,CACxDA,EAAY,iBAAA,EACXjG,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOiF,CAAAA,CAAO,iBAAA,CACjB,QAAA,CAAA,CAAArJ,cAAAA,CAACgJ,GAAA,EAAU,CAAA,CACVqB,CAAAA,CAAY,iBAAA,CAAkB,WAAA,CAAA,CACjC,CAAA,CAGDA,CAAAA,CAAY,YAAA,CACXrK,eAAC,KAAA,CAAA,CACC,KAAA,CAAOqJ,CAAAA,CAAO,oBAAA,CACd,uBAAA,CAAyB,CAAE,MAAA,CAAQgB,CAAAA,CAAY,YAAa,CAAA,CAC9D,CAAA,CAEArK,cAAAA,CAAC,GAAA,CAAA,CAAE,KAAA,CAAO,CAAE,GAAGqJ,CAAAA,CAAO,qBAAsB,KAAA,CAAO,SAAU,CAAA,CAAG,QAAA,CAAA,uBAAA,CAAqB,CAAA,CAAA,CAEzF,CAAA,CAIE4B,EAAAA,CAAiB,IACjBvF,EACKsF,EAAAA,EAAoB,CAGzBZ,CAAAA,EAAmBK,EAAAA,CAEnBrG,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOiF,CAAAA,CAAO,QACjB,QAAA,CAAA,CAAArJ,cAAAA,CAACoJ,EAAAA,CAAA,EAAW,CAAA,CACZpJ,cAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,YAAA,CAAU,GAClB,CAAA,CAIA+K,CAAAA,CAAiB,MAAA,GAAW,CAAA,CAE5B3G,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOiF,CAAAA,CAAO,WACjB,QAAA,CAAA,CAAArJ,cAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOqJ,EAAO,SAAA,CAAW,QAAA,CAAArJ,cAAAA,CAAC4I,EAAAA,CAAA,EAAS,CAAA,CAAE,CAAA,CAC1C5I,cAAAA,CAAC,IAAA,CAAA,CAAG,KAAA,CAAOqJ,CAAAA,CAAO,UAAA,CAAY,QAAA,CAAA,mBAAA,CAAiB,EAC/CrJ,cAAAA,CAAC,GAAA,CAAA,CAAE,KAAA,CAAOqJ,CAAAA,CAAO,SAAA,CACd,QAAA,CAAApE,CAAAA,CAAc,CAAA,gBAAA,EAAmBA,CAAW,CAAA,CAAA,CAAA,CAAM,0CAAA,CACrD,CAAA,CAAA,CACF,CAAA,CAKFjF,cAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOqJ,CAAAA,CAAO,YAChB,QAAA,CAAA0B,CAAAA,CAAiB,GAAA,CAAKpJ,CAAAA,EACrByC,eAAAA,CAAC,QAAA,CAAA,CAEC,OAAA,CAAS,IAAMyF,EAAmBlI,CAAO,CAAA,CACzC,KAAA,CAAO0H,CAAAA,CAAO,WAAA,CAEd,QAAA,CAAA,CAAArJ,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAOqJ,CAAAA,CAAO,WAAA,CACjB,QAAA,CAAArJ,cAAAA,CAAC4I,EAAAA,CAAA,EAAS,CAAA,CACZ,CAAA,CACAxE,gBAAC,KAAA,CAAA,CAAI,KAAA,CAAOiF,CAAAA,CAAO,cAAA,CACjB,QAAA,CAAA,CAAArJ,cAAAA,CAAC,IAAA,CAAA,CAAG,KAAA,CAAOqJ,EAAO,YAAA,CAAe,QAAA,CAAA1H,CAAAA,CAAQ,KAAA,CAAM,CAAA,CAC9CA,CAAAA,CAAQ,eAAA,EACP3B,cAAAA,CAAC,KAAE,KAAA,CAAOqJ,CAAAA,CAAO,WAAA,CAAc,QAAA,CAAA1H,CAAAA,CAAQ,eAAA,CAAgB,CAAA,CAExDA,CAAAA,CAAQ,mBACPyC,eAAAA,CAAC,GAAA,CAAA,CAAE,KAAA,CAAOiF,CAAAA,CAAO,WAAA,CAAc,QAAA,CAAA,CAAA1H,CAAAA,CAAQ,iBAAA,CAAkB,aAAS,CAAA,CAAA,CAEtE,CAAA,CACA3B,cAAAA,CAAC6I,EAAAA,CAAA,EAAiB,CAAA,CAAA,CAAA,CAhBblH,CAAAA,CAAQ,EAiBf,CACD,CAAA,CACH,CAAA,CAIEuJ,EAAAA,CAAoB,IACnB1D,EAAAA,CAAS,oBAAA,CAEV3G,CAAAA,CAEAb,cAAAA,CAAC,OAAI,KAAA,CAAOqJ,CAAAA,CAAO,cAAA,CAAgB,QAAA,CAAA,kDAAA,CAEnC,CAAA,CAICvC,CAAAA,CAUH1C,eAAAA,CAAC,MAAA,CAAA,CAAK,SAAUH,EAAAA,CAAc,KAAA,CAAOoF,CAAAA,CAAO,IAAA,CAC1C,QAAA,CAAA,CAAAjF,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOiF,EAAO,UAAA,CACjB,QAAA,CAAA,CAAArJ,cAAAA,CAAC,GAAA,CAAA,CAAE,KAAA,CAAOqJ,CAAAA,CAAO,SAAA,CAAW,QAAA,CAAA,kBAAA,CAAgB,EAC5CrJ,cAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,QAAS,IAAM+G,CAAAA,CAAY,KAAK,CAAA,CAChC,MAAO,CAAE,UAAA,CAAY,MAAA,CAAQ,MAAA,CAAQ,MAAA,CAAQ,MAAA,CAAQ,SAAA,CAAW,KAAA,CAAO,UAAW,QAAA,CAAU,MAAO,CAAA,CACpG,QAAA,CAAA,MAAA,CAED,CAAA,CAAA,CACF,CAAA,CACA/G,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAOqJ,CAAAA,CAAO,YAAA,CAChB,QAAA,CAAA/C,EAAAA,CAAW,GAAA,CAAK6B,CAAAA,EACfnI,cAAAA,CAAC,QAAA,CAAA,CAEC,KAAK,QAAA,CACL,OAAA,CAAS,IAAMiH,CAAAA,CAAYkB,CAAAA,CAAE,KAAK,CAAA,CAClC,KAAA,CAAO,CACL,GAAGkB,CAAAA,CAAO,UAAA,CACV,GAAIrC,CAAAA,GAAamB,CAAAA,CAAE,KAAA,CAAQkB,CAAAA,CAAO,iBAAmB,EACvD,CAAA,CAEC,QAAA,CAAAlB,CAAAA,CAAE,KAAA,CAAA,CAREA,CAAAA,CAAE,KAST,CACD,CAAA,CACH,CAAA,CACAnI,cAAAA,CAAC,UAAA,CAAA,CACC,KAAA,CAAOkH,CAAAA,CACP,QAAA,CAAWhD,CAAAA,EAAMiD,EAAejD,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC9C,WAAA,CAAY,0BAAA,CACZ,KAAA,CAAOmF,CAAAA,CAAO,SACd,QAAA,CAAQ,IAAA,CACV,CAAA,CACArJ,cAAAA,CAAC,QAAA,CAAA,CACC,IAAA,CAAK,QAAA,CACL,KAAA,CAAO,CAAE,GAAGqJ,CAAAA,CAAO,YAAA,CAAc,OAAA,CAAS1I,CAAAA,CAAe,EAAA,CAAM,CAAE,CAAA,CACjE,SAAUA,CAAAA,CAET,QAAA,CAAAA,CAAAA,CAAe,eAAA,CAAkB,QAAA,CACpC,CAAA,CAAA,CACF,CAAA,CAhDEyD,eAAAA,CAAC,UAAO,OAAA,CAAS,IAAM2C,CAAAA,CAAY,IAAI,CAAA,CAAG,KAAA,CAAOsC,CAAAA,CAAO,gBAAA,CACtD,UAAArJ,cAAAA,CAACmJ,EAAAA,CAAA,EAAS,CAAA,CAAE,aAAA,CAAA,CAEd,CAAA,CAfuC,IAAA,CAgEvCgC,EAAAA,CAAiB,IAChBzL,CAAAA,CAQD6K,EAAAA,CAEAnG,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOiF,CAAAA,CAAO,OAAA,CACjB,QAAA,CAAA,CAAArJ,eAACoJ,EAAAA,CAAA,EAAW,CAAA,CACZpJ,cAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,qBAAA,CAAmB,CAAA,CAAA,CAC3B,CAAA,CAKFoE,gBAAC,KAAA,CAAA,CACE,QAAA,CAAA,CAAA8G,EAAAA,EAAkB,CAElB5D,EAAS,MAAA,GAAW,CAAA,CACnBlD,eAAAA,CAAC,KAAA,CAAA,CAAI,MAAOiF,CAAAA,CAAO,UAAA,CACjB,QAAA,CAAA,CAAArJ,cAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOqJ,CAAAA,CAAO,SAAA,CAAW,SAAArJ,cAAAA,CAACkJ,EAAAA,CAAA,EAAY,CAAA,CAAE,CAAA,CAC7ClJ,cAAAA,CAAC,IAAA,CAAA,CAAG,KAAA,CAAOqJ,EAAO,UAAA,CAAY,QAAA,CAAA,iBAAA,CAAe,CAAA,CAC7CrJ,cAAAA,CAAC,GAAA,CAAA,CAAE,KAAA,CAAOqJ,CAAAA,CAAO,SAAA,CACd,SAAA7B,EAAAA,CAAS,oBAAA,CACN,kCAAA,CACA,gDAAA,CACN,CAAA,CAAA,CACF,CAAA,CAEAxH,cAAAA,CAAC,KAAA,CAAA,CACE,SAAAsH,CAAAA,CAAS,GAAA,CAAKK,CAAAA,EAAY,CACzB,IAAMU,CAAAA,CAAWK,EAAAA,CAAmBf,CAAAA,CAAQ,aAAa,CAAA,EAAKe,EAAAA,CAAmB,QAAA,CAC3EJ,CAAAA,CAAanC,EAAAA,CAAawB,CAAAA,CAAQ,MAAM,CAAA,EAAKxB,GAAa,GAAA,CAEhE,OACE/B,eAAAA,CAAC,KAAA,CAAA,CAAqB,KAAA,CAAOiF,CAAAA,CAAO,WAAA,CAClC,QAAA,CAAA,CAAAjF,gBAAC,KAAA,CAAA,CAAI,KAAA,CAAOiF,CAAAA,CAAO,aAAA,CACjB,QAAA,CAAA,CAAArJ,cAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,GAAGqJ,CAAAA,CAAO,KAAA,CAAO,KAAA,CAAOhB,CAAAA,CAAS,KAAA,CAAO,eAAA,CAAiBA,CAAAA,CAAS,EAAG,CAAA,CACjF,QAAA,CAAAA,CAAAA,CAAS,KAAA,CACZ,CAAA,CACArI,cAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAO,CAAE,GAAGqJ,CAAAA,CAAO,KAAA,CAAO,KAAA,CAAOf,CAAAA,CAAW,KAAA,CAAO,eAAA,CAAiBA,CAAAA,CAAW,EAAG,CAAA,CACrF,QAAA,CAAAA,CAAAA,CAAW,KAAA,CACd,CAAA,CAAA,CACF,CAAA,CACAtI,cAAAA,CAAC,GAAA,CAAA,CAAE,MAAOqJ,CAAAA,CAAO,cAAA,CAAiB,QAAA,CAAA1B,CAAAA,CAAQ,OAAA,EAAW,qBAAA,CAAsB,CAAA,CAC3E3H,cAAAA,CAAC,OAAI,KAAA,CAAOqJ,CAAAA,CAAO,WAAA,CACjB,QAAA,CAAArJ,cAAAA,CAAC,MAAA,CAAA,CAAM,QAAA,CAAAoG,EAAAA,CAAWuB,EAAQ,UAAU,CAAA,CAAE,CAAA,CACxC,CAAA,CAAA,CAAA,CAZQA,CAAAA,CAAQ,EAalB,CAEJ,CAAC,EACH,CAAA,CAAA,CAEJ,CAAA,CAtDE3H,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAOqJ,CAAAA,CAAO,UAAA,CACjB,QAAA,CAAArJ,cAAAA,CAAC,KAAE,KAAA,CAAOqJ,CAAAA,CAAO,SAAA,CAAW,QAAA,CAAA,uCAAA,CAAqC,CAAA,CACnE,CAAA,CAwDN,OACEjF,eAAAA,CAAC,OAAI,KAAA,CAAOiF,CAAAA,CAAO,SAAA,CAAW,SAAA,CAAWtE,CAAAA,CACvC,QAAA,CAAA,CAAA/E,cAAAA,CAAC,OAAA,CAAA,CAAO,SAAAsJ,EAAAA,CAAc,CAAA,CAGrBE,CAAAA,CAAK,MAAA,CAAS,CAAA,EACbxJ,cAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOqJ,EAAO,IAAA,CAChB,QAAA,CAAAG,CAAAA,CAAK,GAAA,CAAK4B,CAAAA,EACTpL,cAAAA,CAAC,QAAA,CAAA,CAEC,OAAA,CAAS,IAAM4J,CAAAA,CAAawB,CAAG,CAAA,CAC/B,KAAA,CAAO,CACL,GAAG/B,CAAAA,CAAO,GAAA,CACV,GAAIM,CAAAA,GAAcyB,CAAAA,CAAM/B,CAAAA,CAAO,SAAA,CAAY,EAC7C,CAAA,CAEC,QAAA,CAAAqB,EAAaU,CAAG,CAAA,CAAA,CAPZA,CAQP,CACD,CAAA,CACH,CAAA,CAGFhH,eAAAA,CAAC,KAAA,CAAA,CAAI,MAAOiF,CAAAA,CAAO,IAAA,CAEjB,QAAA,CAAA,CAAAjF,eAAAA,CAAC,OAAA,CAAA,CAAM,KAAA,CAAOiF,CAAAA,CAAO,OAAA,CAElB,UAAAzE,CAAAA,EAAc+E,CAAAA,GAAc,UAAA,EAC3BvF,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOiF,CAAAA,CAAO,eAAA,CACjB,UAAArJ,cAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAOqJ,CAAAA,CAAO,UAAA,CAAY,QAAA,CAAArJ,cAAAA,CAAC2I,EAAAA,CAAA,EAAW,CAAA,CAAE,CAAA,CAC7C3I,cAAAA,CAAC,OAAA,CAAA,CACC,GAAA,CAAKkK,CAAAA,CACL,IAAA,CAAK,MAAA,CACL,YAAY,WAAA,CACZ,KAAA,CAAOjF,CAAAA,CACP,QAAA,CAAWf,CAAAA,EAAMgB,CAAAA,CAAehB,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC9C,KAAA,CAAOmF,CAAAA,CAAO,WAAA,CAChB,CAAA,CAAA,CACF,CAAA,CAIDM,CAAAA,GAAc,UAAA,EAAcnH,GAAc,MAAA,CAAS,CAAA,EAClD4B,eAAAA,CAAC,KAAA,CAAA,CACC,QAAA,CAAA,CAAApE,cAAAA,CAAC,IAAA,CAAA,CAAG,KAAA,CAAOqJ,EAAO,YAAA,CAAc,QAAA,CAAA,UAAA,CAAQ,CAAA,CACxCjF,eAAAA,CAAC,IAAA,CAAA,CAAG,KAAA,CAAOiF,CAAAA,CAAO,OAAA,CAChB,UAAArJ,cAAAA,CAAC,IAAA,CAAA,CACC,QAAA,CAAAA,cAAAA,CAAC,UACC,OAAA,CAAS,IAAMiK,CAAAA,CAAqB,IAAI,EACxC,KAAA,CAAO,CACL,GAAGZ,CAAAA,CAAO,OAAA,CACV,GAAKW,CAAAA,CAA2C,GAAvBX,CAAAA,CAAO,aAClC,CAAA,CACD,QAAA,CAAA,cAAA,CAED,CAAA,CACF,CAAA,CACC7G,EAAAA,CAAc,GAAA,CAAK6I,GAClBjH,eAAAA,CAAC,IAAA,CAAA,CACC,QAAA,CAAA,CAAAA,eAAAA,CAAC,QAAA,CAAA,CACC,OAAA,CAAS,IAAMwG,CAAAA,CAAYS,EAAM,EAAE,CAAA,CACnC,KAAA,CAAOhC,CAAAA,CAAO,OAAA,CAEd,QAAA,CAAA,CAAAjF,eAAAA,CAAC,MAAA,CAAA,CAAK,MAAO,CAAE,OAAA,CAAS,MAAA,CAAQ,UAAA,CAAY,QAAA,CAAU,GAAA,CAAK,KAAM,CAAA,CAC/D,UAAApE,cAAAA,CAACiJ,EAAAA,CAAA,EAAW,CAAA,CACXoC,CAAAA,CAAM,IAAA,CAAA,CACT,CAAA,CACCvB,CAAAA,CAAe,IAAIuB,CAAAA,CAAM,EAAE,CAAA,CAAIrL,cAAAA,CAAC8I,EAAAA,CAAA,EAAgB,CAAA,CAAK9I,cAAAA,CAAC6I,GAAA,EAAiB,CAAA,CAAA,CAC1E,CAAA,CACCiB,CAAAA,CAAe,IAAIuB,CAAAA,CAAM,EAAE,CAAA,EAAKA,CAAAA,CAAM,SAAS,MAAA,CAAS,CAAA,EACvDrL,cAAAA,CAAC,IAAA,CAAA,CAAG,KAAA,CAAOqJ,CAAAA,CAAO,MAAA,CACf,QAAA,CAAAgC,EAAM,QAAA,CAAS,GAAA,CAAKC,CAAAA,EACnBtL,cAAAA,CAAC,IAAA,CAAA,CACC,QAAA,CAAAA,cAAAA,CAAC,QAAA,CAAA,CACC,QAAS,IAAMiK,CAAAA,CAAqBqB,CAAAA,CAAQ,EAAE,CAAA,CAC9C,KAAA,CAAO,CACL,GAAGjC,EAAO,OAAA,CACV,OAAA,CAAS,UAAA,CACT,QAAA,CAAU,MAAA,CACV,GAAIW,CAAAA,GAAsBsB,CAAAA,CAAQ,GAAKjC,CAAAA,CAAO,aAAA,CAAgB,EAChE,CAAA,CAEC,QAAA,CAAAiC,CAAAA,CAAQ,IAAA,CACX,GAXOA,CAAAA,CAAQ,EAYjB,CACD,CAAA,CACH,CAAA,CAAA,CAAA,CA5BKD,CAAAA,CAAM,EA8Bf,CACD,GACH,CAAA,CAAA,CACF,CAAA,CAAA,CAEJ,CAAA,CAGAjH,eAAAA,CAAC,MAAA,CAAA,CAAK,KAAA,CAAOiF,CAAAA,CAAO,IAAA,CACjB,UAAAM,CAAAA,GAAc,UAAA,EAAcsB,EAAAA,EAAe,CAC3CtB,IAAc,UAAA,EAAcwB,EAAAA,EAAe,CAAA,CAC9C,CAAA,CAAA,CACF,GACF,CAEJ","file":"index.cjs","sourcesContent":["import type {\n CensusConfig,\n UserIdentity,\n FeedbackOptions,\n ArticlesOptions,\n ArticlesResponse,\n Article,\n RequestsOptions,\n RequestsResponse,\n BatchEventsOptions,\n CensusError,\n Guide,\n GuidesResponse,\n GuideAnalyticsEvent,\n FeatureGroupsResponse,\n} from './types';\n\n/**\n * Default API base URL\n */\nconst DEFAULT_BASE_URL = 'https://api.census.ai';\n\n/**\n * Census SDK Client\n *\n * The main client for interacting with the Census API.\n * Use `createCensus()` to create an instance.\n *\n * @example\n * ```typescript\n * import { createCensus } from '@census-ai/census-sdk';\n *\n * const census = createCensus({ apiKey: 'cs_live_xxx' });\n *\n * await census.identify({ userId: 'user_123', email: 'user@example.com' });\n * await census.submitFeedback({ type: 'bug_report', message: 'Button is broken' });\n * ```\n */\nexport class CensusClient {\n private apiKey: string;\n private baseUrl: string;\n private debug: boolean;\n private currentUserId: string | null = null;\n\n constructor(config: CensusConfig) {\n if (!config.apiKey) {\n throw new Error('Census: apiKey is required');\n }\n\n // Support both new (cs_) and legacy (op_) key prefixes\n const validPrefixes = ['cs_live_', 'cs_test_', 'op_live_', 'op_test_'];\n if (!validPrefixes.some(prefix => config.apiKey.startsWith(prefix))) {\n console.warn('Census: API key should start with \"cs_live_\" or \"cs_test_\"');\n }\n\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl || DEFAULT_BASE_URL;\n this.debug = config.debug || false;\n\n this.log('Initialized with base URL:', this.baseUrl);\n }\n\n /**\n * Identify a user for tracking purposes.\n * Call this when a user logs in or when you have user information.\n *\n * @param user - User identity information\n *\n * @example\n * ```typescript\n * await census.identify({\n * userId: 'user_123',\n * email: 'john@example.com',\n * name: 'John Doe',\n * organizationId: 'org_456',\n * organizationName: 'Acme Inc',\n * });\n * ```\n */\n async identify(user: UserIdentity): Promise<void> {\n if (!user.userId) {\n throw new Error('Census: userId is required for identify()');\n }\n\n this.currentUserId = user.userId;\n\n await this.request('/api/sdk/identify', 'POST', {\n userId: user.userId,\n email: user.email,\n name: user.name,\n avatarUrl: user.avatarUrl,\n metadata: user.metadata,\n organizationId: user.organizationId,\n organizationName: user.organizationName,\n organizationDomain: user.organizationDomain,\n organizationPlan: user.organizationPlan,\n });\n\n this.log('User identified:', user.userId);\n }\n\n /**\n * Clear the current user identity.\n * Call this when a user logs out.\n */\n reset(): void {\n this.currentUserId = null;\n this.log('User identity reset');\n }\n\n /**\n * Submit feedback, bug report, or feature request.\n *\n * @param options - Feedback options\n *\n * @example\n * ```typescript\n * // Submit a bug report\n * await census.submitFeedback({\n * type: 'bug_report',\n * message: 'The submit button is not working on Firefox',\n * });\n *\n * // Submit a feature request\n * await census.submitFeedback({\n * type: 'feature_request',\n * message: 'It would be great to have dark mode support',\n * });\n *\n * // Rate an article\n * await census.submitFeedback({\n * type: 'article_rating',\n * articleId: 'article_123',\n * helpful: true,\n * rating: 5,\n * });\n * ```\n */\n async submitFeedback(options: FeedbackOptions): Promise<{ feedbackId: string }> {\n const validTypes = ['feedback', 'bug_report', 'feature_request', 'article_rating'];\n if (!options.type || !validTypes.includes(options.type)) {\n throw new Error(`Census: type must be one of: ${validTypes.join(', ')}`);\n }\n\n if (options.type === 'article_rating') {\n if (options.rating === undefined && options.helpful === undefined) {\n throw new Error('Census: article_rating requires rating or helpful field');\n }\n } else if (!options.message) {\n throw new Error('Census: message is required for this feedback type');\n }\n\n const response = await this.request<{ success: boolean; feedbackId: string }>(\n '/api/sdk/feedback',\n 'POST',\n {\n type: options.type,\n message: options.message,\n rating: options.rating,\n helpful: options.helpful,\n userId: this.currentUserId,\n articleId: options.articleId,\n pageUrl: typeof window !== 'undefined' ? window.location.href : undefined,\n metadata: options.metadata,\n }\n );\n\n this.log('Feedback submitted:', response.feedbackId);\n return { feedbackId: response.feedbackId };\n }\n\n /**\n * Fetch published articles from the knowledge base.\n *\n * @param options - Query options\n * @returns Articles and pagination info\n *\n * @example\n * ```typescript\n * // Get all articles\n * const { articles } = await census.getArticles();\n *\n * // Search articles\n * const { articles } = await census.getArticles({ search: 'getting started' });\n *\n * // Filter by category\n * const { articles } = await census.getArticles({ category: 'guides' });\n * ```\n */\n async getArticles(options?: ArticlesOptions): Promise<ArticlesResponse> {\n const params = new URLSearchParams();\n if (options?.category) params.set('category', options.category);\n if (options?.search) params.set('search', options.search);\n if (options?.limit) params.set('limit', String(options.limit));\n if (options?.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const url = `/api/sdk/articles${queryString ? `?${queryString}` : ''}`;\n\n const response = await this.request<ArticlesResponse>(url, 'GET');\n this.log('Fetched articles:', response.articles.length);\n return response;\n }\n\n /**\n * Fetch a single article by slug or ID.\n *\n * @param slugOrId - Article slug or ID\n * @returns Article or null if not found\n *\n * @example\n * ```typescript\n * const article = await census.getArticle('getting-started');\n * if (article) {\n * console.log(article.title, article.content_html);\n * }\n * ```\n */\n async getArticle(slugOrId: string): Promise<Article | null> {\n try {\n const response = await this.request<{ article: Article }>(\n `/api/sdk/articles/${encodeURIComponent(slugOrId)}`,\n 'GET'\n );\n this.log('Fetched article:', slugOrId);\n return response.article;\n } catch (error) {\n if ((error as CensusError).status === 404) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Fetch feature groups with their features and article counts.\n * Used for navigation in the knowledge base.\n *\n * @returns Feature groups with nested features\n *\n * @example\n * ```typescript\n * const { feature_groups } = await census.getFeatureGroups();\n * feature_groups.forEach(group => {\n * console.log(group.name, group.features.length);\n * });\n * ```\n */\n async getFeatureGroups(): Promise<FeatureGroupsResponse> {\n const response = await this.request<FeatureGroupsResponse>(\n '/api/sdk/feature-groups',\n 'GET'\n );\n this.log('Fetched feature groups:', response.feature_groups.length);\n return response;\n }\n\n /**\n * Fetch the current user's submitted requests (feedback, bugs, feature requests).\n * Requires a user to be identified first.\n *\n * @param options - Query options\n * @returns Requests and pagination info\n *\n * @example\n * ```typescript\n * // Get all requests for the current user\n * const { requests } = await census.getRequests();\n *\n * // Filter by status\n * const { requests } = await census.getRequests({ status: 'in_progress' });\n *\n * // Filter by type\n * const { requests } = await census.getRequests({ type: 'bug_report' });\n * ```\n */\n async getRequests(options?: RequestsOptions): Promise<RequestsResponse> {\n if (!this.currentUserId) {\n throw new Error('Census: User must be identified before fetching requests. Call identify() first.');\n }\n\n const params = new URLSearchParams();\n params.set('userId', this.currentUserId);\n if (options?.status) params.set('status', options.status);\n if (options?.type) params.set('type', options.type);\n if (options?.limit) params.set('limit', String(options.limit));\n if (options?.offset) params.set('offset', String(options.offset));\n\n const response = await this.request<RequestsResponse>(\n `/api/sdk/requests?${params.toString()}`,\n 'GET'\n );\n this.log('Fetched requests:', response.requests.length);\n return response;\n }\n\n /**\n * Vote on a feedback request (toggle).\n * If the user has already voted, removes the vote.\n * If the user hasn't voted, adds a vote.\n *\n * @param feedbackId - ID of the feedback to vote on\n * @returns Vote result with action taken and new vote count\n *\n * @example\n * ```typescript\n * // Vote on a feedback request\n * const result = await census.vote('feedback-id-123');\n * console.log(result.action); // 'added' or 'removed'\n * console.log(result.vote_count); // 5\n * console.log(result.user_has_voted); // true\n * ```\n */\n async vote(feedbackId: string): Promise<{\n success: boolean;\n action: 'added' | 'removed';\n vote_count: number;\n user_has_voted: boolean;\n }> {\n if (!this.currentUserId) {\n throw new Error('Census: User must be identified before voting. Call identify() first.');\n }\n\n if (!feedbackId) {\n throw new Error('Census: feedbackId is required for vote()');\n }\n\n const response = await this.request<{\n success: boolean;\n action: 'added' | 'removed';\n vote_count: number;\n user_has_voted: boolean;\n }>('/api/sdk/requests/vote', 'POST', {\n feedbackId,\n userId: this.currentUserId,\n });\n\n this.log('Vote result:', response.action, 'for feedback:', feedbackId);\n return response;\n }\n\n /**\n * Track a custom analytics event.\n *\n * @param eventType - Name of the event\n * @param properties - Additional event properties\n *\n * @example\n * ```typescript\n * // Track a button click\n * await census.track('button_clicked', { buttonId: 'submit-form' });\n *\n * // Track a page view\n * await census.track('page_viewed', { page: '/pricing' });\n * ```\n */\n async track(eventType: string, properties?: Record<string, unknown>): Promise<void> {\n if (!eventType) {\n throw new Error('Census: eventType is required for track()');\n }\n\n await this.request('/api/sdk/events', 'POST', {\n eventType,\n userId: this.currentUserId,\n properties,\n });\n\n this.log('Event tracked:', eventType);\n }\n\n /**\n * Track multiple events in a single request.\n * More efficient than calling track() multiple times.\n *\n * @param events - Array of events to track\n *\n * @example\n * ```typescript\n * await census.trackBatch({\n * events: [\n * { eventType: 'page_viewed', properties: { page: '/home' } },\n * { eventType: 'button_clicked', properties: { button: 'cta' } },\n * ],\n * });\n * ```\n */\n async trackBatch(options: BatchEventsOptions): Promise<void> {\n if (!options.events || options.events.length === 0) {\n throw new Error('Census: at least one event is required');\n }\n\n if (options.events.length > 100) {\n throw new Error('Census: maximum 100 events per batch');\n }\n\n const events = options.events.map((event) => ({\n eventType: event.eventType,\n userId: this.currentUserId,\n articleId: event.articleId,\n featureId: event.featureId,\n properties: event.properties,\n }));\n\n await this.request('/api/sdk/events', 'POST', { events });\n\n this.log('Batch events tracked:', options.events.length);\n }\n\n /**\n * Fetch available guides for the current user.\n * Returns guides that match the user's context and haven't been completed.\n *\n * @returns Guides and list of completed guide IDs\n *\n * @example\n * ```typescript\n * const { guides, completedGuides } = await census.getGuides();\n * guides.forEach(guide => console.log(guide.name));\n * ```\n */\n async getGuides(): Promise<GuidesResponse> {\n const params = new URLSearchParams();\n if (this.currentUserId) {\n params.set('userId', this.currentUserId);\n }\n\n const queryString = params.toString();\n const url = `/api/sdk/guides${queryString ? `?${queryString}` : ''}`;\n\n const response = await this.request<GuidesResponse>(url, 'GET');\n this.log('Fetched guides:', response.guides.length);\n return response;\n }\n\n /**\n * Fetch a single guide by slug or ID.\n *\n * @param slugOrId - Guide slug or ID\n * @returns Guide or null if not found\n *\n * @example\n * ```typescript\n * const guide = await census.getGuide('onboarding-tour');\n * if (guide) {\n * console.log(guide.name, guide.guide_steps.length);\n * }\n * ```\n */\n async getGuide(slugOrId: string): Promise<Guide | null> {\n try {\n const params = new URLSearchParams();\n if (this.currentUserId) {\n params.set('userId', this.currentUserId);\n }\n\n const queryString = params.toString();\n const url = `/api/sdk/guides/${encodeURIComponent(slugOrId)}${queryString ? `?${queryString}` : ''}`;\n\n const response = await this.request<{ guide: Guide }>(url, 'GET');\n this.log('Fetched guide:', slugOrId);\n return response.guide;\n } catch (error) {\n if ((error as CensusError).status === 404) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Track a guide analytics event.\n * Used to track user progress through guides.\n *\n * @param event - Guide analytics event\n *\n * @example\n * ```typescript\n * await census.trackGuideEvent({\n * guideId: 'guide_123',\n * eventType: 'step_completed',\n * stepId: 'step_456',\n * stepIndex: 2,\n * sessionId: 'session_789',\n * });\n * ```\n */\n async trackGuideEvent(event: GuideAnalyticsEvent): Promise<void> {\n if (!event.guideId || !event.eventType || !event.sessionId) {\n throw new Error('Census: guideId, eventType, and sessionId are required for trackGuideEvent()');\n }\n\n await this.request('/api/sdk/guides/events', 'POST', {\n guideId: event.guideId,\n eventType: event.eventType,\n stepId: event.stepId,\n stepIndex: event.stepIndex,\n pageUrl: event.pageUrl || (typeof window !== 'undefined' ? window.location.href : undefined),\n sessionId: event.sessionId,\n userId: event.userId || this.currentUserId,\n metadata: event.metadata,\n });\n\n this.log('Guide event tracked:', event.eventType, event.guideId);\n }\n\n /**\n * Mark a guide as completed for the current user.\n * Prevents the guide from showing again.\n *\n * @param guideId - ID of the guide to mark as completed\n *\n * @example\n * ```typescript\n * await census.markGuideCompleted('guide_123');\n * ```\n */\n async markGuideCompleted(guideId: string): Promise<void> {\n if (!guideId) {\n throw new Error('Census: guideId is required for markGuideCompleted()');\n }\n\n if (!this.currentUserId) {\n throw new Error('Census: User must be identified before marking guides complete. Call identify() first.');\n }\n\n await this.request('/api/sdk/guides/complete', 'POST', {\n guideId,\n userId: this.currentUserId,\n });\n\n this.log('Guide marked completed:', guideId);\n }\n\n /**\n * Get the current identified user ID\n */\n getCurrentUserId(): string | null {\n return this.currentUserId;\n }\n\n /**\n * Check if a user is currently identified\n */\n isIdentified(): boolean {\n return this.currentUserId !== null;\n }\n\n /**\n * Make an API request\n */\n private async request<T>(path: string, method: string, body?: unknown): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n\n const headers: Record<string, string> = {\n 'X-Census-Key': this.apiKey,\n };\n\n if (body) {\n headers['Content-Type'] = 'application/json';\n }\n\n this.log(`${method} ${path}`, body);\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n let errorMessage = `Request failed with status ${response.status}`;\n try {\n const errorData = await response.json();\n errorMessage = errorData.error || errorMessage;\n } catch {\n // Use default error message\n }\n\n const error: CensusError = {\n error: errorMessage,\n status: response.status,\n };\n throw error;\n }\n\n return response.json();\n }\n\n /**\n * Log debug messages\n */\n private log(...args: unknown[]): void {\n if (this.debug) {\n console.log('[Census]', ...args);\n }\n }\n}\n\n/**\n * Create a new Census SDK client.\n *\n * @param config - Configuration options\n * @returns Census client instance\n *\n * @example\n * ```typescript\n * import { createCensus } from '@census-ai/census-sdk';\n *\n * const census = createCensus({\n * apiKey: 'cs_live_your_key_here',\n * debug: true, // Enable debug logging\n * });\n * ```\n */\nexport function createCensus(config: CensusConfig): CensusClient {\n return new CensusClient(config);\n}\n","import { createContext, useContext, useEffect, useMemo, useState } from 'react';\nimport { createCensus, CensusClient } from '../client';\nimport type { CensusProviderProps, CensusTheme, UserIdentity } from '../types';\n\n/**\n * Context value for the Census provider\n */\ninterface CensusContextValue {\n client: CensusClient;\n theme: CensusTheme;\n isReady: boolean;\n isIdentified: boolean;\n}\n\nconst CensusContext = createContext<CensusContextValue | null>(null);\n\n/**\n * Provider component for the Census SDK.\n * Wrap your app with this to use Census hooks and components.\n *\n * @example\n * ```tsx\n * import { CensusProvider } from '@census-ai/census-sdk/react';\n *\n * function App() {\n * return (\n * <CensusProvider\n * apiKey=\"cs_live_xxx\"\n * user={{ userId: 'user_123', email: 'user@example.com' }}\n * >\n * <YourApp />\n * </CensusProvider>\n * );\n * }\n * ```\n */\nexport function CensusProvider({\n apiKey,\n baseUrl,\n debug,\n user,\n theme = {},\n children,\n}: CensusProviderProps) {\n const [isReady, setIsReady] = useState(false);\n const [isIdentified, setIsIdentified] = useState(false);\n\n const client = useMemo(() => {\n return createCensus({ apiKey, baseUrl, debug });\n }, [apiKey, baseUrl, debug]);\n\n // Automatically identify user if provided\n useEffect(() => {\n if (user) {\n client\n .identify(user)\n .then(() => {\n setIsIdentified(true);\n setIsReady(true);\n })\n .catch((error) => {\n console.error('[Census] Failed to identify user:', error);\n setIsReady(true);\n });\n } else {\n setIsReady(true);\n }\n }, [client, user]);\n\n const value: CensusContextValue = useMemo(\n () => ({\n client,\n theme,\n isReady,\n isIdentified,\n }),\n [client, theme, isReady, isIdentified]\n );\n\n return <CensusContext.Provider value={value}>{children}</CensusContext.Provider>;\n}\n\n/**\n * Hook to access the Census client directly.\n *\n * @returns The Census client instance\n * @throws If used outside of CensusProvider\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const census = useCensus();\n *\n * const handleClick = async () => {\n * await census.track('button_clicked');\n * };\n *\n * return <button onClick={handleClick}>Click me</button>;\n * }\n * ```\n */\nexport function useCensus(): CensusClient {\n const context = useContext(CensusContext);\n if (!context) {\n throw new Error('useCensus must be used within a CensusProvider');\n }\n return context.client;\n}\n\n/**\n * Hook to access the Census context (client, theme, and state).\n *\n * @returns The full Census context\n * @throws If used outside of CensusProvider\n */\nexport function useCensusContext(): CensusContextValue {\n const context = useContext(CensusContext);\n if (!context) {\n throw new Error('useCensusContext must be used within a CensusProvider');\n }\n return context;\n}\n\n/**\n * Hook to identify a user.\n *\n * @returns Object with identify function and state\n *\n * @example\n * ```tsx\n * function LoginHandler() {\n * const { identify, isIdentifying } = useIdentify();\n *\n * const handleLogin = async (user) => {\n * await identify({\n * userId: user.id,\n * email: user.email,\n * name: user.name,\n * });\n * };\n * }\n * ```\n */\nexport function useIdentify() {\n const { client } = useCensusContext();\n const [isIdentifying, setIsIdentifying] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const identify = async (user: UserIdentity) => {\n setIsIdentifying(true);\n setError(null);\n try {\n await client.identify(user);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to identify user'));\n throw err;\n } finally {\n setIsIdentifying(false);\n }\n };\n\n const reset = () => {\n client.reset();\n };\n\n return {\n identify,\n reset,\n isIdentifying,\n isIdentified: client.isIdentified(),\n error,\n };\n}\n","import { useState, useCallback, useEffect } from 'react';\nimport { useCensusContext } from './context';\nimport type {\n FeedbackOptions,\n ArticlesOptions,\n ArticlesResponse,\n Article,\n RequestsOptions,\n RequestsResponse,\n RequestsSettings,\n FeatureGroup,\n} from '../types';\n\n/**\n * Hook for submitting feedback.\n *\n * @returns Object with submit function and state\n *\n * @example\n * ```tsx\n * function FeedbackForm() {\n * const { submitFeedback, isSubmitting, isSuccess, error } = useFeedback();\n *\n * const handleSubmit = async (message: string) => {\n * await submitFeedback({\n * type: 'feedback',\n * message,\n * });\n * };\n *\n * return (\n * <form onSubmit={...}>\n * {isSuccess && <p>Thanks for your feedback!</p>}\n * {error && <p>Error: {error.message}</p>}\n * <button disabled={isSubmitting}>Submit</button>\n * </form>\n * );\n * }\n * ```\n */\nexport function useFeedback() {\n const { client } = useCensusContext();\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [isSuccess, setIsSuccess] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [feedbackId, setFeedbackId] = useState<string | null>(null);\n\n const submitFeedback = useCallback(\n async (options: FeedbackOptions) => {\n setIsSubmitting(true);\n setIsSuccess(false);\n setError(null);\n setFeedbackId(null);\n\n try {\n const result = await client.submitFeedback(options);\n setFeedbackId(result.feedbackId);\n setIsSuccess(true);\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to submit feedback');\n setError(error);\n throw error;\n } finally {\n setIsSubmitting(false);\n }\n },\n [client]\n );\n\n const reset = useCallback(() => {\n setIsSuccess(false);\n setError(null);\n setFeedbackId(null);\n }, []);\n\n return {\n submitFeedback,\n reset,\n isSubmitting,\n isSuccess,\n error,\n feedbackId,\n };\n}\n\n/**\n * Hook for fetching articles from the knowledge base.\n *\n * @param options - Query options (optional)\n * @returns Object with articles data and loading state\n *\n * @example\n * ```tsx\n * function ArticleList() {\n * const { articles, isLoading, error, refetch } = useArticles();\n *\n * if (isLoading) return <p>Loading...</p>;\n * if (error) return <p>Error: {error.message}</p>;\n *\n * return (\n * <ul>\n * {articles.map(article => (\n * <li key={article.id}>{article.title}</li>\n * ))}\n * </ul>\n * );\n * }\n * ```\n */\nexport function useArticles(options?: ArticlesOptions) {\n const { client, isReady } = useCensusContext();\n const [data, setData] = useState<ArticlesResponse | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchArticles = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.getArticles(options);\n setData(result);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch articles'));\n } finally {\n setIsLoading(false);\n }\n }, [client, options?.category, options?.search, options?.limit, options?.offset]);\n\n useEffect(() => {\n if (isReady) {\n fetchArticles();\n }\n }, [isReady, fetchArticles]);\n\n return {\n articles: data?.articles || [],\n pagination: data?.pagination,\n isLoading,\n error,\n refetch: fetchArticles,\n };\n}\n\n/**\n * Hook for fetching a single article.\n *\n * @param slugOrId - Article slug or ID\n * @returns Object with article data and loading state\n *\n * @example\n * ```tsx\n * function ArticlePage({ slug }) {\n * const { article, isLoading, error } = useArticle(slug);\n *\n * if (isLoading) return <p>Loading...</p>;\n * if (error) return <p>Error: {error.message}</p>;\n * if (!article) return <p>Article not found</p>;\n *\n * return (\n * <article>\n * <h1>{article.title}</h1>\n * <div dangerouslySetInnerHTML={{ __html: article.content_html }} />\n * </article>\n * );\n * }\n * ```\n */\nexport function useArticle(slugOrId: string) {\n const { client, isReady } = useCensusContext();\n const [article, setArticle] = useState<Article | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchArticle = useCallback(async () => {\n if (!slugOrId) {\n setArticle(null);\n setIsLoading(false);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.getArticle(slugOrId);\n setArticle(result);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch article'));\n } finally {\n setIsLoading(false);\n }\n }, [client, slugOrId]);\n\n useEffect(() => {\n if (isReady) {\n fetchArticle();\n }\n }, [isReady, fetchArticle]);\n\n return {\n article,\n isLoading,\n error,\n refetch: fetchArticle,\n };\n}\n\nconst defaultSettings: RequestsSettings = {\n feedbackVisibility: 'own',\n allowVoting: false,\n allowRequestCreation: true,\n};\n\n/**\n * Hook for fetching the current user's submitted requests.\n *\n * @param options - Query options (optional)\n * @returns Object with requests data and loading state\n *\n * @example\n * ```tsx\n * function MyRequests() {\n * const { requests, isLoading, error, refetch, settings } = useRequests();\n *\n * if (isLoading) return <p>Loading...</p>;\n * if (error) return <p>Error: {error.message}</p>;\n *\n * return (\n * <ul>\n * {requests.map(req => (\n * <li key={req.id}>{req.message} - {req.status}</li>\n * ))}\n * </ul>\n * );\n * }\n * ```\n */\nexport function useRequests(options?: RequestsOptions) {\n const { client, isReady, isIdentified } = useCensusContext();\n const [data, setData] = useState<RequestsResponse | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchRequests = useCallback(async () => {\n if (!isIdentified) {\n setData(null);\n setIsLoading(false);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.getRequests(options);\n setData(result);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch requests'));\n } finally {\n setIsLoading(false);\n }\n }, [client, isIdentified, options?.status, options?.type, options?.limit, options?.offset]);\n\n useEffect(() => {\n if (isReady) {\n if (isIdentified) {\n fetchRequests();\n } else {\n // Not identified - stop loading\n setIsLoading(false);\n }\n }\n }, [isReady, isIdentified, fetchRequests]);\n\n return {\n requests: data?.requests || [],\n pagination: data?.pagination,\n settings: data?.settings || defaultSettings,\n isLoading,\n error,\n refetch: fetchRequests,\n };\n}\n\n/**\n * Hook for voting on requests.\n *\n * @returns Object with vote function and loading state\n *\n * @example\n * ```tsx\n * function VoteButton({ feedbackId }: { feedbackId: string }) {\n * const { vote, isVoting } = useVote();\n *\n * const handleVote = async () => {\n * const result = await vote(feedbackId);\n * console.log('Voted:', result.action); // 'added' or 'removed'\n * };\n *\n * return (\n * <button onClick={handleVote} disabled={isVoting}>\n * Vote\n * </button>\n * );\n * }\n * ```\n */\nexport function useVote() {\n const { client } = useCensusContext();\n const [isVoting, setIsVoting] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const vote = useCallback(\n async (feedbackId: string) => {\n setIsVoting(true);\n setError(null);\n\n try {\n const result = await client.vote(feedbackId);\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to vote');\n setError(error);\n throw error;\n } finally {\n setIsVoting(false);\n }\n },\n [client]\n );\n\n return {\n vote,\n isVoting,\n error,\n };\n}\n\n/**\n * Hook for tracking events.\n *\n * @returns Object with track function\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { track } = useTrack();\n *\n * useEffect(() => {\n * track('page_viewed', { page: 'home' });\n * }, []);\n *\n * return <div>...</div>;\n * }\n * ```\n */\nexport function useTrack() {\n const { client } = useCensusContext();\n\n const track = useCallback(\n async (eventType: string, properties?: Record<string, unknown>) => {\n await client.track(eventType, properties);\n },\n [client]\n );\n\n const trackBatch = useCallback(\n async (\n events: Array<{\n eventType: string;\n articleId?: string;\n featureId?: string;\n properties?: Record<string, unknown>;\n }>\n ) => {\n await client.trackBatch({ events });\n },\n [client]\n );\n\n return {\n track,\n trackBatch,\n };\n}\n\n/**\n * Hook for fetching feature groups with their features.\n *\n * @returns Object with feature groups data and loading state\n *\n * @example\n * ```tsx\n * function FeatureNav() {\n * const { featureGroups, isLoading, error } = useFeatureGroups();\n *\n * if (isLoading) return <p>Loading...</p>;\n * if (error) return <p>Error: {error.message}</p>;\n *\n * return (\n * <ul>\n * {featureGroups.map(group => (\n * <li key={group.id}>\n * {group.name} ({group.feature_count} features)\n * </li>\n * ))}\n * </ul>\n * );\n * }\n * ```\n */\nexport function useFeatureGroups() {\n const { client, isReady } = useCensusContext();\n const [featureGroups, setFeatureGroups] = useState<FeatureGroup[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchFeatureGroups = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.getFeatureGroups();\n setFeatureGroups(result.feature_groups);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch feature groups'));\n } finally {\n setIsLoading(false);\n }\n }, [client]);\n\n useEffect(() => {\n if (isReady) {\n fetchFeatureGroups();\n }\n }, [isReady, fetchFeatureGroups]);\n\n return {\n featureGroups,\n isLoading,\n error,\n refetch: fetchFeatureGroups,\n };\n}\n","import { useState, useCallback } from 'react';\nimport { useFeedback } from '../hooks';\nimport { useCensusContext } from '../context';\nimport type { FeedbackButtonProps, FeedbackType, CensusTheme } from '../../types';\n\nconst defaultStyles = {\n button: {\n position: 'fixed' as const,\n padding: '12px 20px',\n border: 'none',\n borderRadius: '8px',\n cursor: 'pointer',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n fontSize: '14px',\n fontWeight: '500' as const,\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n transition: 'transform 0.2s, box-shadow 0.2s',\n zIndex: 9999,\n },\n modal: {\n position: 'fixed' as const,\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n zIndex: 10000,\n },\n modalContent: {\n backgroundColor: 'white',\n borderRadius: '12px',\n padding: '24px',\n width: '100%',\n maxWidth: '400px',\n margin: '16px',\n boxShadow: '0 20px 50px rgba(0, 0, 0, 0.2)',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n },\n input: {\n width: '100%',\n padding: '10px 12px',\n border: '1px solid #e0e0e0',\n borderRadius: '6px',\n fontSize: '14px',\n marginBottom: '12px',\n boxSizing: 'border-box' as const,\n fontFamily: 'inherit',\n },\n textarea: {\n width: '100%',\n padding: '10px 12px',\n border: '1px solid #e0e0e0',\n borderRadius: '6px',\n fontSize: '14px',\n marginBottom: '16px',\n minHeight: '100px',\n resize: 'vertical' as const,\n boxSizing: 'border-box' as const,\n fontFamily: 'inherit',\n },\n submitButton: {\n width: '100%',\n padding: '12px',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: '500' as const,\n transition: 'opacity 0.2s',\n },\n typeButton: {\n padding: '8px 16px',\n border: '1px solid #e0e0e0',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '13px',\n backgroundColor: 'white',\n transition: 'all 0.2s',\n marginRight: '8px',\n marginBottom: '8px',\n },\n};\n\nconst positionStyles = {\n 'bottom-right': { bottom: '20px', right: '20px' },\n 'bottom-left': { bottom: '20px', left: '20px' },\n 'top-right': { top: '20px', right: '20px' },\n 'top-left': { top: '20px', left: '20px' },\n};\n\nconst feedbackTypeLabels: Record<FeedbackType, string> = {\n feedback: 'General Feedback',\n bug_report: 'Bug Report',\n feature_request: 'Feature Request',\n article_rating: 'Article Rating',\n};\n\nconst feedbackTypeEmojis: Record<FeedbackType, string> = {\n feedback: '💬',\n bug_report: '🐛',\n feature_request: '💡',\n article_rating: '⭐',\n};\n\nfunction getThemeStyles(theme: CensusTheme) {\n return {\n primaryColor: theme.primaryColor || '#000000',\n textColor: theme.textColor || '#333333',\n backgroundColor: theme.backgroundColor || '#ffffff',\n borderRadius: theme.borderRadius || '8px',\n fontFamily: theme.fontFamily || 'system-ui, -apple-system, sans-serif',\n };\n}\n\n/**\n * Floating feedback button component.\n * Displays a button that opens a modal for submitting feedback.\n *\n * @example\n * ```tsx\n * import { FeedbackButton } from '@census-ai/census-sdk/react';\n *\n * function App() {\n * return (\n * <>\n * <YourApp />\n * <FeedbackButton\n * position=\"bottom-right\"\n * text=\"Send Feedback\"\n * allowedTypes={['feedback', 'bug_report', 'feature_request']}\n * />\n * </>\n * );\n * }\n * ```\n */\nexport function FeedbackButton({\n position = 'bottom-right',\n text = 'Feedback',\n allowedTypes = ['feedback', 'bug_report', 'feature_request'],\n theme: themeProp,\n onSubmit,\n onError,\n children,\n}: FeedbackButtonProps) {\n const { theme: contextTheme } = useCensusContext();\n const { submitFeedback, isSubmitting, isSuccess, reset } = useFeedback();\n\n const [isOpen, setIsOpen] = useState(false);\n const [selectedType, setSelectedType] = useState<FeedbackType>(allowedTypes[0]);\n const [message, setMessage] = useState('');\n\n const theme = { ...contextTheme, ...themeProp };\n const themeStyles = getThemeStyles(theme);\n\n const handleOpen = useCallback(() => {\n setIsOpen(true);\n reset();\n }, [reset]);\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n setMessage('');\n setSelectedType(allowedTypes[0]);\n }, [allowedTypes]);\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n\n const feedbackData = {\n type: selectedType,\n message,\n };\n\n try {\n await submitFeedback(feedbackData);\n onSubmit?.(feedbackData);\n // Close after a short delay to show success\n setTimeout(handleClose, 1500);\n } catch (err) {\n onError?.(err instanceof Error ? err : new Error('Failed to submit feedback'));\n }\n },\n [selectedType, message, submitFeedback, onSubmit, onError, handleClose]\n );\n\n // Custom trigger\n if (children) {\n return (\n <>\n <div onClick={handleOpen} style={{ cursor: 'pointer' }}>\n {children}\n </div>\n {isOpen && (\n <FeedbackModal\n isOpen={isOpen}\n onClose={handleClose}\n selectedType={selectedType}\n onTypeChange={setSelectedType}\n allowedTypes={allowedTypes}\n message={message}\n onMessageChange={setMessage}\n onSubmit={handleSubmit}\n isSubmitting={isSubmitting}\n isSuccess={isSuccess}\n themeStyles={themeStyles}\n />\n )}\n </>\n );\n }\n\n return (\n <>\n <button\n onClick={handleOpen}\n style={{\n ...defaultStyles.button,\n ...positionStyles[position],\n backgroundColor: themeStyles.primaryColor,\n color: 'white',\n borderRadius: themeStyles.borderRadius,\n fontFamily: themeStyles.fontFamily,\n }}\n aria-label=\"Open feedback form\"\n >\n {text}\n </button>\n {isOpen && (\n <FeedbackModal\n isOpen={isOpen}\n onClose={handleClose}\n selectedType={selectedType}\n onTypeChange={setSelectedType}\n allowedTypes={allowedTypes}\n message={message}\n onMessageChange={setMessage}\n onSubmit={handleSubmit}\n isSubmitting={isSubmitting}\n isSuccess={isSuccess}\n themeStyles={themeStyles}\n />\n )}\n </>\n );\n}\n\ninterface FeedbackModalProps {\n isOpen: boolean;\n onClose: () => void;\n selectedType: FeedbackType;\n onTypeChange: (type: FeedbackType) => void;\n allowedTypes: FeedbackType[];\n message: string;\n onMessageChange: (message: string) => void;\n onSubmit: (e: React.FormEvent) => void;\n isSubmitting: boolean;\n isSuccess: boolean;\n themeStyles: ReturnType<typeof getThemeStyles>;\n}\n\nfunction FeedbackModal({\n isOpen,\n onClose,\n selectedType,\n onTypeChange,\n allowedTypes,\n message,\n onMessageChange,\n onSubmit,\n isSubmitting,\n isSuccess,\n themeStyles,\n}: FeedbackModalProps) {\n if (!isOpen) return null;\n\n if (isSuccess) {\n return (\n <div style={defaultStyles.modal} onClick={onClose}>\n <div\n style={{\n ...defaultStyles.modalContent,\n textAlign: 'center',\n fontFamily: themeStyles.fontFamily,\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <div style={{ fontSize: '48px', marginBottom: '16px' }}>🎉</div>\n <h3 style={{ margin: '0 0 8px 0', color: themeStyles.textColor }}>\n Thanks for your feedback!\n </h3>\n <p style={{ margin: 0, color: '#666' }}>We appreciate you taking the time to share.</p>\n </div>\n </div>\n );\n }\n\n return (\n <div style={defaultStyles.modal} onClick={onClose}>\n <div\n style={{\n ...defaultStyles.modalContent,\n fontFamily: themeStyles.fontFamily,\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '20px',\n }}\n >\n <h3 style={{ margin: 0, color: themeStyles.textColor }}>Send Feedback</h3>\n <button\n onClick={onClose}\n style={{\n background: 'none',\n border: 'none',\n fontSize: '24px',\n cursor: 'pointer',\n color: '#999',\n padding: '0',\n lineHeight: '1',\n }}\n aria-label=\"Close\"\n >\n ×\n </button>\n </div>\n\n <form onSubmit={onSubmit}>\n {/* Feedback type selection */}\n <div style={{ marginBottom: '16px' }}>\n <label\n style={{\n display: 'block',\n marginBottom: '8px',\n fontSize: '13px',\n color: '#666',\n fontWeight: '500',\n }}\n >\n What kind of feedback?\n </label>\n <div style={{ display: 'flex', flexWrap: 'wrap' }}>\n {allowedTypes.map((type) => (\n <button\n key={type}\n type=\"button\"\n onClick={() => onTypeChange(type)}\n style={{\n ...defaultStyles.typeButton,\n backgroundColor: selectedType === type ? themeStyles.primaryColor : 'white',\n color: selectedType === type ? 'white' : themeStyles.textColor,\n borderColor: selectedType === type ? themeStyles.primaryColor : '#e0e0e0',\n }}\n >\n {feedbackTypeEmojis[type]} {feedbackTypeLabels[type]}\n </button>\n ))}\n </div>\n </div>\n\n {/* Message input */}\n <div>\n <label\n style={{\n display: 'block',\n marginBottom: '8px',\n fontSize: '13px',\n color: '#666',\n fontWeight: '500',\n }}\n >\n Your message\n </label>\n <textarea\n value={message}\n onChange={(e) => onMessageChange(e.target.value)}\n placeholder={\n selectedType === 'bug_report'\n ? 'Describe the bug and steps to reproduce...'\n : selectedType === 'feature_request'\n ? 'Describe the feature you would like...'\n : 'Share your thoughts...'\n }\n style={defaultStyles.textarea}\n required\n />\n </div>\n\n <button\n type=\"submit\"\n disabled={isSubmitting || !message.trim()}\n style={{\n ...defaultStyles.submitButton,\n backgroundColor: themeStyles.primaryColor,\n color: 'white',\n opacity: isSubmitting || !message.trim() ? 0.6 : 1,\n cursor: isSubmitting || !message.trim() ? 'not-allowed' : 'pointer',\n }}\n >\n {isSubmitting ? 'Sending...' : 'Send Feedback'}\n </button>\n </form>\n </div>\n </div>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { useArticles, useArticle } from '../hooks';\nimport { useCensusContext } from '../context';\nimport type { KnowledgeBaseProps, Article, CensusTheme } from '../../types';\n\nconst defaultStyles = {\n container: {\n fontFamily: 'system-ui, -apple-system, sans-serif',\n maxWidth: '800px',\n },\n searchInput: {\n width: '100%',\n padding: '12px 16px',\n border: '1px solid #e0e0e0',\n borderRadius: '8px',\n fontSize: '15px',\n marginBottom: '24px',\n boxSizing: 'border-box' as const,\n },\n categoryButton: {\n padding: '8px 16px',\n border: '1px solid #e0e0e0',\n borderRadius: '20px',\n cursor: 'pointer',\n fontSize: '13px',\n backgroundColor: 'white',\n transition: 'all 0.2s',\n marginRight: '8px',\n marginBottom: '8px',\n },\n articleCard: {\n padding: '20px',\n border: '1px solid #e0e0e0',\n borderRadius: '8px',\n marginBottom: '12px',\n cursor: 'pointer',\n transition: 'box-shadow 0.2s, border-color 0.2s',\n backgroundColor: 'white',\n },\n articleTitle: {\n margin: '0 0 8px 0',\n fontSize: '16px',\n fontWeight: '600' as const,\n },\n articleDescription: {\n margin: 0,\n fontSize: '14px',\n color: '#666',\n lineHeight: 1.5,\n },\n articleMeta: {\n display: 'flex',\n gap: '16px',\n marginTop: '12px',\n fontSize: '12px',\n color: '#999',\n },\n backButton: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n padding: '8px 0',\n border: 'none',\n background: 'none',\n cursor: 'pointer',\n fontSize: '14px',\n color: '#666',\n marginBottom: '16px',\n },\n articleContent: {\n lineHeight: 1.7,\n fontSize: '15px',\n },\n loading: {\n textAlign: 'center' as const,\n padding: '40px',\n color: '#666',\n },\n error: {\n padding: '20px',\n backgroundColor: '#fef2f2',\n borderRadius: '8px',\n color: '#b91c1c',\n textAlign: 'center' as const,\n },\n empty: {\n textAlign: 'center' as const,\n padding: '40px',\n color: '#666',\n },\n};\n\nfunction getThemeStyles(theme: CensusTheme) {\n return {\n primaryColor: theme.primaryColor || '#000000',\n textColor: theme.textColor || '#333333',\n backgroundColor: theme.backgroundColor || '#ffffff',\n borderRadius: theme.borderRadius || '8px',\n fontFamily: theme.fontFamily || 'system-ui, -apple-system, sans-serif',\n };\n}\n\n/**\n * Embeddable knowledge base component.\n * Displays a searchable list of articles with full article view.\n *\n * @example\n * ```tsx\n * import { KnowledgeBase } from '@census-ai/census-sdk/react';\n *\n * function HelpPage() {\n * return (\n * <div className=\"help-container\">\n * <h1>Help Center</h1>\n * <KnowledgeBase\n * showSearch={true}\n * showCategories={true}\n * />\n * </div>\n * );\n * }\n * ```\n */\nexport function KnowledgeBase({\n showSearch = true,\n showCategories = true,\n defaultCategory,\n theme: themeProp,\n className,\n onArticleView,\n}: KnowledgeBaseProps) {\n const { theme: contextTheme } = useCensusContext();\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedCategory, setSelectedCategory] = useState<string | undefined>(defaultCategory);\n const [selectedArticleSlug, setSelectedArticleSlug] = useState<string | null>(null);\n\n const theme = { ...contextTheme, ...themeProp };\n const themeStyles = getThemeStyles(theme);\n\n const {\n articles,\n isLoading: isLoadingArticles,\n error: articlesError,\n } = useArticles({\n category: selectedCategory,\n search: searchQuery || undefined,\n });\n\n const {\n article: selectedArticle,\n isLoading: isLoadingArticle,\n error: articleError,\n } = useArticle(selectedArticleSlug || '');\n\n // Extract unique categories\n const categories = useMemo(() => {\n const cats = new Set<string>();\n articles.forEach((article) => {\n if (article.category) {\n cats.add(article.category);\n }\n });\n return Array.from(cats).sort();\n }, [articles]);\n\n const handleArticleClick = (article: Article) => {\n setSelectedArticleSlug(article.slug);\n onArticleView?.(article);\n };\n\n const handleBack = () => {\n setSelectedArticleSlug(null);\n };\n\n // Article detail view\n if (selectedArticleSlug) {\n if (isLoadingArticle) {\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n <div style={defaultStyles.loading}>Loading article...</div>\n </div>\n );\n }\n\n if (articleError) {\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n <button onClick={handleBack} style={defaultStyles.backButton}>\n ← Back to articles\n </button>\n <div style={defaultStyles.error}>Failed to load article. Please try again.</div>\n </div>\n );\n }\n\n if (!selectedArticle) {\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n <button onClick={handleBack} style={defaultStyles.backButton}>\n ← Back to articles\n </button>\n <div style={defaultStyles.empty}>Article not found.</div>\n </div>\n );\n }\n\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n <button onClick={handleBack} style={defaultStyles.backButton}>\n ← Back to articles\n </button>\n <article>\n <h1 style={{ margin: '0 0 16px 0', color: themeStyles.textColor }}>\n {selectedArticle.title}\n </h1>\n {selectedArticle.read_time_minutes && (\n <div style={{ fontSize: '14px', color: '#666', marginBottom: '24px' }}>\n {selectedArticle.read_time_minutes} min read\n </div>\n )}\n {selectedArticle.content_html ? (\n <div\n style={{ ...defaultStyles.articleContent, color: themeStyles.textColor }}\n dangerouslySetInnerHTML={{ __html: selectedArticle.content_html }}\n />\n ) : (\n <div style={{ ...defaultStyles.articleContent, color: themeStyles.textColor }}>\n {typeof selectedArticle.content === 'string'\n ? selectedArticle.content\n : 'No content available.'}\n </div>\n )}\n </article>\n </div>\n );\n }\n\n // Articles list view\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n {/* Search */}\n {showSearch && (\n <input\n type=\"text\"\n placeholder=\"Search articles...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n style={defaultStyles.searchInput}\n />\n )}\n\n {/* Categories */}\n {showCategories && categories.length > 0 && (\n <div style={{ marginBottom: '24px' }}>\n <button\n onClick={() => setSelectedCategory(undefined)}\n style={{\n ...defaultStyles.categoryButton,\n backgroundColor: !selectedCategory ? themeStyles.primaryColor : 'white',\n color: !selectedCategory ? 'white' : themeStyles.textColor,\n borderColor: !selectedCategory ? themeStyles.primaryColor : '#e0e0e0',\n }}\n >\n All\n </button>\n {categories.map((category) => (\n <button\n key={category}\n onClick={() => setSelectedCategory(category)}\n style={{\n ...defaultStyles.categoryButton,\n backgroundColor: selectedCategory === category ? themeStyles.primaryColor : 'white',\n color: selectedCategory === category ? 'white' : themeStyles.textColor,\n borderColor: selectedCategory === category ? themeStyles.primaryColor : '#e0e0e0',\n }}\n >\n {category}\n </button>\n ))}\n </div>\n )}\n\n {/* Loading */}\n {isLoadingArticles && <div style={defaultStyles.loading}>Loading articles...</div>}\n\n {/* Error */}\n {articlesError && (\n <div style={defaultStyles.error}>Failed to load articles. Please try again.</div>\n )}\n\n {/* Empty state */}\n {!isLoadingArticles && !articlesError && articles.length === 0 && (\n <div style={defaultStyles.empty}>\n {searchQuery\n ? `No articles found for \"${searchQuery}\"`\n : 'No articles available yet.'}\n </div>\n )}\n\n {/* Articles list */}\n {!isLoadingArticles && !articlesError && articles.length > 0 && (\n <div>\n {articles.map((article) => (\n <div\n key={article.id}\n onClick={() => handleArticleClick(article)}\n style={defaultStyles.articleCard}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n handleArticleClick(article);\n }\n }}\n >\n <h3 style={{ ...defaultStyles.articleTitle, color: themeStyles.textColor }}>\n {article.title}\n </h3>\n {article.seo_description && (\n <p style={defaultStyles.articleDescription}>{article.seo_description}</p>\n )}\n <div style={defaultStyles.articleMeta}>\n {article.category && <span>{article.category}</span>}\n {article.read_time_minutes && <span>{article.read_time_minutes} min read</span>}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { useRequests, useVote, useFeedback } from '../hooks';\nimport { useCensusContext } from '../context';\nimport type { RequestsProps, Request, FeedbackType } from '../../types';\n\nconst defaultStyles = {\n container: {\n fontFamily: 'system-ui, -apple-system, sans-serif',\n },\n list: {\n listStyle: 'none',\n padding: 0,\n margin: 0,\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '12px',\n },\n card: {\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n padding: '16px',\n backgroundColor: '#ffffff',\n cursor: 'pointer',\n transition: 'border-color 0.15s, box-shadow 0.15s',\n },\n cardHover: {\n borderColor: '#d1d5db',\n boxShadow: '0 1px 3px rgba(0, 0, 0, 0.1)',\n },\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '8px',\n marginBottom: '8px',\n },\n badges: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n },\n badge: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n padding: '2px 8px',\n borderRadius: '9999px',\n fontSize: '12px',\n fontWeight: 500,\n },\n message: {\n fontSize: '14px',\n color: '#111827',\n margin: 0,\n lineHeight: 1.5,\n },\n meta: {\n display: 'flex',\n gap: '12px',\n marginTop: '8px',\n fontSize: '12px',\n color: '#6b7280',\n },\n empty: {\n textAlign: 'center' as const,\n padding: '32px 16px',\n color: '#6b7280',\n },\n emptyIcon: {\n width: '48px',\n height: '48px',\n margin: '0 auto 12px',\n color: '#d1d5db',\n },\n loading: {\n textAlign: 'center' as const,\n padding: '24px',\n color: '#6b7280',\n },\n error: {\n textAlign: 'center' as const,\n padding: '24px',\n color: '#dc2626',\n },\n voteButton: {\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n justifyContent: 'center',\n padding: '8px',\n borderRadius: '6px',\n border: '1px solid #e5e7eb',\n backgroundColor: '#ffffff',\n cursor: 'pointer',\n minWidth: '48px',\n transition: 'all 0.15s',\n },\n voteButtonActive: {\n backgroundColor: '#dbeafe',\n borderColor: '#2563eb',\n color: '#2563eb',\n },\n voteCount: {\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n },\n cardWithVote: {\n display: 'flex',\n gap: '12px',\n },\n cardContent: {\n flex: 1,\n },\n form: {\n marginBottom: '16px',\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n border: '1px solid #e5e7eb',\n },\n formHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '12px',\n },\n formTitle: {\n fontSize: '14px',\n fontWeight: 500,\n color: '#111827',\n margin: 0,\n },\n typeSelector: {\n display: 'flex',\n gap: '8px',\n marginBottom: '12px',\n },\n typeButton: {\n padding: '6px 12px',\n borderRadius: '6px',\n border: '1px solid #e5e7eb',\n backgroundColor: '#ffffff',\n fontSize: '13px',\n cursor: 'pointer',\n transition: 'all 0.15s',\n },\n typeButtonActive: {\n backgroundColor: '#111827',\n borderColor: '#111827',\n color: '#ffffff',\n },\n textarea: {\n width: '100%',\n padding: '10px 12px',\n borderRadius: '6px',\n border: '1px solid #e5e7eb',\n fontSize: '14px',\n resize: 'vertical' as const,\n minHeight: '80px',\n fontFamily: 'inherit',\n marginBottom: '12px',\n },\n submitButton: {\n padding: '8px 16px',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: '#111827',\n color: '#ffffff',\n fontSize: '14px',\n fontWeight: 500,\n cursor: 'pointer',\n transition: 'opacity 0.15s',\n },\n successMessage: {\n padding: '12px',\n backgroundColor: '#d1fae5',\n borderRadius: '6px',\n color: '#059669',\n fontSize: '14px',\n marginBottom: '16px',\n },\n ownBadge: {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '2px 6px',\n borderRadius: '9999px',\n fontSize: '11px',\n fontWeight: 500,\n backgroundColor: '#f3f4f6',\n color: '#6b7280',\n marginLeft: '6px',\n },\n};\n\nconst typeConfig: Record<FeedbackType, { label: string; color: string; bg: string }> = {\n feedback: { label: 'Feedback', color: '#2563eb', bg: '#dbeafe' },\n bug_report: { label: 'Bug Report', color: '#dc2626', bg: '#fee2e2' },\n feature_request: { label: 'Feature Request', color: '#d97706', bg: '#fef3c7' },\n article_rating: { label: 'Article Rating', color: '#7c3aed', bg: '#ede9fe' },\n};\n\nconst statusConfig: Record<string, { label: string; color: string; bg: string }> = {\n new: { label: 'New', color: '#6b7280', bg: '#f3f4f6' },\n reviewed: { label: 'Reviewed', color: '#2563eb', bg: '#dbeafe' },\n in_progress: { label: 'In Progress', color: '#d97706', bg: '#fef3c7' },\n resolved: { label: 'Resolved', color: '#059669', bg: '#d1fae5' },\n closed: { label: 'Closed', color: '#6b7280', bg: '#f3f4f6' },\n};\n\nfunction formatDate(dateString: string): string {\n const date = new Date(dateString);\n return date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n}\n\nconst FORM_TYPES: { value: FeedbackType; label: string }[] = [\n { value: 'feedback', label: 'Feedback' },\n { value: 'bug_report', label: 'Bug' },\n { value: 'feature_request', label: 'Feature' },\n];\n\n/**\n * Requests component for displaying user's submitted feedback and requests.\n *\n * @example\n * ```tsx\n * import { Requests } from '@census-ai/census-sdk/react';\n *\n * function MyRequestsPage() {\n * return (\n * <div>\n * <h1>My Requests</h1>\n * <Requests onRequestClick={(req) => console.log('Clicked:', req)} />\n * </div>\n * );\n * }\n * ```\n */\nexport function Requests({\n status,\n type,\n limit = 50,\n className,\n showEmptyState = true,\n onRequestClick,\n}: RequestsProps) {\n const { isIdentified } = useCensusContext();\n const [hoveredId, setHoveredId] = useState<string | null>(null);\n const [showForm, setShowForm] = useState(false);\n const [formType, setFormType] = useState<FeedbackType>('feedback');\n const [formMessage, setFormMessage] = useState('');\n const [localVotes, setLocalVotes] = useState<Record<string, { count: number; hasVoted: boolean }>>({});\n\n const { requests, isLoading, error, refetch, settings } = useRequests({\n status,\n type,\n limit,\n });\n\n const { vote, isVoting } = useVote();\n const { submitFeedback, isSubmitting, isSuccess, reset } = useFeedback();\n\n const handleRequestClick = useCallback(\n (request: Request) => {\n onRequestClick?.(request);\n },\n [onRequestClick]\n );\n\n const handleVote = useCallback(\n async (feedbackId: string, currentCount: number, currentHasVoted: boolean) => {\n if (isVoting) return;\n\n // Optimistic update\n setLocalVotes((prev) => ({\n ...prev,\n [feedbackId]: {\n count: currentHasVoted ? currentCount - 1 : currentCount + 1,\n hasVoted: !currentHasVoted,\n },\n }));\n\n try {\n const result = await vote(feedbackId);\n // Update with actual result\n setLocalVotes((prev) => ({\n ...prev,\n [feedbackId]: {\n count: result.vote_count,\n hasVoted: result.user_has_voted,\n },\n }));\n } catch {\n // Revert on error\n setLocalVotes((prev) => ({\n ...prev,\n [feedbackId]: {\n count: currentCount,\n hasVoted: currentHasVoted,\n },\n }));\n }\n },\n [vote, isVoting]\n );\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n if (!formMessage.trim() || isSubmitting) return;\n\n try {\n await submitFeedback({\n type: formType,\n message: formMessage,\n });\n setFormMessage('');\n setShowForm(false);\n // Refetch after a short delay to allow DB to update\n setTimeout(() => {\n refetch();\n reset();\n }, 500);\n } catch {\n // Error is handled by useFeedback hook\n }\n },\n [formType, formMessage, isSubmitting, submitFeedback, refetch, reset]\n );\n\n const getVoteInfo = (request: Request) => {\n const local = localVotes[request.id];\n return {\n count: local?.count ?? request.vote_count,\n hasVoted: local?.hasVoted ?? request.user_has_voted,\n };\n };\n\n if (!isIdentified) {\n return showEmptyState ? (\n <div style={defaultStyles.empty}>\n <p>Please sign in to view your requests.</p>\n </div>\n ) : null;\n }\n\n if (isLoading) {\n return (\n <div style={defaultStyles.loading}>\n <p>Loading requests...</p>\n </div>\n );\n }\n\n if (error) {\n return (\n <div style={defaultStyles.error}>\n <p>Failed to load requests. <button onClick={refetch} style={{ color: 'inherit', textDecoration: 'underline', background: 'none', border: 'none', cursor: 'pointer' }}>Try again</button></p>\n </div>\n );\n }\n\n // Request creation form component\n const renderForm = () => {\n if (!settings.allowRequestCreation) return null;\n\n if (isSuccess) {\n return (\n <div style={defaultStyles.successMessage}>\n Thanks for your feedback! It has been submitted.\n </div>\n );\n }\n\n if (!showForm) {\n return (\n <button\n onClick={() => setShowForm(true)}\n style={{\n ...defaultStyles.submitButton,\n marginBottom: '16px',\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n }}\n >\n <svg width=\"14\" height=\"14\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n </svg>\n New Request\n </button>\n );\n }\n\n return (\n <form onSubmit={handleSubmit} style={defaultStyles.form}>\n <div style={defaultStyles.formHeader}>\n <p style={defaultStyles.formTitle}>Submit a request</p>\n <button\n type=\"button\"\n onClick={() => setShowForm(false)}\n style={{ background: 'none', border: 'none', cursor: 'pointer', color: '#6b7280' }}\n >\n ✕\n </button>\n </div>\n <div style={defaultStyles.typeSelector}>\n {FORM_TYPES.map((t) => (\n <button\n key={t.value}\n type=\"button\"\n onClick={() => setFormType(t.value)}\n style={{\n ...defaultStyles.typeButton,\n ...(formType === t.value ? defaultStyles.typeButtonActive : {}),\n }}\n >\n {t.label}\n </button>\n ))}\n </div>\n <textarea\n value={formMessage}\n onChange={(e) => setFormMessage(e.target.value)}\n placeholder=\"Describe your request...\"\n style={defaultStyles.textarea}\n required\n />\n <button\n type=\"submit\"\n style={{\n ...defaultStyles.submitButton,\n opacity: isSubmitting ? 0.6 : 1,\n }}\n disabled={isSubmitting}\n >\n {isSubmitting ? 'Submitting...' : 'Submit'}\n </button>\n </form>\n );\n };\n\n if (requests.length === 0 && showEmptyState) {\n return (\n <div style={defaultStyles.container} className={className}>\n {renderForm()}\n <div style={defaultStyles.empty}>\n <svg\n style={defaultStyles.emptyIcon}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M8 10h.01M12 10h.01M16 10h.01M9 16H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-5l-5 5v-5z\"\n />\n </svg>\n <p style={{ margin: 0, fontWeight: 500, color: '#111827' }}>No requests yet</p>\n <p style={{ margin: '8px 0 0', fontSize: '14px' }}>\n {settings.allowRequestCreation\n ? 'Submit your first request above.'\n : 'When you submit feedback, bug reports, or feature requests, they\\'ll appear here.'}\n </p>\n </div>\n </div>\n );\n }\n\n const canVote = settings.allowVoting && settings.feedbackVisibility !== 'own';\n\n return (\n <div style={defaultStyles.container} className={className}>\n {renderForm()}\n <ul style={defaultStyles.list}>\n {requests.map((request) => {\n const typeInfo = typeConfig[request.feedback_type] || typeConfig.feedback;\n const statusInfo = statusConfig[request.status] || statusConfig.new;\n const isHovered = hoveredId === request.id;\n const voteInfo = getVoteInfo(request);\n\n return (\n <li\n key={request.id}\n style={{\n ...defaultStyles.card,\n ...(isHovered ? defaultStyles.cardHover : {}),\n }}\n onMouseEnter={() => setHoveredId(request.id)}\n onMouseLeave={() => setHoveredId(null)}\n >\n <div style={canVote ? defaultStyles.cardWithVote : undefined}>\n {canVote && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleVote(request.id, voteInfo.count, voteInfo.hasVoted);\n }}\n disabled={isVoting}\n style={{\n ...defaultStyles.voteButton,\n ...(voteInfo.hasVoted ? defaultStyles.voteButtonActive : {}),\n }}\n title={voteInfo.hasVoted ? 'Remove vote' : 'Upvote this request'}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill={voteInfo.hasVoted ? 'currentColor' : 'none'}\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 15l7-7 7 7\"\n />\n </svg>\n <span style={{\n ...defaultStyles.voteCount,\n ...(voteInfo.hasVoted ? { color: '#2563eb' } : {}),\n }}>\n {voteInfo.count}\n </span>\n </button>\n )}\n <div\n style={canVote ? defaultStyles.cardContent : undefined}\n onClick={() => handleRequestClick(request)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n handleRequestClick(request);\n }\n }}\n >\n <div style={defaultStyles.header}>\n <div style={defaultStyles.badges}>\n <span\n style={{\n ...defaultStyles.badge,\n color: typeInfo.color,\n backgroundColor: typeInfo.bg,\n }}\n >\n {typeInfo.label}\n </span>\n <span\n style={{\n ...defaultStyles.badge,\n color: statusInfo.color,\n backgroundColor: statusInfo.bg,\n }}\n >\n {statusInfo.label}\n </span>\n {request.is_own && (\n <span style={defaultStyles.ownBadge}>You</span>\n )}\n </div>\n </div>\n <p style={defaultStyles.message}>\n {request.message || 'No message provided'}\n </p>\n <div style={defaultStyles.meta}>\n <span>{formatDate(request.created_at)}</span>\n {!canVote && voteInfo.count > 0 && (\n <span>{voteInfo.count} vote{voteInfo.count !== 1 ? 's' : ''}</span>\n )}\n {request.page_url && (\n <span style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', maxWidth: '200px' }}>\n From: {request.page_url}\n </span>\n )}\n </div>\n </div>\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useMemo, useRef, useEffect, useCallback } from 'react';\nimport { useArticles, useArticle, useRequests, useFeedback, useFeatureGroups } from '../hooks';\nimport { useCensusContext } from '../context';\nimport type { Article, FeedbackType } from '../../types';\n\nexport type HelpCenterTab = 'articles' | 'requests';\n\nexport interface HelpCenterProps {\n tabs?: HelpCenterTab[];\n defaultTab?: HelpCenterTab;\n tabLabels?: Partial<Record<HelpCenterTab, string>>;\n showSearch?: boolean;\n className?: string;\n}\n\nconst defaultTabLabels: Record<HelpCenterTab, string> = {\n articles: 'Documentation',\n requests: 'My Requests',\n};\n\nconst feedbackTypeConfig: Record<FeedbackType, { label: string; color: string; bg: string }> = {\n feedback: { label: 'Feedback', color: '#2563eb', bg: '#dbeafe' },\n bug_report: { label: 'Bug Report', color: '#dc2626', bg: '#fee2e2' },\n feature_request: { label: 'Feature Request', color: '#d97706', bg: '#fef3c7' },\n article_rating: { label: 'Article Rating', color: '#7c3aed', bg: '#ede9fe' },\n};\n\nconst statusConfig: Record<string, { label: string; color: string; bg: string }> = {\n new: { label: 'New', color: '#6b7280', bg: '#f3f4f6' },\n reviewed: { label: 'Reviewed', color: '#2563eb', bg: '#dbeafe' },\n in_progress: { label: 'In Progress', color: '#d97706', bg: '#fef3c7' },\n resolved: { label: 'Resolved', color: '#059669', bg: '#d1fae5' },\n closed: { label: 'Closed', color: '#6b7280', bg: '#f3f4f6' },\n};\n\nfunction formatDate(dateString: string): string {\n return new Date(dateString).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n}\n\nconst FORM_TYPES: { value: FeedbackType; label: string }[] = [\n { value: 'feedback', label: 'Feedback' },\n { value: 'bug_report', label: 'Bug' },\n { value: 'feature_request', label: 'Feature' },\n];\n\n// Icons as inline SVGs\nconst SearchIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n </svg>\n);\n\nconst BookIcon = () => (\n <svg width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253\" />\n </svg>\n);\n\nconst ChevronRightIcon = () => (\n <svg width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n);\n\nconst ChevronDownIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n);\n\nconst ArrowLeftIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 19l-7-7m0 0l7-7m-7 7h18\" />\n </svg>\n);\n\nconst ClockIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst LayersIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10\" />\n </svg>\n);\n\nconst MessageIcon = () => (\n <svg width=\"48\" height=\"48\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M8 10h.01M12 10h.01M16 10h.01M9 16H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-5l-5 5v-5z\" />\n </svg>\n);\n\nconst PlusIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n </svg>\n);\n\nconst LoaderIcon = () => (\n <svg width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" style={{ animation: 'spin 1s linear infinite' }}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" />\n </svg>\n);\n\nconst styles = {\n container: {\n fontFamily: 'system-ui, -apple-system, sans-serif',\n minHeight: '400px',\n },\n grid: {\n display: 'grid',\n gridTemplateColumns: '240px 1fr',\n gap: '48px',\n },\n sidebar: {\n position: 'sticky' as const,\n top: '24px',\n height: 'fit-content',\n },\n main: {\n minWidth: 0,\n },\n tabs: {\n display: 'flex',\n gap: '4px',\n padding: '4px',\n backgroundColor: '#f3f4f6',\n borderRadius: '8px',\n marginBottom: '24px',\n },\n tab: {\n flex: 1,\n padding: '8px 16px',\n fontSize: '14px',\n fontWeight: 500,\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n transition: 'all 0.15s',\n backgroundColor: 'transparent',\n color: '#6b7280',\n },\n tabActive: {\n backgroundColor: '#ffffff',\n color: '#111827',\n boxShadow: '0 1px 2px rgba(0, 0, 0, 0.05)',\n },\n searchContainer: {\n position: 'relative' as const,\n marginBottom: '24px',\n },\n searchIcon: {\n position: 'absolute' as const,\n left: '12px',\n top: '50%',\n transform: 'translateY(-50%)',\n color: '#9ca3af',\n },\n searchInput: {\n width: '100%',\n padding: '8px 12px 8px 36px',\n fontSize: '14px',\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n outline: 'none',\n },\n sectionTitle: {\n fontSize: '11px',\n fontWeight: 600,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n color: '#6b7280',\n marginBottom: '12px',\n },\n navList: {\n listStyle: 'none',\n padding: 0,\n margin: 0,\n },\n navItem: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '8px 12px',\n fontSize: '14px',\n color: '#4b5563',\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n textAlign: 'left' as const,\n },\n navItemActive: {\n backgroundColor: '#f3f4f6',\n color: '#111827',\n fontWeight: 500,\n },\n subNav: {\n marginLeft: '24px',\n marginTop: '4px',\n paddingLeft: '12px',\n borderLeft: '1px solid #e5e7eb',\n },\n articleGrid: {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(280px, 1fr))',\n gap: '16px',\n },\n articleCard: {\n display: 'flex',\n alignItems: 'flex-start',\n gap: '16px',\n padding: '16px',\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n backgroundColor: '#ffffff',\n cursor: 'pointer',\n transition: 'all 0.15s',\n textAlign: 'left' as const,\n },\n articleIcon: {\n flexShrink: 0,\n width: '40px',\n height: '40px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: '#f3f4f6',\n borderRadius: '8px',\n color: '#6b7280',\n },\n articleContent: {\n flex: 1,\n minWidth: 0,\n },\n articleTitle: {\n fontSize: '14px',\n fontWeight: 500,\n color: '#111827',\n margin: 0,\n },\n articleDesc: {\n fontSize: '13px',\n color: '#6b7280',\n margin: '4px 0 0',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical' as const,\n overflow: 'hidden',\n },\n articleMeta: {\n fontSize: '12px',\n color: '#9ca3af',\n marginTop: '8px',\n },\n backButton: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 0',\n fontSize: '14px',\n color: '#6b7280',\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'pointer',\n marginBottom: '24px',\n },\n articleDetail: {\n maxWidth: '720px',\n },\n articleDetailTitle: {\n fontSize: '28px',\n fontWeight: 700,\n color: '#111827',\n margin: 0,\n },\n articleDetailMeta: {\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n fontSize: '14px',\n color: '#6b7280',\n marginTop: '8px',\n },\n articleDetailContent: {\n marginTop: '32px',\n fontSize: '15px',\n lineHeight: 1.7,\n color: '#374151',\n },\n emptyState: {\n textAlign: 'center' as const,\n padding: '48px 24px',\n color: '#6b7280',\n },\n emptyIcon: {\n color: '#d1d5db',\n marginBottom: '16px',\n },\n emptyTitle: {\n fontSize: '16px',\n fontWeight: 500,\n color: '#111827',\n margin: '0 0 8px',\n },\n emptyText: {\n fontSize: '14px',\n margin: 0,\n },\n loading: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n padding: '48px',\n color: '#6b7280',\n fontSize: '14px',\n },\n // Request styles\n requestCard: {\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n padding: '16px',\n backgroundColor: '#ffffff',\n marginBottom: '12px',\n },\n requestHeader: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '8px',\n },\n badge: {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '2px 8px',\n borderRadius: '9999px',\n fontSize: '12px',\n fontWeight: 500,\n },\n requestMessage: {\n fontSize: '14px',\n color: '#111827',\n margin: 0,\n lineHeight: 1.5,\n },\n requestMeta: {\n display: 'flex',\n gap: '12px',\n marginTop: '8px',\n fontSize: '12px',\n color: '#6b7280',\n },\n form: {\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n border: '1px solid #e5e7eb',\n marginBottom: '24px',\n },\n formHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '12px',\n },\n formTitle: {\n fontSize: '14px',\n fontWeight: 500,\n color: '#111827',\n margin: 0,\n },\n typeSelector: {\n display: 'flex',\n gap: '8px',\n marginBottom: '12px',\n },\n typeButton: {\n padding: '6px 12px',\n borderRadius: '6px',\n border: '1px solid #e5e7eb',\n backgroundColor: '#ffffff',\n fontSize: '13px',\n cursor: 'pointer',\n transition: 'all 0.15s',\n },\n typeButtonActive: {\n backgroundColor: '#111827',\n borderColor: '#111827',\n color: '#ffffff',\n },\n textarea: {\n width: '100%',\n padding: '10px 12px',\n borderRadius: '6px',\n border: '1px solid #e5e7eb',\n fontSize: '14px',\n resize: 'vertical' as const,\n minHeight: '80px',\n fontFamily: 'inherit',\n marginBottom: '12px',\n boxSizing: 'border-box' as const,\n },\n submitButton: {\n padding: '8px 16px',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: '#111827',\n color: '#ffffff',\n fontSize: '14px',\n fontWeight: 500,\n cursor: 'pointer',\n transition: 'opacity 0.15s',\n },\n newRequestButton: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '6px',\n padding: '8px 16px',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: '#111827',\n color: '#ffffff',\n fontSize: '14px',\n fontWeight: 500,\n cursor: 'pointer',\n marginBottom: '24px',\n },\n successMessage: {\n padding: '12px',\n backgroundColor: '#d1fae5',\n borderRadius: '6px',\n color: '#059669',\n fontSize: '14px',\n marginBottom: '16px',\n },\n};\n\n// Add keyframes for spinner\nconst spinnerStyles = `\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n`;\n\nexport function HelpCenter({\n tabs = ['articles', 'requests'],\n defaultTab = 'articles',\n tabLabels = {},\n showSearch = true,\n className,\n}: HelpCenterProps) {\n const [activeTab, setActiveTab] = useState<HelpCenterTab>(defaultTab);\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedArticle, setSelectedArticle] = useState<Article | null>(null);\n const [expandedGroups, setExpandedGroups] = useState<Set<string>>(new Set());\n const [selectedFeatureId, setSelectedFeatureId] = useState<string | null>(null);\n const [showForm, setShowForm] = useState(false);\n const [formType, setFormType] = useState<FeedbackType>('feedback');\n const [formMessage, setFormMessage] = useState('');\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const { isIdentified } = useCensusContext();\n const { articles, isLoading: articlesLoading } = useArticles({ search: searchQuery || undefined });\n const { article: fullArticle, isLoading: articleLoading } = useArticle(selectedArticle?.slug || '');\n const { requests, isLoading: requestsLoading, refetch: refetchRequests, settings } = useRequests({ limit: 50 });\n const { featureGroups, isLoading: groupsLoading } = useFeatureGroups();\n const { submitFeedback, isSubmitting, isSuccess, reset } = useFeedback();\n\n const mergedLabels = { ...defaultTabLabels, ...tabLabels };\n\n // Cmd+K keyboard shortcut\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault();\n searchInputRef.current?.focus();\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, []);\n\n const toggleGroup = (groupId: string) => {\n setExpandedGroups((prev) => {\n const next = new Set(prev);\n if (next.has(groupId)) {\n next.delete(groupId);\n } else {\n next.add(groupId);\n }\n return next;\n });\n };\n\n const filteredArticles = useMemo(() => {\n return articles.filter((article) => {\n const matchesFeature = !selectedFeatureId || (article as any).feature_id === selectedFeatureId;\n return matchesFeature;\n });\n }, [articles, selectedFeatureId]);\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n if (!formMessage.trim() || isSubmitting) return;\n\n try {\n await submitFeedback({\n type: formType,\n message: formMessage,\n });\n setFormMessage('');\n setShowForm(false);\n setTimeout(() => {\n refetchRequests();\n reset();\n }, 500);\n } catch {\n // Error handled by hook\n }\n },\n [formType, formMessage, isSubmitting, submitFeedback, refetchRequests, reset]\n );\n\n const renderArticleDetail = () => {\n if (articleLoading || !fullArticle) {\n return (\n <div style={styles.loading}>\n <LoaderIcon />\n <span>Loading article...</span>\n </div>\n );\n }\n\n return (\n <div style={styles.articleDetail}>\n <button onClick={() => setSelectedArticle(null)} style={styles.backButton}>\n <ArrowLeftIcon />\n Back to articles\n </button>\n\n <h1 style={styles.articleDetailTitle}>{fullArticle.title}</h1>\n {fullArticle.read_time_minutes && (\n <div style={styles.articleDetailMeta}>\n <ClockIcon />\n {fullArticle.read_time_minutes} min read\n </div>\n )}\n\n {fullArticle.content_html ? (\n <div\n style={styles.articleDetailContent}\n dangerouslySetInnerHTML={{ __html: fullArticle.content_html }}\n />\n ) : (\n <p style={{ ...styles.articleDetailContent, color: '#6b7280' }}>No content available.</p>\n )}\n </div>\n );\n };\n\n const renderArticles = () => {\n if (selectedArticle) {\n return renderArticleDetail();\n }\n\n if (articlesLoading || groupsLoading) {\n return (\n <div style={styles.loading}>\n <LoaderIcon />\n <span>Loading...</span>\n </div>\n );\n }\n\n if (filteredArticles.length === 0) {\n return (\n <div style={styles.emptyState}>\n <div style={styles.emptyIcon}><BookIcon /></div>\n <h3 style={styles.emptyTitle}>No articles found</h3>\n <p style={styles.emptyText}>\n {searchQuery ? `No results for \"${searchQuery}\"` : 'No documentation articles available yet.'}\n </p>\n </div>\n );\n }\n\n return (\n <div style={styles.articleGrid}>\n {filteredArticles.map((article) => (\n <button\n key={article.id}\n onClick={() => setSelectedArticle(article)}\n style={styles.articleCard}\n >\n <div style={styles.articleIcon}>\n <BookIcon />\n </div>\n <div style={styles.articleContent}>\n <h3 style={styles.articleTitle}>{article.title}</h3>\n {article.seo_description && (\n <p style={styles.articleDesc}>{article.seo_description}</p>\n )}\n {article.read_time_minutes && (\n <p style={styles.articleMeta}>{article.read_time_minutes} min read</p>\n )}\n </div>\n <ChevronRightIcon />\n </button>\n ))}\n </div>\n );\n };\n\n const renderRequestForm = () => {\n if (!settings.allowRequestCreation) return null;\n\n if (isSuccess) {\n return (\n <div style={styles.successMessage}>\n Thanks for your feedback! It has been submitted.\n </div>\n );\n }\n\n if (!showForm) {\n return (\n <button onClick={() => setShowForm(true)} style={styles.newRequestButton}>\n <PlusIcon />\n New Request\n </button>\n );\n }\n\n return (\n <form onSubmit={handleSubmit} style={styles.form}>\n <div style={styles.formHeader}>\n <p style={styles.formTitle}>Submit a request</p>\n <button\n type=\"button\"\n onClick={() => setShowForm(false)}\n style={{ background: 'none', border: 'none', cursor: 'pointer', color: '#6b7280', fontSize: '18px' }}\n >\n ×\n </button>\n </div>\n <div style={styles.typeSelector}>\n {FORM_TYPES.map((t) => (\n <button\n key={t.value}\n type=\"button\"\n onClick={() => setFormType(t.value)}\n style={{\n ...styles.typeButton,\n ...(formType === t.value ? styles.typeButtonActive : {}),\n }}\n >\n {t.label}\n </button>\n ))}\n </div>\n <textarea\n value={formMessage}\n onChange={(e) => setFormMessage(e.target.value)}\n placeholder=\"Describe your request...\"\n style={styles.textarea}\n required\n />\n <button\n type=\"submit\"\n style={{ ...styles.submitButton, opacity: isSubmitting ? 0.6 : 1 }}\n disabled={isSubmitting}\n >\n {isSubmitting ? 'Submitting...' : 'Submit'}\n </button>\n </form>\n );\n };\n\n const renderRequests = () => {\n if (!isIdentified) {\n return (\n <div style={styles.emptyState}>\n <p style={styles.emptyText}>Please sign in to view your requests.</p>\n </div>\n );\n }\n\n if (requestsLoading) {\n return (\n <div style={styles.loading}>\n <LoaderIcon />\n <span>Loading requests...</span>\n </div>\n );\n }\n\n return (\n <div>\n {renderRequestForm()}\n\n {requests.length === 0 ? (\n <div style={styles.emptyState}>\n <div style={styles.emptyIcon}><MessageIcon /></div>\n <h3 style={styles.emptyTitle}>No requests yet</h3>\n <p style={styles.emptyText}>\n {settings.allowRequestCreation\n ? 'Submit your first request above.'\n : \"When you submit feedback, they'll appear here.\"}\n </p>\n </div>\n ) : (\n <div>\n {requests.map((request) => {\n const typeInfo = feedbackTypeConfig[request.feedback_type] || feedbackTypeConfig.feedback;\n const statusInfo = statusConfig[request.status] || statusConfig.new;\n\n return (\n <div key={request.id} style={styles.requestCard}>\n <div style={styles.requestHeader}>\n <span style={{ ...styles.badge, color: typeInfo.color, backgroundColor: typeInfo.bg }}>\n {typeInfo.label}\n </span>\n <span style={{ ...styles.badge, color: statusInfo.color, backgroundColor: statusInfo.bg }}>\n {statusInfo.label}\n </span>\n </div>\n <p style={styles.requestMessage}>{request.message || 'No message provided'}</p>\n <div style={styles.requestMeta}>\n <span>{formatDate(request.created_at)}</span>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n };\n\n return (\n <div style={styles.container} className={className}>\n <style>{spinnerStyles}</style>\n\n {/* Tabs */}\n {tabs.length > 1 && (\n <div style={styles.tabs}>\n {tabs.map((tab) => (\n <button\n key={tab}\n onClick={() => setActiveTab(tab)}\n style={{\n ...styles.tab,\n ...(activeTab === tab ? styles.tabActive : {}),\n }}\n >\n {mergedLabels[tab]}\n </button>\n ))}\n </div>\n )}\n\n <div style={styles.grid}>\n {/* Sidebar */}\n <aside style={styles.sidebar}>\n {/* Search */}\n {showSearch && activeTab === 'articles' && (\n <div style={styles.searchContainer}>\n <div style={styles.searchIcon}><SearchIcon /></div>\n <input\n ref={searchInputRef}\n type=\"text\"\n placeholder=\"Search...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n style={styles.searchInput}\n />\n </div>\n )}\n\n {/* Feature Groups */}\n {activeTab === 'articles' && featureGroups.length > 0 && (\n <nav>\n <h3 style={styles.sectionTitle}>Features</h3>\n <ul style={styles.navList}>\n <li>\n <button\n onClick={() => setSelectedFeatureId(null)}\n style={{\n ...styles.navItem,\n ...(!selectedFeatureId ? styles.navItemActive : {}),\n }}\n >\n All Articles\n </button>\n </li>\n {featureGroups.map((group) => (\n <li key={group.id}>\n <button\n onClick={() => toggleGroup(group.id)}\n style={styles.navItem}\n >\n <span style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <LayersIcon />\n {group.name}\n </span>\n {expandedGroups.has(group.id) ? <ChevronDownIcon /> : <ChevronRightIcon />}\n </button>\n {expandedGroups.has(group.id) && group.features.length > 0 && (\n <ul style={styles.subNav}>\n {group.features.map((feature) => (\n <li key={feature.id}>\n <button\n onClick={() => setSelectedFeatureId(feature.id)}\n style={{\n ...styles.navItem,\n padding: '6px 12px',\n fontSize: '13px',\n ...(selectedFeatureId === feature.id ? styles.navItemActive : {}),\n }}\n >\n {feature.name}\n </button>\n </li>\n ))}\n </ul>\n )}\n </li>\n ))}\n </ul>\n </nav>\n )}\n </aside>\n\n {/* Main Content */}\n <main style={styles.main}>\n {activeTab === 'articles' && renderArticles()}\n {activeTab === 'requests' && renderRequests()}\n </main>\n </div>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/client.ts","../../src/react/context.tsx","../../src/react/hooks.ts","../../src/react/components/FeedbackButton.tsx","../../src/react/components/KnowledgeBase.tsx","../../src/react/components/Requests.tsx","../../src/react/components/HelpCenter.tsx"],"names":["DEFAULT_BASE_URL","CensusClient","config","prefix","user","options","validTypes","response","params","queryString","url","slugOrId","error","feedbackId","eventType","properties","events","event","guideId","path","method","body","headers","errorMessage","args","createCensus","CensusContext","createContext","CensusProvider","apiKey","baseUrl","debug","theme","children","isReady","setIsReady","useState","isIdentified","setIsIdentified","client","useMemo","useEffect","value","jsx","useCensus","context","useContext","useCensusContext","useIdentify","isIdentifying","setIsIdentifying","setError","err","useFeedback","isSubmitting","setIsSubmitting","isSuccess","setIsSuccess","setFeedbackId","submitFeedback","useCallback","result","reset","useArticles","data","setData","isLoading","setIsLoading","fetchArticles","useArticle","article","setArticle","fetchArticle","defaultSettings","useRequests","fetchRequests","useVote","isVoting","setIsVoting","useTrack","track","trackBatch","useFeatureGroups","featureGroups","setFeatureGroups","fetchFeatureGroups","defaultStyles","positionStyles","feedbackTypeLabels","feedbackTypeEmojis","getThemeStyles","FeedbackButton","position","text","allowedTypes","themeProp","onSubmit","onError","contextTheme","isOpen","setIsOpen","selectedType","setSelectedType","message","setMessage","themeStyles","handleOpen","handleClose","handleSubmit","e","feedbackData","jsxs","Fragment","FeedbackModal","onClose","onTypeChange","onMessageChange","type","KnowledgeBase","showSearch","showCategories","defaultCategory","className","onArticleView","searchQuery","setSearchQuery","selectedCategory","setSelectedCategory","selectedArticleSlug","setSelectedArticleSlug","articles","isLoadingArticles","articlesError","selectedArticle","isLoadingArticle","articleError","categories","cats","handleArticleClick","handleBack","category","typeConfig","statusConfig","formatDate","dateString","FORM_TYPES","Requests","status","limit","showEmptyState","onRequestClick","hoveredId","setHoveredId","showForm","setShowForm","formType","setFormType","formMessage","setFormMessage","localVotes","setLocalVotes","requests","refetch","settings","vote","handleRequestClick","request","handleVote","currentCount","currentHasVoted","prev","getVoteInfo","local","renderForm","t","canVote","typeInfo","statusInfo","isHovered","voteInfo","defaultTabLabels","feedbackTypeConfig","SearchIcon","BookIcon","ChevronRightIcon","ChevronDownIcon","ArrowLeftIcon","ClockIcon","LayersIcon","MessageIcon","PlusIcon","LoaderIcon","styles","spinnerStyles","HelpCenter","tabs","defaultTab","tabLabels","activeTab","setActiveTab","setSelectedArticle","expandedGroups","setExpandedGroups","selectedFeatureId","setSelectedFeatureId","searchInputRef","useRef","articlesLoading","fullArticle","articleLoading","requestsLoading","refetchRequests","groupsLoading","mergedLabels","handleKeyDown","toggleGroup","groupId","next","filteredArticles","renderArticleDetail","renderArticles","renderRequestForm","renderRequests","tab","group","feature"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n CensusConfig,\n UserIdentity,\n FeedbackOptions,\n ArticlesOptions,\n ArticlesResponse,\n Article,\n RequestsOptions,\n RequestsResponse,\n BatchEventsOptions,\n CensusError,\n Guide,\n GuidesResponse,\n GuideAnalyticsEvent,\n FeatureGroupsResponse,\n} from './types';\n\n/**\n * Default API base URL\n */\nconst DEFAULT_BASE_URL = 'https://api.census.ai';\n\n/**\n * Census SDK Client\n *\n * The main client for interacting with the Census API.\n * Use `createCensus()` to create an instance.\n *\n * @example\n * ```typescript\n * import { createCensus } from '@census-ai/census-sdk';\n *\n * const census = createCensus({ apiKey: 'cs_live_xxx' });\n *\n * await census.identify({ userId: 'user_123', email: 'user@example.com' });\n * await census.submitFeedback({ type: 'bug_report', message: 'Button is broken' });\n * ```\n */\nexport class CensusClient {\n private apiKey: string;\n private baseUrl: string;\n private debug: boolean;\n private currentUserId: string | null = null;\n\n constructor(config: CensusConfig) {\n if (!config.apiKey) {\n throw new Error('Census: apiKey is required');\n }\n\n // Support both new (cs_) and legacy (op_) key prefixes\n const validPrefixes = ['cs_live_', 'cs_test_', 'op_live_', 'op_test_'];\n if (!validPrefixes.some(prefix => config.apiKey.startsWith(prefix))) {\n console.warn('Census: API key should start with \"cs_live_\" or \"cs_test_\"');\n }\n\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl || DEFAULT_BASE_URL;\n this.debug = config.debug || false;\n\n this.log('Initialized with base URL:', this.baseUrl);\n }\n\n /**\n * Identify a user for tracking purposes.\n * Call this when a user logs in or when you have user information.\n *\n * @param user - User identity information\n *\n * @example\n * ```typescript\n * await census.identify({\n * userId: 'user_123',\n * email: 'john@example.com',\n * name: 'John Doe',\n * organizationId: 'org_456',\n * organizationName: 'Acme Inc',\n * });\n * ```\n */\n async identify(user: UserIdentity): Promise<void> {\n if (!user.userId) {\n throw new Error('Census: userId is required for identify()');\n }\n\n this.currentUserId = user.userId;\n\n await this.request('/api/sdk/identify', 'POST', {\n userId: user.userId,\n email: user.email,\n name: user.name,\n avatarUrl: user.avatarUrl,\n metadata: user.metadata,\n organizationId: user.organizationId,\n organizationName: user.organizationName,\n organizationDomain: user.organizationDomain,\n organizationPlan: user.organizationPlan,\n });\n\n this.log('User identified:', user.userId);\n }\n\n /**\n * Clear the current user identity.\n * Call this when a user logs out.\n */\n reset(): void {\n this.currentUserId = null;\n this.log('User identity reset');\n }\n\n /**\n * Submit feedback, bug report, or feature request.\n *\n * @param options - Feedback options\n *\n * @example\n * ```typescript\n * // Submit a bug report\n * await census.submitFeedback({\n * type: 'bug_report',\n * message: 'The submit button is not working on Firefox',\n * });\n *\n * // Submit a feature request\n * await census.submitFeedback({\n * type: 'feature_request',\n * message: 'It would be great to have dark mode support',\n * });\n *\n * // Rate an article\n * await census.submitFeedback({\n * type: 'article_rating',\n * articleId: 'article_123',\n * helpful: true,\n * rating: 5,\n * });\n * ```\n */\n async submitFeedback(options: FeedbackOptions): Promise<{ feedbackId: string }> {\n const validTypes = ['feedback', 'bug_report', 'feature_request', 'article_rating'];\n if (!options.type || !validTypes.includes(options.type)) {\n throw new Error(`Census: type must be one of: ${validTypes.join(', ')}`);\n }\n\n if (options.type === 'article_rating') {\n if (options.rating === undefined && options.helpful === undefined) {\n throw new Error('Census: article_rating requires rating or helpful field');\n }\n } else if (!options.message) {\n throw new Error('Census: message is required for this feedback type');\n }\n\n const response = await this.request<{ success: boolean; feedbackId: string }>(\n '/api/sdk/feedback',\n 'POST',\n {\n type: options.type,\n message: options.message,\n rating: options.rating,\n helpful: options.helpful,\n userId: this.currentUserId,\n articleId: options.articleId,\n pageUrl: typeof window !== 'undefined' ? window.location.href : undefined,\n metadata: options.metadata,\n }\n );\n\n this.log('Feedback submitted:', response.feedbackId);\n return { feedbackId: response.feedbackId };\n }\n\n /**\n * Fetch published articles from the knowledge base.\n *\n * @param options - Query options\n * @returns Articles and pagination info\n *\n * @example\n * ```typescript\n * // Get all articles\n * const { articles } = await census.getArticles();\n *\n * // Search articles\n * const { articles } = await census.getArticles({ search: 'getting started' });\n *\n * // Filter by category\n * const { articles } = await census.getArticles({ category: 'guides' });\n * ```\n */\n async getArticles(options?: ArticlesOptions): Promise<ArticlesResponse> {\n const params = new URLSearchParams();\n if (options?.category) params.set('category', options.category);\n if (options?.search) params.set('search', options.search);\n if (options?.limit) params.set('limit', String(options.limit));\n if (options?.offset) params.set('offset', String(options.offset));\n\n const queryString = params.toString();\n const url = `/api/sdk/articles${queryString ? `?${queryString}` : ''}`;\n\n const response = await this.request<ArticlesResponse>(url, 'GET');\n this.log('Fetched articles:', response.articles.length);\n return response;\n }\n\n /**\n * Fetch a single article by slug or ID.\n *\n * @param slugOrId - Article slug or ID\n * @returns Article or null if not found\n *\n * @example\n * ```typescript\n * const article = await census.getArticle('getting-started');\n * if (article) {\n * console.log(article.title, article.content_html);\n * }\n * ```\n */\n async getArticle(slugOrId: string): Promise<Article | null> {\n try {\n const response = await this.request<{ article: Article }>(\n `/api/sdk/articles/${encodeURIComponent(slugOrId)}`,\n 'GET'\n );\n this.log('Fetched article:', slugOrId);\n return response.article;\n } catch (error) {\n if ((error as CensusError).status === 404) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Fetch feature groups with their features and article counts.\n * Used for navigation in the knowledge base.\n *\n * @returns Feature groups with nested features\n *\n * @example\n * ```typescript\n * const { feature_groups } = await census.getFeatureGroups();\n * feature_groups.forEach(group => {\n * console.log(group.name, group.features.length);\n * });\n * ```\n */\n async getFeatureGroups(): Promise<FeatureGroupsResponse> {\n const response = await this.request<FeatureGroupsResponse>(\n '/api/sdk/feature-groups',\n 'GET'\n );\n this.log('Fetched feature groups:', response.feature_groups.length);\n return response;\n }\n\n /**\n * Fetch the current user's submitted requests (feedback, bugs, feature requests).\n * Requires a user to be identified first.\n *\n * @param options - Query options\n * @returns Requests and pagination info\n *\n * @example\n * ```typescript\n * // Get all requests for the current user\n * const { requests } = await census.getRequests();\n *\n * // Filter by status\n * const { requests } = await census.getRequests({ status: 'in_progress' });\n *\n * // Filter by type\n * const { requests } = await census.getRequests({ type: 'bug_report' });\n * ```\n */\n async getRequests(options?: RequestsOptions): Promise<RequestsResponse> {\n if (!this.currentUserId) {\n throw new Error('Census: User must be identified before fetching requests. Call identify() first.');\n }\n\n const params = new URLSearchParams();\n params.set('userId', this.currentUserId);\n if (options?.status) params.set('status', options.status);\n if (options?.type) params.set('type', options.type);\n if (options?.limit) params.set('limit', String(options.limit));\n if (options?.offset) params.set('offset', String(options.offset));\n\n const response = await this.request<RequestsResponse>(\n `/api/sdk/requests?${params.toString()}`,\n 'GET'\n );\n this.log('Fetched requests:', response.requests.length);\n return response;\n }\n\n /**\n * Vote on a feedback request (toggle).\n * If the user has already voted, removes the vote.\n * If the user hasn't voted, adds a vote.\n *\n * @param feedbackId - ID of the feedback to vote on\n * @returns Vote result with action taken and new vote count\n *\n * @example\n * ```typescript\n * // Vote on a feedback request\n * const result = await census.vote('feedback-id-123');\n * console.log(result.action); // 'added' or 'removed'\n * console.log(result.vote_count); // 5\n * console.log(result.user_has_voted); // true\n * ```\n */\n async vote(feedbackId: string): Promise<{\n success: boolean;\n action: 'added' | 'removed';\n vote_count: number;\n user_has_voted: boolean;\n }> {\n if (!this.currentUserId) {\n throw new Error('Census: User must be identified before voting. Call identify() first.');\n }\n\n if (!feedbackId) {\n throw new Error('Census: feedbackId is required for vote()');\n }\n\n const response = await this.request<{\n success: boolean;\n action: 'added' | 'removed';\n vote_count: number;\n user_has_voted: boolean;\n }>('/api/sdk/requests/vote', 'POST', {\n feedbackId,\n userId: this.currentUserId,\n });\n\n this.log('Vote result:', response.action, 'for feedback:', feedbackId);\n return response;\n }\n\n /**\n * Track a custom analytics event.\n *\n * @param eventType - Name of the event\n * @param properties - Additional event properties\n *\n * @example\n * ```typescript\n * // Track a button click\n * await census.track('button_clicked', { buttonId: 'submit-form' });\n *\n * // Track a page view\n * await census.track('page_viewed', { page: '/pricing' });\n * ```\n */\n async track(eventType: string, properties?: Record<string, unknown>): Promise<void> {\n if (!eventType) {\n throw new Error('Census: eventType is required for track()');\n }\n\n await this.request('/api/sdk/events', 'POST', {\n eventType,\n userId: this.currentUserId,\n properties,\n });\n\n this.log('Event tracked:', eventType);\n }\n\n /**\n * Track multiple events in a single request.\n * More efficient than calling track() multiple times.\n *\n * @param events - Array of events to track\n *\n * @example\n * ```typescript\n * await census.trackBatch({\n * events: [\n * { eventType: 'page_viewed', properties: { page: '/home' } },\n * { eventType: 'button_clicked', properties: { button: 'cta' } },\n * ],\n * });\n * ```\n */\n async trackBatch(options: BatchEventsOptions): Promise<void> {\n if (!options.events || options.events.length === 0) {\n throw new Error('Census: at least one event is required');\n }\n\n if (options.events.length > 100) {\n throw new Error('Census: maximum 100 events per batch');\n }\n\n const events = options.events.map((event) => ({\n eventType: event.eventType,\n userId: this.currentUserId,\n articleId: event.articleId,\n featureId: event.featureId,\n properties: event.properties,\n }));\n\n await this.request('/api/sdk/events', 'POST', { events });\n\n this.log('Batch events tracked:', options.events.length);\n }\n\n /**\n * Fetch available guides for the current user.\n * Returns guides that match the user's context and haven't been completed.\n *\n * @returns Guides and list of completed guide IDs\n *\n * @example\n * ```typescript\n * const { guides, completedGuides } = await census.getGuides();\n * guides.forEach(guide => console.log(guide.name));\n * ```\n */\n async getGuides(): Promise<GuidesResponse> {\n const params = new URLSearchParams();\n if (this.currentUserId) {\n params.set('userId', this.currentUserId);\n }\n\n const queryString = params.toString();\n const url = `/api/sdk/guides${queryString ? `?${queryString}` : ''}`;\n\n const response = await this.request<GuidesResponse>(url, 'GET');\n this.log('Fetched guides:', response.guides.length);\n return response;\n }\n\n /**\n * Fetch a single guide by slug or ID.\n *\n * @param slugOrId - Guide slug or ID\n * @returns Guide or null if not found\n *\n * @example\n * ```typescript\n * const guide = await census.getGuide('onboarding-tour');\n * if (guide) {\n * console.log(guide.name, guide.guide_steps.length);\n * }\n * ```\n */\n async getGuide(slugOrId: string): Promise<Guide | null> {\n try {\n const params = new URLSearchParams();\n if (this.currentUserId) {\n params.set('userId', this.currentUserId);\n }\n\n const queryString = params.toString();\n const url = `/api/sdk/guides/${encodeURIComponent(slugOrId)}${queryString ? `?${queryString}` : ''}`;\n\n const response = await this.request<{ guide: Guide }>(url, 'GET');\n this.log('Fetched guide:', slugOrId);\n return response.guide;\n } catch (error) {\n if ((error as CensusError).status === 404) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Track a guide analytics event.\n * Used to track user progress through guides.\n *\n * @param event - Guide analytics event\n *\n * @example\n * ```typescript\n * await census.trackGuideEvent({\n * guideId: 'guide_123',\n * eventType: 'step_completed',\n * stepId: 'step_456',\n * stepIndex: 2,\n * sessionId: 'session_789',\n * });\n * ```\n */\n async trackGuideEvent(event: GuideAnalyticsEvent): Promise<void> {\n if (!event.guideId || !event.eventType || !event.sessionId) {\n throw new Error('Census: guideId, eventType, and sessionId are required for trackGuideEvent()');\n }\n\n await this.request('/api/sdk/guides/events', 'POST', {\n guideId: event.guideId,\n eventType: event.eventType,\n stepId: event.stepId,\n stepIndex: event.stepIndex,\n pageUrl: event.pageUrl || (typeof window !== 'undefined' ? window.location.href : undefined),\n sessionId: event.sessionId,\n userId: event.userId || this.currentUserId,\n metadata: event.metadata,\n });\n\n this.log('Guide event tracked:', event.eventType, event.guideId);\n }\n\n /**\n * Mark a guide as completed for the current user.\n * Prevents the guide from showing again.\n *\n * @param guideId - ID of the guide to mark as completed\n *\n * @example\n * ```typescript\n * await census.markGuideCompleted('guide_123');\n * ```\n */\n async markGuideCompleted(guideId: string): Promise<void> {\n if (!guideId) {\n throw new Error('Census: guideId is required for markGuideCompleted()');\n }\n\n if (!this.currentUserId) {\n throw new Error('Census: User must be identified before marking guides complete. Call identify() first.');\n }\n\n await this.request('/api/sdk/guides/complete', 'POST', {\n guideId,\n userId: this.currentUserId,\n });\n\n this.log('Guide marked completed:', guideId);\n }\n\n /**\n * Get the current identified user ID\n */\n getCurrentUserId(): string | null {\n return this.currentUserId;\n }\n\n /**\n * Check if a user is currently identified\n */\n isIdentified(): boolean {\n return this.currentUserId !== null;\n }\n\n /**\n * Make an API request\n */\n private async request<T>(path: string, method: string, body?: unknown): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n\n const headers: Record<string, string> = {\n 'X-Census-Key': this.apiKey,\n };\n\n if (body) {\n headers['Content-Type'] = 'application/json';\n }\n\n this.log(`${method} ${path}`, body);\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n let errorMessage = `Request failed with status ${response.status}`;\n try {\n const errorData = await response.json();\n errorMessage = errorData.error || errorMessage;\n } catch {\n // Use default error message\n }\n\n const error: CensusError = {\n error: errorMessage,\n status: response.status,\n };\n throw error;\n }\n\n return response.json();\n }\n\n /**\n * Log debug messages\n */\n private log(...args: unknown[]): void {\n if (this.debug) {\n console.log('[Census]', ...args);\n }\n }\n}\n\n/**\n * Create a new Census SDK client.\n *\n * @param config - Configuration options\n * @returns Census client instance\n *\n * @example\n * ```typescript\n * import { createCensus } from '@census-ai/census-sdk';\n *\n * const census = createCensus({\n * apiKey: 'cs_live_your_key_here',\n * debug: true, // Enable debug logging\n * });\n * ```\n */\nexport function createCensus(config: CensusConfig): CensusClient {\n return new CensusClient(config);\n}\n","import { createContext, useContext, useEffect, useMemo, useState } from 'react';\nimport { createCensus, CensusClient } from '../client';\nimport type { CensusProviderProps, CensusTheme, UserIdentity } from '../types';\n\n/**\n * Context value for the Census provider\n */\ninterface CensusContextValue {\n client: CensusClient;\n theme: CensusTheme;\n isReady: boolean;\n isIdentified: boolean;\n}\n\nconst CensusContext = createContext<CensusContextValue | null>(null);\n\n/**\n * Provider component for the Census SDK.\n * Wrap your app with this to use Census hooks and components.\n *\n * @example\n * ```tsx\n * import { CensusProvider } from '@census-ai/census-sdk/react';\n *\n * function App() {\n * return (\n * <CensusProvider\n * apiKey=\"cs_live_xxx\"\n * user={{ userId: 'user_123', email: 'user@example.com' }}\n * >\n * <YourApp />\n * </CensusProvider>\n * );\n * }\n * ```\n */\nexport function CensusProvider({\n apiKey,\n baseUrl,\n debug,\n user,\n theme = {},\n children,\n}: CensusProviderProps) {\n const [isReady, setIsReady] = useState(false);\n const [isIdentified, setIsIdentified] = useState(false);\n\n const client = useMemo(() => {\n return createCensus({ apiKey, baseUrl, debug });\n }, [apiKey, baseUrl, debug]);\n\n // Automatically identify user if provided\n useEffect(() => {\n if (user) {\n client\n .identify(user)\n .then(() => {\n setIsIdentified(true);\n setIsReady(true);\n })\n .catch((error) => {\n console.error('[Census] Failed to identify user:', error);\n setIsReady(true);\n });\n } else {\n setIsReady(true);\n }\n }, [client, user]);\n\n const value: CensusContextValue = useMemo(\n () => ({\n client,\n theme,\n isReady,\n isIdentified,\n }),\n [client, theme, isReady, isIdentified]\n );\n\n return <CensusContext.Provider value={value}>{children}</CensusContext.Provider>;\n}\n\n/**\n * Hook to access the Census client directly.\n *\n * @returns The Census client instance\n * @throws If used outside of CensusProvider\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const census = useCensus();\n *\n * const handleClick = async () => {\n * await census.track('button_clicked');\n * };\n *\n * return <button onClick={handleClick}>Click me</button>;\n * }\n * ```\n */\nexport function useCensus(): CensusClient {\n const context = useContext(CensusContext);\n if (!context) {\n throw new Error('useCensus must be used within a CensusProvider');\n }\n return context.client;\n}\n\n/**\n * Hook to access the Census context (client, theme, and state).\n *\n * @returns The full Census context\n * @throws If used outside of CensusProvider\n */\nexport function useCensusContext(): CensusContextValue {\n const context = useContext(CensusContext);\n if (!context) {\n throw new Error('useCensusContext must be used within a CensusProvider');\n }\n return context;\n}\n\n/**\n * Hook to identify a user.\n *\n * @returns Object with identify function and state\n *\n * @example\n * ```tsx\n * function LoginHandler() {\n * const { identify, isIdentifying } = useIdentify();\n *\n * const handleLogin = async (user) => {\n * await identify({\n * userId: user.id,\n * email: user.email,\n * name: user.name,\n * });\n * };\n * }\n * ```\n */\nexport function useIdentify() {\n const { client } = useCensusContext();\n const [isIdentifying, setIsIdentifying] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const identify = async (user: UserIdentity) => {\n setIsIdentifying(true);\n setError(null);\n try {\n await client.identify(user);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to identify user'));\n throw err;\n } finally {\n setIsIdentifying(false);\n }\n };\n\n const reset = () => {\n client.reset();\n };\n\n return {\n identify,\n reset,\n isIdentifying,\n isIdentified: client.isIdentified(),\n error,\n };\n}\n","import { useState, useCallback, useEffect } from 'react';\nimport { useCensusContext } from './context';\nimport type {\n FeedbackOptions,\n ArticlesOptions,\n ArticlesResponse,\n Article,\n RequestsOptions,\n RequestsResponse,\n RequestsSettings,\n FeatureGroup,\n} from '../types';\n\n/**\n * Hook for submitting feedback.\n *\n * @returns Object with submit function and state\n *\n * @example\n * ```tsx\n * function FeedbackForm() {\n * const { submitFeedback, isSubmitting, isSuccess, error } = useFeedback();\n *\n * const handleSubmit = async (message: string) => {\n * await submitFeedback({\n * type: 'feedback',\n * message,\n * });\n * };\n *\n * return (\n * <form onSubmit={...}>\n * {isSuccess && <p>Thanks for your feedback!</p>}\n * {error && <p>Error: {error.message}</p>}\n * <button disabled={isSubmitting}>Submit</button>\n * </form>\n * );\n * }\n * ```\n */\nexport function useFeedback() {\n const { client } = useCensusContext();\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [isSuccess, setIsSuccess] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [feedbackId, setFeedbackId] = useState<string | null>(null);\n\n const submitFeedback = useCallback(\n async (options: FeedbackOptions) => {\n setIsSubmitting(true);\n setIsSuccess(false);\n setError(null);\n setFeedbackId(null);\n\n try {\n const result = await client.submitFeedback(options);\n setFeedbackId(result.feedbackId);\n setIsSuccess(true);\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to submit feedback');\n setError(error);\n throw error;\n } finally {\n setIsSubmitting(false);\n }\n },\n [client]\n );\n\n const reset = useCallback(() => {\n setIsSuccess(false);\n setError(null);\n setFeedbackId(null);\n }, []);\n\n return {\n submitFeedback,\n reset,\n isSubmitting,\n isSuccess,\n error,\n feedbackId,\n };\n}\n\n/**\n * Hook for fetching articles from the knowledge base.\n *\n * @param options - Query options (optional)\n * @returns Object with articles data and loading state\n *\n * @example\n * ```tsx\n * function ArticleList() {\n * const { articles, isLoading, error, refetch } = useArticles();\n *\n * if (isLoading) return <p>Loading...</p>;\n * if (error) return <p>Error: {error.message}</p>;\n *\n * return (\n * <ul>\n * {articles.map(article => (\n * <li key={article.id}>{article.title}</li>\n * ))}\n * </ul>\n * );\n * }\n * ```\n */\nexport function useArticles(options?: ArticlesOptions) {\n const { client, isReady } = useCensusContext();\n const [data, setData] = useState<ArticlesResponse | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchArticles = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.getArticles(options);\n setData(result);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch articles'));\n } finally {\n setIsLoading(false);\n }\n }, [client, options?.category, options?.search, options?.limit, options?.offset]);\n\n useEffect(() => {\n if (isReady) {\n fetchArticles();\n }\n }, [isReady, fetchArticles]);\n\n return {\n articles: data?.articles || [],\n pagination: data?.pagination,\n isLoading,\n error,\n refetch: fetchArticles,\n };\n}\n\n/**\n * Hook for fetching a single article.\n *\n * @param slugOrId - Article slug or ID\n * @returns Object with article data and loading state\n *\n * @example\n * ```tsx\n * function ArticlePage({ slug }) {\n * const { article, isLoading, error } = useArticle(slug);\n *\n * if (isLoading) return <p>Loading...</p>;\n * if (error) return <p>Error: {error.message}</p>;\n * if (!article) return <p>Article not found</p>;\n *\n * return (\n * <article>\n * <h1>{article.title}</h1>\n * <div dangerouslySetInnerHTML={{ __html: article.content_html }} />\n * </article>\n * );\n * }\n * ```\n */\nexport function useArticle(slugOrId: string) {\n const { client, isReady } = useCensusContext();\n const [article, setArticle] = useState<Article | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchArticle = useCallback(async () => {\n if (!slugOrId) {\n setArticle(null);\n setIsLoading(false);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.getArticle(slugOrId);\n setArticle(result);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch article'));\n } finally {\n setIsLoading(false);\n }\n }, [client, slugOrId]);\n\n useEffect(() => {\n if (isReady) {\n fetchArticle();\n }\n }, [isReady, fetchArticle]);\n\n return {\n article,\n isLoading,\n error,\n refetch: fetchArticle,\n };\n}\n\nconst defaultSettings: RequestsSettings = {\n feedbackVisibility: 'own',\n allowVoting: false,\n allowRequestCreation: true,\n};\n\n/**\n * Hook for fetching the current user's submitted requests.\n *\n * @param options - Query options (optional)\n * @returns Object with requests data and loading state\n *\n * @example\n * ```tsx\n * function MyRequests() {\n * const { requests, isLoading, error, refetch, settings } = useRequests();\n *\n * if (isLoading) return <p>Loading...</p>;\n * if (error) return <p>Error: {error.message}</p>;\n *\n * return (\n * <ul>\n * {requests.map(req => (\n * <li key={req.id}>{req.message} - {req.status}</li>\n * ))}\n * </ul>\n * );\n * }\n * ```\n */\nexport function useRequests(options?: RequestsOptions) {\n const { client, isReady, isIdentified } = useCensusContext();\n const [data, setData] = useState<RequestsResponse | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchRequests = useCallback(async () => {\n if (!isIdentified) {\n setData(null);\n setIsLoading(false);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.getRequests(options);\n setData(result);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch requests'));\n } finally {\n setIsLoading(false);\n }\n }, [client, isIdentified, options?.status, options?.type, options?.limit, options?.offset]);\n\n useEffect(() => {\n if (isReady) {\n if (isIdentified) {\n fetchRequests();\n } else {\n // Not identified - stop loading\n setIsLoading(false);\n }\n }\n }, [isReady, isIdentified, fetchRequests]);\n\n return {\n requests: data?.requests || [],\n pagination: data?.pagination,\n settings: data?.settings || defaultSettings,\n isLoading,\n error,\n refetch: fetchRequests,\n };\n}\n\n/**\n * Hook for voting on requests.\n *\n * @returns Object with vote function and loading state\n *\n * @example\n * ```tsx\n * function VoteButton({ feedbackId }: { feedbackId: string }) {\n * const { vote, isVoting } = useVote();\n *\n * const handleVote = async () => {\n * const result = await vote(feedbackId);\n * console.log('Voted:', result.action); // 'added' or 'removed'\n * };\n *\n * return (\n * <button onClick={handleVote} disabled={isVoting}>\n * Vote\n * </button>\n * );\n * }\n * ```\n */\nexport function useVote() {\n const { client } = useCensusContext();\n const [isVoting, setIsVoting] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const vote = useCallback(\n async (feedbackId: string) => {\n setIsVoting(true);\n setError(null);\n\n try {\n const result = await client.vote(feedbackId);\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error('Failed to vote');\n setError(error);\n throw error;\n } finally {\n setIsVoting(false);\n }\n },\n [client]\n );\n\n return {\n vote,\n isVoting,\n error,\n };\n}\n\n/**\n * Hook for tracking events.\n *\n * @returns Object with track function\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const { track } = useTrack();\n *\n * useEffect(() => {\n * track('page_viewed', { page: 'home' });\n * }, []);\n *\n * return <div>...</div>;\n * }\n * ```\n */\nexport function useTrack() {\n const { client } = useCensusContext();\n\n const track = useCallback(\n async (eventType: string, properties?: Record<string, unknown>) => {\n await client.track(eventType, properties);\n },\n [client]\n );\n\n const trackBatch = useCallback(\n async (\n events: Array<{\n eventType: string;\n articleId?: string;\n featureId?: string;\n properties?: Record<string, unknown>;\n }>\n ) => {\n await client.trackBatch({ events });\n },\n [client]\n );\n\n return {\n track,\n trackBatch,\n };\n}\n\n/**\n * Hook for fetching feature groups with their features.\n *\n * @returns Object with feature groups data and loading state\n *\n * @example\n * ```tsx\n * function FeatureNav() {\n * const { featureGroups, isLoading, error } = useFeatureGroups();\n *\n * if (isLoading) return <p>Loading...</p>;\n * if (error) return <p>Error: {error.message}</p>;\n *\n * return (\n * <ul>\n * {featureGroups.map(group => (\n * <li key={group.id}>\n * {group.name} ({group.feature_count} features)\n * </li>\n * ))}\n * </ul>\n * );\n * }\n * ```\n */\nexport function useFeatureGroups() {\n const { client, isReady } = useCensusContext();\n const [featureGroups, setFeatureGroups] = useState<FeatureGroup[]>([]);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n const fetchFeatureGroups = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const result = await client.getFeatureGroups();\n setFeatureGroups(result.feature_groups);\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to fetch feature groups'));\n } finally {\n setIsLoading(false);\n }\n }, [client]);\n\n useEffect(() => {\n if (isReady) {\n fetchFeatureGroups();\n }\n }, [isReady, fetchFeatureGroups]);\n\n return {\n featureGroups,\n isLoading,\n error,\n refetch: fetchFeatureGroups,\n };\n}\n","import { useState, useCallback } from 'react';\nimport { useFeedback } from '../hooks';\nimport { useCensusContext } from '../context';\nimport type { FeedbackButtonProps, FeedbackType, CensusTheme } from '../../types';\n\nconst defaultStyles = {\n button: {\n position: 'fixed' as const,\n padding: '12px 20px',\n border: 'none',\n borderRadius: '8px',\n cursor: 'pointer',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n fontSize: '14px',\n fontWeight: '500' as const,\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n transition: 'transform 0.2s, box-shadow 0.2s',\n zIndex: 9999,\n },\n modal: {\n position: 'fixed' as const,\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n zIndex: 10000,\n },\n modalContent: {\n backgroundColor: 'white',\n borderRadius: '12px',\n padding: '24px',\n width: '100%',\n maxWidth: '400px',\n margin: '16px',\n boxShadow: '0 20px 50px rgba(0, 0, 0, 0.2)',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n },\n input: {\n width: '100%',\n padding: '10px 12px',\n border: '1px solid #e0e0e0',\n borderRadius: '6px',\n fontSize: '14px',\n marginBottom: '12px',\n boxSizing: 'border-box' as const,\n fontFamily: 'inherit',\n },\n textarea: {\n width: '100%',\n padding: '10px 12px',\n border: '1px solid #e0e0e0',\n borderRadius: '6px',\n fontSize: '14px',\n marginBottom: '16px',\n minHeight: '100px',\n resize: 'vertical' as const,\n boxSizing: 'border-box' as const,\n fontFamily: 'inherit',\n },\n submitButton: {\n width: '100%',\n padding: '12px',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: '500' as const,\n transition: 'opacity 0.2s',\n },\n typeButton: {\n padding: '8px 16px',\n border: '1px solid #e0e0e0',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '13px',\n backgroundColor: 'white',\n transition: 'all 0.2s',\n marginRight: '8px',\n marginBottom: '8px',\n },\n};\n\nconst positionStyles = {\n 'bottom-right': { bottom: '20px', right: '20px' },\n 'bottom-left': { bottom: '20px', left: '20px' },\n 'top-right': { top: '20px', right: '20px' },\n 'top-left': { top: '20px', left: '20px' },\n};\n\nconst feedbackTypeLabels: Record<FeedbackType, string> = {\n feedback: 'General Feedback',\n bug_report: 'Bug Report',\n feature_request: 'Feature Request',\n article_rating: 'Article Rating',\n};\n\nconst feedbackTypeEmojis: Record<FeedbackType, string> = {\n feedback: '💬',\n bug_report: '🐛',\n feature_request: '💡',\n article_rating: '⭐',\n};\n\nfunction getThemeStyles(theme: CensusTheme) {\n return {\n primaryColor: theme.primaryColor || '#000000',\n textColor: theme.textColor || '#333333',\n backgroundColor: theme.backgroundColor || '#ffffff',\n borderRadius: theme.borderRadius || '8px',\n fontFamily: theme.fontFamily || 'system-ui, -apple-system, sans-serif',\n };\n}\n\n/**\n * Floating feedback button component.\n * Displays a button that opens a modal for submitting feedback.\n *\n * @example\n * ```tsx\n * import { FeedbackButton } from '@census-ai/census-sdk/react';\n *\n * function App() {\n * return (\n * <>\n * <YourApp />\n * <FeedbackButton\n * position=\"bottom-right\"\n * text=\"Send Feedback\"\n * allowedTypes={['feedback', 'bug_report', 'feature_request']}\n * />\n * </>\n * );\n * }\n * ```\n */\nexport function FeedbackButton({\n position = 'bottom-right',\n text = 'Feedback',\n allowedTypes = ['feedback', 'bug_report', 'feature_request'],\n theme: themeProp,\n onSubmit,\n onError,\n children,\n}: FeedbackButtonProps) {\n const { theme: contextTheme } = useCensusContext();\n const { submitFeedback, isSubmitting, isSuccess, reset } = useFeedback();\n\n const [isOpen, setIsOpen] = useState(false);\n const [selectedType, setSelectedType] = useState<FeedbackType>(allowedTypes[0]);\n const [message, setMessage] = useState('');\n\n const theme = { ...contextTheme, ...themeProp };\n const themeStyles = getThemeStyles(theme);\n\n const handleOpen = useCallback(() => {\n setIsOpen(true);\n reset();\n }, [reset]);\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n setMessage('');\n setSelectedType(allowedTypes[0]);\n }, [allowedTypes]);\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n\n const feedbackData = {\n type: selectedType,\n message,\n };\n\n try {\n await submitFeedback(feedbackData);\n onSubmit?.(feedbackData);\n // Close after a short delay to show success\n setTimeout(handleClose, 1500);\n } catch (err) {\n onError?.(err instanceof Error ? err : new Error('Failed to submit feedback'));\n }\n },\n [selectedType, message, submitFeedback, onSubmit, onError, handleClose]\n );\n\n // Custom trigger\n if (children) {\n return (\n <>\n <div onClick={handleOpen} style={{ cursor: 'pointer' }}>\n {children}\n </div>\n {isOpen && (\n <FeedbackModal\n isOpen={isOpen}\n onClose={handleClose}\n selectedType={selectedType}\n onTypeChange={setSelectedType}\n allowedTypes={allowedTypes}\n message={message}\n onMessageChange={setMessage}\n onSubmit={handleSubmit}\n isSubmitting={isSubmitting}\n isSuccess={isSuccess}\n themeStyles={themeStyles}\n />\n )}\n </>\n );\n }\n\n return (\n <>\n <button\n onClick={handleOpen}\n style={{\n ...defaultStyles.button,\n ...positionStyles[position],\n backgroundColor: themeStyles.primaryColor,\n color: 'white',\n borderRadius: themeStyles.borderRadius,\n fontFamily: themeStyles.fontFamily,\n }}\n aria-label=\"Open feedback form\"\n >\n {text}\n </button>\n {isOpen && (\n <FeedbackModal\n isOpen={isOpen}\n onClose={handleClose}\n selectedType={selectedType}\n onTypeChange={setSelectedType}\n allowedTypes={allowedTypes}\n message={message}\n onMessageChange={setMessage}\n onSubmit={handleSubmit}\n isSubmitting={isSubmitting}\n isSuccess={isSuccess}\n themeStyles={themeStyles}\n />\n )}\n </>\n );\n}\n\ninterface FeedbackModalProps {\n isOpen: boolean;\n onClose: () => void;\n selectedType: FeedbackType;\n onTypeChange: (type: FeedbackType) => void;\n allowedTypes: FeedbackType[];\n message: string;\n onMessageChange: (message: string) => void;\n onSubmit: (e: React.FormEvent) => void;\n isSubmitting: boolean;\n isSuccess: boolean;\n themeStyles: ReturnType<typeof getThemeStyles>;\n}\n\nfunction FeedbackModal({\n isOpen,\n onClose,\n selectedType,\n onTypeChange,\n allowedTypes,\n message,\n onMessageChange,\n onSubmit,\n isSubmitting,\n isSuccess,\n themeStyles,\n}: FeedbackModalProps) {\n if (!isOpen) return null;\n\n if (isSuccess) {\n return (\n <div style={defaultStyles.modal} onClick={onClose}>\n <div\n style={{\n ...defaultStyles.modalContent,\n textAlign: 'center',\n fontFamily: themeStyles.fontFamily,\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <div style={{ fontSize: '48px', marginBottom: '16px' }}>🎉</div>\n <h3 style={{ margin: '0 0 8px 0', color: themeStyles.textColor }}>\n Thanks for your feedback!\n </h3>\n <p style={{ margin: 0, color: '#666' }}>We appreciate you taking the time to share.</p>\n </div>\n </div>\n );\n }\n\n return (\n <div style={defaultStyles.modal} onClick={onClose}>\n <div\n style={{\n ...defaultStyles.modalContent,\n fontFamily: themeStyles.fontFamily,\n }}\n onClick={(e) => e.stopPropagation()}\n >\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '20px',\n }}\n >\n <h3 style={{ margin: 0, color: themeStyles.textColor }}>Send Feedback</h3>\n <button\n onClick={onClose}\n style={{\n background: 'none',\n border: 'none',\n fontSize: '24px',\n cursor: 'pointer',\n color: '#999',\n padding: '0',\n lineHeight: '1',\n }}\n aria-label=\"Close\"\n >\n ×\n </button>\n </div>\n\n <form onSubmit={onSubmit}>\n {/* Feedback type selection */}\n <div style={{ marginBottom: '16px' }}>\n <label\n style={{\n display: 'block',\n marginBottom: '8px',\n fontSize: '13px',\n color: '#666',\n fontWeight: '500',\n }}\n >\n What kind of feedback?\n </label>\n <div style={{ display: 'flex', flexWrap: 'wrap' }}>\n {allowedTypes.map((type) => (\n <button\n key={type}\n type=\"button\"\n onClick={() => onTypeChange(type)}\n style={{\n ...defaultStyles.typeButton,\n backgroundColor: selectedType === type ? themeStyles.primaryColor : 'white',\n color: selectedType === type ? 'white' : themeStyles.textColor,\n borderColor: selectedType === type ? themeStyles.primaryColor : '#e0e0e0',\n }}\n >\n {feedbackTypeEmojis[type]} {feedbackTypeLabels[type]}\n </button>\n ))}\n </div>\n </div>\n\n {/* Message input */}\n <div>\n <label\n style={{\n display: 'block',\n marginBottom: '8px',\n fontSize: '13px',\n color: '#666',\n fontWeight: '500',\n }}\n >\n Your message\n </label>\n <textarea\n value={message}\n onChange={(e) => onMessageChange(e.target.value)}\n placeholder={\n selectedType === 'bug_report'\n ? 'Describe the bug and steps to reproduce...'\n : selectedType === 'feature_request'\n ? 'Describe the feature you would like...'\n : 'Share your thoughts...'\n }\n style={defaultStyles.textarea}\n required\n />\n </div>\n\n <button\n type=\"submit\"\n disabled={isSubmitting || !message.trim()}\n style={{\n ...defaultStyles.submitButton,\n backgroundColor: themeStyles.primaryColor,\n color: 'white',\n opacity: isSubmitting || !message.trim() ? 0.6 : 1,\n cursor: isSubmitting || !message.trim() ? 'not-allowed' : 'pointer',\n }}\n >\n {isSubmitting ? 'Sending...' : 'Send Feedback'}\n </button>\n </form>\n </div>\n </div>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { useArticles, useArticle } from '../hooks';\nimport { useCensusContext } from '../context';\nimport type { KnowledgeBaseProps, Article, CensusTheme } from '../../types';\n\nconst defaultStyles = {\n container: {\n fontFamily: 'system-ui, -apple-system, sans-serif',\n maxWidth: '800px',\n },\n searchInput: {\n width: '100%',\n padding: '12px 16px',\n border: '1px solid #e0e0e0',\n borderRadius: '8px',\n fontSize: '15px',\n marginBottom: '24px',\n boxSizing: 'border-box' as const,\n },\n categoryButton: {\n padding: '8px 16px',\n border: '1px solid #e0e0e0',\n borderRadius: '20px',\n cursor: 'pointer',\n fontSize: '13px',\n backgroundColor: 'white',\n transition: 'all 0.2s',\n marginRight: '8px',\n marginBottom: '8px',\n },\n articleCard: {\n padding: '20px',\n border: '1px solid #e0e0e0',\n borderRadius: '8px',\n marginBottom: '12px',\n cursor: 'pointer',\n transition: 'box-shadow 0.2s, border-color 0.2s',\n backgroundColor: 'white',\n },\n articleTitle: {\n margin: '0 0 8px 0',\n fontSize: '16px',\n fontWeight: '600' as const,\n },\n articleDescription: {\n margin: 0,\n fontSize: '14px',\n color: '#666',\n lineHeight: 1.5,\n },\n articleMeta: {\n display: 'flex',\n gap: '16px',\n marginTop: '12px',\n fontSize: '12px',\n color: '#999',\n },\n backButton: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n padding: '8px 0',\n border: 'none',\n background: 'none',\n cursor: 'pointer',\n fontSize: '14px',\n color: '#666',\n marginBottom: '16px',\n },\n articleContent: {\n lineHeight: 1.7,\n fontSize: '15px',\n },\n loading: {\n textAlign: 'center' as const,\n padding: '40px',\n color: '#666',\n },\n error: {\n padding: '20px',\n backgroundColor: '#fef2f2',\n borderRadius: '8px',\n color: '#b91c1c',\n textAlign: 'center' as const,\n },\n empty: {\n textAlign: 'center' as const,\n padding: '40px',\n color: '#666',\n },\n};\n\nfunction getThemeStyles(theme: CensusTheme) {\n return {\n primaryColor: theme.primaryColor || '#000000',\n textColor: theme.textColor || '#333333',\n backgroundColor: theme.backgroundColor || '#ffffff',\n borderRadius: theme.borderRadius || '8px',\n fontFamily: theme.fontFamily || 'system-ui, -apple-system, sans-serif',\n };\n}\n\n/**\n * Embeddable knowledge base component.\n * Displays a searchable list of articles with full article view.\n *\n * @example\n * ```tsx\n * import { KnowledgeBase } from '@census-ai/census-sdk/react';\n *\n * function HelpPage() {\n * return (\n * <div className=\"help-container\">\n * <h1>Help Center</h1>\n * <KnowledgeBase\n * showSearch={true}\n * showCategories={true}\n * />\n * </div>\n * );\n * }\n * ```\n */\nexport function KnowledgeBase({\n showSearch = true,\n showCategories = true,\n defaultCategory,\n theme: themeProp,\n className,\n onArticleView,\n}: KnowledgeBaseProps) {\n const { theme: contextTheme } = useCensusContext();\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedCategory, setSelectedCategory] = useState<string | undefined>(defaultCategory);\n const [selectedArticleSlug, setSelectedArticleSlug] = useState<string | null>(null);\n\n const theme = { ...contextTheme, ...themeProp };\n const themeStyles = getThemeStyles(theme);\n\n const {\n articles,\n isLoading: isLoadingArticles,\n error: articlesError,\n } = useArticles({\n category: selectedCategory,\n search: searchQuery || undefined,\n });\n\n const {\n article: selectedArticle,\n isLoading: isLoadingArticle,\n error: articleError,\n } = useArticle(selectedArticleSlug || '');\n\n // Extract unique categories\n const categories = useMemo(() => {\n const cats = new Set<string>();\n articles.forEach((article) => {\n if (article.category) {\n cats.add(article.category);\n }\n });\n return Array.from(cats).sort();\n }, [articles]);\n\n const handleArticleClick = (article: Article) => {\n setSelectedArticleSlug(article.slug);\n onArticleView?.(article);\n };\n\n const handleBack = () => {\n setSelectedArticleSlug(null);\n };\n\n // Article detail view\n if (selectedArticleSlug) {\n if (isLoadingArticle) {\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n <div style={defaultStyles.loading}>Loading article...</div>\n </div>\n );\n }\n\n if (articleError) {\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n <button onClick={handleBack} style={defaultStyles.backButton}>\n ← Back to articles\n </button>\n <div style={defaultStyles.error}>Failed to load article. Please try again.</div>\n </div>\n );\n }\n\n if (!selectedArticle) {\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n <button onClick={handleBack} style={defaultStyles.backButton}>\n ← Back to articles\n </button>\n <div style={defaultStyles.empty}>Article not found.</div>\n </div>\n );\n }\n\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n <button onClick={handleBack} style={defaultStyles.backButton}>\n ← Back to articles\n </button>\n <article>\n <h1 style={{ margin: '0 0 16px 0', color: themeStyles.textColor }}>\n {selectedArticle.title}\n </h1>\n {selectedArticle.read_time_minutes && (\n <div style={{ fontSize: '14px', color: '#666', marginBottom: '24px' }}>\n {selectedArticle.read_time_minutes} min read\n </div>\n )}\n {selectedArticle.content_html ? (\n <div\n style={{ ...defaultStyles.articleContent, color: themeStyles.textColor }}\n dangerouslySetInnerHTML={{ __html: selectedArticle.content_html }}\n />\n ) : (\n <div style={{ ...defaultStyles.articleContent, color: themeStyles.textColor }}>\n {typeof selectedArticle.content === 'string'\n ? selectedArticle.content\n : 'No content available.'}\n </div>\n )}\n </article>\n </div>\n );\n }\n\n // Articles list view\n return (\n <div style={{ ...defaultStyles.container, fontFamily: themeStyles.fontFamily }} className={className}>\n {/* Search */}\n {showSearch && (\n <input\n type=\"text\"\n placeholder=\"Search articles...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n style={defaultStyles.searchInput}\n />\n )}\n\n {/* Categories */}\n {showCategories && categories.length > 0 && (\n <div style={{ marginBottom: '24px' }}>\n <button\n onClick={() => setSelectedCategory(undefined)}\n style={{\n ...defaultStyles.categoryButton,\n backgroundColor: !selectedCategory ? themeStyles.primaryColor : 'white',\n color: !selectedCategory ? 'white' : themeStyles.textColor,\n borderColor: !selectedCategory ? themeStyles.primaryColor : '#e0e0e0',\n }}\n >\n All\n </button>\n {categories.map((category) => (\n <button\n key={category}\n onClick={() => setSelectedCategory(category)}\n style={{\n ...defaultStyles.categoryButton,\n backgroundColor: selectedCategory === category ? themeStyles.primaryColor : 'white',\n color: selectedCategory === category ? 'white' : themeStyles.textColor,\n borderColor: selectedCategory === category ? themeStyles.primaryColor : '#e0e0e0',\n }}\n >\n {category}\n </button>\n ))}\n </div>\n )}\n\n {/* Loading */}\n {isLoadingArticles && <div style={defaultStyles.loading}>Loading articles...</div>}\n\n {/* Error */}\n {articlesError && (\n <div style={defaultStyles.error}>Failed to load articles. Please try again.</div>\n )}\n\n {/* Empty state */}\n {!isLoadingArticles && !articlesError && articles.length === 0 && (\n <div style={defaultStyles.empty}>\n {searchQuery\n ? `No articles found for \"${searchQuery}\"`\n : 'No articles available yet.'}\n </div>\n )}\n\n {/* Articles list */}\n {!isLoadingArticles && !articlesError && articles.length > 0 && (\n <div>\n {articles.map((article) => (\n <div\n key={article.id}\n onClick={() => handleArticleClick(article)}\n style={defaultStyles.articleCard}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n handleArticleClick(article);\n }\n }}\n >\n <h3 style={{ ...defaultStyles.articleTitle, color: themeStyles.textColor }}>\n {article.title}\n </h3>\n {article.seo_description && (\n <p style={defaultStyles.articleDescription}>{article.seo_description}</p>\n )}\n <div style={defaultStyles.articleMeta}>\n {article.category && <span>{article.category}</span>}\n {article.read_time_minutes && <span>{article.read_time_minutes} min read</span>}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { useRequests, useVote, useFeedback } from '../hooks';\nimport { useCensusContext } from '../context';\nimport type { RequestsProps, Request, FeedbackType } from '../../types';\n\nconst defaultStyles = {\n container: {\n fontFamily: 'system-ui, -apple-system, sans-serif',\n },\n list: {\n listStyle: 'none',\n padding: 0,\n margin: 0,\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '12px',\n },\n card: {\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n padding: '16px',\n backgroundColor: '#ffffff',\n cursor: 'pointer',\n transition: 'border-color 0.15s, box-shadow 0.15s',\n },\n cardHover: {\n borderColor: '#d1d5db',\n boxShadow: '0 1px 3px rgba(0, 0, 0, 0.1)',\n },\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '8px',\n marginBottom: '8px',\n },\n badges: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n },\n badge: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n padding: '2px 8px',\n borderRadius: '9999px',\n fontSize: '12px',\n fontWeight: 500,\n },\n message: {\n fontSize: '14px',\n color: '#111827',\n margin: 0,\n lineHeight: 1.5,\n },\n meta: {\n display: 'flex',\n gap: '12px',\n marginTop: '8px',\n fontSize: '12px',\n color: '#6b7280',\n },\n empty: {\n textAlign: 'center' as const,\n padding: '32px 16px',\n color: '#6b7280',\n },\n emptyIcon: {\n width: '48px',\n height: '48px',\n margin: '0 auto 12px',\n color: '#d1d5db',\n },\n loading: {\n textAlign: 'center' as const,\n padding: '24px',\n color: '#6b7280',\n },\n error: {\n textAlign: 'center' as const,\n padding: '24px',\n color: '#dc2626',\n },\n voteButton: {\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n justifyContent: 'center',\n padding: '8px',\n borderRadius: '6px',\n border: '1px solid #e5e7eb',\n backgroundColor: '#ffffff',\n cursor: 'pointer',\n minWidth: '48px',\n transition: 'all 0.15s',\n },\n voteButtonActive: {\n backgroundColor: '#dbeafe',\n borderColor: '#2563eb',\n color: '#2563eb',\n },\n voteCount: {\n fontSize: '14px',\n fontWeight: 600,\n color: '#111827',\n },\n cardWithVote: {\n display: 'flex',\n gap: '12px',\n },\n cardContent: {\n flex: 1,\n },\n form: {\n marginBottom: '16px',\n padding: '16px',\n backgroundColor: '#f9fafb',\n borderRadius: '8px',\n border: '1px solid #e5e7eb',\n },\n formHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '12px',\n },\n formTitle: {\n fontSize: '14px',\n fontWeight: 500,\n color: '#111827',\n margin: 0,\n },\n typeSelector: {\n display: 'flex',\n gap: '8px',\n marginBottom: '12px',\n },\n typeButton: {\n padding: '6px 12px',\n borderRadius: '6px',\n border: '1px solid #e5e7eb',\n backgroundColor: '#ffffff',\n fontSize: '13px',\n cursor: 'pointer',\n transition: 'all 0.15s',\n },\n typeButtonActive: {\n backgroundColor: '#111827',\n borderColor: '#111827',\n color: '#ffffff',\n },\n textarea: {\n width: '100%',\n padding: '10px 12px',\n borderRadius: '6px',\n border: '1px solid #e5e7eb',\n fontSize: '14px',\n resize: 'vertical' as const,\n minHeight: '80px',\n fontFamily: 'inherit',\n marginBottom: '12px',\n },\n submitButton: {\n padding: '8px 16px',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: '#111827',\n color: '#ffffff',\n fontSize: '14px',\n fontWeight: 500,\n cursor: 'pointer',\n transition: 'opacity 0.15s',\n },\n successMessage: {\n padding: '12px',\n backgroundColor: '#d1fae5',\n borderRadius: '6px',\n color: '#059669',\n fontSize: '14px',\n marginBottom: '16px',\n },\n ownBadge: {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '2px 6px',\n borderRadius: '9999px',\n fontSize: '11px',\n fontWeight: 500,\n backgroundColor: '#f3f4f6',\n color: '#6b7280',\n marginLeft: '6px',\n },\n};\n\nconst typeConfig: Record<FeedbackType, { label: string; color: string; bg: string }> = {\n feedback: { label: 'Feedback', color: '#2563eb', bg: '#dbeafe' },\n bug_report: { label: 'Bug Report', color: '#dc2626', bg: '#fee2e2' },\n feature_request: { label: 'Feature Request', color: '#d97706', bg: '#fef3c7' },\n article_rating: { label: 'Article Rating', color: '#7c3aed', bg: '#ede9fe' },\n};\n\nconst statusConfig: Record<string, { label: string; color: string; bg: string }> = {\n new: { label: 'New', color: '#6b7280', bg: '#f3f4f6' },\n reviewed: { label: 'Reviewed', color: '#2563eb', bg: '#dbeafe' },\n in_progress: { label: 'In Progress', color: '#d97706', bg: '#fef3c7' },\n resolved: { label: 'Resolved', color: '#059669', bg: '#d1fae5' },\n closed: { label: 'Closed', color: '#6b7280', bg: '#f3f4f6' },\n};\n\nfunction formatDate(dateString: string): string {\n const date = new Date(dateString);\n return date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n}\n\nconst FORM_TYPES: { value: FeedbackType; label: string }[] = [\n { value: 'feedback', label: 'Feedback' },\n { value: 'bug_report', label: 'Bug' },\n { value: 'feature_request', label: 'Feature' },\n];\n\n/**\n * Requests component for displaying user's submitted feedback and requests.\n *\n * @example\n * ```tsx\n * import { Requests } from '@census-ai/census-sdk/react';\n *\n * function MyRequestsPage() {\n * return (\n * <div>\n * <h1>My Requests</h1>\n * <Requests onRequestClick={(req) => console.log('Clicked:', req)} />\n * </div>\n * );\n * }\n * ```\n */\nexport function Requests({\n status,\n type,\n limit = 50,\n className,\n showEmptyState = true,\n onRequestClick,\n}: RequestsProps) {\n const { isIdentified } = useCensusContext();\n const [hoveredId, setHoveredId] = useState<string | null>(null);\n const [showForm, setShowForm] = useState(false);\n const [formType, setFormType] = useState<FeedbackType>('feedback');\n const [formMessage, setFormMessage] = useState('');\n const [localVotes, setLocalVotes] = useState<Record<string, { count: number; hasVoted: boolean }>>({});\n\n const { requests, isLoading, error, refetch, settings } = useRequests({\n status,\n type,\n limit,\n });\n\n const { vote, isVoting } = useVote();\n const { submitFeedback, isSubmitting, isSuccess, reset } = useFeedback();\n\n const handleRequestClick = useCallback(\n (request: Request) => {\n onRequestClick?.(request);\n },\n [onRequestClick]\n );\n\n const handleVote = useCallback(\n async (feedbackId: string, currentCount: number, currentHasVoted: boolean) => {\n if (isVoting) return;\n\n // Optimistic update\n setLocalVotes((prev) => ({\n ...prev,\n [feedbackId]: {\n count: currentHasVoted ? currentCount - 1 : currentCount + 1,\n hasVoted: !currentHasVoted,\n },\n }));\n\n try {\n const result = await vote(feedbackId);\n // Update with actual result\n setLocalVotes((prev) => ({\n ...prev,\n [feedbackId]: {\n count: result.vote_count,\n hasVoted: result.user_has_voted,\n },\n }));\n } catch {\n // Revert on error\n setLocalVotes((prev) => ({\n ...prev,\n [feedbackId]: {\n count: currentCount,\n hasVoted: currentHasVoted,\n },\n }));\n }\n },\n [vote, isVoting]\n );\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n if (!formMessage.trim() || isSubmitting) return;\n\n try {\n await submitFeedback({\n type: formType,\n message: formMessage,\n });\n setFormMessage('');\n setShowForm(false);\n // Refetch after a short delay to allow DB to update\n setTimeout(() => {\n refetch();\n reset();\n }, 500);\n } catch {\n // Error is handled by useFeedback hook\n }\n },\n [formType, formMessage, isSubmitting, submitFeedback, refetch, reset]\n );\n\n const getVoteInfo = (request: Request) => {\n const local = localVotes[request.id];\n return {\n count: local?.count ?? request.vote_count,\n hasVoted: local?.hasVoted ?? request.user_has_voted,\n };\n };\n\n if (!isIdentified) {\n return showEmptyState ? (\n <div style={defaultStyles.empty}>\n <p>Please sign in to view your requests.</p>\n </div>\n ) : null;\n }\n\n if (isLoading) {\n return (\n <div style={defaultStyles.loading}>\n <p>Loading requests...</p>\n </div>\n );\n }\n\n if (error) {\n return (\n <div style={defaultStyles.error}>\n <p>Failed to load requests. <button onClick={refetch} style={{ color: 'inherit', textDecoration: 'underline', background: 'none', border: 'none', cursor: 'pointer' }}>Try again</button></p>\n </div>\n );\n }\n\n // Request creation form component\n const renderForm = () => {\n if (!settings.allowRequestCreation) return null;\n\n if (isSuccess) {\n return (\n <div style={defaultStyles.successMessage}>\n Thanks for your feedback! It has been submitted.\n </div>\n );\n }\n\n if (!showForm) {\n return (\n <button\n onClick={() => setShowForm(true)}\n style={{\n ...defaultStyles.submitButton,\n marginBottom: '16px',\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n }}\n >\n <svg width=\"14\" height=\"14\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n </svg>\n New Request\n </button>\n );\n }\n\n return (\n <form onSubmit={handleSubmit} style={defaultStyles.form}>\n <div style={defaultStyles.formHeader}>\n <p style={defaultStyles.formTitle}>Submit a request</p>\n <button\n type=\"button\"\n onClick={() => setShowForm(false)}\n style={{ background: 'none', border: 'none', cursor: 'pointer', color: '#6b7280' }}\n >\n ✕\n </button>\n </div>\n <div style={defaultStyles.typeSelector}>\n {FORM_TYPES.map((t) => (\n <button\n key={t.value}\n type=\"button\"\n onClick={() => setFormType(t.value)}\n style={{\n ...defaultStyles.typeButton,\n ...(formType === t.value ? defaultStyles.typeButtonActive : {}),\n }}\n >\n {t.label}\n </button>\n ))}\n </div>\n <textarea\n value={formMessage}\n onChange={(e) => setFormMessage(e.target.value)}\n placeholder=\"Describe your request...\"\n style={defaultStyles.textarea}\n required\n />\n <button\n type=\"submit\"\n style={{\n ...defaultStyles.submitButton,\n opacity: isSubmitting ? 0.6 : 1,\n }}\n disabled={isSubmitting}\n >\n {isSubmitting ? 'Submitting...' : 'Submit'}\n </button>\n </form>\n );\n };\n\n if (requests.length === 0 && showEmptyState) {\n return (\n <div style={defaultStyles.container} className={className}>\n {renderForm()}\n <div style={defaultStyles.empty}>\n <svg\n style={defaultStyles.emptyIcon}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n d=\"M8 10h.01M12 10h.01M16 10h.01M9 16H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-5l-5 5v-5z\"\n />\n </svg>\n <p style={{ margin: 0, fontWeight: 500, color: '#111827' }}>No requests yet</p>\n <p style={{ margin: '8px 0 0', fontSize: '14px' }}>\n {settings.allowRequestCreation\n ? 'Submit your first request above.'\n : 'When you submit feedback, bug reports, or feature requests, they\\'ll appear here.'}\n </p>\n </div>\n </div>\n );\n }\n\n const canVote = settings.allowVoting && settings.feedbackVisibility !== 'own';\n\n return (\n <div style={defaultStyles.container} className={className}>\n {renderForm()}\n <ul style={defaultStyles.list}>\n {requests.map((request) => {\n const typeInfo = typeConfig[request.feedback_type] || typeConfig.feedback;\n const statusInfo = statusConfig[request.status] || statusConfig.new;\n const isHovered = hoveredId === request.id;\n const voteInfo = getVoteInfo(request);\n\n return (\n <li\n key={request.id}\n style={{\n ...defaultStyles.card,\n ...(isHovered ? defaultStyles.cardHover : {}),\n }}\n onMouseEnter={() => setHoveredId(request.id)}\n onMouseLeave={() => setHoveredId(null)}\n >\n <div style={canVote ? defaultStyles.cardWithVote : undefined}>\n {canVote && (\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleVote(request.id, voteInfo.count, voteInfo.hasVoted);\n }}\n disabled={isVoting}\n style={{\n ...defaultStyles.voteButton,\n ...(voteInfo.hasVoted ? defaultStyles.voteButtonActive : {}),\n }}\n title={voteInfo.hasVoted ? 'Remove vote' : 'Upvote this request'}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill={voteInfo.hasVoted ? 'currentColor' : 'none'}\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n d=\"M5 15l7-7 7 7\"\n />\n </svg>\n <span style={{\n ...defaultStyles.voteCount,\n ...(voteInfo.hasVoted ? { color: '#2563eb' } : {}),\n }}>\n {voteInfo.count}\n </span>\n </button>\n )}\n <div\n style={canVote ? defaultStyles.cardContent : undefined}\n onClick={() => handleRequestClick(request)}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n handleRequestClick(request);\n }\n }}\n >\n <div style={defaultStyles.header}>\n <div style={defaultStyles.badges}>\n <span\n style={{\n ...defaultStyles.badge,\n color: typeInfo.color,\n backgroundColor: typeInfo.bg,\n }}\n >\n {typeInfo.label}\n </span>\n <span\n style={{\n ...defaultStyles.badge,\n color: statusInfo.color,\n backgroundColor: statusInfo.bg,\n }}\n >\n {statusInfo.label}\n </span>\n {request.is_own && (\n <span style={defaultStyles.ownBadge}>You</span>\n )}\n </div>\n </div>\n <p style={defaultStyles.message}>\n {request.message || 'No message provided'}\n </p>\n <div style={defaultStyles.meta}>\n <span>{formatDate(request.created_at)}</span>\n {!canVote && voteInfo.count > 0 && (\n <span>{voteInfo.count} vote{voteInfo.count !== 1 ? 's' : ''}</span>\n )}\n {request.page_url && (\n <span style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', maxWidth: '200px' }}>\n From: {request.page_url}\n </span>\n )}\n </div>\n </div>\n </div>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useMemo, useRef, useEffect, useCallback } from 'react';\nimport { useArticles, useArticle, useRequests, useFeedback, useFeatureGroups } from '../hooks';\nimport { useCensusContext } from '../context';\nimport type { Article, FeedbackType } from '../../types';\n\nexport type HelpCenterTab = 'articles' | 'requests';\n\nexport interface HelpCenterProps {\n tabs?: HelpCenterTab[];\n defaultTab?: HelpCenterTab;\n tabLabels?: Partial<Record<HelpCenterTab, string>>;\n showSearch?: boolean;\n className?: string;\n}\n\nconst defaultTabLabels: Record<HelpCenterTab, string> = {\n articles: 'Documentation',\n requests: 'My Requests',\n};\n\nconst feedbackTypeConfig: Record<FeedbackType, { label: string; color: string; bg: string }> = {\n feedback: { label: 'Feedback', color: '#2563eb', bg: '#dbeafe' },\n bug_report: { label: 'Bug Report', color: '#dc2626', bg: '#fee2e2' },\n feature_request: { label: 'Feature Request', color: '#d97706', bg: '#fef3c7' },\n article_rating: { label: 'Article Rating', color: '#7c3aed', bg: '#ede9fe' },\n};\n\nconst statusConfig: Record<string, { label: string; color: string; bg: string }> = {\n new: { label: 'New', color: '#6b7280', bg: '#f3f4f6' },\n reviewed: { label: 'Reviewed', color: '#2563eb', bg: '#dbeafe' },\n in_progress: { label: 'In Progress', color: '#d97706', bg: '#fef3c7' },\n resolved: { label: 'Resolved', color: '#059669', bg: '#d1fae5' },\n closed: { label: 'Closed', color: '#6b7280', bg: '#f3f4f6' },\n};\n\nfunction formatDate(dateString: string): string {\n return new Date(dateString).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n}\n\nconst FORM_TYPES: { value: FeedbackType; label: string }[] = [\n { value: 'feedback', label: 'Feedback' },\n { value: 'bug_report', label: 'Bug' },\n { value: 'feature_request', label: 'Feature' },\n];\n\n// Icons as inline SVGs\nconst SearchIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\" />\n </svg>\n);\n\nconst BookIcon = () => (\n <svg width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253\" />\n </svg>\n);\n\nconst ChevronRightIcon = () => (\n <svg width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n);\n\nconst ChevronDownIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n);\n\nconst ArrowLeftIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 19l-7-7m0 0l7-7m-7 7h18\" />\n </svg>\n);\n\nconst ClockIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n);\n\nconst LayersIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10\" />\n </svg>\n);\n\nconst MessageIcon = () => (\n <svg width=\"48\" height=\"48\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M8 10h.01M12 10h.01M16 10h.01M9 16H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-5l-5 5v-5z\" />\n </svg>\n);\n\nconst PlusIcon = () => (\n <svg width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n </svg>\n);\n\nconst LoaderIcon = () => (\n <svg width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" style={{ animation: 'spin 1s linear infinite' }}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" />\n </svg>\n);\n\n// Theme colors matching /docs design\nconst theme = {\n primary: '#c45a2c',\n primaryHover: '#a84a24',\n primaryLight: 'rgba(196, 90, 44, 0.1)',\n primaryLightHover: 'rgba(196, 90, 44, 0.2)',\n background: '#faf9f7',\n surface: '#ffffff',\n border: '#e8e4df',\n borderLight: '#f0ece8',\n text: '#111827',\n textMuted: '#6b7280',\n textLight: '#9ca3af',\n};\n\nconst styles = {\n container: {\n fontFamily: 'system-ui, -apple-system, sans-serif',\n minHeight: '400px',\n },\n grid: {\n display: 'grid',\n gridTemplateColumns: '240px 1fr',\n gap: '48px',\n },\n sidebar: {\n position: 'sticky' as const,\n top: '24px',\n height: 'fit-content',\n },\n main: {\n minWidth: 0,\n },\n tabs: {\n display: 'flex',\n borderBottom: `1px solid ${theme.border}`,\n marginBottom: '32px',\n gap: '0',\n },\n tab: {\n padding: '12px 24px',\n fontSize: '14px',\n fontWeight: 500,\n border: 'none',\n borderBottom: '2px solid transparent',\n cursor: 'pointer',\n transition: 'all 0.15s',\n backgroundColor: 'transparent',\n color: theme.textMuted,\n marginBottom: '-1px',\n },\n tabActive: {\n color: theme.primary,\n borderBottomColor: theme.primary,\n },\n searchContainer: {\n position: 'relative' as const,\n marginBottom: '24px',\n },\n searchIcon: {\n position: 'absolute' as const,\n left: '12px',\n top: '50%',\n transform: 'translateY(-50%)',\n color: theme.textLight,\n },\n searchInput: {\n width: '100%',\n padding: '10px 12px 10px 36px',\n fontSize: '14px',\n border: `1px solid ${theme.border}`,\n borderRadius: '8px',\n outline: 'none',\n backgroundColor: theme.surface,\n boxSizing: 'border-box' as const,\n },\n sectionTitle: {\n fontSize: '11px',\n fontWeight: 600,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n color: theme.textMuted,\n marginBottom: '12px',\n marginTop: '24px',\n },\n navList: {\n listStyle: 'none',\n padding: 0,\n margin: 0,\n },\n navItem: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n padding: '8px 12px',\n fontSize: '14px',\n color: theme.textMuted,\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: '8px',\n cursor: 'pointer',\n textAlign: 'left' as const,\n transition: 'all 0.15s',\n },\n navItemActive: {\n backgroundColor: theme.borderLight,\n color: theme.text,\n fontWeight: 500,\n },\n subNav: {\n marginLeft: '24px',\n marginTop: '4px',\n paddingLeft: '12px',\n borderLeft: `1px solid ${theme.border}`,\n },\n articleGrid: {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(300px, 1fr))',\n gap: '16px',\n },\n articleCard: {\n display: 'flex',\n alignItems: 'flex-start',\n gap: '16px',\n padding: '16px',\n border: `1px solid ${theme.border}`,\n borderRadius: '12px',\n backgroundColor: theme.surface,\n cursor: 'pointer',\n transition: 'all 0.2s ease',\n textAlign: 'left' as const,\n },\n articleCardHover: {\n borderColor: 'rgba(196, 90, 44, 0.3)',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.05)',\n },\n articleIcon: {\n flexShrink: 0,\n width: '40px',\n height: '40px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: theme.primaryLight,\n borderRadius: '10px',\n color: theme.primary,\n transition: 'background-color 0.2s',\n },\n articleIconHover: {\n backgroundColor: theme.primaryLightHover,\n },\n articleContent: {\n flex: 1,\n minWidth: 0,\n },\n articleTitle: {\n fontSize: '15px',\n fontWeight: 500,\n color: theme.text,\n margin: 0,\n lineHeight: 1.4,\n },\n articleDesc: {\n fontSize: '13px',\n color: theme.textMuted,\n margin: '6px 0 0',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical' as const,\n overflow: 'hidden',\n lineHeight: 1.5,\n },\n articleMeta: {\n fontSize: '12px',\n color: theme.textLight,\n marginTop: '10px',\n },\n articleChevron: {\n flexShrink: 0,\n color: theme.textLight,\n transition: 'color 0.2s',\n },\n articleChevronHover: {\n color: theme.textMuted,\n },\n backButton: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 0',\n fontSize: '14px',\n color: theme.textMuted,\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'pointer',\n marginBottom: '24px',\n transition: 'color 0.15s',\n },\n articleDetail: {\n maxWidth: '720px',\n },\n articleDetailTitle: {\n fontSize: '32px',\n fontWeight: 700,\n color: theme.text,\n margin: 0,\n lineHeight: 1.2,\n },\n articleDetailMeta: {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: '14px',\n color: theme.textMuted,\n marginTop: '12px',\n },\n articleDetailContent: {\n marginTop: '32px',\n fontSize: '16px',\n lineHeight: 1.75,\n color: '#374151',\n },\n emptyState: {\n textAlign: 'center' as const,\n padding: '64px 24px',\n color: theme.textMuted,\n },\n emptyIcon: {\n color: theme.border,\n marginBottom: '16px',\n },\n emptyTitle: {\n fontSize: '18px',\n fontWeight: 600,\n color: theme.text,\n margin: '0 0 8px',\n },\n emptyText: {\n fontSize: '14px',\n margin: 0,\n color: theme.textMuted,\n },\n loading: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '12px',\n padding: '64px',\n color: theme.textMuted,\n fontSize: '14px',\n },\n // Request styles\n requestCard: {\n border: `1px solid ${theme.border}`,\n borderRadius: '12px',\n padding: '20px',\n backgroundColor: theme.surface,\n marginBottom: '12px',\n transition: 'border-color 0.2s',\n },\n requestHeader: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '12px',\n },\n badge: {\n display: 'inline-flex',\n alignItems: 'center',\n padding: '4px 10px',\n borderRadius: '9999px',\n fontSize: '12px',\n fontWeight: 500,\n },\n requestMessage: {\n fontSize: '15px',\n color: theme.text,\n margin: 0,\n lineHeight: 1.6,\n },\n requestMeta: {\n display: 'flex',\n gap: '12px',\n marginTop: '12px',\n fontSize: '13px',\n color: theme.textMuted,\n },\n form: {\n padding: '20px',\n backgroundColor: theme.borderLight,\n borderRadius: '12px',\n border: `1px solid ${theme.border}`,\n marginBottom: '24px',\n },\n formHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: '16px',\n },\n formTitle: {\n fontSize: '16px',\n fontWeight: 600,\n color: theme.text,\n margin: 0,\n },\n typeSelector: {\n display: 'flex',\n gap: '8px',\n marginBottom: '16px',\n },\n typeButton: {\n padding: '8px 16px',\n borderRadius: '8px',\n border: `1px solid ${theme.border}`,\n backgroundColor: theme.surface,\n fontSize: '14px',\n cursor: 'pointer',\n transition: 'all 0.15s',\n fontWeight: 500,\n },\n typeButtonActive: {\n backgroundColor: theme.primary,\n borderColor: theme.primary,\n color: '#ffffff',\n },\n textarea: {\n width: '100%',\n padding: '12px 14px',\n borderRadius: '8px',\n border: `1px solid ${theme.border}`,\n fontSize: '14px',\n resize: 'vertical' as const,\n minHeight: '100px',\n fontFamily: 'inherit',\n marginBottom: '16px',\n boxSizing: 'border-box' as const,\n backgroundColor: theme.surface,\n },\n submitButton: {\n padding: '10px 20px',\n borderRadius: '8px',\n border: 'none',\n backgroundColor: theme.primary,\n color: '#ffffff',\n fontSize: '14px',\n fontWeight: 500,\n cursor: 'pointer',\n transition: 'all 0.15s',\n },\n newRequestButton: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '8px',\n padding: '10px 20px',\n borderRadius: '8px',\n border: 'none',\n backgroundColor: theme.primary,\n color: '#ffffff',\n fontSize: '14px',\n fontWeight: 500,\n cursor: 'pointer',\n marginBottom: '24px',\n transition: 'background-color 0.15s',\n },\n successMessage: {\n padding: '14px 16px',\n backgroundColor: '#d1fae5',\n borderRadius: '8px',\n color: '#059669',\n fontSize: '14px',\n marginBottom: '16px',\n fontWeight: 500,\n },\n};\n\n// Add keyframes for spinner and hover styles\nconst spinnerStyles = `\n @keyframes spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n\n .census-article-card:hover {\n border-color: rgba(196, 90, 44, 0.3) !important;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);\n }\n\n .census-article-card:hover .census-article-icon {\n background-color: rgba(196, 90, 44, 0.2) !important;\n }\n\n .census-article-card:hover .census-article-chevron {\n color: #6b7280 !important;\n }\n\n .census-nav-item:hover {\n background-color: #f0ece8 !important;\n color: #111827 !important;\n }\n\n .census-back-btn:hover {\n color: #111827 !important;\n }\n\n .census-submit-btn:hover {\n background-color: #a84a24 !important;\n }\n\n .census-new-request-btn:hover {\n background-color: #a84a24 !important;\n }\n\n .census-tab:hover {\n color: #111827 !important;\n }\n\n .census-search-input:focus {\n border-color: #c45a2c !important;\n outline: none !important;\n box-shadow: 0 0 0 1px #c45a2c !important;\n }\n`;\n\nexport function HelpCenter({\n tabs = ['articles', 'requests'],\n defaultTab = 'articles',\n tabLabels = {},\n showSearch = true,\n className,\n}: HelpCenterProps) {\n const [activeTab, setActiveTab] = useState<HelpCenterTab>(defaultTab);\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedArticle, setSelectedArticle] = useState<Article | null>(null);\n const [expandedGroups, setExpandedGroups] = useState<Set<string>>(new Set());\n const [selectedFeatureId, setSelectedFeatureId] = useState<string | null>(null);\n const [showForm, setShowForm] = useState(false);\n const [formType, setFormType] = useState<FeedbackType>('feedback');\n const [formMessage, setFormMessage] = useState('');\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const { isIdentified } = useCensusContext();\n const { articles, isLoading: articlesLoading } = useArticles({ search: searchQuery || undefined });\n const { article: fullArticle, isLoading: articleLoading } = useArticle(selectedArticle?.slug || '');\n const { requests, isLoading: requestsLoading, refetch: refetchRequests, settings } = useRequests({ limit: 50 });\n const { featureGroups, isLoading: groupsLoading } = useFeatureGroups();\n const { submitFeedback, isSubmitting, isSuccess, reset } = useFeedback();\n\n const mergedLabels = { ...defaultTabLabels, ...tabLabels };\n\n // Cmd+K keyboard shortcut\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault();\n searchInputRef.current?.focus();\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, []);\n\n const toggleGroup = (groupId: string) => {\n setExpandedGroups((prev) => {\n const next = new Set(prev);\n if (next.has(groupId)) {\n next.delete(groupId);\n } else {\n next.add(groupId);\n }\n return next;\n });\n };\n\n const filteredArticles = useMemo(() => {\n return articles.filter((article) => {\n const matchesFeature = !selectedFeatureId || (article as any).feature_id === selectedFeatureId;\n return matchesFeature;\n });\n }, [articles, selectedFeatureId]);\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n if (!formMessage.trim() || isSubmitting) return;\n\n try {\n await submitFeedback({\n type: formType,\n message: formMessage,\n });\n setFormMessage('');\n setShowForm(false);\n setTimeout(() => {\n refetchRequests();\n reset();\n }, 500);\n } catch {\n // Error handled by hook\n }\n },\n [formType, formMessage, isSubmitting, submitFeedback, refetchRequests, reset]\n );\n\n const renderArticleDetail = () => {\n if (articleLoading || !fullArticle) {\n return (\n <div style={styles.loading}>\n <LoaderIcon />\n <span>Loading article...</span>\n </div>\n );\n }\n\n return (\n <div style={styles.articleDetail}>\n <button onClick={() => setSelectedArticle(null)} style={styles.backButton} className=\"census-back-btn\">\n <ArrowLeftIcon />\n Back to articles\n </button>\n\n <h1 style={styles.articleDetailTitle}>{fullArticle.title}</h1>\n {fullArticle.read_time_minutes && (\n <div style={styles.articleDetailMeta}>\n <ClockIcon />\n {fullArticle.read_time_minutes} min read\n </div>\n )}\n\n {fullArticle.content_html ? (\n <div\n style={styles.articleDetailContent}\n dangerouslySetInnerHTML={{ __html: fullArticle.content_html }}\n />\n ) : (\n <p style={{ ...styles.articleDetailContent, color: '#6b7280' }}>No content available.</p>\n )}\n </div>\n );\n };\n\n const renderArticles = () => {\n if (selectedArticle) {\n return renderArticleDetail();\n }\n\n if (articlesLoading || groupsLoading) {\n return (\n <div style={styles.loading}>\n <LoaderIcon />\n <span>Loading...</span>\n </div>\n );\n }\n\n if (filteredArticles.length === 0) {\n return (\n <div style={styles.emptyState}>\n <div style={styles.emptyIcon}><BookIcon /></div>\n <h3 style={styles.emptyTitle}>No articles found</h3>\n <p style={styles.emptyText}>\n {searchQuery ? `No results for \"${searchQuery}\"` : 'No documentation articles available yet.'}\n </p>\n </div>\n );\n }\n\n return (\n <div style={styles.articleGrid}>\n {filteredArticles.map((article) => (\n <button\n key={article.id}\n onClick={() => setSelectedArticle(article)}\n style={styles.articleCard}\n className=\"census-article-card\"\n >\n <div style={styles.articleIcon} className=\"census-article-icon\">\n <BookIcon />\n </div>\n <div style={styles.articleContent}>\n <h3 style={styles.articleTitle}>{article.title}</h3>\n {article.seo_description && (\n <p style={styles.articleDesc}>{article.seo_description}</p>\n )}\n {article.read_time_minutes && (\n <p style={styles.articleMeta}>{article.read_time_minutes} min read</p>\n )}\n </div>\n <span style={styles.articleChevron} className=\"census-article-chevron\">\n <ChevronRightIcon />\n </span>\n </button>\n ))}\n </div>\n );\n };\n\n const renderRequestForm = () => {\n if (!settings.allowRequestCreation) return null;\n\n if (isSuccess) {\n return (\n <div style={styles.successMessage}>\n Thanks for your feedback! It has been submitted.\n </div>\n );\n }\n\n if (!showForm) {\n return (\n <button onClick={() => setShowForm(true)} style={styles.newRequestButton} className=\"census-new-request-btn\">\n <PlusIcon />\n New Request\n </button>\n );\n }\n\n return (\n <form onSubmit={handleSubmit} style={styles.form}>\n <div style={styles.formHeader}>\n <p style={styles.formTitle}>Submit a request</p>\n <button\n type=\"button\"\n onClick={() => setShowForm(false)}\n style={{ background: 'none', border: 'none', cursor: 'pointer', color: '#6b7280', fontSize: '18px' }}\n >\n ×\n </button>\n </div>\n <div style={styles.typeSelector}>\n {FORM_TYPES.map((t) => (\n <button\n key={t.value}\n type=\"button\"\n onClick={() => setFormType(t.value)}\n style={{\n ...styles.typeButton,\n ...(formType === t.value ? styles.typeButtonActive : {}),\n }}\n >\n {t.label}\n </button>\n ))}\n </div>\n <textarea\n value={formMessage}\n onChange={(e) => setFormMessage(e.target.value)}\n placeholder=\"Describe your request...\"\n style={styles.textarea}\n required\n />\n <button\n type=\"submit\"\n style={{ ...styles.submitButton, opacity: isSubmitting ? 0.6 : 1 }}\n disabled={isSubmitting}\n className=\"census-submit-btn\"\n >\n {isSubmitting ? 'Submitting...' : 'Submit'}\n </button>\n </form>\n );\n };\n\n const renderRequests = () => {\n if (!isIdentified) {\n return (\n <div style={styles.emptyState}>\n <p style={styles.emptyText}>Please sign in to view your requests.</p>\n </div>\n );\n }\n\n if (requestsLoading) {\n return (\n <div style={styles.loading}>\n <LoaderIcon />\n <span>Loading requests...</span>\n </div>\n );\n }\n\n return (\n <div>\n {renderRequestForm()}\n\n {requests.length === 0 ? (\n <div style={styles.emptyState}>\n <div style={styles.emptyIcon}><MessageIcon /></div>\n <h3 style={styles.emptyTitle}>No requests yet</h3>\n <p style={styles.emptyText}>\n {settings.allowRequestCreation\n ? 'Submit your first request above.'\n : \"When you submit feedback, they'll appear here.\"}\n </p>\n </div>\n ) : (\n <div>\n {requests.map((request) => {\n const typeInfo = feedbackTypeConfig[request.feedback_type] || feedbackTypeConfig.feedback;\n const statusInfo = statusConfig[request.status] || statusConfig.new;\n\n return (\n <div key={request.id} style={styles.requestCard}>\n <div style={styles.requestHeader}>\n <span style={{ ...styles.badge, color: typeInfo.color, backgroundColor: typeInfo.bg }}>\n {typeInfo.label}\n </span>\n <span style={{ ...styles.badge, color: statusInfo.color, backgroundColor: statusInfo.bg }}>\n {statusInfo.label}\n </span>\n </div>\n <p style={styles.requestMessage}>{request.message || 'No message provided'}</p>\n <div style={styles.requestMeta}>\n <span>{formatDate(request.created_at)}</span>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n };\n\n return (\n <div style={styles.container} className={className}>\n <style>{spinnerStyles}</style>\n\n {/* Tabs */}\n {tabs.length > 1 && (\n <div style={styles.tabs}>\n {tabs.map((tab) => (\n <button\n key={tab}\n onClick={() => setActiveTab(tab)}\n style={{\n ...styles.tab,\n ...(activeTab === tab ? styles.tabActive : {}),\n }}\n className={activeTab !== tab ? 'census-tab' : undefined}\n >\n {mergedLabels[tab]}\n </button>\n ))}\n </div>\n )}\n\n <div style={styles.grid}>\n {/* Sidebar */}\n <aside style={styles.sidebar}>\n {/* Search */}\n {showSearch && activeTab === 'articles' && (\n <div style={styles.searchContainer}>\n <div style={styles.searchIcon}><SearchIcon /></div>\n <input\n ref={searchInputRef}\n type=\"text\"\n placeholder=\"Search...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n style={styles.searchInput}\n className=\"census-search-input\"\n />\n </div>\n )}\n\n {/* Feature Groups */}\n {activeTab === 'articles' && featureGroups.length > 0 && (\n <nav>\n <h3 style={styles.sectionTitle}>Features</h3>\n <ul style={styles.navList}>\n <li>\n <button\n onClick={() => setSelectedFeatureId(null)}\n style={{\n ...styles.navItem,\n ...(!selectedFeatureId ? styles.navItemActive : {}),\n }}\n className={selectedFeatureId ? 'census-nav-item' : undefined}\n >\n All Articles\n </button>\n </li>\n {featureGroups.map((group) => (\n <li key={group.id}>\n <button\n onClick={() => toggleGroup(group.id)}\n style={styles.navItem}\n className=\"census-nav-item\"\n >\n <span style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <LayersIcon />\n {group.name}\n </span>\n {expandedGroups.has(group.id) ? <ChevronDownIcon /> : <ChevronRightIcon />}\n </button>\n {expandedGroups.has(group.id) && group.features.length > 0 && (\n <ul style={styles.subNav}>\n {group.features.map((feature) => (\n <li key={feature.id}>\n <button\n onClick={() => setSelectedFeatureId(feature.id)}\n style={{\n ...styles.navItem,\n padding: '6px 12px',\n fontSize: '13px',\n ...(selectedFeatureId === feature.id ? styles.navItemActive : {}),\n }}\n className={selectedFeatureId !== feature.id ? 'census-nav-item' : undefined}\n >\n {feature.name}\n </button>\n </li>\n ))}\n </ul>\n )}\n </li>\n ))}\n </ul>\n </nav>\n )}\n </aside>\n\n {/* Main Content */}\n <main style={styles.main}>\n {activeTab === 'articles' && renderArticles()}\n {activeTab === 'requests' && renderRequests()}\n </main>\n </div>\n </div>\n );\n}\n"]}
|