posthog-js 1.347.2 → 1.348.0
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/array.full.es5.js +1 -1
- package/dist/array.full.js +1 -1
- package/dist/array.full.no-external.js +1 -1
- package/dist/array.js +1 -1
- package/dist/array.no-external.js +1 -1
- package/dist/conversations.js +1 -1
- package/dist/conversations.js.map +1 -1
- package/dist/customizations.full.js +1 -1
- package/dist/lazy-recorder.js +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/module.d.ts +43 -1
- package/dist/module.full.d.ts +43 -1
- package/dist/module.full.js +1 -1
- package/dist/module.full.js.map +1 -1
- package/dist/module.full.no-external.d.ts +43 -1
- package/dist/module.full.no-external.js +1 -1
- package/dist/module.full.no-external.js.map +1 -1
- package/dist/module.js +1 -1
- package/dist/module.js.map +1 -1
- package/dist/module.no-external.d.ts +43 -1
- package/dist/module.no-external.js +1 -1
- package/dist/module.no-external.js.map +1 -1
- package/dist/posthog-recorder.js +1 -1
- package/dist/product-tours-preview.d.ts +2 -0
- package/dist/product-tours-preview.js +1 -1
- package/dist/product-tours-preview.js.map +1 -1
- package/dist/product-tours.js +1 -1
- package/dist/product-tours.js.map +1 -1
- package/dist/src/extensions/conversations/external/components/ConversationsWidget.d.ts +43 -2
- package/dist/src/extensions/conversations/external/components/TicketListItem.d.ts +13 -0
- package/dist/src/extensions/conversations/external/components/TicketListView.d.ts +15 -0
- package/dist/src/extensions/conversations/external/components/styles.d.ts +184 -0
- package/dist/src/extensions/conversations/external/components/utils.d.ts +8 -0
- package/dist/src/extensions/conversations/external/index.d.ts +39 -1
- package/dist/src/extensions/product-tours/product-tours.d.ts +2 -0
- package/dist/src/posthog-product-tours-types.d.ts +42 -0
- package/dist/surveys-preview.d.ts +2 -0
- package/lib/package.json +1 -1
- package/lib/src/extensions/conversations/external/components/ConversationsWidget.d.ts +43 -2
- package/lib/src/extensions/conversations/external/components/ConversationsWidget.js +96 -28
- package/lib/src/extensions/conversations/external/components/ConversationsWidget.js.map +1 -1
- package/lib/src/extensions/conversations/external/components/TicketListItem.d.ts +13 -0
- package/lib/src/extensions/conversations/external/components/TicketListItem.js +47 -0
- package/lib/src/extensions/conversations/external/components/TicketListItem.js.map +1 -0
- package/lib/src/extensions/conversations/external/components/TicketListView.d.ts +15 -0
- package/lib/src/extensions/conversations/external/components/TicketListView.js +75 -0
- package/lib/src/extensions/conversations/external/components/TicketListView.js.map +1 -0
- package/lib/src/extensions/conversations/external/components/styles.d.ts +184 -0
- package/lib/src/extensions/conversations/external/components/styles.js +189 -0
- package/lib/src/extensions/conversations/external/components/styles.js.map +1 -1
- package/lib/src/extensions/conversations/external/components/utils.d.ts +8 -0
- package/lib/src/extensions/conversations/external/components/utils.js +49 -0
- package/lib/src/extensions/conversations/external/components/utils.js.map +1 -0
- package/lib/src/extensions/conversations/external/index.d.ts +39 -1
- package/lib/src/extensions/conversations/external/index.js +253 -31
- package/lib/src/extensions/conversations/external/index.js.map +1 -1
- package/lib/src/extensions/product-tours/components/ProductTourSurveyStepInner.js +1 -1
- package/lib/src/extensions/product-tours/components/ProductTourSurveyStepInner.js.map +1 -1
- package/lib/src/extensions/product-tours/product-tours.d.ts +2 -0
- package/lib/src/extensions/product-tours/product-tours.js +78 -71
- package/lib/src/extensions/product-tours/product-tours.js.map +1 -1
- package/lib/src/posthog-product-tours-types.d.ts +42 -0
- package/lib/src/posthog-product-tours-types.js +43 -1
- package/lib/src/posthog-product-tours-types.js.map +1 -1
- package/lib/src/utils/product-tour-event-receiver.js +2 -1
- package/lib/src/utils/product-tour-event-receiver.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/react/dist/esm/index.js +25 -1
- package/react/dist/esm/index.js.map +1 -1
- package/react/dist/types/index.d.ts +4 -2
- package/react/dist/umd/index.js +25 -0
- package/react/dist/umd/index.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-tours.js","sourceRoot":"","sources":["../../../../src/extensions/product-tours/product-tours.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAA+B;AAW/B,qEAAoF;AACpF,6DAQ8B;AAC9B,sEAAoE;AACpE,oEAAkE;AAClE,6CAAiD;AACjD,+CAA8E;AAC9E,yCAAwD;AACxD,qCAA8C;AAC9C,sCAAuD;AACvD,6DAAgE;AAChE,yCAKoB;AACpB,qEAAkG;AAClG,6CAA4C;AAC5C,uFAAkF;AAElF,IAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,iBAAiB,CAAC,CAAA;AAE9C,IAAM,QAAQ,GAAG,kBAAqB,CAAA;AACtC,IAAM,MAAM,GAAG,gBAAqC,CAAA;AAEpD,0EAA0E;AAC1E,SAAS,gBAAgB,CAAC,IAAiB;;IACvC,IAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;IAClC,IAAI,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,GAAG,CAAA,EAAE,CAAC;QACnB,OAAO,IAAI,CAAA;IACf,CAAC;IAED,IAAM,IAAI,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,0CAAE,IAAI,CAAA;IACnC,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,KAAK,CAAA;IAChB,CAAC;IAED,IAAM,SAAS,GAAG,UAAU,CAAC,YAAY,IAAI,sBAAe,CAAC,SAAS,CAAA;IAEtE,IAAI,SAAS,KAAK,sBAAe,CAAC,KAAK,EAAE,CAAC;QACtC,OAAO,IAAA,kCAAY,EAAC,IAAI,CAAC,KAAK,IAAA,kCAAY,EAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IAC9D,CAAC;IAED,IAAM,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IAChC,OAAO,oCAAmB,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAiB;IACxC,IAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IAEtB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC3C,IAAI,GAAG,GAAG,SAAS,EAAE,CAAC;YAClB,OAAO,KAAK,CAAA;QAChB,CAAC;IACL,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACvC,IAAI,GAAG,GAAG,OAAO,EAAE,CAAC;YAChB,OAAO,KAAK,CAAA;QAChB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAA;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAiB;IAC1C,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAA;AAC5D,CAAC;AAED,IAAM,eAAe,GAAG,2BAA2B,CAAA;AACnD,IAAM,0BAA0B,GAAG,sBAAsB,CAAA;AACzD,IAAM,iBAAiB,GAAG,IAAI,CAAA;AAQ9B,SAAS,kBAAkB,CAAC,IAAiB;IACzC,IAAM,cAAc,GAAG,UAAG,eAAe,cAAI,IAAI,CAAC,EAAE,CAAE,CAAA;IACtD,IAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAI,cAAc,CAAE,CAAC,CAAA;IAEhE,IAAI,WAAW,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;QACxC,OAAO;YACH,MAAM,EAAE,WAAW,CAAC,UAAU;YAC9B,cAAc,EAAE,KAAK;SACxB,CAAA;IACL,CAAC;IAED,IAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IACzC,GAAG,CAAC,SAAS,GAAG,cAAc,CAAA;IAE9B,IAAA,yDAAmC,EAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IAEzD,IAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;IAEjD,IAAM,UAAU,GAAG,IAAA,8CAAwB,GAAE,CAAA;IAC7C,IAAI,UAAU,EAAE,CAAC;QACb,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;IAClC,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IAE9B,OAAO;QACH,MAAM,QAAA;QACN,cAAc,EAAE,IAAI;KACvB,CAAA;AACL,CAAC;AAED,SAAS,oBAAoB,CACzB,IAAiB,EACjB,YAAsC;IAEtC,IAAM,cAAc,GAAG,UAAG,eAAe,cAAI,IAAI,CAAC,EAAE,CAAE,CAAA;IACtD,IAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAI,cAAc,CAAE,CAAC,CAAA;IAEhE,IAAI,WAAW,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;QACxC,OAAO;YACH,MAAM,EAAE,WAAW,CAAC,UAAU;YAC9B,cAAc,EAAE,KAAK;SACxB,CAAA;IACL,CAAC;IAED,IAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IACzC,GAAG,CAAC,SAAS,GAAG,cAAc,CAAA;IAE9B,IAAA,yDAAmC,EAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;IAEzD,IAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;IAEjD,IAAM,UAAU,GAAG,IAAA,8CAAwB,GAAE,CAAA;IAC7C,IAAI,UAAU,EAAE,CAAC;QACb,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;IAClC,CAAC;IAED,IAAI,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ,MAAK,QAAQ,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC/D,IAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;QACrE,IAAI,eAAe,EAAE,CAAC;YAClB,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACpC,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,IAAI,CAAC,6CAAsC,YAAY,CAAC,QAAQ,oCAAiC,CAAC,CAAA;YACzG,OAAO,IAAI,CAAA;QACf,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC7D,CAAC;IAED,OAAO;QACH,MAAM,QAAA;QACN,cAAc,EAAE,IAAI;KACvB,CAAA;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc;IACrC,IAAM,cAAc,GAAG,UAAG,eAAe,cAAI,MAAM,CAAE,CAAA;IACrD,IAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAI,cAAc,CAAE,CAAC,CAAA;IAC9D,IAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,UAAU,EAAE,CAAC;QACxB,IAAA,eAAM,EAAC,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,CAAA;IACtC,CAAC;IACD,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,EAAE,CAAA;AACvB,CAAC;AAED,IAAM,kCAAkC,GAAG,yBAAyB,CAAA;AAEpE;IAaI,4BAAY,QAAiB;QAA7B,iBAGC;QAdO,gBAAW,GAAuB,IAAI,CAAA;QACtC,sBAAiB,GAAW,CAAC,CAAA;QAC7B,mBAAc,GAAY,KAAK,CAAA;QAC/B,gBAAW,GAAY,KAAK,CAAA;QAC5B,mBAAc,GAA0C,IAAI,CAAA;QAC5D,8BAAyB,GAAqC,IAAI,GAAG,EAAE,CAAA;QACvE,yBAAoB,GAA+C,IAAI,GAAG,EAAE,CAAA;QAE5E,4BAAuB,GAAgB,IAAI,GAAG,EAAE,CAAA;QAChD,wBAAmB,GAAgB,IAAI,GAAG,EAAE,CAAA;QA0G5C,4BAAuB,GAAG;YAC9B,IAAI,QAAQ,CAAC,MAAM,IAAI,KAAI,CAAC,cAAc,EAAE,CAAC;gBACzC,aAAa,CAAC,KAAI,CAAC,cAAc,CAAC,CAAA;gBAClC,KAAI,CAAC,cAAc,GAAG,IAAI,CAAA;YAC9B,CAAC;iBAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAI,CAAC,cAAc,EAAE,CAAC;gBAClD,KAAI,CAAC,cAAc,GAAG,WAAW,CAAC;oBAC9B,KAAI,CAAC,wBAAwB,EAAE,CAAA;gBACnC,CAAC,EAAE,iBAAiB,CAAC,CAAA;gBACrB,KAAI,CAAC,wBAAwB,EAAE,CAAA;YACnC,CAAC;QACL,CAAC,CAAA;QAoMD,aAAQ,GAAG;YACP,IAAI,CAAC,KAAI,CAAC,WAAW,EAAE,CAAC;gBACpB,OAAM;YACV,CAAC;YAED,IAAM,WAAW,GAAG,KAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAI,CAAC,iBAAiB,CAAC,CAAA;YAElE,KAAI,CAAC,aAAa,CAAC,6BAA6B,EAAE;gBAC9C,gBAAgB,EAAE,KAAI,CAAC,WAAW,CAAC,EAAE;gBACrC,qBAAqB,EAAE,WAAW,CAAC,EAAE;gBACrC,wBAAwB,EAAE,KAAI,CAAC,iBAAiB;aACnD,CAAC,CAAA;YAEF,IAAI,KAAI,CAAC,iBAAiB,GAAG,KAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7D,KAAI,CAAC,aAAa,CAAC,KAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAA;gBAC9C,KAAI,CAAC,kBAAkB,EAAE,CAAA;YAC7B,CAAC;iBAAM,CAAC;gBACJ,KAAI,CAAC,aAAa,EAAE,CAAA;YACxB,CAAC;QACL,CAAC,CAAA;QAED,iBAAY,GAAG;YACX,IAAI,CAAC,KAAI,CAAC,WAAW,IAAI,KAAI,CAAC,iBAAiB,KAAK,CAAC,EAAE,CAAC;gBACpD,OAAM;YACV,CAAC;YAED,KAAI,CAAC,aAAa,CAAC,KAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAA;YAC9C,KAAI,CAAC,kBAAkB,EAAE,CAAA;QAC7B,CAAC,CAAA;QAED,gBAAW,GAAG,UAAC,MAAsD;;YAAtD,uBAAA,EAAA,4BAAsD;YACjE,IAAI,CAAC,KAAI,CAAC,WAAW,EAAE,CAAC;gBACpB,OAAM;YACV,CAAC;YAED,IAAM,WAAW,GAAG,KAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAI,CAAC,iBAAiB,CAAC,CAAA;YAElE,KAAI,CAAC,aAAa,CAAC,wBAAwB,EAAE;gBACzC,gBAAgB,EAAE,KAAI,CAAC,WAAW,CAAC,EAAE;gBACrC,qBAAqB,EAAE,WAAW,CAAC,EAAE;gBACrC,wBAAwB,EAAE,KAAI,CAAC,iBAAiB;gBAChD,4BAA4B,EAAE,MAAM;aACvC,CAAC,CAAA;YAEF,IAAI,CAAC,KAAI,CAAC,cAAc,EAAE,CAAC;gBACvB,oBAAU,CAAC,IAAI,CAAC,UAAG,qCAAyB,SAAG,KAAI,CAAC,WAAW,CAAC,EAAE,CAAE,EAAE,IAAI,CAAC,CAAA;gBAE3E,KAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE;oBAC3B,IAAI,YAAI,GAAC,kCAA2B,KAAI,CAAC,WAAW,CAAC,EAAE,CAAE,IAAG,IAAI,KAAE;iBACrE,CAAC,CAAA;YACN,CAAC;YAED,MAAM,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,wBAAwB,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,KAAI,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,QAAA,EAAE,EAAE,CAAC,CACjG,CAAA;YAED,KAAI,CAAC,QAAQ,EAAE,CAAA;QACnB,CAAC,CAAA;QAEO,uBAAkB,GAAG,UAAC,MAA6B;YACvD,IAAI,KAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAM,WAAW,GAAG,KAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAI,CAAC,iBAAiB,CAAC,CAAA;gBAClE,IAAI,WAAW,EAAE,CAAC;oBACd,KAAI,CAAC,aAAa,CAAC,6BAA6B,sBAC5C,gBAAgB,EAAE,KAAI,CAAC,WAAW,CAAC,EAAE,EACrC,kBAAkB,EAAE,KAAI,CAAC,WAAW,CAAC,IAAI,EACzC,uBAAuB,EAAE,KAAI,CAAC,WAAW,CAAC,iBAAiB,IAAI,CAAC,EAChE,qBAAqB,EAAE,WAAW,CAAC,EAAE,EACrC,wBAAwB,EAAE,KAAI,CAAC,iBAAiB,EAChD,yBAAyB,EAAE,MAAM,CAAC,IAAI,EACtC,2BAA2B,EAAE,MAAM,CAAC,MAAM,IACvC,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,yBAAyB,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,GAC3D,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EACvE,CAAA;gBACN,CAAC;YACL,CAAC;YAED,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;gBACpB,KAAK,SAAS;oBACV,KAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAA;oBACrC,MAAK;gBACT,KAAK,WAAW;oBACZ,KAAI,CAAC,QAAQ,EAAE,CAAA;oBACf,MAAK;gBACT,KAAK,eAAe;oBAChB,KAAI,CAAC,YAAY,EAAE,CAAA;oBACnB,MAAK;gBACT,KAAK,MAAM;oBACP,KAAI,CAAC,aAAa,EAAE,CAAA;oBACpB,MAAK;gBACT,KAAK,cAAc;oBACf,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;wBAChB,KAAI,CAAC,aAAa,EAAE,CAAA;wBACpB,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;oBACpC,CAAC;oBACD,MAAK;YACb,CAAC;QACL,CAAC,CAAA;QAtZG,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;QACzB,IAAI,CAAC,cAAc,GAAG,IAAI,sDAAwB,CAAC,QAAQ,CAAC,CAAA;IAChE,CAAC;IAEO,+CAAkB,GAA1B,UAA2B,KAAoB;;QAC3C,IAAM,IAAI,GAAG,KAAK;aACb,MAAM,CAAC,UAAC,IAAI,IAAK,OAAA,CAAC,IAAI,CAAC,qBAAqB,EAA3B,CAA2B,CAAC;aAC7C,OAAO,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,sCAAgB,CAAC,EAApC,CAAoC,CAAC,CAAA;;YAE5D,KAAkB,IAAA,SAAA,SAAA,IAAI,CAAA,0BAAA,4CAAE,CAAC;gBAApB,IAAM,GAAG,iBAAA;gBACV,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;oBACjC,IAAI,KAAK,EAAE,CAAC,GAAG,GAAG,GAAG,CAAA;gBACzB,CAAC;YACL,CAAC;;;;;;;;;IACL,CAAC;IAEO,0CAAa,GAArB,UAAsB,KAAa;QAC/B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAA;QAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAA;IAC5B,CAAC;IAEO,8CAAiB,GAAzB;QACI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YAC3C,OAAM;QACV,CAAC;QACD,sBAAY,CAAC,IAAI,CAAC,mCAAuB,EAAE;YACvC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE;YAC3B,SAAS,EAAE,IAAI,CAAC,iBAAiB;SACpC,CAAC,CAAA;IACN,CAAC;IAEO,+CAAkB,GAA1B;QACI,sBAAY,CAAC,OAAO,CAAC,mCAAuB,CAAC,CAAA;IACjD,CAAC;IAEO,6CAAgB,GAAxB;QACI,IAAM,MAAM,GAAG,sBAAY,CAAC,IAAI,CAAC,mCAAuB,CAAC,CAAA;QACzD,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO,IAAI,CAAA;QACf,CAAC;QACD,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC7B,CAAC;QAAC,WAAM,CAAC;YACL,OAAO,IAAI,CAAA;QACf,CAAC;IACL,CAAC;IAED,kCAAK,GAAL;QAAA,iBAcC;QAbG,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAM;QACV,CAAC;QAED,oEAAoE;QACpE,IAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAC1C,IAAI,UAAU,EAAE,CAAC;YACb,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,SAAS,EAAE;gBAC3D,KAAI,CAAC,oBAAoB,EAAE,CAAA;YAC/B,CAAC,CAAC,CAAA;QACN,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,oBAAoB,EAAE,CAAA;QAC/B,CAAC;IACL,CAAC;IAEO,iDAAoB,GAA5B;QAAA,iBAOC;QANG,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC;YAC9B,KAAI,CAAC,wBAAwB,EAAE,CAAA;QACnC,CAAC,EAAE,iBAAiB,CAAC,CAAA;QAErB,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAA;QACnC,IAAA,wBAAgB,EAAC,QAAQ,EAAE,kBAAkB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAA;IAChF,CAAC;IAEO,6CAAgB,GAAxB,UAAyB,MAAc,EAAE,SAAiB,EAAE,UAAsB;QAAlF,iBAiBC;;QAhBG,MAAA,IAAI,CAAC,SAAS,CAAC,YAAY,0CAAE,eAAe,CAAC,UAAC,KAAK;YAC/C,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,EAAE,KAAK,MAAM,EAAf,CAAe,CAAC,CAAA;YAE/C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACR,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnB,KAAI,CAAC,kBAAkB,EAAE,CAAA;gBAC7B,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,KAAI,CAAC,WAAW,GAAG,IAAI,CAAA;gBACvB,KAAI,CAAC,iBAAiB,GAAG,SAAS,CAAA;gBAClC,KAAI,CAAC,WAAW,GAAG,IAAI,CAAA;gBACvB,KAAI,CAAC,kBAAkB,EAAE,CAAA;YAC7B,CAAC;YAED,UAAU,EAAE,CAAA;QAChB,CAAC,CAAC,CAAA;IACN,CAAC;IAED,iCAAI,GAAJ;QACI,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YAClC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;QAC9B,CAAC;QACD,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAA;QAC9E,IAAI,CAAC,0BAA0B,EAAE,CAAA;QACjC,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAC7B,IAAI,CAAC,QAAQ,EAAE,CAAA;IACnB,CAAC;IAcO,qDAAwB,GAAhC,UAAiC,WAAqB;QAAtD,iBA4EC;;QA3EG,IAAI,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,cAAc,CAAC,sBAAU,CAAC,EAAE,CAAC;YACvC,OAAM;QACV,CAAC;QAED,mFAAmF;QACnF,0CAA0C;QAC1C,MAAA,IAAI,CAAC,SAAS,CAAC,YAAY,0CAAE,eAAe,CAAC,UAAC,KAAK;;;YAC/C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrB,KAAI,CAAC,0BAA0B,EAAE,CAAA;gBACjC,OAAM;YACV,CAAC;YAED,KAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;YAE9B,IAAM,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAA;YAE9C,IAAM,sBAAsB,GAAG,KAAK,CAAC,MAAM,CACvC,UAAC,IAAiB;gBACd,OAAA,CAAC,KAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1C,CAAC,IAAA,4CAAuB,EAAC,IAAI,CAAC,IAAI,IAAA,6CAAwB,EAAC,IAAI,CAAC,CAAC;YADjE,CACiE,CACxE,CAAA;YACD,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,KAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAA;gBACpD,sBAAsB,CAAC,OAAO,CAAC,UAAC,IAAI,IAAK,OAAA,KAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAzC,CAAyC,CAAC,CAAA;YACvF,CAAC;YAED,IAAM,qBAAqB,GAAG,KAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAA;;gBAEpF;;;;;;;;mBAQG;gBACH,KAAmB,IAAA,UAAA,SAAA,KAAK,CAAA,4BAAA,+CAAE,CAAC;oBAAtB,IAAM,IAAI,kBAAA;oBACX,2EAA2E;oBAC3E,IAAM,eAAe,GAAG,MAAA,IAAI,CAAC,UAAU,0CAAE,QAAQ,CAAA;oBACjD,IAAI,eAAe,EAAE,CAAC;wBAClB,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;wBACjC,KAAI,CAAC,8BAA8B,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;oBAC9D,CAAC;oBAED,sDAAsD;oBACtD,IAAI,KAAI,CAAC,WAAW,EAAE,CAAC;wBACnB,SAAQ;oBACZ,CAAC;oBAED,iBAAiB;oBACjB,IAAM,wBAAwB,GAAG,IAAA,6CAAwB,EAAC,IAAI,CAAC,IAAI,IAAA,4CAAuB,EAAC,IAAI,CAAC,CAAA;oBAEhG,IAAI,IAAI,CAAC,WAAW,IAAI,KAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;wBACjD,+DAA+D;wBAE/D,IAAI,CAAC,wBAAwB,EAAE,CAAC;4BAC5B,qCAAqC;4BACrC,KAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;4BACnC,SAAQ;wBACZ,CAAC;wBAED,2CAA2C;wBAC3C,IAAI,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;4BAC1C,KAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;wBACxC,CAAC;oBACL,CAAC;gBACL,CAAC;;;;;;;;;YAED,KAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,UAAC,EAAQ;oBAAN,IAAI,UAAA;gBAC1C,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;oBACrC,KAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBAChD,CAAC;YACL,CAAC,CAAC,CAAA;QACN,CAAC,EAAE,WAAW,CAAC,CAAA;IACnB,CAAC;IAEO,6CAAgB,GAAxB,UAAyB,IAAiB,EAAE,MAA+B;;QACvE,IAAM,YAAY,GAAG,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,oBAAoB,KAAI,CAAC,CAAA;QAC/D,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,CAAA;YAC1D,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,QAAA,EAAE,CAAC,CAAA;QACnC,CAAC;IACL,CAAC;IAEO,4CAAe,GAAvB,UAAwB,IAAiB;;QACrC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,eAAQ,IAAI,CAAC,EAAE,6BAA0B,CAAC,CAAA;YACtD,OAAO,KAAK,CAAA;QAChB,CAAC;QAED,IAAM,gBAAgB,GAAG,MAAA,IAAI,CAAC,iBAAiB,mCAAI,kBAAkB,CAAA;QACrE,IAAM,QAAQ,GAAG,UAAG,iCAAqB,SAAG,IAAI,CAAC,EAAE,CAAE,CAAA;QACrD,IAAM,YAAY,GAAG,UAAG,qCAAyB,SAAG,IAAI,CAAC,EAAE,CAAE,CAAA;QAC7D,IAAM,YAAY,GAAG,UAAG,qCAAyB,SAAG,IAAI,CAAC,EAAE,CAAE,CAAA;QAE7D,QAAQ,gBAAgB,EAAE,CAAC;YACvB,KAAK,WAAW;gBACZ,IAAI,oBAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC,eAAQ,IAAI,CAAC,EAAE,yCAAsC,CAAC,CAAA;oBAClE,OAAO,KAAK,CAAA;gBAChB,CAAC;gBACD,MAAK;YAET,KAAK,kBAAkB;gBACnB,IAAI,oBAAU,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,oBAAU,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;oBACjE,MAAM,CAAC,IAAI,CAAC,eAAQ,IAAI,CAAC,EAAE,oCAAiC,CAAC,CAAA;oBAC7D,OAAO,KAAK,CAAA;gBAChB,CAAC;gBACD,MAAK;YAET,KAAK,QAAQ,CAAC;YACd;gBACI,MAAK;QACb,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,2BAA2B,EAAE,CAAC,EAAE,CAAC;YACzF,MAAM,CAAC,IAAI,CAAC,eAAQ,IAAI,CAAC,EAAE,yCAA+B,IAAI,CAAC,2BAA2B,CAAE,CAAC,CAAA;YAC7F,OAAO,KAAK,CAAA;QAChB,CAAC;QAED,IAAM,iBAAiB,GAAG,MAAA,IAAI,CAAC,UAAU,0CAAE,iBAAiB,CAAA;QAC5D,IACI,CAAC,IAAI,CAAC,iCAAiC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC,EAC5G,CAAC;YACC,MAAM,CAAC,IAAI,CACP,eAAQ,IAAI,CAAC,EAAE,yCAA+B,IAAI,CAAC,eAAe,wBAAc,iBAAiB,CAAE,CACtG,CAAA;YACD,OAAO,KAAK,CAAA;QAChB,CAAC;QAED,OAAO,IAAI,CAAA;IACf,CAAC;IAED,qCAAQ,GAAR,UAAS,IAAiB,EAAE,OAAyB;;;QACjD,IAAM,YAAY,GAA4B,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,mCAAI,MAAM,CAAA;QAEvE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAE/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;QACvB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;QAErB,IAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAA;QAE1C,IAAI,QAAQ,EAAE,CAAC;YACX,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE;gBACrC,gBAAgB,EAAE,IAAI,CAAC,EAAE;gBACzB,kBAAkB,EAAE,IAAI,CAAC,IAAI;gBAC7B,uBAAuB,EAAE,IAAI,CAAC,iBAAiB,IAAI,CAAC;gBACpD,2BAA2B,EAAE,YAAY;aAC5C,CAAC,CAAA;YAEF,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACvB,oBAAU,CAAC,IAAI,CAAC,UAAG,iCAAqB,SAAG,IAAI,CAAC,EAAE,CAAE,EAAE,IAAI,CAAC,CAAA;gBAE3D,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE;oBAC3B,IAAI,YAAI,GAAC,8BAAuB,IAAI,CAAC,EAAE,CAAE,IAAG,IAAI,KAAE;iBACrD,CAAC,CAAA;YACN,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,EAAE,CAAA;QACnB,CAAC;QAED,OAAO,QAAQ,CAAA;IACnB,CAAC;IAED,yCAAY,GAAZ,UAAa,MAAc,EAAE,MAAgC;QAA7D,iBAUC;;QATG,MAAM,CAAC,IAAI,CAAC,uBAAgB,MAAM,MAAG,CAAC,CAAA;QACtC,MAAA,IAAI,CAAC,SAAS,CAAC,YAAY,0CAAE,eAAe,CAAC,UAAC,KAAK;YAC/C,IAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,EAAE,KAAK,MAAM,EAAf,CAAe,CAAC,CAAA;YAC/C,IAAI,IAAI,EAAE,CAAC;gBACP,KAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,KAAK,EAAE,CAAC,CAAA;YACpD,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;YAC9C,CAAC;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IAED,wCAAW,GAAX,UAAY,IAAiB;QACzB,MAAM,CAAC,IAAI,CAAC,0BAAmB,IAAI,CAAC,EAAE,CAAE,CAAC,CAAA;QAEzC,IAAI,CAAC,QAAQ,EAAE,CAAA;QAEf,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;QAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;QACvB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAA;QAE1B,IAAI,CAAC,kBAAkB,EAAE,CAAA;IAC7B,CAAC;IAqGO,0CAAa,GAArB;;QACI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,OAAM;QACV,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,wBAAwB,EAAE;YACzC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE;YACrC,yBAAyB,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM;SAC3D,CAAC,CAAA;QAEF,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvB,oBAAU,CAAC,IAAI,CAAC,UAAG,qCAAyB,SAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAE,EAAE,IAAI,CAAC,CAAA;YAE3E,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE;gBAC3B,IAAI;oBACA,GAAC,kCAA2B,IAAI,CAAC,WAAW,CAAC,EAAE,CAAE,IAAG,IAAI;uBAC3D;aACJ,CAAC,CAAA;QACN,CAAC;QAED,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,wBAAwB,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QAE5G,IAAI,CAAC,QAAQ,EAAE,CAAA;IACnB,CAAC;IAEO,+CAAkB,GAA1B,UAA2B,UAAsB;QAAjD,iBA+IC;;QA/I0B,2BAAA,EAAA,cAAsB;QAC7C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,OAAO,KAAK,CAAA;QAChB,CAAC;QAED,IAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAC3D,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,CAAC,IAAI,CAAC,eAAQ,IAAI,CAAC,iBAAiB,gCAAsB,IAAI,CAAC,WAAW,CAAC,EAAE,CAAE,CAAC,CAAA;YACtF,IAAI,CAAC,QAAQ,EAAE,CAAA;YACf,OAAO,KAAK,CAAA;QAChB,CAAC;QAED,yCAAyC;QACzC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACzB,IAAI,CAAC,aAAa,CAAC,yBAAyB,EAAE;gBAC1C,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE;gBACrC,qBAAqB,EAAE,IAAI,CAAC,EAAE;gBAC9B,wBAAwB,EAAE,IAAI,CAAC,iBAAiB;gBAChD,uBAAuB,EAAE,QAAQ;aACpC,CAAC,CAAA;YAEF,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;YACxB,IAAI,CAAC,aAAa,EAAE,CAAA;YACpB,OAAO,IAAI,CAAA;QACf,CAAC;QAED,oDAAoD;QACpD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,IAAI,CAAC,iBAAiB,EAAE,CAAA;gBACxB,OAAO,IAAI,CAAA;YACf,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAA;YACnE,OAAO,KAAK,CAAA;QAChB,CAAC;QAED,kFAAkF;QAClF,IAAI,CAAC,IAAA,sCAAgB,EAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa,CAAC,yBAAyB,EAAE;gBAC1C,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE;gBACrC,qBAAqB,EAAE,IAAI,CAAC,EAAE;gBAC9B,wBAAwB,EAAE,IAAI,CAAC,iBAAiB;gBAChD,uBAAuB,EAAE,IAAI,CAAC,IAAI;aACrC,CAAC,CAAA;YAEF,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;YACxB,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAA;YACnC,OAAO,IAAI,CAAA;QACf,CAAC;QAED,IAAM,MAAM,GAAG,IAAA,qCAAe,EAAC,IAAI,CAAC,CAAA;QAEpC,IAAM,cAAc,GAAG;YACnB,oBAAoB,EAAE,MAAA,IAAI,CAAC,iBAAiB,mCAAI,KAAK;YACrD,uBAAuB,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa;SAChD,CAAA;QAED,IAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC3G,IAAM,oBAAoB,GAAG,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,kBAAkB,MAAK,OAAO,IAAI,IAAI,CAAC,WAAW,CAAA;QAE7F,mBAAmB;QACnB,IAAM,UAAU,GAAG,EAAE,CAAA;QACrB,IAAM,YAAY,GAAG,GAAG,CAAA;QAExB,IAAI,MAAM,CAAC,KAAK,KAAK,WAAW,IAAI,MAAM,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;YACjE,qEAAqE;YACrE,sCAAsC;YACtC,IAAI,oBAAoB,IAAI,UAAU,GAAG,UAAU,EAAE,CAAC;gBAClD,UAAU,CAAC;oBACP,KAAI,CAAC,kBAAkB,CAAC,UAAU,GAAG,CAAC,CAAC,CAAA;gBAC3C,CAAC,EAAE,YAAY,CAAC,CAAA;gBAEhB,OAAO,KAAK,CAAA;YAChB,CAAC;YAED,IAAM,cAAc,GAAG,UAAU,GAAG,YAAY,CAAA;YAEhD,IAAI,CAAC,aAAa,CAAC,mCAAmC,aAClD,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,EACrC,qBAAqB,EAAE,IAAI,CAAC,EAAE,EAC9B,wBAAwB,EAAE,IAAI,CAAC,iBAAiB,EAChD,2BAA2B,EAAE,IAAI,CAAC,QAAQ,EAC1C,mBAAmB,EAAE,MAAM,CAAC,KAAK,EACjC,2BAA2B,EAAE,MAAM,CAAC,UAAU,EAC9C,2BAA2B,EAAE,SAAS,EACtC,gCAAgC,EAAE,oBAAoB,EACtD,8BAA8B,EAAE,cAAc,IAC3C,cAAc,EACnB,CAAA;YAEF,IAAI,IAAI,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACpD,MAAM,CAAC,IAAI,CACP,iBAAS,IAAI,CAAC,WAAW,CAAC,IAAI,kEAAuD,MAAM,CAAC,KAAK,MAAG,CACvG,CAAA;gBACD,OAAO,KAAK,CAAA;YAChB,CAAC;YAED,MAAM,CAAC,IAAI,CACP,iBAAS,IAAI,CAAC,WAAW,CAAC,IAAI,4CAAiC,IAAI,CAAC,iBAAiB,kCAAwB,MAAM,CAAC,KAAK,MAAG;gBACxH,CAAC,oBAAoB,CAAC,CAAC,CAAC,yBAAkB,cAAc,OAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CACzE,CAAA;YACD,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAA;YACvC,OAAO,KAAK,CAAA;QAChB,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,KAAK,kBAAkB,EAAE,CAAC;YACtC,IAAI,CAAC,aAAa,CAAC,mCAAmC,aAClD,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,EACrC,qBAAqB,EAAE,IAAI,CAAC,EAAE,EAC9B,wBAAwB,EAAE,IAAI,CAAC,iBAAiB,EAChD,2BAA2B,EAAE,IAAI,CAAC,QAAQ,EAC1C,mBAAmB,EAAE,MAAM,CAAC,KAAK,EACjC,2BAA2B,EAAE,MAAM,CAAC,UAAU,EAC9C,2BAA2B,EAAE,SAAS,IACnC,cAAc,EACnB,CAAA;YACF,sDAAsD;QAC1D,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,KAAK,CAAA;QAChB,CAAC;QAED,IAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;QAC9B,IAAM,QAAQ,GAAG,IAAA,wCAAkB,EAAC,OAAO,CAAC,CAAA;QAE5C,IAAI,CAAC,aAAa,CAAC,yBAAyB,aACxC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,EACrC,qBAAqB,EAAE,IAAI,CAAC,EAAE,EAC9B,wBAAwB,EAAE,IAAI,CAAC,iBAAiB,EAChD,2BAA2B,EAAE,IAAI,CAAC,QAAQ,EAC1C,iCAAiC,EAAE,IAAI,EACvC,8BAA8B,EAAE,QAAQ,CAAC,GAAG,EAC5C,6BAA6B,EAAE,QAAQ,CAAC,EAAE,EAC1C,kCAAkC,EAAE,QAAQ,CAAC,OAAO,EACpD,+BAA+B,EAAE,QAAQ,CAAC,IAAI,IAC3C,cAAc,EACnB,CAAA;QAEF,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;QACxB,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAA;QACtC,OAAO,IAAI,CAAA;IACf,CAAC;IAEO,qDAAwB,GAAhC,UACI,OAA2B,EAC3B,cAA2D,EAC3D,iBAA8D;QAE9D,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,OAAM;QACV,CAAC;QAED,IAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QACnD,IAAA,MAAM,GAAK,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAzC,CAAyC;QAEvD,IAAA,eAAM,EACF,uBAAC,uCAAkB,IACf,IAAI,EAAE,IAAI,CAAC,WAAW,EACtB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,IAAI,CAAC,iBAAiB,EACjC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EACzC,aAAa,EAAE,OAAO,EACtB,MAAM,EAAE,IAAI,CAAC,QAAQ,EACrB,UAAU,EAAE,IAAI,CAAC,YAAY,EAC7B,SAAS,EAAE,iBAAiB,IAAI,IAAI,CAAC,WAAW,EAChD,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,IAAI,CAAC,kBAAkB,GACxC,EACF,MAAM,CACT,CAAA;IACL,CAAC;IAEO,0CAAa,GAArB;QAAA,iBAoCC;;QAnCG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,OAAM;QACV,CAAC;QAED,IAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAC3D,IAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;QAExE,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,IAAI,CAAC,aAAa,CAAC,+CAA+C,EAAE;gBAChE,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE;gBACrC,6BAA6B,EAAE,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,0CAAE,QAAQ;aAC9D,CAAC,CAAA;YACF,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAA;YACzC,OAAM;QACV,CAAC;QAEO,IAAA,MAAM,GAAK,MAAM,OAAX,CAAW;QAEzB,IAAM,iBAAiB,GAAG;;YACtB,IAAM,MAAM,GAAG,MAAA,MAAA,IAAI,CAAC,YAAY,0CAAE,MAAM,0CAAE,MAAM,CAAA;YAChD,IAAI,MAAM,EAAE,CAAC;gBACT,KAAI,CAAC,QAAQ,EAAE,CAAA;gBACf,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;YAC7B,CAAC;QACL,CAAC,CAAA;QAED,IAAA,eAAM,EACF,uBAAC,qCAAiB,IACd,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,cAAM,OAAA,KAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,EAArC,CAAqC,EACtD,aAAa,EAAE,iBAAiB,EAChC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,iBAAiB,GACtD,EACF,MAAM,CACT,CAAA;IACL,CAAC;IAEO,8CAAiB,GAAzB;;QAAA,iBAoEC;;QAnEG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,OAAM;QACV,CAAC;QAED,IAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAA;QAClC,IAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAC3D,IAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAA;QACpC,IAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAA;QAC9C,IAAM,YAAY,GAAG,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,YAAY,KAAI,EAAE,CAAA;QAEpD,IAAI,CAAC,aAAa,CAAC,yBAAyB,EAAE;YAC1C,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE;YACrC,qBAAqB,EAAE,IAAI,CAAC,EAAE;YAC9B,wBAAwB,EAAE,IAAI,CAAC,iBAAiB;YAChD,uBAAuB,EAAE,QAAQ;YACjC,8BAA8B,EAAE,QAAQ;SAC3C,CAAC,CAAA;QAEF,IAAI,CAAC,aAAa,CAAC,uCAAe,CAAC,KAAK;YACpC,GAAC,6CAAqB,CAAC,SAAS,IAAG,QAAQ;YAC3C,GAAC,6CAAqB,CAAC,eAAe,IAAG,MAAM;YAC/C,sBAAmB,GAAE,MAAA,MAAA,IAAI,CAAC,SAAS,EAAC,sBAAsB,kDAAI;gBAChE,CAAA;QAEF,IAAM,YAAY,GAAG,UAAC,QAAgC;;;YAClD,IAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,2BAAoB,UAAU,CAAE,CAAC,CAAC,CAAC,kBAAkB,CAAA;YACtF,KAAI,CAAC,aAAa,CAAC,uCAAe,CAAC,IAAI,wBAClC,6CAAqB,CAAC,SAAS,IAAG,QAAQ,KAC1C,6CAAqB,CAAC,eAAe,IAAG,MAAM,KAC9C,6CAAqB,CAAC,gBAAgB,IAAG;gBACtC;oBACI,EAAE,EAAE,UAAU;oBACd,QAAQ,EAAE,YAAY;oBACtB,QAAQ,EAAE,QAAQ;iBACrB;aACJ,KACA,6CAAqB,CAAC,gBAAgB,IAAG,IAAI,EAC9C,sBAAmB,GAAE,MAAA,MAAA,KAAI,CAAC,SAAS,EAAC,sBAAsB,kDAAI,OAC3D,CAAC,CAAC,IAAA,aAAM,EAAC,QAAQ,CAAC,cAAM,GAAC,WAAW,IAAG,QAAQ,KAAE,CAAC,EACvD,CAAA;YAEF,MAAM,CAAC,IAAI,CAAC,iBAAU,QAAQ,eAAY,EAAE,CAAC,IAAA,aAAM,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,yBAAkB,QAAQ,CAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;YAC3G,KAAI,CAAC,QAAQ,EAAE,CAAA;QACnB,CAAC,CAAA;QAED,IAAM,aAAa,GAAG,UAAC,MAAgC;;;YACnD,KAAI,CAAC,aAAa,CAAC,uCAAe,CAAC,SAAS;gBACxC,GAAC,6CAAqB,CAAC,SAAS,IAAG,QAAQ;gBAC3C,GAAC,6CAAqB,CAAC,eAAe,IAAG,MAAM;gBAC/C,GAAC,6CAAqB,CAAC,gBAAgB,IAAG;oBACtC;wBACI,EAAE,EAAE,UAAU;wBACd,QAAQ,EAAE,YAAY;wBACtB,QAAQ,EAAE,IAAI;qBACjB;iBACJ;gBACD,GAAC,6CAAqB,CAAC,0BAA0B,IAAG,KAAK;gBACzD,sBAAmB,GAAE,MAAA,MAAA,KAAI,CAAC,SAAS,EAAC,sBAAsB,kDAAI;oBAChE,CAAA;YAEF,MAAM,CAAC,IAAI,CAAC,iBAAU,QAAQ,eAAY,CAAC,CAAA;YAC3C,KAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QAC5B,CAAC,CAAA;QAED,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,YAAY,EAAE,aAAa,CAAC,CAAA;QAEhE,MAAM,CAAC,IAAI,CAAC,6CAAsC,IAAI,CAAC,iBAAiB,CAAE,CAAC,CAAA;IAC/E,CAAC;IAEO,8DAAiC,GAAzC,UAA0C,EAAoE;YAAlE,OAAO,aAAA,EAAE,WAAW,iBAAA;QAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,IAAI,CAAA;QACf,CAAC;QACD,IAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE;YAC7E,UAAU,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,kCAAkC,CAAC;SACtE,CAAC,CAAA;QACF,IAAI,gBAAgB,GAAG,IAAI,CAAA;QAC3B,IAAI,WAAW,EAAE,CAAC;YACd,IAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAA;YACnG,gBAAgB,GAAG,gBAAgB,KAAK,WAAW,IAAI,WAAW,KAAK,KAAK,CAAA;QAChF,CAAC;QACD,OAAO,gBAAgB,IAAI,gBAAgB,CAAA;IAC/C,CAAC;IAEO,qCAAQ,GAAhB;QACI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;QAC1C,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;QACvB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAA;QAC1B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAA;QAC3B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;QACxB,IAAI,CAAC,kBAAkB,EAAE,CAAA;IAC7B,CAAC;IAEO,2DAA8B,GAAtC,UAAuC,IAAiB,EAAE,QAAgB;QAA1E,iBAyDC;QAxDG,IAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QACvD,IAAM,oBAAoB,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAExE,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,IAAI,oBAAoB,EAAE,CAAC;gBACvB,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAChD,CAAC;YACD,OAAM;QACV,CAAC;QAED,IAAI,oBAAoB,EAAE,CAAC;YACvB,IAAI,cAAc,KAAK,oBAAoB,CAAC,OAAO,EAAE,CAAC;gBAClD,MAAM,CAAC,IAAI,CAAC,2CAAoC,IAAI,CAAC,EAAE,6BAA0B,CAAC,CAAA;gBAClF,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAChD,CAAC;iBAAM,CAAC;gBACJ,OAAM;YACV,CAAC;QACL,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,0BAA0B,CAAC,EAAE,CAAC;YAC3D,IAAM,QAAQ,GAAG,UAAC,KAAY;;gBAC1B,IAAI,KAAI,CAAC,WAAW,EAAE,CAAC;oBACnB,MAAM,CAAC,IAAI,CAAC,eAAQ,IAAI,CAAC,EAAE,gDAA6C,CAAC,CAAA;oBACzE,OAAM;gBACV,CAAC;gBAED,IAAI,WAAoC,CAAA;gBACxC,MAAA,KAAI,CAAC,SAAS,CAAC,YAAY,0CAAE,eAAe,CAAC,UAAC,KAAK;oBAC/C,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAhB,CAAgB,CAAC,CAAA;gBACrD,CAAC,CAAC,CAAA;gBAEF,IAAI,CAAC,WAAW,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,CAAC,eAAQ,IAAI,CAAC,EAAE,gDAA6C,CAAC,CAAA;oBACzE,KAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;oBAC5C,OAAM;gBACV,CAAC;gBAED,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;oBAClC,MAAM,CAAC,IAAI,CAAC,eAAQ,IAAI,CAAC,EAAE,mEAAgE,CAAC,CAAA;oBAC5F,OAAM;gBACV,CAAC;gBAED,MAAM,CAAC,IAAI,CAAC,eAAQ,IAAI,CAAC,EAAE,oCAA0B,QAAQ,CAAE,CAAC,CAAA;gBAEhE,IAAI,KAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;oBACpD,KAAK,CAAC,cAAc,EAAE,CAAA;gBAC1B,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,IAAI,CAAC,eAAQ,IAAI,CAAC,EAAE,6CAA0C,CAAC,CAAA;gBAC1E,CAAC;YACL,CAAC,CAAA;YAED,IAAA,wBAAgB,EAAC,cAAc,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;YACnD,cAAc,CAAC,YAAY,CAAC,0BAA0B,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;YAChE,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,UAAA,EAAE,IAAI,MAAA,EAAE,CAAC,CAAA;YACxF,MAAM,CAAC,IAAI,CAAC,6CAAsC,IAAI,CAAC,EAAE,iBAAO,QAAQ,CAAE,CAAC,CAAA;QAC/E,CAAC;IACL,CAAC;IAEO,2DAA8B,GAAtC,UAAuC,MAAc;QACjD,IAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC3D,IAAI,QAAQ,EAAE,CAAC;YACX,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;YAChE,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,0BAA0B,CAAC,CAAA;YAC5D,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAC7C,MAAM,CAAC,IAAI,CAAC,4CAAqC,MAAM,CAAE,CAAC,CAAA;QAC9D,CAAC;IACL,CAAC;IAEO,uDAA0B,GAAlC;QAAA,iBAIC;QAHG,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,UAAC,CAAC,EAAE,MAAM;YAC7C,KAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAA;QAC/C,CAAC,CAAC,CAAA;IACN,CAAC;IAEO,0CAAa,GAArB,UAAsB,SAAiB,EAAE,UAA+B;QACpE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,OAAM;QACV,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;IACjD,CAAC;IAED,wDAAwD;IACxD,kDAAqB,GAArB,UAAsB,QAA6B;QAAnD,iBAUC;;QATG,MAAA,IAAI,CAAC,SAAS,CAAC,YAAY,0CAAE,eAAe,CAAC,UAAC,KAAK,EAAE,OAAO;YACxD,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,CAAA,EAAE,CAAC;gBACrB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;gBACrB,OAAM;YACV,CAAC;YAED,IAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,UAAC,IAAI,IAAK,OAAA,KAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAA1B,CAA0B,CAAC,CAAA;YACtE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;IACN,CAAC;IAED,sCAAS,GAAT,UAAU,MAAc;QACpB,oBAAU,CAAC,OAAO,CAAC,UAAG,iCAAqB,SAAG,MAAM,CAAE,CAAC,CAAA;QACvD,oBAAU,CAAC,OAAO,CAAC,UAAG,qCAAyB,SAAG,MAAM,CAAE,CAAC,CAAA;QAC3D,oBAAU,CAAC,OAAO,CAAC,UAAG,qCAAyB,SAAG,MAAM,CAAE,CAAC,CAAA;IAC/D,CAAC;IAED,0CAAa,GAAb;QACI,IAAM,OAAO,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,CAAA;QACpC,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAM;QACV,CAAC;QACD,IAAM,YAAY,GAAa,EAAE,CAAA;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAC1B,IACI,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,UAAU,CAAC,iCAAqB,CAAC;iBACtC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,UAAU,CAAC,qCAAyB,CAAC,CAAA;iBAC1C,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,UAAU,CAAC,qCAAyB,CAAC,CAAA,EAC5C,CAAC;gBACC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAC1B,CAAC;QACL,CAAC;QACD,YAAY,CAAC,OAAO,CAAC,UAAC,GAAG,IAAK,OAAA,oBAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAvB,CAAuB,CAAC,CAAA;IAC1D,CAAC;IAED,8CAAiB,GAAjB,UAAkB,MAAc;QAC5B,IAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACrD,IAAI,OAAO,EAAE,CAAC;YACV,YAAY,CAAC,OAAO,CAAC,CAAA;YACrB,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACxC,MAAM,CAAC,IAAI,CAAC,kCAA2B,MAAM,CAAE,CAAC,CAAA;QACpD,CAAC;IACL,CAAC;IAEO,mDAAsB,GAA9B;QACI,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,YAAY,CAAC,OAAO,CAAC,EAArB,CAAqB,CAAC,CAAA;QACrE,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAA;IACrC,CAAC;IAED,0CAAa,GAAb,UAAc,MAAc;QACxB,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAChD,CAAC;IAED,+CAAkB,GAAlB,UAAmB,MAAc,EAAE,YAAoB,EAAE,MAAgC;QAAzF,iBAUC;QATG,MAAM,CAAC,IAAI,CAAC,wBAAiB,MAAM,mBAAS,YAAY,YAAS,CAAC,CAAA;QAElE,IAAM,SAAS,GAAG,UAAU,CAAC;YACzB,KAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACxC,MAAM,CAAC,IAAI,CAAC,iCAA0B,MAAM,kBAAe,CAAC,CAAA;YAC5D,KAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACrC,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC,CAAA;QAEvB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACpD,CAAC;IACL,yBAAC;AAAD,CAAC,AAz4BD,IAy4BC;AAz4BY,gDAAkB","sourcesContent":["import { render } from 'preact'\nimport { PostHog } from '../../posthog-core'\nimport {\n ProductTour,\n ProductTourBannerConfig,\n ProductTourCallback,\n ProductTourDismissReason,\n ProductTourRenderReason,\n ProductTourStepButton,\n ShowTourOptions,\n} from '../../posthog-product-tours-types'\nimport { SurveyEventName, SurveyEventProperties } from '../../posthog-surveys-types'\nimport {\n addProductTourCSSVariablesToElement,\n findStepElement,\n getElementMetadata,\n getProductTourStylesheet,\n getStepImageUrls,\n hasElementTarget,\n normalizeUrl,\n} from './product-tours-utils'\nimport { ProductTourTooltip } from './components/ProductTourTooltip'\nimport { ProductTourBanner } from './components/ProductTourBanner'\nimport { createLogger } from '../../utils/logger'\nimport { document as _document, window as _window } from '../../utils/globals'\nimport { localStore, sessionStore } from '../../storage'\nimport { addEventListener } from '../../utils'\nimport { isNull, SurveyMatchType } from '@posthog/core'\nimport { propertyComparisons } from '../../utils/property-utils'\nimport {\n TOUR_SHOWN_KEY_PREFIX,\n TOUR_COMPLETED_KEY_PREFIX,\n TOUR_DISMISSED_KEY_PREFIX,\n ACTIVE_TOUR_SESSION_KEY,\n} from './constants'\nimport { doesTourActivateByAction, doesTourActivateByEvent } from '../../utils/product-tour-utils'\nimport { TOOLBAR_ID } from '../../constants'\nimport { ProductTourEventReceiver } from '../../utils/product-tour-event-receiver'\n\nconst logger = createLogger('[Product Tours]')\n\nconst document = _document as Document\nconst window = _window as Window & typeof globalThis\n\n// Tour condition checking - reuses the same URL matching logic as surveys\nfunction doesTourUrlMatch(tour: ProductTour): boolean {\n const conditions = tour.conditions\n if (!conditions?.url) {\n return true\n }\n\n const href = window?.location?.href\n if (!href) {\n return false\n }\n\n const matchType = conditions.urlMatchType || SurveyMatchType.Icontains\n\n if (matchType === SurveyMatchType.Exact) {\n return normalizeUrl(href) === normalizeUrl(conditions.url)\n }\n\n const targets = [conditions.url]\n return propertyComparisons[matchType](targets, [href])\n}\n\nfunction isTourInDateRange(tour: ProductTour): boolean {\n const now = new Date()\n\n if (tour.start_date) {\n const startDate = new Date(tour.start_date)\n if (now < startDate) {\n return false\n }\n }\n\n if (tour.end_date) {\n const endDate = new Date(tour.end_date)\n if (now > endDate) {\n return false\n }\n }\n\n return true\n}\n\nfunction checkTourConditions(tour: ProductTour): boolean {\n return isTourInDateRange(tour) && doesTourUrlMatch(tour)\n}\n\nconst CONTAINER_CLASS = 'ph-product-tour-container'\nconst TRIGGER_LISTENER_ATTRIBUTE = 'data-ph-tour-trigger'\nconst CHECK_INTERVAL_MS = 1000\n\ninterface TriggerListenerData {\n element: Element\n listener: (event: Event) => void\n tour: ProductTour\n}\n\nfunction retrieveTourShadow(tour: ProductTour): { shadow: ShadowRoot; isNewlyCreated: boolean } {\n const containerClass = `${CONTAINER_CLASS}-${tour.id}`\n const existingDiv = document.querySelector(`.${containerClass}`)\n\n if (existingDiv && existingDiv.shadowRoot) {\n return {\n shadow: existingDiv.shadowRoot,\n isNewlyCreated: false,\n }\n }\n\n const div = document.createElement('div')\n div.className = containerClass\n\n addProductTourCSSVariablesToElement(div, tour.appearance)\n\n const shadow = div.attachShadow({ mode: 'open' })\n\n const stylesheet = getProductTourStylesheet()\n if (stylesheet) {\n shadow.appendChild(stylesheet)\n }\n\n document.body.appendChild(div)\n\n return {\n shadow,\n isNewlyCreated: true,\n }\n}\n\nfunction retrieveBannerShadow(\n tour: ProductTour,\n bannerConfig?: ProductTourBannerConfig\n): { shadow: ShadowRoot; isNewlyCreated: boolean } | null {\n const containerClass = `${CONTAINER_CLASS}-${tour.id}`\n const existingDiv = document.querySelector(`.${containerClass}`)\n\n if (existingDiv && existingDiv.shadowRoot) {\n return {\n shadow: existingDiv.shadowRoot,\n isNewlyCreated: false,\n }\n }\n\n const div = document.createElement('div')\n div.className = containerClass\n\n addProductTourCSSVariablesToElement(div, tour.appearance)\n\n const shadow = div.attachShadow({ mode: 'open' })\n\n const stylesheet = getProductTourStylesheet()\n if (stylesheet) {\n shadow.appendChild(stylesheet)\n }\n\n if (bannerConfig?.behavior === 'custom' && bannerConfig.selector) {\n const customContainer = document.querySelector(bannerConfig.selector)\n if (customContainer) {\n customContainer.appendChild(div)\n } else {\n logger.warn(`Custom banner container not found: ${bannerConfig.selector}. Banner will not be displayed.`)\n return null\n }\n } else {\n document.body.insertBefore(div, document.body.firstChild)\n }\n\n return {\n shadow,\n isNewlyCreated: true,\n }\n}\n\nfunction removeTourFromDom(tourId: string): void {\n const containerClass = `${CONTAINER_CLASS}-${tourId}`\n const container = document.querySelector(`.${containerClass}`)\n if (container?.shadowRoot) {\n render(null, container.shadowRoot)\n }\n container?.remove()\n}\n\nconst PRODUCT_TOUR_TARGETING_FLAG_PREFIX = 'product-tour-targeting-'\n\nexport class ProductTourManager {\n private _instance: PostHog\n private _activeTour: ProductTour | null = null\n private _currentStepIndex: number = 0\n private _isPreviewMode: boolean = false\n private _isResuming: boolean = false\n private _checkInterval: ReturnType<typeof setInterval> | null = null\n private _triggerSelectorListeners: Map<string, TriggerListenerData> = new Map()\n private _pendingTourTimeouts: Map<string, ReturnType<typeof setTimeout>> = new Map()\n private _eventReceiver: ProductTourEventReceiver\n private _registeredEventTourIds: Set<string> = new Set()\n private _preloadedImageUrls: Set<string> = new Set()\n\n constructor(instance: PostHog) {\n this._instance = instance\n this._eventReceiver = new ProductTourEventReceiver(instance)\n }\n\n private _preloadTourImages(tours: ProductTour[]): void {\n const urls = tours\n .filter((tour) => !tour.disable_image_preload)\n .flatMap((tour) => tour.steps.flatMap(getStepImageUrls))\n\n for (const url of urls) {\n if (!this._preloadedImageUrls.has(url)) {\n this._preloadedImageUrls.add(url)\n new Image().src = url\n }\n }\n }\n\n private _setStepIndex(index: number): void {\n this._currentStepIndex = index\n this._saveSessionState()\n }\n\n private _saveSessionState(): void {\n if (!this._activeTour || this._isPreviewMode) {\n return\n }\n sessionStore._set(ACTIVE_TOUR_SESSION_KEY, {\n tourId: this._activeTour.id,\n stepIndex: this._currentStepIndex,\n })\n }\n\n private _clearSessionState(): void {\n sessionStore._remove(ACTIVE_TOUR_SESSION_KEY)\n }\n\n private _getSessionState(): { tourId: string; stepIndex: number } | null {\n const stored = sessionStore._get(ACTIVE_TOUR_SESSION_KEY)\n if (!stored) {\n return null\n }\n try {\n return JSON.parse(stored)\n } catch {\n return null\n }\n }\n\n start(): void {\n if (this._checkInterval) {\n return\n }\n\n // Check for saved session state before starting the evaluation loop\n const savedState = this._getSessionState()\n if (savedState) {\n this._resumeSavedTour(savedState.tourId, savedState.stepIndex, () => {\n this._startEvaluationLoop()\n })\n } else {\n this._startEvaluationLoop()\n }\n }\n\n private _startEvaluationLoop(): void {\n this._checkInterval = setInterval(() => {\n this._evaluateAndDisplayTours()\n }, CHECK_INTERVAL_MS)\n\n this._evaluateAndDisplayTours(true)\n addEventListener(document, 'visibilitychange', this._handleVisibilityChange)\n }\n\n private _resumeSavedTour(tourId: string, stepIndex: number, onComplete: () => void): void {\n this._instance.productTours?.getProductTours((tours) => {\n const tour = tours.find((t) => t.id === tourId)\n\n if (!tour) {\n if (tours.length > 0) {\n this._clearSessionState()\n }\n } else {\n this._activeTour = tour\n this._currentStepIndex = stepIndex\n this._isResuming = true\n this._renderCurrentStep()\n }\n\n onComplete()\n })\n }\n\n stop(): void {\n if (this._checkInterval) {\n clearInterval(this._checkInterval)\n this._checkInterval = null\n }\n document.removeEventListener('visibilitychange', this._handleVisibilityChange)\n this._removeAllTriggerListeners()\n this._cancelAllPendingTours()\n this._cleanup()\n }\n\n private _handleVisibilityChange = (): void => {\n if (document.hidden && this._checkInterval) {\n clearInterval(this._checkInterval)\n this._checkInterval = null\n } else if (!document.hidden && !this._checkInterval) {\n this._checkInterval = setInterval(() => {\n this._evaluateAndDisplayTours()\n }, CHECK_INTERVAL_MS)\n this._evaluateAndDisplayTours()\n }\n }\n\n private _evaluateAndDisplayTours(forceReload?: boolean): void {\n if (document?.getElementById(TOOLBAR_ID)) {\n return\n }\n\n // Use getProductTours (not getActiveProductTours) because selector-triggered tours\n // should work even if completed/dismissed\n this._instance.productTours?.getProductTours((tours) => {\n if (tours.length === 0) {\n this._removeAllTriggerListeners()\n return\n }\n\n this._preloadTourImages(tours)\n\n const activeTriggerTourIds = new Set<string>()\n\n const unregisteredEventTours = tours.filter(\n (tour: ProductTour) =>\n !this._registeredEventTourIds.has(tour.id) &&\n (doesTourActivateByEvent(tour) || doesTourActivateByAction(tour))\n )\n if (unregisteredEventTours.length > 0) {\n this._eventReceiver.register(unregisteredEventTours)\n unregisteredEventTours.forEach((tour) => this._registeredEventTourIds.add(tour.id))\n }\n\n const eventActivatedTourIds = this._activeTour ? [] : this._eventReceiver.getTours()\n\n /**\n * tours can be shown three ways, really:\n *\n * 1) selector clicks\n * 2a) auto-show immediately\n * 2b) auto-show after event/action\n *\n * (1) and (2[a|b]) are fully independent of each other\n */\n for (const tour of tours) {\n // 1) SELECTOR CLICK TRIGGER - just attach an event listener and keep going\n const triggerSelector = tour.conditions?.selector\n if (triggerSelector) {\n activeTriggerTourIds.add(tour.id)\n this._manageTriggerSelectorListener(tour, triggerSelector)\n }\n\n // skip auto-launch checks if a tour is already active\n if (this._activeTour) {\n continue\n }\n\n // 2) AUTO-LAUNCH\n const hasEventOrActionTriggers = doesTourActivateByAction(tour) || doesTourActivateByEvent(tour)\n\n if (tour.auto_launch && this._isTourEligible(tour)) {\n // tour should auto-launch, and the current session is eligible\n\n if (!hasEventOrActionTriggers) {\n // 2a) AUTO-SHOW WITH NO EVENT/ACTION\n this._showOrQueueTour(tour, 'auto')\n continue\n }\n\n // 2b) AUTO-SHOW, BUT WAIT FOR EVENT/ACTION\n if (eventActivatedTourIds.includes(tour.id)) {\n this._showOrQueueTour(tour, 'event')\n }\n }\n }\n\n this._triggerSelectorListeners.forEach(({ tour }) => {\n if (!activeTriggerTourIds.has(tour.id)) {\n this._removeTriggerSelectorListener(tour.id)\n }\n })\n }, forceReload)\n }\n\n private _showOrQueueTour(tour: ProductTour, reason: ProductTourRenderReason): void {\n const delaySeconds = tour.conditions?.autoShowDelaySeconds || 0\n if (delaySeconds > 0) {\n if (!this.isTourPending(tour.id)) {\n this.queueTourWithDelay(tour.id, delaySeconds, reason)\n }\n } else {\n this.showTour(tour, { reason })\n }\n }\n\n private _isTourEligible(tour: ProductTour): boolean {\n if (!checkTourConditions(tour)) {\n logger.info(`Tour ${tour.id} failed conditions check`)\n return false\n }\n\n const displayFrequency = tour.display_frequency ?? 'until_interacted'\n const shownKey = `${TOUR_SHOWN_KEY_PREFIX}${tour.id}`\n const completedKey = `${TOUR_COMPLETED_KEY_PREFIX}${tour.id}`\n const dismissedKey = `${TOUR_DISMISSED_KEY_PREFIX}${tour.id}`\n\n switch (displayFrequency) {\n case 'show_once':\n if (localStore._get(shownKey)) {\n logger.info(`Tour ${tour.id} already shown (show_once frequency)`)\n return false\n }\n break\n\n case 'until_interacted':\n if (localStore._get(completedKey) || localStore._get(dismissedKey)) {\n logger.info(`Tour ${tour.id} already completed or dismissed`)\n return false\n }\n break\n\n case 'always':\n default:\n break\n }\n\n if (!this._isProductToursFeatureFlagEnabled({ flagKey: tour.internal_targeting_flag_key })) {\n logger.info(`Tour ${tour.id} failed feature flag check: ${tour.internal_targeting_flag_key}`)\n return false\n }\n\n const linkedFlagVariant = tour.conditions?.linkedFlagVariant\n if (\n !this._isProductToursFeatureFlagEnabled({ flagKey: tour.linked_flag_key, flagVariant: linkedFlagVariant })\n ) {\n logger.info(\n `Tour ${tour.id} failed feature flag check: ${tour.linked_flag_key}, variant: ${linkedFlagVariant}`\n )\n return false\n }\n\n return true\n }\n\n showTour(tour: ProductTour, options?: ShowTourOptions): boolean {\n const renderReason: ProductTourRenderReason = options?.reason ?? 'auto'\n\n this.cancelPendingTour(tour.id)\n\n this._activeTour = tour\n this._setStepIndex(0)\n\n const rendered = this._renderCurrentStep()\n\n if (rendered) {\n this._captureEvent('product tour shown', {\n $product_tour_id: tour.id,\n $product_tour_name: tour.name,\n $product_tour_iteration: tour.current_iteration || 1,\n $product_tour_render_reason: renderReason,\n })\n\n if (!this._isPreviewMode) {\n localStore._set(`${TOUR_SHOWN_KEY_PREFIX}${tour.id}`, true)\n\n this._instance.capture('$set', {\n $set: { [`$product_tour_shown/${tour.id}`]: true },\n })\n }\n } else {\n this._cleanup()\n }\n\n return rendered\n }\n\n showTourById(tourId: string, reason?: ProductTourRenderReason): void {\n logger.info(`showTourById(${tourId})`)\n this._instance.productTours?.getProductTours((tours) => {\n const tour = tours.find((t) => t.id === tourId)\n if (tour) {\n this.showTour(tour, { reason: reason ?? 'api' })\n } else {\n logger.warn('could not find tour', tourId)\n }\n })\n }\n\n previewTour(tour: ProductTour): void {\n logger.info(`Previewing tour ${tour.id}`)\n\n this._cleanup()\n\n this._isPreviewMode = true\n this._activeTour = tour\n this._currentStepIndex = 0\n\n this._renderCurrentStep()\n }\n\n nextStep = (): void => {\n if (!this._activeTour) {\n return\n }\n\n const currentStep = this._activeTour.steps[this._currentStepIndex]\n\n this._captureEvent('product tour step completed', {\n $product_tour_id: this._activeTour.id,\n $product_tour_step_id: currentStep.id,\n $product_tour_step_order: this._currentStepIndex,\n })\n\n if (this._currentStepIndex < this._activeTour.steps.length - 1) {\n this._setStepIndex(this._currentStepIndex + 1)\n this._renderCurrentStep()\n } else {\n this._completeTour()\n }\n }\n\n previousStep = (): void => {\n if (!this._activeTour || this._currentStepIndex === 0) {\n return\n }\n\n this._setStepIndex(this._currentStepIndex - 1)\n this._renderCurrentStep()\n }\n\n dismissTour = (reason: ProductTourDismissReason = 'user_clicked_skip'): void => {\n if (!this._activeTour) {\n return\n }\n\n const currentStep = this._activeTour.steps[this._currentStepIndex]\n\n this._captureEvent('product tour dismissed', {\n $product_tour_id: this._activeTour.id,\n $product_tour_step_id: currentStep.id,\n $product_tour_step_order: this._currentStepIndex,\n $product_tour_dismiss_reason: reason,\n })\n\n if (!this._isPreviewMode) {\n localStore._set(`${TOUR_DISMISSED_KEY_PREFIX}${this._activeTour.id}`, true)\n\n this._instance.capture('$set', {\n $set: { [`$product_tour_dismissed/${this._activeTour.id}`]: true },\n })\n }\n\n window.dispatchEvent(\n new CustomEvent('PHProductTourDismissed', { detail: { tourId: this._activeTour.id, reason } })\n )\n\n this._cleanup()\n }\n\n private _handleButtonClick = (button: ProductTourStepButton): void => {\n if (this._activeTour) {\n const currentStep = this._activeTour.steps[this._currentStepIndex]\n if (currentStep) {\n this._captureEvent('product tour button clicked', {\n $product_tour_id: this._activeTour.id,\n $product_tour_name: this._activeTour.name,\n $product_tour_iteration: this._activeTour.current_iteration || 1,\n $product_tour_step_id: currentStep.id,\n $product_tour_step_order: this._currentStepIndex,\n $product_tour_button_text: button.text,\n $product_tour_button_action: button.action,\n ...(button.link && { $product_tour_button_link: button.link }),\n ...(button.tourId && { $product_tour_button_tour_id: button.tourId }),\n })\n }\n }\n\n switch (button.action) {\n case 'dismiss':\n this.dismissTour('user_clicked_skip')\n break\n case 'next_step':\n this.nextStep()\n break\n case 'previous_step':\n this.previousStep()\n break\n case 'link':\n this._completeTour()\n break\n case 'trigger_tour':\n if (button.tourId) {\n this._completeTour()\n this.showTourById(button.tourId)\n }\n break\n }\n }\n\n private _completeTour(): void {\n if (!this._activeTour) {\n return\n }\n\n this._captureEvent('product tour completed', {\n $product_tour_id: this._activeTour.id,\n $product_tour_steps_count: this._activeTour.steps.length,\n })\n\n if (!this._isPreviewMode) {\n localStore._set(`${TOUR_COMPLETED_KEY_PREFIX}${this._activeTour.id}`, true)\n\n this._instance.capture('$set', {\n $set: {\n [`$product_tour_completed/${this._activeTour.id}`]: true,\n },\n })\n }\n\n window.dispatchEvent(new CustomEvent('PHProductTourCompleted', { detail: { tourId: this._activeTour.id } }))\n\n this._cleanup()\n }\n\n private _renderCurrentStep(retryCount: number = 0): boolean {\n if (!this._activeTour) {\n return false\n }\n\n const step = this._activeTour.steps[this._currentStepIndex]\n if (!step) {\n logger.warn(`Step ${this._currentStepIndex} not found in tour ${this._activeTour.id}`)\n this._cleanup()\n return false\n }\n\n // Banner step - render full-width banner\n if (step.type === 'banner') {\n this._captureEvent('product tour step shown', {\n $product_tour_id: this._activeTour.id,\n $product_tour_step_id: step.id,\n $product_tour_step_order: this._currentStepIndex,\n $product_tour_step_type: 'banner',\n })\n\n this._isResuming = false\n this._renderBanner()\n return true\n }\n\n // Survey step - render native survey step component\n if (step.type === 'survey') {\n if (step.survey) {\n this._renderSurveyStep()\n return true\n }\n\n logger.warn('Unable to render survey step - survey data not found')\n return false\n }\n\n // Screen-positioned step (no element targeting) - render without a target element\n if (!hasElementTarget(step)) {\n this._captureEvent('product tour step shown', {\n $product_tour_id: this._activeTour.id,\n $product_tour_step_id: step.id,\n $product_tour_step_order: this._currentStepIndex,\n $product_tour_step_type: step.type,\n })\n\n this._isResuming = false\n this._renderTooltipWithPreact(null)\n return true\n }\n\n const result = findStepElement(step)\n\n const inferenceProps = {\n $use_manual_selector: step.useManualSelector ?? false,\n $inference_data_present: !!step.inferenceData,\n }\n\n const previousStep = this._currentStepIndex > 0 ? this._activeTour.steps[this._currentStepIndex - 1] : null\n const shouldWaitForElement = previousStep?.progressionTrigger === 'click' || this._isResuming\n\n // 2s total timeout\n const maxRetries = 20\n const retryTimeout = 100\n\n if (result.error === 'not_found' || result.error === 'not_visible') {\n // if previous step was click-to-progress, or we are resuming a tour,\n // give some time for the next element\n if (shouldWaitForElement && retryCount < maxRetries) {\n setTimeout(() => {\n this._renderCurrentStep(retryCount + 1)\n }, retryTimeout)\n\n return false\n }\n\n const waitDurationMs = retryCount * retryTimeout\n\n this._captureEvent('product tour step selector failed', {\n $product_tour_id: this._activeTour.id,\n $product_tour_step_id: step.id,\n $product_tour_step_order: this._currentStepIndex,\n $product_tour_step_selector: step.selector,\n $product_tour_error: result.error,\n $product_tour_matches_count: result.matchCount,\n $product_tour_failure_phase: 'runtime',\n $product_tour_waited_for_element: shouldWaitForElement,\n $product_tour_wait_duration_ms: waitDurationMs,\n ...inferenceProps,\n })\n\n if (this._currentStepIndex === 0 && !this._isResuming) {\n logger.warn(\n `Tour \"${this._activeTour.name}\" failed to show: element for first step not found (${result.error})`\n )\n return false\n }\n\n logger.warn(\n `Tour \"${this._activeTour.name}\" dismissed: element for step ${this._currentStepIndex} became unavailable (${result.error})` +\n (shouldWaitForElement ? ` after waiting ${waitDurationMs}ms` : '')\n )\n this.dismissTour('element_unavailable')\n return false\n }\n\n if (result.error === 'multiple_matches') {\n this._captureEvent('product tour step selector failed', {\n $product_tour_id: this._activeTour.id,\n $product_tour_step_id: step.id,\n $product_tour_step_order: this._currentStepIndex,\n $product_tour_step_selector: step.selector,\n $product_tour_error: result.error,\n $product_tour_matches_count: result.matchCount,\n $product_tour_failure_phase: 'runtime',\n ...inferenceProps,\n })\n // Continue with first match for multiple_matches case\n }\n\n if (!result.element) {\n return false\n }\n\n const element = result.element\n const metadata = getElementMetadata(element)\n\n this._captureEvent('product tour step shown', {\n $product_tour_id: this._activeTour.id,\n $product_tour_step_id: step.id,\n $product_tour_step_order: this._currentStepIndex,\n $product_tour_step_selector: step.selector,\n $product_tour_step_selector_found: true,\n $product_tour_step_element_tag: metadata.tag,\n $product_tour_step_element_id: metadata.id,\n $product_tour_step_element_classes: metadata.classes,\n $product_tour_step_element_text: metadata.text,\n ...inferenceProps,\n })\n\n this._isResuming = false\n this._renderTooltipWithPreact(element)\n return true\n }\n\n private _renderTooltipWithPreact(\n element: HTMLElement | null,\n onSurveySubmit?: (response: string | number | null) => void,\n onDismissOverride?: (reason: ProductTourDismissReason) => void\n ): void {\n if (!this._activeTour) {\n return\n }\n\n const step = this._activeTour.steps[this._currentStepIndex]\n const { shadow } = retrieveTourShadow(this._activeTour)\n\n render(\n <ProductTourTooltip\n tour={this._activeTour}\n step={step}\n stepIndex={this._currentStepIndex}\n totalSteps={this._activeTour.steps.length}\n targetElement={element}\n onNext={this.nextStep}\n onPrevious={this.previousStep}\n onDismiss={onDismissOverride || this.dismissTour}\n onSurveySubmit={onSurveySubmit}\n onButtonClick={this._handleButtonClick}\n />,\n shadow\n )\n }\n\n private _renderBanner(): void {\n if (!this._activeTour) {\n return\n }\n\n const step = this._activeTour.steps[this._currentStepIndex]\n const result = retrieveBannerShadow(this._activeTour, step.bannerConfig)\n\n if (!result) {\n this._captureEvent('product tour banner container selector failed', {\n $product_tour_id: this._activeTour.id,\n $product_tour_banner_selector: step?.bannerConfig?.selector,\n })\n this.dismissTour('container_unavailable')\n return\n }\n\n const { shadow } = result\n\n const handleTriggerTour = () => {\n const tourId = step.bannerConfig?.action?.tourId\n if (tourId) {\n this._cleanup()\n this.showTourById(tourId)\n }\n }\n\n render(\n <ProductTourBanner\n step={step}\n onDismiss={() => this.dismissTour('user_clicked_skip')}\n onTriggerTour={handleTriggerTour}\n displayFrequency={this._activeTour.display_frequency}\n />,\n shadow\n )\n }\n\n private _renderSurveyStep(): void {\n if (!this._activeTour) {\n return\n }\n\n const tourId = this._activeTour.id\n const step = this._activeTour.steps[this._currentStepIndex]\n const surveyId = step.linkedSurveyId\n const questionId = step.linkedSurveyQuestionId\n const questionText = step.survey?.questionText || ''\n\n this._captureEvent('product tour step shown', {\n $product_tour_id: this._activeTour.id,\n $product_tour_step_id: step.id,\n $product_tour_step_order: this._currentStepIndex,\n $product_tour_step_type: 'survey',\n $product_tour_linked_survey_id: surveyId,\n })\n\n this._captureEvent(SurveyEventName.SHOWN, {\n [SurveyEventProperties.SURVEY_ID]: surveyId,\n [SurveyEventProperties.PRODUCT_TOUR_ID]: tourId,\n sessionRecordingUrl: this._instance.get_session_replay_url?.(),\n })\n\n const handleSubmit = (response: string | number | null) => {\n const responseKey = questionId ? `$survey_response_${questionId}` : '$survey_response'\n this._captureEvent(SurveyEventName.SENT, {\n [SurveyEventProperties.SURVEY_ID]: surveyId,\n [SurveyEventProperties.PRODUCT_TOUR_ID]: tourId,\n [SurveyEventProperties.SURVEY_QUESTIONS]: [\n {\n id: questionId,\n question: questionText,\n response: response,\n },\n ],\n [SurveyEventProperties.SURVEY_COMPLETED]: true,\n sessionRecordingUrl: this._instance.get_session_replay_url?.(),\n ...(!isNull(response) && { [responseKey]: response }),\n })\n\n logger.info(`Survey ${surveyId} completed`, !isNull(response) ? `with response: ${response}` : '(skipped)')\n this.nextStep()\n }\n\n const handleDismiss = (reason: ProductTourDismissReason) => {\n this._captureEvent(SurveyEventName.DISMISSED, {\n [SurveyEventProperties.SURVEY_ID]: surveyId,\n [SurveyEventProperties.PRODUCT_TOUR_ID]: tourId,\n [SurveyEventProperties.SURVEY_QUESTIONS]: [\n {\n id: questionId,\n question: questionText,\n response: null,\n },\n ],\n [SurveyEventProperties.SURVEY_PARTIALLY_COMPLETED]: false,\n sessionRecordingUrl: this._instance.get_session_replay_url?.(),\n })\n\n logger.info(`Survey ${surveyId} dismissed`)\n this.dismissTour(reason)\n }\n\n this._renderTooltipWithPreact(null, handleSubmit, handleDismiss)\n\n logger.info(`Rendered survey step for tour step ${this._currentStepIndex}`)\n }\n\n private _isProductToursFeatureFlagEnabled({ flagKey, flagVariant }: { flagKey?: string; flagVariant?: string }) {\n if (!flagKey) {\n return true\n }\n const isFeatureEnabled = !!this._instance.featureFlags.isFeatureEnabled(flagKey, {\n send_event: !flagKey.startsWith(PRODUCT_TOUR_TARGETING_FLAG_PREFIX),\n })\n let flagVariantCheck = true\n if (flagVariant) {\n const flagVariantValue = this._instance.featureFlags.getFeatureFlag(flagKey, { send_event: false })\n flagVariantCheck = flagVariantValue === flagVariant || flagVariant === 'any'\n }\n return isFeatureEnabled && flagVariantCheck\n }\n\n private _cleanup(): void {\n if (this._activeTour) {\n removeTourFromDom(this._activeTour.id)\n }\n\n this._activeTour = null\n this._currentStepIndex = 0\n this._isPreviewMode = false\n this._isResuming = false\n this._clearSessionState()\n }\n\n private _manageTriggerSelectorListener(tour: ProductTour, selector: string): void {\n const currentElement = document.querySelector(selector)\n const existingListenerData = this._triggerSelectorListeners.get(tour.id)\n\n if (!currentElement) {\n if (existingListenerData) {\n this._removeTriggerSelectorListener(tour.id)\n }\n return\n }\n\n if (existingListenerData) {\n if (currentElement !== existingListenerData.element) {\n logger.info(`Trigger element changed for tour ${tour.id}. Re-attaching listener.`)\n this._removeTriggerSelectorListener(tour.id)\n } else {\n return\n }\n }\n\n if (!currentElement.hasAttribute(TRIGGER_LISTENER_ATTRIBUTE)) {\n const listener = (event: Event) => {\n if (this._activeTour) {\n logger.info(`Tour ${tour.id} trigger clicked but another tour is active`)\n return\n }\n\n let currentTour: ProductTour | undefined\n this._instance.productTours?.getProductTours((tours) => {\n currentTour = tours.find((t) => t.id === tour.id)\n })\n\n if (!currentTour) {\n logger.warn(`Tour ${tour.id} no longer exists. Removing stale listener.`)\n this._removeTriggerSelectorListener(tour.id)\n return\n }\n\n if (!isTourInDateRange(currentTour)) {\n logger.warn(`Tour ${tour.id} trigger clicked, but tour is not launched - not showing tour.`)\n return\n }\n\n logger.info(`Tour ${tour.id} triggered by click on ${selector}`)\n\n if (this.showTour(currentTour, { reason: 'trigger' })) {\n event.preventDefault()\n } else {\n logger.info(`Tour ${tour.id} failed to show; not intercepting click.`)\n }\n }\n\n addEventListener(currentElement, 'click', listener)\n currentElement.setAttribute(TRIGGER_LISTENER_ATTRIBUTE, tour.id)\n this._triggerSelectorListeners.set(tour.id, { element: currentElement, listener, tour })\n logger.info(`Attached trigger listener for tour ${tour.id} on ${selector}`)\n }\n }\n\n private _removeTriggerSelectorListener(tourId: string): void {\n const existing = this._triggerSelectorListeners.get(tourId)\n if (existing) {\n existing.element.removeEventListener('click', existing.listener)\n existing.element.removeAttribute(TRIGGER_LISTENER_ATTRIBUTE)\n this._triggerSelectorListeners.delete(tourId)\n logger.info(`Removed trigger listener for tour ${tourId}`)\n }\n }\n\n private _removeAllTriggerListeners(): void {\n this._triggerSelectorListeners.forEach((_, tourId) => {\n this._removeTriggerSelectorListener(tourId)\n })\n }\n\n private _captureEvent(eventName: string, properties: Record<string, any>): void {\n if (this._isPreviewMode) {\n return\n }\n this._instance.capture(eventName, properties)\n }\n\n // Public API methods delegated from PostHogProductTours\n getActiveProductTours(callback: ProductTourCallback): void {\n this._instance.productTours?.getProductTours((tours, context) => {\n if (!context?.isLoaded) {\n callback([], context)\n return\n }\n\n const activeTours = tours.filter((tour) => this._isTourEligible(tour))\n callback(activeTours, context)\n })\n }\n\n resetTour(tourId: string): void {\n localStore._remove(`${TOUR_SHOWN_KEY_PREFIX}${tourId}`)\n localStore._remove(`${TOUR_COMPLETED_KEY_PREFIX}${tourId}`)\n localStore._remove(`${TOUR_DISMISSED_KEY_PREFIX}${tourId}`)\n }\n\n resetAllTours(): void {\n const storage = window?.localStorage\n if (!storage) {\n return\n }\n const keysToRemove: string[] = []\n for (let i = 0; i < storage.length; i++) {\n const key = storage.key(i)\n if (\n key?.startsWith(TOUR_SHOWN_KEY_PREFIX) ||\n key?.startsWith(TOUR_COMPLETED_KEY_PREFIX) ||\n key?.startsWith(TOUR_DISMISSED_KEY_PREFIX)\n ) {\n keysToRemove.push(key)\n }\n }\n keysToRemove.forEach((key) => localStore._remove(key))\n }\n\n cancelPendingTour(tourId: string): void {\n const timeout = this._pendingTourTimeouts.get(tourId)\n if (timeout) {\n clearTimeout(timeout)\n this._pendingTourTimeouts.delete(tourId)\n logger.info(`Cancelled pending tour: ${tourId}`)\n }\n }\n\n private _cancelAllPendingTours(): void {\n this._pendingTourTimeouts.forEach((timeout) => clearTimeout(timeout))\n this._pendingTourTimeouts.clear()\n }\n\n isTourPending(tourId: string): boolean {\n return this._pendingTourTimeouts.has(tourId)\n }\n\n queueTourWithDelay(tourId: string, delaySeconds: number, reason?: ProductTourRenderReason): void {\n logger.info(`Queueing tour ${tourId} with ${delaySeconds}s delay`)\n\n const timeoutId = setTimeout(() => {\n this._pendingTourTimeouts.delete(tourId)\n logger.info(`Delay elapsed for tour ${tourId}, showing now`)\n this.showTourById(tourId, reason)\n }, delaySeconds * 1000)\n\n this._pendingTourTimeouts.set(tourId, timeoutId)\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"product-tours.js","sourceRoot":"","sources":["../../../../src/extensions/product-tours/product-tours.tsx"],"names":[],"mappings":"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","sourcesContent":["import { render } from 'preact'\nimport { PostHog } from '../../posthog-core'\nimport {\n ProductTour,\n ProductTourBannerConfig,\n ProductTourCallback,\n ProductTourDismissReason,\n ProductTourEventName,\n ProductTourEventProperties,\n ProductTourRenderReason,\n ProductTourStepButton,\n ShowTourOptions,\n} from '../../posthog-product-tours-types'\nimport { SurveyEventName, SurveyEventProperties } from '../../posthog-surveys-types'\nimport {\n addProductTourCSSVariablesToElement,\n ElementFindResult,\n findStepElement,\n getElementMetadata,\n getProductTourStylesheet,\n getStepImageUrls,\n hasElementTarget,\n normalizeUrl,\n} from './product-tours-utils'\nimport { ProductTourTooltip } from './components/ProductTourTooltip'\nimport { ProductTourBanner } from './components/ProductTourBanner'\nimport { createLogger } from '../../utils/logger'\nimport { document as _document, window as _window } from '../../utils/globals'\nimport { localStore, sessionStore } from '../../storage'\nimport { addEventListener } from '../../utils'\nimport { isNull, SurveyMatchType } from '@posthog/core'\nimport { propertyComparisons } from '../../utils/property-utils'\nimport {\n TOUR_SHOWN_KEY_PREFIX,\n TOUR_COMPLETED_KEY_PREFIX,\n TOUR_DISMISSED_KEY_PREFIX,\n ACTIVE_TOUR_SESSION_KEY,\n} from './constants'\nimport { doesTourActivateByAction, doesTourActivateByEvent } from '../../utils/product-tour-utils'\nimport { TOOLBAR_ID } from '../../constants'\nimport { ProductTourEventReceiver } from '../../utils/product-tour-event-receiver'\n\nconst logger = createLogger('[Product Tours]')\n\nconst document = _document as Document\nconst window = _window as Window & typeof globalThis\n\n// Tour condition checking - reuses the same URL matching logic as surveys\nfunction doesTourUrlMatch(tour: ProductTour): boolean {\n const conditions = tour.conditions\n if (!conditions?.url) {\n return true\n }\n\n const href = window?.location?.href\n if (!href) {\n return false\n }\n\n const matchType = conditions.urlMatchType || SurveyMatchType.Icontains\n\n if (matchType === SurveyMatchType.Exact) {\n return normalizeUrl(href) === normalizeUrl(conditions.url)\n }\n\n const targets = [conditions.url]\n return propertyComparisons[matchType](targets, [href])\n}\n\nfunction isTourInDateRange(tour: ProductTour): boolean {\n const now = new Date()\n\n if (tour.start_date) {\n const startDate = new Date(tour.start_date)\n if (now < startDate) {\n return false\n }\n }\n\n if (tour.end_date) {\n const endDate = new Date(tour.end_date)\n if (now > endDate) {\n return false\n }\n }\n\n return true\n}\n\nfunction checkTourConditions(tour: ProductTour): boolean {\n return isTourInDateRange(tour) && doesTourUrlMatch(tour)\n}\n\nconst CONTAINER_CLASS = 'ph-product-tour-container'\nconst TRIGGER_LISTENER_ATTRIBUTE = 'data-ph-tour-trigger'\nconst CHECK_INTERVAL_MS = 1000\n\ninterface TriggerListenerData {\n element: Element\n listener: (event: Event) => void\n tour: ProductTour\n}\n\nfunction retrieveTourShadow(tour: ProductTour): { shadow: ShadowRoot; isNewlyCreated: boolean } {\n const containerClass = `${CONTAINER_CLASS}-${tour.id}`\n const existingDiv = document.querySelector(`.${containerClass}`)\n\n if (existingDiv && existingDiv.shadowRoot) {\n return {\n shadow: existingDiv.shadowRoot,\n isNewlyCreated: false,\n }\n }\n\n const div = document.createElement('div')\n div.className = containerClass\n\n addProductTourCSSVariablesToElement(div, tour.appearance)\n\n const shadow = div.attachShadow({ mode: 'open' })\n\n const stylesheet = getProductTourStylesheet()\n if (stylesheet) {\n shadow.appendChild(stylesheet)\n }\n\n document.body.appendChild(div)\n\n return {\n shadow,\n isNewlyCreated: true,\n }\n}\n\nfunction retrieveBannerShadow(\n tour: ProductTour,\n bannerConfig?: ProductTourBannerConfig\n): { shadow: ShadowRoot; isNewlyCreated: boolean } | null {\n const containerClass = `${CONTAINER_CLASS}-${tour.id}`\n const existingDiv = document.querySelector(`.${containerClass}`)\n\n if (existingDiv && existingDiv.shadowRoot) {\n return {\n shadow: existingDiv.shadowRoot,\n isNewlyCreated: false,\n }\n }\n\n const div = document.createElement('div')\n div.className = containerClass\n\n addProductTourCSSVariablesToElement(div, tour.appearance)\n\n const shadow = div.attachShadow({ mode: 'open' })\n\n const stylesheet = getProductTourStylesheet()\n if (stylesheet) {\n shadow.appendChild(stylesheet)\n }\n\n if (bannerConfig?.behavior === 'custom' && bannerConfig.selector) {\n const customContainer = document.querySelector(bannerConfig.selector)\n if (customContainer) {\n customContainer.appendChild(div)\n } else {\n logger.warn(`Custom banner container not found: ${bannerConfig.selector}. Banner will not be displayed.`)\n return null\n }\n } else {\n document.body.insertBefore(div, document.body.firstChild)\n }\n\n return {\n shadow,\n isNewlyCreated: true,\n }\n}\n\nfunction removeTourFromDom(tourId: string): void {\n const containerClass = `${CONTAINER_CLASS}-${tourId}`\n const container = document.querySelector(`.${containerClass}`)\n if (container?.shadowRoot) {\n render(null, container.shadowRoot)\n }\n container?.remove()\n}\n\nconst PRODUCT_TOUR_TARGETING_FLAG_PREFIX = 'product-tour-targeting-'\n\nexport class ProductTourManager {\n private _instance: PostHog\n private _activeTour: ProductTour | null = null\n private _currentStepIndex: number = 0\n private _isPreviewMode: boolean = false\n private _isResuming: boolean = false\n private _checkInterval: ReturnType<typeof setInterval> | null = null\n private _triggerSelectorListeners: Map<string, TriggerListenerData> = new Map()\n private _pendingTourTimeouts: Map<string, ReturnType<typeof setTimeout>> = new Map()\n private _eventReceiver: ProductTourEventReceiver\n private _registeredEventTourIds: Set<string> = new Set()\n private _preloadedImageUrls: Set<string> = new Set()\n\n constructor(instance: PostHog) {\n this._instance = instance\n this._eventReceiver = new ProductTourEventReceiver(instance)\n }\n\n private _preloadTourImages(tours: ProductTour[]): void {\n const urls = tours\n .filter((tour) => !tour.disable_image_preload)\n .flatMap((tour) => tour.steps.flatMap(getStepImageUrls))\n\n for (const url of urls) {\n if (!this._preloadedImageUrls.has(url)) {\n this._preloadedImageUrls.add(url)\n new Image().src = url\n }\n }\n }\n\n private _setStepIndex(index: number): void {\n this._currentStepIndex = index\n this._saveSessionState()\n }\n\n private _saveSessionState(): void {\n if (!this._activeTour || this._isPreviewMode) {\n return\n }\n sessionStore._set(ACTIVE_TOUR_SESSION_KEY, {\n tourId: this._activeTour.id,\n stepIndex: this._currentStepIndex,\n })\n }\n\n private _clearSessionState(): void {\n sessionStore._remove(ACTIVE_TOUR_SESSION_KEY)\n }\n\n private _getSessionState(): { tourId: string; stepIndex: number } | null {\n const stored = sessionStore._get(ACTIVE_TOUR_SESSION_KEY)\n if (!stored) {\n return null\n }\n try {\n return JSON.parse(stored)\n } catch {\n return null\n }\n }\n\n start(): void {\n if (this._checkInterval) {\n return\n }\n\n // Check for saved session state before starting the evaluation loop\n const savedState = this._getSessionState()\n if (savedState) {\n this._resumeSavedTour(savedState.tourId, savedState.stepIndex, () => {\n this._startEvaluationLoop()\n })\n } else {\n this._startEvaluationLoop()\n }\n }\n\n private _startEvaluationLoop(): void {\n this._checkInterval = setInterval(() => {\n this._evaluateAndDisplayTours()\n }, CHECK_INTERVAL_MS)\n\n this._evaluateAndDisplayTours(true)\n addEventListener(document, 'visibilitychange', this._handleVisibilityChange)\n }\n\n private _resumeSavedTour(tourId: string, stepIndex: number, onComplete: () => void): void {\n this._instance.productTours?.getProductTours((tours) => {\n const tour = tours.find((t) => t.id === tourId)\n\n if (!tour) {\n if (tours.length > 0) {\n this._clearSessionState()\n }\n } else {\n this._activeTour = tour\n this._currentStepIndex = stepIndex\n this._isResuming = true\n this._renderCurrentStep()\n }\n\n onComplete()\n })\n }\n\n stop(): void {\n if (this._checkInterval) {\n clearInterval(this._checkInterval)\n this._checkInterval = null\n }\n document.removeEventListener('visibilitychange', this._handleVisibilityChange)\n this._removeAllTriggerListeners()\n this._cancelAllPendingTours()\n this._cleanup()\n }\n\n private _handleVisibilityChange = (): void => {\n if (document.hidden && this._checkInterval) {\n clearInterval(this._checkInterval)\n this._checkInterval = null\n } else if (!document.hidden && !this._checkInterval) {\n this._checkInterval = setInterval(() => {\n this._evaluateAndDisplayTours()\n }, CHECK_INTERVAL_MS)\n this._evaluateAndDisplayTours()\n }\n }\n\n private _evaluateAndDisplayTours(forceReload?: boolean): void {\n if (document?.getElementById(TOOLBAR_ID)) {\n return\n }\n\n // Use getProductTours (not getActiveProductTours) because selector-triggered tours\n // should work even if completed/dismissed\n this._instance.productTours?.getProductTours((tours) => {\n if (tours.length === 0) {\n this._removeAllTriggerListeners()\n return\n }\n\n this._preloadTourImages(tours)\n\n const activeTriggerTourIds = new Set<string>()\n\n const unregisteredEventTours = tours.filter(\n (tour: ProductTour) =>\n !this._registeredEventTourIds.has(tour.id) &&\n (doesTourActivateByEvent(tour) || doesTourActivateByAction(tour))\n )\n if (unregisteredEventTours.length > 0) {\n this._eventReceiver.register(unregisteredEventTours)\n unregisteredEventTours.forEach((tour) => this._registeredEventTourIds.add(tour.id))\n }\n\n const eventActivatedTourIds = this._activeTour ? [] : this._eventReceiver.getTours()\n\n /**\n * tours can be shown three ways, really:\n *\n * 1) selector clicks\n * 2a) auto-show immediately\n * 2b) auto-show after event/action\n *\n * (1) and (2[a|b]) are fully independent of each other\n */\n for (const tour of tours) {\n // 1) SELECTOR CLICK TRIGGER - just attach an event listener and keep going\n const triggerSelector = tour.conditions?.selector\n if (triggerSelector) {\n activeTriggerTourIds.add(tour.id)\n this._manageTriggerSelectorListener(tour, triggerSelector)\n }\n\n // skip auto-launch checks if a tour is already active\n if (this._activeTour) {\n continue\n }\n\n // 2) AUTO-LAUNCH\n const hasEventOrActionTriggers = doesTourActivateByAction(tour) || doesTourActivateByEvent(tour)\n\n if (tour.auto_launch && this._isTourEligible(tour)) {\n // tour should auto-launch, and the current session is eligible\n\n if (!hasEventOrActionTriggers) {\n // 2a) AUTO-SHOW WITH NO EVENT/ACTION\n this._showOrQueueTour(tour, 'auto')\n continue\n }\n\n // 2b) AUTO-SHOW, BUT WAIT FOR EVENT/ACTION\n if (eventActivatedTourIds.includes(tour.id)) {\n this._showOrQueueTour(tour, 'event')\n }\n }\n }\n\n this._triggerSelectorListeners.forEach(({ tour }) => {\n if (!activeTriggerTourIds.has(tour.id)) {\n this._removeTriggerSelectorListener(tour.id)\n }\n })\n }, forceReload)\n }\n\n private _showOrQueueTour(tour: ProductTour, reason: ProductTourRenderReason): void {\n const delaySeconds = tour.conditions?.autoShowDelaySeconds || 0\n if (delaySeconds > 0) {\n if (!this.isTourPending(tour.id)) {\n this.queueTourWithDelay(tour.id, delaySeconds, reason)\n }\n } else {\n this.showTour(tour, { reason })\n }\n }\n\n private _isTourEligible(tour: ProductTour): boolean {\n if (!checkTourConditions(tour)) {\n logger.info(`Tour ${tour.id} failed conditions check`)\n return false\n }\n\n const displayFrequency = tour.display_frequency ?? 'until_interacted'\n const shownKey = `${TOUR_SHOWN_KEY_PREFIX}${tour.id}`\n const completedKey = `${TOUR_COMPLETED_KEY_PREFIX}${tour.id}`\n const dismissedKey = `${TOUR_DISMISSED_KEY_PREFIX}${tour.id}`\n\n switch (displayFrequency) {\n case 'show_once':\n if (localStore._get(shownKey)) {\n logger.info(`Tour ${tour.id} already shown (show_once frequency)`)\n return false\n }\n break\n\n case 'until_interacted':\n if (localStore._get(completedKey) || localStore._get(dismissedKey)) {\n logger.info(`Tour ${tour.id} already completed or dismissed`)\n return false\n }\n break\n\n case 'always':\n default:\n break\n }\n\n if (!this._isProductToursFeatureFlagEnabled({ flagKey: tour.internal_targeting_flag_key })) {\n logger.info(`Tour ${tour.id} failed feature flag check: ${tour.internal_targeting_flag_key}`)\n return false\n }\n\n const linkedFlagVariant = tour.conditions?.linkedFlagVariant\n if (\n !this._isProductToursFeatureFlagEnabled({ flagKey: tour.linked_flag_key, flagVariant: linkedFlagVariant })\n ) {\n logger.info(\n `Tour ${tour.id} failed feature flag check: ${tour.linked_flag_key}, variant: ${linkedFlagVariant}`\n )\n return false\n }\n\n return true\n }\n\n showTour(tour: ProductTour, options?: ShowTourOptions): boolean {\n const renderReason: ProductTourRenderReason = options?.reason ?? 'auto'\n\n this.cancelPendingTour(tour.id)\n\n this._activeTour = tour\n this._setStepIndex(0)\n\n const rendered = this._renderCurrentStep()\n\n if (rendered) {\n this._captureEvent(ProductTourEventName.SHOWN, {\n [ProductTourEventProperties.TOUR_ID]: tour.id,\n [ProductTourEventProperties.TOUR_NAME]: tour.name,\n [ProductTourEventProperties.TOUR_ITERATION]: tour.current_iteration || 1,\n [ProductTourEventProperties.TOUR_RENDER_REASON]: renderReason,\n })\n\n if (!this._isPreviewMode) {\n localStore._set(`${TOUR_SHOWN_KEY_PREFIX}${tour.id}`, true)\n\n this._instance.capture('$set', {\n $set: { [`$product_tour_shown/${tour.id}`]: true },\n })\n }\n } else {\n this._cleanup()\n }\n\n return rendered\n }\n\n showTourById(tourId: string, reason?: ProductTourRenderReason): void {\n logger.info(`showTourById(${tourId})`)\n this._instance.productTours?.getProductTours((tours) => {\n const tour = tours.find((t) => t.id === tourId)\n if (tour) {\n this.showTour(tour, { reason: reason ?? 'api' })\n } else {\n logger.warn('could not find tour', tourId)\n }\n })\n }\n\n previewTour(tour: ProductTour): void {\n logger.info(`Previewing tour ${tour.id}`)\n\n this._cleanup()\n\n this._isPreviewMode = true\n this._activeTour = tour\n this._currentStepIndex = 0\n\n this._renderCurrentStep()\n }\n\n nextStep = (): void => {\n if (!this._activeTour) {\n return\n }\n\n const currentStep = this._activeTour.steps[this._currentStepIndex]\n\n this._captureEvent(ProductTourEventName.STEP_COMPLETED, {\n [ProductTourEventProperties.TOUR_ID]: this._activeTour.id,\n [ProductTourEventProperties.TOUR_STEP_ID]: currentStep.id,\n [ProductTourEventProperties.TOUR_STEP_ORDER]: this._currentStepIndex,\n })\n\n if (this._currentStepIndex < this._activeTour.steps.length - 1) {\n this._setStepIndex(this._currentStepIndex + 1)\n this._renderCurrentStep()\n } else {\n this._completeTour()\n }\n }\n\n previousStep = (): void => {\n if (!this._activeTour || this._currentStepIndex === 0) {\n return\n }\n\n this._setStepIndex(this._currentStepIndex - 1)\n this._renderCurrentStep()\n }\n\n dismissTour = (reason: ProductTourDismissReason = 'user_clicked_skip'): void => {\n if (!this._activeTour) {\n return\n }\n\n const currentStep = this._activeTour.steps[this._currentStepIndex]\n\n this._captureEvent(ProductTourEventName.DISMISSED, {\n [ProductTourEventProperties.TOUR_ID]: this._activeTour.id,\n [ProductTourEventProperties.TOUR_STEP_ID]: currentStep.id,\n [ProductTourEventProperties.TOUR_STEP_ORDER]: this._currentStepIndex,\n [ProductTourEventProperties.TOUR_DISMISS_REASON]: reason,\n })\n\n if (!this._isPreviewMode) {\n localStore._set(`${TOUR_DISMISSED_KEY_PREFIX}${this._activeTour.id}`, true)\n\n this._instance.capture('$set', {\n $set: { [`$product_tour_dismissed/${this._activeTour.id}`]: true },\n })\n }\n\n window.dispatchEvent(\n new CustomEvent('PHProductTourDismissed', { detail: { tourId: this._activeTour.id, reason } })\n )\n\n this._cleanup()\n }\n\n private _handleButtonClick = (button: ProductTourStepButton): void => {\n if (this._activeTour) {\n const currentStep = this._activeTour.steps[this._currentStepIndex]\n if (currentStep) {\n this._captureEvent(ProductTourEventName.BUTTON_CLICKED, {\n [ProductTourEventProperties.TOUR_ID]: this._activeTour.id,\n [ProductTourEventProperties.TOUR_NAME]: this._activeTour.name,\n [ProductTourEventProperties.TOUR_ITERATION]: this._activeTour.current_iteration || 1,\n [ProductTourEventProperties.TOUR_STEP_ID]: currentStep.id,\n [ProductTourEventProperties.TOUR_STEP_ORDER]: this._currentStepIndex,\n [ProductTourEventProperties.TOUR_BUTTON_TEXT]: button.text,\n [ProductTourEventProperties.TOUR_BUTTON_ACTION]: button.action,\n ...(button.link && { [ProductTourEventProperties.TOUR_BUTTON_LINK]: button.link }),\n ...(button.tourId && { [ProductTourEventProperties.TOUR_BUTTON_TOUR_ID]: button.tourId }),\n })\n }\n }\n\n switch (button.action) {\n case 'dismiss':\n this.dismissTour('user_clicked_skip')\n break\n case 'next_step':\n this.nextStep()\n break\n case 'previous_step':\n this.previousStep()\n break\n case 'link':\n this._completeTour()\n break\n case 'trigger_tour':\n if (button.tourId) {\n this._completeTour()\n this.showTourById(button.tourId)\n }\n break\n }\n }\n\n private _completeTour(): void {\n if (!this._activeTour) {\n return\n }\n\n this._captureEvent(ProductTourEventName.COMPLETED, {\n [ProductTourEventProperties.TOUR_ID]: this._activeTour.id,\n [ProductTourEventProperties.TOUR_STEPS_COUNT]: this._activeTour.steps.length,\n })\n\n if (!this._isPreviewMode) {\n localStore._set(`${TOUR_COMPLETED_KEY_PREFIX}${this._activeTour.id}`, true)\n\n this._instance.capture('$set', {\n $set: {\n [`$product_tour_completed/${this._activeTour.id}`]: true,\n },\n })\n }\n\n window.dispatchEvent(new CustomEvent('PHProductTourCompleted', { detail: { tourId: this._activeTour.id } }))\n\n this._cleanup()\n }\n\n private _renderCurrentStep(retryCount: number = 0): boolean {\n if (!this._activeTour) {\n return false\n }\n\n const step = this._activeTour.steps[this._currentStepIndex]\n if (!step) {\n logger.warn(`Step ${this._currentStepIndex} not found in tour ${this._activeTour.id}`)\n this._cleanup()\n return false\n }\n\n // Banner step - render full-width banner\n if (step.type === 'banner') {\n this._captureStepShown()\n\n this._isResuming = false\n this._renderBanner()\n return true\n }\n\n // Survey step - render native survey step component\n if (step.type === 'survey') {\n if (step.survey) {\n this._renderSurveyStep()\n return true\n }\n\n logger.warn('Unable to render survey step - survey data not found')\n return false\n }\n\n // Screen-positioned step (no element targeting) - render without a target element\n if (!hasElementTarget(step)) {\n this._captureStepShown()\n\n this._isResuming = false\n this._renderTooltipWithPreact(null)\n return true\n }\n\n const result = findStepElement(step)\n\n const inferenceProps = {\n [ProductTourEventProperties.USE_MANUAL_SELECTOR]: step.useManualSelector ?? false,\n [ProductTourEventProperties.INFERENCE_DATA_PRESENT]: !!step.inferenceData,\n }\n\n const previousStep = this._currentStepIndex > 0 ? this._activeTour.steps[this._currentStepIndex - 1] : null\n const shouldWaitForElement = previousStep?.progressionTrigger === 'click' || this._isResuming\n\n // 2s total timeout\n const maxRetries = 20\n const retryTimeout = 100\n\n if (result.error === 'not_found' || result.error === 'not_visible') {\n // if previous step was click-to-progress, or we are resuming a tour,\n // give some time for the next element\n if (shouldWaitForElement && retryCount < maxRetries) {\n setTimeout(() => {\n this._renderCurrentStep(retryCount + 1)\n }, retryTimeout)\n\n return false\n }\n\n const waitDurationMs = retryCount * retryTimeout\n\n this._captureStepSelectorFailed(result, {\n [ProductTourEventProperties.TOUR_WAITED_FOR_ELEMENT]: shouldWaitForElement,\n [ProductTourEventProperties.TOUR_WAIT_DURATION_MS]: waitDurationMs,\n ...inferenceProps,\n })\n\n if (this._currentStepIndex === 0 && !this._isResuming) {\n logger.warn(\n `Tour \"${this._activeTour.name}\" failed to show: element for first step not found (${result.error})`\n )\n return false\n }\n\n logger.warn(\n `Tour \"${this._activeTour.name}\" dismissed: element for step ${this._currentStepIndex} became unavailable (${result.error})` +\n (shouldWaitForElement ? ` after waiting ${waitDurationMs}ms` : '')\n )\n this.dismissTour('element_unavailable')\n return false\n }\n\n if (result.error === 'multiple_matches') {\n this._captureStepSelectorFailed(result, inferenceProps)\n // Continue with first match for multiple_matches case\n }\n\n if (!result.element) {\n return false\n }\n\n const element = result.element\n const metadata = getElementMetadata(element)\n\n this._captureStepShown({\n [ProductTourEventProperties.TOUR_STEP_SELECTOR]: step.selector,\n [ProductTourEventProperties.TOUR_STEP_SELECTOR_FOUND]: true,\n [ProductTourEventProperties.TOUR_STEP_ELEMENT_TAG]: metadata.tag,\n [ProductTourEventProperties.TOUR_STEP_ELEMENT_ID]: metadata.id,\n [ProductTourEventProperties.TOUR_STEP_ELEMENT_CLASSES]: metadata.classes,\n [ProductTourEventProperties.TOUR_STEP_ELEMENT_TEXT]: metadata.text,\n ...inferenceProps,\n })\n\n this._isResuming = false\n this._renderTooltipWithPreact(element)\n return true\n }\n\n private _renderTooltipWithPreact(\n element: HTMLElement | null,\n onSurveySubmit?: (response: string | number | null) => void,\n onDismissOverride?: (reason: ProductTourDismissReason) => void\n ): void {\n if (!this._activeTour) {\n return\n }\n\n const step = this._activeTour.steps[this._currentStepIndex]\n const { shadow } = retrieveTourShadow(this._activeTour)\n\n render(\n <ProductTourTooltip\n tour={this._activeTour}\n step={step}\n stepIndex={this._currentStepIndex}\n totalSteps={this._activeTour.steps.length}\n targetElement={element}\n onNext={this.nextStep}\n onPrevious={this.previousStep}\n onDismiss={onDismissOverride || this.dismissTour}\n onSurveySubmit={onSurveySubmit}\n onButtonClick={this._handleButtonClick}\n />,\n shadow\n )\n }\n\n private _renderBanner(): void {\n if (!this._activeTour) {\n return\n }\n\n const step = this._activeTour.steps[this._currentStepIndex]\n const result = retrieveBannerShadow(this._activeTour, step.bannerConfig)\n\n if (!result) {\n this._captureEvent(ProductTourEventName.BANNER_CONTAINER_SELECTOR_FAILED, {\n [ProductTourEventProperties.TOUR_ID]: this._activeTour.id,\n [ProductTourEventProperties.TOUR_BANNER_SELECTOR]: step?.bannerConfig?.selector,\n })\n this.dismissTour('container_unavailable')\n return\n }\n\n const { shadow } = result\n\n const handleTriggerTour = () => {\n const tourId = step.bannerConfig?.action?.tourId\n if (tourId) {\n this._cleanup()\n this.showTourById(tourId)\n }\n }\n\n render(\n <ProductTourBanner\n step={step}\n onDismiss={() => this.dismissTour('user_clicked_skip')}\n onTriggerTour={handleTriggerTour}\n displayFrequency={this._activeTour.display_frequency}\n />,\n shadow\n )\n }\n\n private _renderSurveyStep(): void {\n if (!this._activeTour) {\n return\n }\n\n const tourId = this._activeTour.id\n const step = this._activeTour.steps[this._currentStepIndex]\n const surveyId = step.linkedSurveyId\n const questionId = step.linkedSurveyQuestionId\n const questionText = step.survey?.questionText || ''\n\n this._captureStepShown({\n [ProductTourEventProperties.TOUR_LINKED_SURVEY_ID]: surveyId,\n })\n\n this._captureEvent(SurveyEventName.SHOWN, {\n [SurveyEventProperties.SURVEY_ID]: surveyId,\n [SurveyEventProperties.PRODUCT_TOUR_ID]: tourId,\n sessionRecordingUrl: this._instance.get_session_replay_url?.(),\n })\n\n const handleSubmit = (response: string | number | null) => {\n const responseKey = questionId ? `$survey_response_${questionId}` : '$survey_response'\n this._captureEvent(SurveyEventName.SENT, {\n [SurveyEventProperties.SURVEY_ID]: surveyId,\n [SurveyEventProperties.PRODUCT_TOUR_ID]: tourId,\n [SurveyEventProperties.SURVEY_QUESTIONS]: [\n {\n id: questionId,\n question: questionText,\n response: response,\n },\n ],\n [SurveyEventProperties.SURVEY_COMPLETED]: true,\n sessionRecordingUrl: this._instance.get_session_replay_url?.(),\n ...(!isNull(response) && { [responseKey]: response }),\n })\n\n logger.info(`Survey ${surveyId} completed`, !isNull(response) ? `with response: ${response}` : '(skipped)')\n this.nextStep()\n }\n\n const handleDismiss = (reason: ProductTourDismissReason) => {\n this._captureEvent(SurveyEventName.DISMISSED, {\n [SurveyEventProperties.SURVEY_ID]: surveyId,\n [SurveyEventProperties.PRODUCT_TOUR_ID]: tourId,\n [SurveyEventProperties.SURVEY_QUESTIONS]: [\n {\n id: questionId,\n question: questionText,\n response: null,\n },\n ],\n [SurveyEventProperties.SURVEY_PARTIALLY_COMPLETED]: false,\n sessionRecordingUrl: this._instance.get_session_replay_url?.(),\n })\n\n logger.info(`Survey ${surveyId} dismissed`)\n this.dismissTour(reason)\n }\n\n this._renderTooltipWithPreact(null, handleSubmit, handleDismiss)\n\n logger.info(`Rendered survey step for tour step ${this._currentStepIndex}`)\n }\n\n private _isProductToursFeatureFlagEnabled({ flagKey, flagVariant }: { flagKey?: string; flagVariant?: string }) {\n if (!flagKey) {\n return true\n }\n const isFeatureEnabled = !!this._instance.featureFlags.isFeatureEnabled(flagKey, {\n send_event: !flagKey.startsWith(PRODUCT_TOUR_TARGETING_FLAG_PREFIX),\n })\n let flagVariantCheck = true\n if (flagVariant) {\n const flagVariantValue = this._instance.featureFlags.getFeatureFlag(flagKey, { send_event: false })\n flagVariantCheck = flagVariantValue === flagVariant || flagVariant === 'any'\n }\n return isFeatureEnabled && flagVariantCheck\n }\n\n private _cleanup(): void {\n if (this._activeTour) {\n removeTourFromDom(this._activeTour.id)\n }\n\n this._activeTour = null\n this._currentStepIndex = 0\n this._isPreviewMode = false\n this._isResuming = false\n this._clearSessionState()\n }\n\n private _manageTriggerSelectorListener(tour: ProductTour, selector: string): void {\n const currentElement = document.querySelector(selector)\n const existingListenerData = this._triggerSelectorListeners.get(tour.id)\n\n if (!currentElement) {\n if (existingListenerData) {\n this._removeTriggerSelectorListener(tour.id)\n }\n return\n }\n\n if (existingListenerData) {\n if (currentElement !== existingListenerData.element) {\n logger.info(`Trigger element changed for tour ${tour.id}. Re-attaching listener.`)\n this._removeTriggerSelectorListener(tour.id)\n } else {\n return\n }\n }\n\n if (!currentElement.hasAttribute(TRIGGER_LISTENER_ATTRIBUTE)) {\n const listener = (event: Event) => {\n if (this._activeTour) {\n logger.info(`Tour ${tour.id} trigger clicked but another tour is active`)\n return\n }\n\n let currentTour: ProductTour | undefined\n this._instance.productTours?.getProductTours((tours) => {\n currentTour = tours.find((t) => t.id === tour.id)\n })\n\n if (!currentTour) {\n logger.warn(`Tour ${tour.id} no longer exists. Removing stale listener.`)\n this._removeTriggerSelectorListener(tour.id)\n return\n }\n\n if (!isTourInDateRange(currentTour)) {\n logger.warn(`Tour ${tour.id} trigger clicked, but tour is not launched - not showing tour.`)\n return\n }\n\n logger.info(`Tour ${tour.id} triggered by click on ${selector}`)\n\n if (this.showTour(currentTour, { reason: 'trigger' })) {\n event.preventDefault()\n } else {\n logger.info(`Tour ${tour.id} failed to show; not intercepting click.`)\n }\n }\n\n addEventListener(currentElement, 'click', listener)\n currentElement.setAttribute(TRIGGER_LISTENER_ATTRIBUTE, tour.id)\n this._triggerSelectorListeners.set(tour.id, { element: currentElement, listener, tour })\n logger.info(`Attached trigger listener for tour ${tour.id} on ${selector}`)\n }\n }\n\n private _removeTriggerSelectorListener(tourId: string): void {\n const existing = this._triggerSelectorListeners.get(tourId)\n if (existing) {\n existing.element.removeEventListener('click', existing.listener)\n existing.element.removeAttribute(TRIGGER_LISTENER_ATTRIBUTE)\n this._triggerSelectorListeners.delete(tourId)\n logger.info(`Removed trigger listener for tour ${tourId}`)\n }\n }\n\n private _removeAllTriggerListeners(): void {\n this._triggerSelectorListeners.forEach((_, tourId) => {\n this._removeTriggerSelectorListener(tourId)\n })\n }\n\n private _captureEvent(eventName: ProductTourEventName | SurveyEventName, properties: Record<string, any>): void {\n if (this._isPreviewMode) {\n return\n }\n this._instance.capture(eventName, properties)\n }\n\n private _captureStepShown(extraProps?: Record<string, any>): void {\n if (!this._activeTour) {\n return\n }\n const step = this._activeTour.steps[this._currentStepIndex]\n this._captureEvent(ProductTourEventName.STEP_SHOWN, {\n [ProductTourEventProperties.TOUR_ID]: this._activeTour.id,\n [ProductTourEventProperties.TOUR_STEP_ID]: step.id,\n [ProductTourEventProperties.TOUR_STEP_ORDER]: this._currentStepIndex,\n [ProductTourEventProperties.TOUR_STEP_TYPE]: step.type,\n ...extraProps,\n })\n }\n\n private _captureStepSelectorFailed(result: ElementFindResult, extraProps?: Record<string, any>): void {\n if (!this._activeTour) {\n return\n }\n const step = this._activeTour.steps[this._currentStepIndex]\n this._captureEvent(ProductTourEventName.STEP_SELECTOR_FAILED, {\n [ProductTourEventProperties.TOUR_ID]: this._activeTour.id,\n [ProductTourEventProperties.TOUR_STEP_ID]: step.id,\n [ProductTourEventProperties.TOUR_STEP_ORDER]: this._currentStepIndex,\n [ProductTourEventProperties.TOUR_STEP_SELECTOR]: step.selector,\n [ProductTourEventProperties.TOUR_ERROR]: result.error,\n [ProductTourEventProperties.TOUR_MATCHES_COUNT]: result.matchCount,\n [ProductTourEventProperties.TOUR_FAILURE_PHASE]: 'runtime',\n ...extraProps,\n })\n }\n\n // Public API methods delegated from PostHogProductTours\n getActiveProductTours(callback: ProductTourCallback): void {\n this._instance.productTours?.getProductTours((tours, context) => {\n if (!context?.isLoaded) {\n callback([], context)\n return\n }\n\n const activeTours = tours.filter((tour) => this._isTourEligible(tour))\n callback(activeTours, context)\n })\n }\n\n resetTour(tourId: string): void {\n localStore._remove(`${TOUR_SHOWN_KEY_PREFIX}${tourId}`)\n localStore._remove(`${TOUR_COMPLETED_KEY_PREFIX}${tourId}`)\n localStore._remove(`${TOUR_DISMISSED_KEY_PREFIX}${tourId}`)\n }\n\n resetAllTours(): void {\n const storage = window?.localStorage\n if (!storage) {\n return\n }\n const keysToRemove: string[] = []\n for (let i = 0; i < storage.length; i++) {\n const key = storage.key(i)\n if (\n key?.startsWith(TOUR_SHOWN_KEY_PREFIX) ||\n key?.startsWith(TOUR_COMPLETED_KEY_PREFIX) ||\n key?.startsWith(TOUR_DISMISSED_KEY_PREFIX)\n ) {\n keysToRemove.push(key)\n }\n }\n keysToRemove.forEach((key) => localStore._remove(key))\n }\n\n cancelPendingTour(tourId: string): void {\n const timeout = this._pendingTourTimeouts.get(tourId)\n if (timeout) {\n clearTimeout(timeout)\n this._pendingTourTimeouts.delete(tourId)\n logger.info(`Cancelled pending tour: ${tourId}`)\n }\n }\n\n private _cancelAllPendingTours(): void {\n this._pendingTourTimeouts.forEach((timeout) => clearTimeout(timeout))\n this._pendingTourTimeouts.clear()\n }\n\n isTourPending(tourId: string): boolean {\n return this._pendingTourTimeouts.has(tourId)\n }\n\n queueTourWithDelay(tourId: string, delaySeconds: number, reason?: ProductTourRenderReason): void {\n logger.info(`Queueing tour ${tourId} with ${delaySeconds}s delay`)\n\n const timeoutId = setTimeout(() => {\n this._pendingTourTimeouts.delete(tourId)\n logger.info(`Delay elapsed for tour ${tourId}, showing now`)\n this.showTourById(tourId, reason)\n }, delaySeconds * 1000)\n\n this._pendingTourTimeouts.set(tourId, timeoutId)\n }\n}\n"]}
|
|
@@ -48,6 +48,8 @@ export interface ProductTourSurveyQuestion {
|
|
|
48
48
|
lowerBoundLabel?: string;
|
|
49
49
|
/** Label for high end of rating scale (e.g., "Very likely") */
|
|
50
50
|
upperBoundLabel?: string;
|
|
51
|
+
submitButtonText?: string;
|
|
52
|
+
backButtonText?: string;
|
|
51
53
|
}
|
|
52
54
|
export interface ProductTourStep {
|
|
53
55
|
id: string;
|
|
@@ -137,3 +139,43 @@ export interface ShowTourOptions {
|
|
|
137
139
|
reason?: ProductTourRenderReason;
|
|
138
140
|
enableStrictValidation?: boolean;
|
|
139
141
|
}
|
|
142
|
+
export declare enum ProductTourEventName {
|
|
143
|
+
SHOWN = "product tour shown",
|
|
144
|
+
DISMISSED = "product tour dismissed",
|
|
145
|
+
COMPLETED = "product tour completed",
|
|
146
|
+
STEP_SHOWN = "product tour step shown",
|
|
147
|
+
STEP_COMPLETED = "product tour step completed",
|
|
148
|
+
BUTTON_CLICKED = "product tour button clicked",
|
|
149
|
+
STEP_SELECTOR_FAILED = "product tour step selector failed",
|
|
150
|
+
BANNER_CONTAINER_SELECTOR_FAILED = "product tour banner container selector failed"
|
|
151
|
+
}
|
|
152
|
+
export declare enum ProductTourEventProperties {
|
|
153
|
+
TOUR_ID = "$product_tour_id",
|
|
154
|
+
TOUR_NAME = "$product_tour_name",
|
|
155
|
+
TOUR_ITERATION = "$product_tour_iteration",
|
|
156
|
+
TOUR_RENDER_REASON = "$product_tour_render_reason",
|
|
157
|
+
TOUR_STEP_ID = "$product_tour_step_id",
|
|
158
|
+
TOUR_STEP_ORDER = "$product_tour_step_order",
|
|
159
|
+
TOUR_STEP_TYPE = "$product_tour_step_type",
|
|
160
|
+
TOUR_DISMISS_REASON = "$product_tour_dismiss_reason",
|
|
161
|
+
TOUR_BUTTON_TEXT = "$product_tour_button_text",
|
|
162
|
+
TOUR_BUTTON_ACTION = "$product_tour_button_action",
|
|
163
|
+
TOUR_BUTTON_LINK = "$product_tour_button_link",
|
|
164
|
+
TOUR_BUTTON_TOUR_ID = "$product_tour_button_tour_id",
|
|
165
|
+
TOUR_STEPS_COUNT = "$product_tour_steps_count",
|
|
166
|
+
TOUR_STEP_SELECTOR = "$product_tour_step_selector",
|
|
167
|
+
TOUR_STEP_SELECTOR_FOUND = "$product_tour_step_selector_found",
|
|
168
|
+
TOUR_STEP_ELEMENT_TAG = "$product_tour_step_element_tag",
|
|
169
|
+
TOUR_STEP_ELEMENT_ID = "$product_tour_step_element_id",
|
|
170
|
+
TOUR_STEP_ELEMENT_CLASSES = "$product_tour_step_element_classes",
|
|
171
|
+
TOUR_STEP_ELEMENT_TEXT = "$product_tour_step_element_text",
|
|
172
|
+
TOUR_ERROR = "$product_tour_error",
|
|
173
|
+
TOUR_MATCHES_COUNT = "$product_tour_matches_count",
|
|
174
|
+
TOUR_FAILURE_PHASE = "$product_tour_failure_phase",
|
|
175
|
+
TOUR_WAITED_FOR_ELEMENT = "$product_tour_waited_for_element",
|
|
176
|
+
TOUR_WAIT_DURATION_MS = "$product_tour_wait_duration_ms",
|
|
177
|
+
TOUR_BANNER_SELECTOR = "$product_tour_banner_selector",
|
|
178
|
+
TOUR_LINKED_SURVEY_ID = "$product_tour_linked_survey_id",
|
|
179
|
+
USE_MANUAL_SELECTOR = "$use_manual_selector",
|
|
180
|
+
INFERENCE_DATA_PRESENT = "$inference_data_present"
|
|
181
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DEFAULT_PRODUCT_TOUR_APPEARANCE = void 0;
|
|
3
|
+
exports.ProductTourEventProperties = exports.ProductTourEventName = exports.DEFAULT_PRODUCT_TOUR_APPEARANCE = void 0;
|
|
4
4
|
var constants_1 = require("./constants");
|
|
5
5
|
exports.DEFAULT_PRODUCT_TOUR_APPEARANCE = {
|
|
6
6
|
backgroundColor: '#ffffff',
|
|
@@ -16,4 +16,46 @@ exports.DEFAULT_PRODUCT_TOUR_APPEARANCE = {
|
|
|
16
16
|
dismissOnClickOutside: true,
|
|
17
17
|
zIndex: constants_1.Z_INDEX_TOURS,
|
|
18
18
|
};
|
|
19
|
+
var ProductTourEventName;
|
|
20
|
+
(function (ProductTourEventName) {
|
|
21
|
+
ProductTourEventName["SHOWN"] = "product tour shown";
|
|
22
|
+
ProductTourEventName["DISMISSED"] = "product tour dismissed";
|
|
23
|
+
ProductTourEventName["COMPLETED"] = "product tour completed";
|
|
24
|
+
ProductTourEventName["STEP_SHOWN"] = "product tour step shown";
|
|
25
|
+
ProductTourEventName["STEP_COMPLETED"] = "product tour step completed";
|
|
26
|
+
ProductTourEventName["BUTTON_CLICKED"] = "product tour button clicked";
|
|
27
|
+
ProductTourEventName["STEP_SELECTOR_FAILED"] = "product tour step selector failed";
|
|
28
|
+
ProductTourEventName["BANNER_CONTAINER_SELECTOR_FAILED"] = "product tour banner container selector failed";
|
|
29
|
+
})(ProductTourEventName || (exports.ProductTourEventName = ProductTourEventName = {}));
|
|
30
|
+
var ProductTourEventProperties;
|
|
31
|
+
(function (ProductTourEventProperties) {
|
|
32
|
+
ProductTourEventProperties["TOUR_ID"] = "$product_tour_id";
|
|
33
|
+
ProductTourEventProperties["TOUR_NAME"] = "$product_tour_name";
|
|
34
|
+
ProductTourEventProperties["TOUR_ITERATION"] = "$product_tour_iteration";
|
|
35
|
+
ProductTourEventProperties["TOUR_RENDER_REASON"] = "$product_tour_render_reason";
|
|
36
|
+
ProductTourEventProperties["TOUR_STEP_ID"] = "$product_tour_step_id";
|
|
37
|
+
ProductTourEventProperties["TOUR_STEP_ORDER"] = "$product_tour_step_order";
|
|
38
|
+
ProductTourEventProperties["TOUR_STEP_TYPE"] = "$product_tour_step_type";
|
|
39
|
+
ProductTourEventProperties["TOUR_DISMISS_REASON"] = "$product_tour_dismiss_reason";
|
|
40
|
+
ProductTourEventProperties["TOUR_BUTTON_TEXT"] = "$product_tour_button_text";
|
|
41
|
+
ProductTourEventProperties["TOUR_BUTTON_ACTION"] = "$product_tour_button_action";
|
|
42
|
+
ProductTourEventProperties["TOUR_BUTTON_LINK"] = "$product_tour_button_link";
|
|
43
|
+
ProductTourEventProperties["TOUR_BUTTON_TOUR_ID"] = "$product_tour_button_tour_id";
|
|
44
|
+
ProductTourEventProperties["TOUR_STEPS_COUNT"] = "$product_tour_steps_count";
|
|
45
|
+
ProductTourEventProperties["TOUR_STEP_SELECTOR"] = "$product_tour_step_selector";
|
|
46
|
+
ProductTourEventProperties["TOUR_STEP_SELECTOR_FOUND"] = "$product_tour_step_selector_found";
|
|
47
|
+
ProductTourEventProperties["TOUR_STEP_ELEMENT_TAG"] = "$product_tour_step_element_tag";
|
|
48
|
+
ProductTourEventProperties["TOUR_STEP_ELEMENT_ID"] = "$product_tour_step_element_id";
|
|
49
|
+
ProductTourEventProperties["TOUR_STEP_ELEMENT_CLASSES"] = "$product_tour_step_element_classes";
|
|
50
|
+
ProductTourEventProperties["TOUR_STEP_ELEMENT_TEXT"] = "$product_tour_step_element_text";
|
|
51
|
+
ProductTourEventProperties["TOUR_ERROR"] = "$product_tour_error";
|
|
52
|
+
ProductTourEventProperties["TOUR_MATCHES_COUNT"] = "$product_tour_matches_count";
|
|
53
|
+
ProductTourEventProperties["TOUR_FAILURE_PHASE"] = "$product_tour_failure_phase";
|
|
54
|
+
ProductTourEventProperties["TOUR_WAITED_FOR_ELEMENT"] = "$product_tour_waited_for_element";
|
|
55
|
+
ProductTourEventProperties["TOUR_WAIT_DURATION_MS"] = "$product_tour_wait_duration_ms";
|
|
56
|
+
ProductTourEventProperties["TOUR_BANNER_SELECTOR"] = "$product_tour_banner_selector";
|
|
57
|
+
ProductTourEventProperties["TOUR_LINKED_SURVEY_ID"] = "$product_tour_linked_survey_id";
|
|
58
|
+
ProductTourEventProperties["USE_MANUAL_SELECTOR"] = "$use_manual_selector";
|
|
59
|
+
ProductTourEventProperties["INFERENCE_DATA_PRESENT"] = "$inference_data_present";
|
|
60
|
+
})(ProductTourEventProperties || (exports.ProductTourEventProperties = ProductTourEventProperties = {}));
|
|
19
61
|
//# sourceMappingURL=posthog-product-tours-types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"posthog-product-tours-types.js","sourceRoot":"","sources":["../../src/posthog-product-tours-types.ts"],"names":[],"mappings":";;;AAIA,yCAA2C;
|
|
1
|
+
{"version":3,"file":"posthog-product-tours-types.js","sourceRoot":"","sources":["../../src/posthog-product-tours-types.ts"],"names":[],"mappings":";;;AAIA,yCAA2C;AAsJ9B,QAAA,+BAA+B,GAAoC;IAC5E,eAAe,EAAE,SAAS;IAC1B,SAAS,EAAE,SAAS;IACpB,WAAW,EAAE,SAAS;IACtB,YAAY,EAAE,CAAC;IACf,kBAAkB,EAAE,CAAC;IACrB,WAAW,EAAE,SAAS;IACtB,UAAU,EAAE,WAAW;IACvB,SAAS,EAAE,gCAAgC;IAC3C,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,KAAK;IACjB,qBAAqB,EAAE,IAAI;IAC3B,MAAM,EAAE,yBAAa;CACxB,CAAA;AAOD,IAAY,oBASX;AATD,WAAY,oBAAoB;IAC5B,oDAA4B,CAAA;IAC5B,4DAAoC,CAAA;IACpC,4DAAoC,CAAA;IACpC,8DAAsC,CAAA;IACtC,sEAA8C,CAAA;IAC9C,sEAA8C,CAAA;IAC9C,kFAA0D,CAAA;IAC1D,0GAAkF,CAAA;AACtF,CAAC,EATW,oBAAoB,oCAApB,oBAAoB,QAS/B;AAED,IAAY,0BA6BX;AA7BD,WAAY,0BAA0B;IAClC,0DAA4B,CAAA;IAC5B,8DAAgC,CAAA;IAChC,wEAA0C,CAAA;IAC1C,gFAAkD,CAAA;IAClD,oEAAsC,CAAA;IACtC,0EAA4C,CAAA;IAC5C,wEAA0C,CAAA;IAC1C,kFAAoD,CAAA;IACpD,4EAA8C,CAAA;IAC9C,gFAAkD,CAAA;IAClD,4EAA8C,CAAA;IAC9C,kFAAoD,CAAA;IACpD,4EAA8C,CAAA;IAC9C,gFAAkD,CAAA;IAClD,4FAA8D,CAAA;IAC9D,sFAAwD,CAAA;IACxD,oFAAsD,CAAA;IACtD,8FAAgE,CAAA;IAChE,wFAA0D,CAAA;IAC1D,gEAAkC,CAAA;IAClC,gFAAkD,CAAA;IAClD,gFAAkD,CAAA;IAClD,0FAA4D,CAAA;IAC5D,sFAAwD,CAAA;IACxD,oFAAsD,CAAA;IACtD,sFAAwD,CAAA;IACxD,0EAA4C,CAAA;IAC5C,gFAAkD,CAAA;AACtD,CAAC,EA7BW,0BAA0B,0CAA1B,0BAA0B,QA6BrC","sourcesContent":["import { PropertyMatchType } from './types'\nimport { SurveyActionType, SurveyEventWithFilters } from './posthog-surveys-types'\nimport type { InferredSelector } from './extensions/product-tours/element-inference'\nimport { SurveyPosition } from '@posthog/core'\nimport { Z_INDEX_TOURS } from './constants'\n\nexport interface JSONContent {\n type?: string\n attrs?: Record<string, any>\n content?: JSONContent[]\n marks?: { type: string; attrs?: Record<string, any> }[]\n text?: string\n}\n\nexport type ProductTourStepType = 'element' | 'modal' | 'survey' | 'banner'\n\nexport interface ProductTourBannerConfig {\n behavior: 'sticky' | 'static' | 'custom'\n selector?: string\n action?: {\n type: 'none' | 'link' | 'trigger_tour'\n link?: string\n tourId?: string\n }\n}\n\n/** Button actions available on modal steps */\nexport type ProductTourButtonAction = 'dismiss' | 'link' | 'next_step' | 'previous_step' | 'trigger_tour'\n\nexport interface ProductTourStepButton {\n text: string\n action: ProductTourButtonAction\n /** URL to open when action is 'link' */\n link?: string\n /** Tour ID to trigger when action is 'trigger_tour' */\n tourId?: string\n}\n\nexport interface ProductTourStepButtons {\n primary?: ProductTourStepButton\n secondary?: ProductTourStepButton\n}\n\nexport type ProductTourSurveyQuestionType = 'open' | 'rating'\n\nexport interface ProductTourSurveyQuestion {\n type: ProductTourSurveyQuestionType\n questionText: string\n /** Rating display type - emoji or number */\n display?: 'emoji' | 'number'\n /** Rating scale - 3 or 5 for emoji, 5 or 10 for number */\n scale?: 3 | 5 | 10\n /** Label for low end of rating scale (e.g., \"Not likely\") */\n lowerBoundLabel?: string\n /** Label for high end of rating scale (e.g., \"Very likely\") */\n upperBoundLabel?: string\n submitButtonText?: string\n backButtonText?: string\n}\n\nexport interface ProductTourStep {\n id: string\n type: ProductTourStepType\n selector?: string\n progressionTrigger: 'button' | 'click'\n content: JSONContent | null\n /** Pre-rendered HTML content from the editor. If present, SDK should use this instead of rendering from JSONContent. */\n contentHtml?: string\n /** Inline survey question config - if present, this is a survey step */\n survey?: ProductTourSurveyQuestion\n /** ID of the auto-created survey for this step (set by backend) */\n linkedSurveyId?: string\n /** ID of the survey question (set by backend, used for event tracking) */\n linkedSurveyQuestionId?: string\n /** Enhanced element data for more reliable lookup at runtime */\n inferenceData?: InferredSelector\n /** Use CSS selector instead of inference. Defaults to false (use inference). */\n useManualSelector?: boolean\n /** Maximum tooltip width in pixels (defaults to 320px) */\n maxWidth?: number\n /** Position for modal/survey steps (defaults to middle_center) */\n modalPosition?: SurveyPosition\n /** Button configuration for modal steps */\n buttons?: ProductTourStepButtons\n /** Banner configuration (only for banner steps) */\n bannerConfig?: ProductTourBannerConfig\n}\n\nexport interface ProductTourConditions {\n url?: string\n urlMatchType?: PropertyMatchType\n selector?: string\n autoShowDelaySeconds?: number\n events?: {\n values: SurveyEventWithFilters[]\n } | null\n cancelEvents?: {\n values: SurveyEventWithFilters[]\n } | null\n actions?: {\n values: SurveyActionType[]\n } | null\n linkedFlagVariant?: string\n}\n\nexport interface ProductTourAppearance {\n backgroundColor?: string\n textColor?: string\n buttonColor?: string\n borderRadius?: number\n buttonBorderRadius?: number\n borderColor?: string\n fontFamily?: string\n boxShadow?: string\n showOverlay?: boolean\n whiteLabel?: boolean\n /** defaults to true, auto-set to false for announcements/banners */\n dismissOnClickOutside?: boolean\n zIndex?: number\n}\n\nexport type ProductTourDisplayFrequency = 'show_once' | 'until_interacted' | 'always'\n\nexport interface ProductTour {\n id: string\n name: string\n description?: string\n type: 'product_tour'\n auto_launch?: boolean\n start_date: string | null\n end_date: string | null\n current_iteration?: number\n conditions?: ProductTourConditions\n appearance?: ProductTourAppearance\n steps: ProductTourStep[]\n internal_targeting_flag_key?: string\n linked_flag_key?: string\n display_frequency?: ProductTourDisplayFrequency\n disable_image_preload?: boolean\n}\n\nexport type ProductTourCallback = (tours: ProductTour[], context?: { isLoaded: boolean; error?: string }) => void\n\nexport type ProductTourSelectorError = 'not_found' | 'multiple_matches' | 'not_visible'\n\nexport type ProductTourDismissReason =\n | 'user_clicked_skip'\n | 'user_clicked_outside'\n | 'escape_key'\n | 'element_unavailable'\n | 'container_unavailable'\n\nexport type ProductTourRenderReason = 'auto' | 'api' | 'trigger' | 'event'\n\nexport const DEFAULT_PRODUCT_TOUR_APPEARANCE: Required<ProductTourAppearance> = {\n backgroundColor: '#ffffff',\n textColor: '#1d1f27',\n buttonColor: '#1d1f27',\n borderRadius: 8,\n buttonBorderRadius: 6,\n borderColor: '#e5e7eb',\n fontFamily: 'system-ui',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.15)',\n showOverlay: true,\n whiteLabel: false,\n dismissOnClickOutside: true,\n zIndex: Z_INDEX_TOURS,\n}\n\nexport interface ShowTourOptions {\n reason?: ProductTourRenderReason\n enableStrictValidation?: boolean\n}\n\nexport enum ProductTourEventName {\n SHOWN = 'product tour shown',\n DISMISSED = 'product tour dismissed',\n COMPLETED = 'product tour completed',\n STEP_SHOWN = 'product tour step shown',\n STEP_COMPLETED = 'product tour step completed',\n BUTTON_CLICKED = 'product tour button clicked',\n STEP_SELECTOR_FAILED = 'product tour step selector failed',\n BANNER_CONTAINER_SELECTOR_FAILED = 'product tour banner container selector failed',\n}\n\nexport enum ProductTourEventProperties {\n TOUR_ID = '$product_tour_id',\n TOUR_NAME = '$product_tour_name',\n TOUR_ITERATION = '$product_tour_iteration',\n TOUR_RENDER_REASON = '$product_tour_render_reason',\n TOUR_STEP_ID = '$product_tour_step_id',\n TOUR_STEP_ORDER = '$product_tour_step_order',\n TOUR_STEP_TYPE = '$product_tour_step_type',\n TOUR_DISMISS_REASON = '$product_tour_dismiss_reason',\n TOUR_BUTTON_TEXT = '$product_tour_button_text',\n TOUR_BUTTON_ACTION = '$product_tour_button_action',\n TOUR_BUTTON_LINK = '$product_tour_button_link',\n TOUR_BUTTON_TOUR_ID = '$product_tour_button_tour_id',\n TOUR_STEPS_COUNT = '$product_tour_steps_count',\n TOUR_STEP_SELECTOR = '$product_tour_step_selector',\n TOUR_STEP_SELECTOR_FOUND = '$product_tour_step_selector_found',\n TOUR_STEP_ELEMENT_TAG = '$product_tour_step_element_tag',\n TOUR_STEP_ELEMENT_ID = '$product_tour_step_element_id',\n TOUR_STEP_ELEMENT_CLASSES = '$product_tour_step_element_classes',\n TOUR_STEP_ELEMENT_TEXT = '$product_tour_step_element_text',\n TOUR_ERROR = '$product_tour_error',\n TOUR_MATCHES_COUNT = '$product_tour_matches_count',\n TOUR_FAILURE_PHASE = '$product_tour_failure_phase',\n TOUR_WAITED_FOR_ELEMENT = '$product_tour_waited_for_element',\n TOUR_WAIT_DURATION_MS = '$product_tour_wait_duration_ms',\n TOUR_BANNER_SELECTOR = '$product_tour_banner_selector',\n TOUR_LINKED_SURVEY_ID = '$product_tour_linked_survey_id',\n USE_MANUAL_SELECTOR = '$use_manual_selector',\n INFERENCE_DATA_PRESENT = '$inference_data_present',\n}\n"]}
|
|
@@ -17,6 +17,7 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.ProductTourEventReceiver = void 0;
|
|
19
19
|
var constants_1 = require("../constants");
|
|
20
|
+
var posthog_product_tours_types_1 = require("../posthog-product-tours-types");
|
|
20
21
|
var event_receiver_1 = require("./event-receiver");
|
|
21
22
|
var logger_1 = require("./logger");
|
|
22
23
|
var storage_1 = require("../storage");
|
|
@@ -31,7 +32,7 @@ var ProductTourEventReceiver = /** @class */ (function (_super) {
|
|
|
31
32
|
return constants_1.PRODUCT_TOURS_ACTIVATED;
|
|
32
33
|
};
|
|
33
34
|
ProductTourEventReceiver.prototype._getShownEventName = function () {
|
|
34
|
-
return
|
|
35
|
+
return posthog_product_tours_types_1.ProductTourEventName.SHOWN;
|
|
35
36
|
};
|
|
36
37
|
ProductTourEventReceiver.prototype._getItems = function (callback) {
|
|
37
38
|
var _a, _b;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-tour-event-receiver.js","sourceRoot":"","sources":["../../../src/utils/product-tour-event-receiver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,0CAAsD;
|
|
1
|
+
{"version":3,"file":"product-tour-event-receiver.js","sourceRoot":"","sources":["../../../src/utils/product-tour-event-receiver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,0CAAsD;AACtD,8EAAkF;AAElF,mDAAgD;AAChD,mCAAuC;AACvC,sCAAuC;AACvC,mEAA4G;AAE5G,IAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,+BAA+B,CAAC,CAAA;AAE5D;IAA8C,4CAA0B;IACpE,kCAAY,QAAiB;QACzB,OAAA,MAAK,YAAC,QAAQ,CAAC,SAAA;IACnB,CAAC;IAES,mDAAgB,GAA1B;QACI,OAAO,mCAAuB,CAAA;IAClC,CAAC;IAES,qDAAkB,GAA5B;QACI,OAAO,kDAAoB,CAAC,KAAK,CAAA;IACrC,CAAC;IAES,4CAAS,GAAnB,UAAoB,QAAwC;;QACxD,MAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,YAAY,0CAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;IAC3D,CAAC;IAES,qDAAkB,GAA5B,UAA6B,MAAc;;QACvC,MAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,YAAY,0CAAE,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAC3D,CAAC;IAES,6CAAU,GAApB;QACI,OAAO,MAAM,CAAA;IACjB,CAAC;IAES,+DAA4B,GAAtC,UAAuC,MAAe;QAClD,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QACxB,IAAM,YAAY,GAAG,UAAG,qCAAyB,SAAG,MAAM,CAAE,CAAA;QAC5D,IAAM,YAAY,GAAG,UAAG,qCAAyB,SAAG,MAAM,CAAE,CAAA;QAC5D,OAAO,CAAC,CAAC,CAAC,oBAAU,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,oBAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAA;IAC7E,CAAC;IAED,2CAAQ,GAAR;QACI,OAAO,IAAI,CAAC,eAAe,EAAE,CAAA;IACjC,CAAC;IACL,+BAAC;AAAD,CAAC,AAnCD,CAA8C,8BAAa,GAmC1D;AAnCY,4DAAwB","sourcesContent":["import { PRODUCT_TOURS_ACTIVATED } from '../constants'\nimport { ProductTour, ProductTourEventName } from '../posthog-product-tours-types'\nimport { PostHog } from '../posthog-core'\nimport { EventReceiver } from './event-receiver'\nimport { createLogger } from './logger'\nimport { localStore } from '../storage'\nimport { TOUR_COMPLETED_KEY_PREFIX, TOUR_DISMISSED_KEY_PREFIX } from '../extensions/product-tours/constants'\n\nconst logger = createLogger('[Product Tour Event Receiver]')\n\nexport class ProductTourEventReceiver extends EventReceiver<ProductTour> {\n constructor(instance: PostHog) {\n super(instance)\n }\n\n protected _getActivatedKey(): string {\n return PRODUCT_TOURS_ACTIVATED\n }\n\n protected _getShownEventName(): string {\n return ProductTourEventName.SHOWN\n }\n\n protected _getItems(callback: (items: ProductTour[]) => void): void {\n this._instance?.productTours?.getProductTours(callback)\n }\n\n protected _cancelPendingItem(itemId: string): void {\n this._instance?.productTours?.cancelPendingTour(itemId)\n }\n\n protected _getLogger(): ReturnType<typeof createLogger> {\n return logger\n }\n\n protected _isItemPermanentlyIneligible(itemId?: string): boolean {\n if (!itemId) return true\n const completedKey = `${TOUR_COMPLETED_KEY_PREFIX}${itemId}`\n const dismissedKey = `${TOUR_DISMISSED_KEY_PREFIX}${itemId}`\n return !!(localStore._get(completedKey) || localStore._get(dismissedKey))\n }\n\n getTours(): string[] {\n return this.getActivatedIds()\n }\n}\n"]}
|
package/lib/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/autocapture-utils.ts","../src/autocapture.ts","../src/config.ts","../src/consent.ts","../src/constants.ts","../src/declaration.d.ts","../src/heatmaps.ts","../src/page-view.ts","../src/posthog-conversations-types.ts","../src/posthog-core.ts","../src/posthog-exceptions.ts","../src/posthog-featureflags.ts","../src/posthog-logs.ts","../src/posthog-persistence.ts","../src/posthog-product-tours-types.ts","../src/posthog-product-tours.ts","../src/posthog-surveys-types.ts","../src/posthog-surveys.ts","../src/rate-limiter.ts","../src/remote-config.ts","../src/request-queue.ts","../src/request.ts","../src/retry-queue.ts","../src/scroll-manager.ts","../src/session-props.ts","../src/sessionid.ts","../src/site-apps.ts","../src/storage.ts","../src/types.ts","../src/uuidv7.ts","../src/web-experiments-types.ts","../src/web-experiments.ts","../src/web-types.d.ts","../src/customizations/before-send.ts","../src/customizations/index.ts","../src/customizations/posthogReduxLogger.ts","../src/customizations/setAllPersonProfilePropertiesAsPersonPropertiesForFlags.ts","../src/entrypoints/all-external-dependencies.ts","../src/entrypoints/array.full.es5.ts","../src/entrypoints/array.full.no-external.ts","../src/entrypoints/array.full.ts","../src/entrypoints/array.no-external.ts","../src/entrypoints/array.ts","../src/entrypoints/conversations.ts","../src/entrypoints/crisp-chat-integration.ts","../src/entrypoints/customizations.full.ts","../src/entrypoints/dead-clicks-autocapture.ts","../src/entrypoints/element-inference.es.ts","../src/entrypoints/exception-autocapture.ts","../src/entrypoints/external-scripts-loader.ts","../src/entrypoints/intercom-integration.ts","../src/entrypoints/lazy-recorder.ts","../src/entrypoints/logs.ts","../src/entrypoints/main.cjs.ts","../src/entrypoints/module.es.ts","../src/entrypoints/module.full.es.ts","../src/entrypoints/module.full.no-external.es.ts","../src/entrypoints/module.no-external.es.ts","../src/entrypoints/posthog-recorder.ts","../src/entrypoints/product-tours-preview.es.ts","../src/entrypoints/product-tours.ts","../src/entrypoints/recorder-v2.ts","../src/entrypoints/recorder.ts","../src/entrypoints/surveys-preview.es.ts","../src/entrypoints/surveys.ts","../src/entrypoints/tracing-headers.ts","../src/entrypoints/web-vitals-with-attribution.ts","../src/entrypoints/web-vitals.ts","../src/extensions/dead-clicks-autocapture.ts","../src/extensions/external-integration.ts","../src/extensions/history-autocapture.ts","../src/extensions/rageclick.ts","../src/extensions/sampling.ts","../src/extensions/segment-integration.ts","../src/extensions/sentry-integration.ts","../src/extensions/surveys.tsx","../src/extensions/toolbar.ts","../src/extensions/tracing-headers.ts","../src/extensions/conversations/posthog-conversations.ts","../src/extensions/conversations/external/index.tsx","../src/extensions/conversations/external/persistence.ts","../src/extensions/conversations/external/components/CloseChatButton.tsx","../src/extensions/conversations/external/components/ConversationsWidget.tsx","../src/extensions/conversations/external/components/OpenChatButton.tsx","../src/extensions/conversations/external/components/RichContent.tsx","../src/extensions/conversations/external/components/SendMessageButton.tsx","../src/extensions/conversations/external/components/styles.ts","../src/extensions/exception-autocapture/index.ts","../src/extensions/product-tours/constants.ts","../src/extensions/product-tours/element-inference.ts","../src/extensions/product-tours/index.ts","../src/extensions/product-tours/preview.tsx","../src/extensions/product-tours/product-tours-utils.ts","../src/extensions/product-tours/product-tours.tsx","../src/extensions/product-tours/components/ProductTourBanner.tsx","../src/extensions/product-tours/components/ProductTourSurveyStepInner.tsx","../src/extensions/product-tours/components/ProductTourTooltip.tsx","../src/extensions/product-tours/components/ProductTourTooltipInner.tsx","../src/extensions/replay/session-recording.ts","../src/extensions/replay/external/config.ts","../src/extensions/replay/external/denylist.ts","../src/extensions/replay/external/flushed-size-tracker.ts","../src/extensions/replay/external/lazy-loaded-session-recorder.ts","../src/extensions/replay/external/mutation-throttler.ts","../src/extensions/replay/external/network-plugin.ts","../src/extensions/replay/external/sessionrecording-utils.ts","../src/extensions/replay/external/triggerMatching.ts","../src/extensions/replay/rrweb-plugins/patch.ts","../src/extensions/replay/types/rrweb-types.ts","../src/extensions/replay/types/rrweb.ts","../src/extensions/surveys/action-matcher.ts","../src/extensions/surveys/icons.tsx","../src/extensions/surveys/surveys-extension-utils.tsx","../src/extensions/surveys/components/BottomSection.tsx","../src/extensions/surveys/components/ConfirmationMessage.tsx","../src/extensions/surveys/components/PostHogLogo.tsx","../src/extensions/surveys/components/QuestionHeader.tsx","../src/extensions/surveys/components/QuestionTypes.tsx","../src/extensions/utils/stylesheet-loader.ts","../src/extensions/web-vitals/index.ts","../src/utils/blocked-uas.ts","../src/utils/element-utils.ts","../src/utils/elements-chain-utils.ts","../src/utils/encode-utils.ts","../src/utils/event-receiver.ts","../src/utils/event-utils.ts","../src/utils/globals.ts","../src/utils/index.ts","../src/utils/logger.ts","../src/utils/product-tour-event-receiver.ts","../src/utils/product-tour-utils.ts","../src/utils/property-utils.ts","../src/utils/prototype-utils.ts","../src/utils/regex-utils.ts","../src/utils/request-router.ts","../src/utils/request-utils.ts","../src/utils/simple-event-emitter.ts","../src/utils/survey-branching.ts","../src/utils/survey-event-receiver.ts","../src/utils/survey-url-prefill.ts","../src/utils/survey-utils.ts","../src/utils/type-utils.ts"],"version":"5.8.2"}
|
|
1
|
+
{"root":["../src/autocapture-utils.ts","../src/autocapture.ts","../src/config.ts","../src/consent.ts","../src/constants.ts","../src/declaration.d.ts","../src/heatmaps.ts","../src/page-view.ts","../src/posthog-conversations-types.ts","../src/posthog-core.ts","../src/posthog-exceptions.ts","../src/posthog-featureflags.ts","../src/posthog-logs.ts","../src/posthog-persistence.ts","../src/posthog-product-tours-types.ts","../src/posthog-product-tours.ts","../src/posthog-surveys-types.ts","../src/posthog-surveys.ts","../src/rate-limiter.ts","../src/remote-config.ts","../src/request-queue.ts","../src/request.ts","../src/retry-queue.ts","../src/scroll-manager.ts","../src/session-props.ts","../src/sessionid.ts","../src/site-apps.ts","../src/storage.ts","../src/types.ts","../src/uuidv7.ts","../src/web-experiments-types.ts","../src/web-experiments.ts","../src/web-types.d.ts","../src/customizations/before-send.ts","../src/customizations/index.ts","../src/customizations/posthogReduxLogger.ts","../src/customizations/setAllPersonProfilePropertiesAsPersonPropertiesForFlags.ts","../src/entrypoints/all-external-dependencies.ts","../src/entrypoints/array.full.es5.ts","../src/entrypoints/array.full.no-external.ts","../src/entrypoints/array.full.ts","../src/entrypoints/array.no-external.ts","../src/entrypoints/array.ts","../src/entrypoints/conversations.ts","../src/entrypoints/crisp-chat-integration.ts","../src/entrypoints/customizations.full.ts","../src/entrypoints/dead-clicks-autocapture.ts","../src/entrypoints/element-inference.es.ts","../src/entrypoints/exception-autocapture.ts","../src/entrypoints/external-scripts-loader.ts","../src/entrypoints/intercom-integration.ts","../src/entrypoints/lazy-recorder.ts","../src/entrypoints/logs.ts","../src/entrypoints/main.cjs.ts","../src/entrypoints/module.es.ts","../src/entrypoints/module.full.es.ts","../src/entrypoints/module.full.no-external.es.ts","../src/entrypoints/module.no-external.es.ts","../src/entrypoints/posthog-recorder.ts","../src/entrypoints/product-tours-preview.es.ts","../src/entrypoints/product-tours.ts","../src/entrypoints/recorder-v2.ts","../src/entrypoints/recorder.ts","../src/entrypoints/surveys-preview.es.ts","../src/entrypoints/surveys.ts","../src/entrypoints/tracing-headers.ts","../src/entrypoints/web-vitals-with-attribution.ts","../src/entrypoints/web-vitals.ts","../src/extensions/dead-clicks-autocapture.ts","../src/extensions/external-integration.ts","../src/extensions/history-autocapture.ts","../src/extensions/rageclick.ts","../src/extensions/sampling.ts","../src/extensions/segment-integration.ts","../src/extensions/sentry-integration.ts","../src/extensions/surveys.tsx","../src/extensions/toolbar.ts","../src/extensions/tracing-headers.ts","../src/extensions/conversations/posthog-conversations.ts","../src/extensions/conversations/external/index.tsx","../src/extensions/conversations/external/persistence.ts","../src/extensions/conversations/external/components/CloseChatButton.tsx","../src/extensions/conversations/external/components/ConversationsWidget.tsx","../src/extensions/conversations/external/components/OpenChatButton.tsx","../src/extensions/conversations/external/components/RichContent.tsx","../src/extensions/conversations/external/components/SendMessageButton.tsx","../src/extensions/conversations/external/components/TicketListItem.tsx","../src/extensions/conversations/external/components/TicketListView.tsx","../src/extensions/conversations/external/components/styles.ts","../src/extensions/conversations/external/components/utils.ts","../src/extensions/exception-autocapture/index.ts","../src/extensions/product-tours/constants.ts","../src/extensions/product-tours/element-inference.ts","../src/extensions/product-tours/index.ts","../src/extensions/product-tours/preview.tsx","../src/extensions/product-tours/product-tours-utils.ts","../src/extensions/product-tours/product-tours.tsx","../src/extensions/product-tours/components/ProductTourBanner.tsx","../src/extensions/product-tours/components/ProductTourSurveyStepInner.tsx","../src/extensions/product-tours/components/ProductTourTooltip.tsx","../src/extensions/product-tours/components/ProductTourTooltipInner.tsx","../src/extensions/replay/session-recording.ts","../src/extensions/replay/external/config.ts","../src/extensions/replay/external/denylist.ts","../src/extensions/replay/external/flushed-size-tracker.ts","../src/extensions/replay/external/lazy-loaded-session-recorder.ts","../src/extensions/replay/external/mutation-throttler.ts","../src/extensions/replay/external/network-plugin.ts","../src/extensions/replay/external/sessionrecording-utils.ts","../src/extensions/replay/external/triggerMatching.ts","../src/extensions/replay/rrweb-plugins/patch.ts","../src/extensions/replay/types/rrweb-types.ts","../src/extensions/replay/types/rrweb.ts","../src/extensions/surveys/action-matcher.ts","../src/extensions/surveys/icons.tsx","../src/extensions/surveys/surveys-extension-utils.tsx","../src/extensions/surveys/components/BottomSection.tsx","../src/extensions/surveys/components/ConfirmationMessage.tsx","../src/extensions/surveys/components/PostHogLogo.tsx","../src/extensions/surveys/components/QuestionHeader.tsx","../src/extensions/surveys/components/QuestionTypes.tsx","../src/extensions/utils/stylesheet-loader.ts","../src/extensions/web-vitals/index.ts","../src/utils/blocked-uas.ts","../src/utils/element-utils.ts","../src/utils/elements-chain-utils.ts","../src/utils/encode-utils.ts","../src/utils/event-receiver.ts","../src/utils/event-utils.ts","../src/utils/globals.ts","../src/utils/index.ts","../src/utils/logger.ts","../src/utils/product-tour-event-receiver.ts","../src/utils/product-tour-utils.ts","../src/utils/property-utils.ts","../src/utils/prototype-utils.ts","../src/utils/regex-utils.ts","../src/utils/request-router.ts","../src/utils/request-utils.ts","../src/utils/simple-event-emitter.ts","../src/utils/survey-branching.ts","../src/utils/survey-event-receiver.ts","../src/utils/survey-url-prefill.ts","../src/utils/survey-utils.ts","../src/utils/type-utils.ts"],"version":"5.8.2"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "posthog-js",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.348.0",
|
|
4
4
|
"description": "Posthog-js allows you to automatically capture usage and send events to PostHog.",
|
|
5
5
|
"repository": "https://github.com/PostHog/posthog-js",
|
|
6
6
|
"author": "hey@posthog.com",
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"@opentelemetry/exporter-logs-otlp-http": "^0.208.0",
|
|
29
29
|
"@opentelemetry/resources": "^2.2.0",
|
|
30
30
|
"@opentelemetry/sdk-logs": "^0.208.0",
|
|
31
|
-
"@posthog/core": "1.
|
|
32
|
-
"@posthog/types": "1.
|
|
31
|
+
"@posthog/core": "1.23.0",
|
|
32
|
+
"@posthog/types": "1.348.0"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@babel/core": "^7.27.1",
|