signalbird 1.4.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/README.md +576 -0
- package/dist/angular.d.mts +53 -0
- package/dist/angular.d.ts +53 -0
- package/dist/angular.js +578 -0
- package/dist/angular.js.map +1 -0
- package/dist/angular.mjs +574 -0
- package/dist/angular.mjs.map +1 -0
- package/dist/app.d.mts +343 -0
- package/dist/app.d.ts +343 -0
- package/dist/app.js +518 -0
- package/dist/app.js.map +1 -0
- package/dist/app.mjs +514 -0
- package/dist/app.mjs.map +1 -0
- package/dist/browser.d.mts +56 -0
- package/dist/browser.d.ts +56 -0
- package/dist/browser.js +113 -0
- package/dist/browser.js.map +1 -0
- package/dist/browser.mjs +109 -0
- package/dist/browser.mjs.map +1 -0
- package/dist/index.d.mts +1170 -0
- package/dist/index.d.ts +1170 -0
- package/dist/index.js +853 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +841 -0
- package/dist/index.mjs.map +1 -0
- package/dist/react-native.d.mts +46 -0
- package/dist/react-native.d.ts +46 -0
- package/dist/react-native.js +576 -0
- package/dist/react-native.js.map +1 -0
- package/dist/react-native.mjs +569 -0
- package/dist/react-native.mjs.map +1 -0
- package/dist/react.d.mts +43 -0
- package/dist/react.d.ts +43 -0
- package/dist/react.js +587 -0
- package/dist/react.js.map +1 -0
- package/dist/react.mjs +580 -0
- package/dist/react.mjs.map +1 -0
- package/dist/signalbird.js +141 -0
- package/dist/vue.d.mts +46 -0
- package/dist/vue.d.ts +46 -0
- package/dist/vue.js +575 -0
- package/dist/vue.js.map +1 -0
- package/dist/vue.mjs +568 -0
- package/dist/vue.mjs.map +1 -0
- package/package.json +125 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/app/client.ts","../src/app/session.ts","../src/react/index.ts"],"names":["detail"],"mappings":";;;;;AAmCA,IAAM,gBAAA,GAAmB,2BAAA;AACzB,IAAM,WAAA,GAAc,YAAA;AAWpB,SAAS,cAAA,GAA6B;AACpC,EAAA,IAAI;AACF,IAAA,IAAI,OAAO,iBAAiB,WAAA,EAAa;AACvC,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,CAAC,CAAA,KAAM,YAAA,CAAa,QAAQ,CAAC,CAAA;AAAA,QACtC,SAAS,CAAC,CAAA,EAAG,MAAM,YAAA,CAAa,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,QAC5C,UAAA,EAAY,CAAC,CAAA,KAAM,YAAA,CAAa,WAAW,CAAC;AAAA,OAC9C;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAoB;AAEvC,EAAA,OAAO;AAAA,IACL,SAAS,CAAC,CAAA,KAAM,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,IAAK,IAAA;AAAA,IACjC,OAAA,EAAS,CAAC,CAAA,EAAG,CAAA,KAAM,KAAK,MAAA,CAAO,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,IACvC,YAAY,CAAC,CAAA,KAAM,KAAK,MAAA,CAAO,OAAO,CAAC;AAAA,GACzC;AACF;AAGO,SAAS,QAAA,GAAmB;AACjC,EAAA,IAAI;AACF,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,OAAO,MAAA,CAAO,eAAe,UAAA,EAAY;AAC5E,MAAA,OAAO,OAAO,UAAA,EAAW;AAAA,IAC3B;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,OAAO,KAAK,IAAA,CAAK,GAAA,EAAI,CAAE,QAAA,CAAS,EAAE,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,EAAE,EAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAChF;AAEO,IAAM,gBAAN,MAAoB;AAAA,EAQzB,YAA6B,MAAA,EAAmB;AAAnB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAH7B,IAAA,IAAA,CAAQ,OAAA,GAAgC,IAAA;AACxC,IAAA,IAAA,CAAQ,MAAA,GAAS,KAAA;AAGf,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACnB,MAAA,MAAM,IAAI,MAAM,8CAAyC,CAAA;AAAA,IAC3D;AAIA,IAAA,IAAI,CAAC,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,UAAU,CAAA,EAAG;AACzC,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OAEF;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,WAAW,MAAA,CAAO,OAAA,IAAW,gBAAA,EAAkB,OAAA,CAAQ,OAAO,EAAE,CAAA;AACrE,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA,CAAO,OAAA,IAAW,cAAA,EAAe;AAChD,IAAA,IAAA,CAAK,OAAA,GAAU,OAAO,OAAA,IAAW,GAAA;AACjC,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,SAAA,KAAc,IAAI,IAAA,KAAS,KAAA,CAAM,GAAG,IAAI,CAAA,CAAA;AAAA,EAChE;AAAA;AAAA;AAAA,EAKA,SAAA,GAAgD;AAC9C,IAAA,OAAO,IAAA,CAAK,QAAQ,MAAA,EAAQ,mBAAA,EAAqB,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,CAAA;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,YAAA,CAAa,KAAA,GAAsB,EAAC,EAA4C;AACpF,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,OAAA,CAA8B,MAAA,EAAQ,wBAAwB,KAAK,CAAA;AAE7F,IAAA,MAAM,OAAA,GAAU,OAAO,IAAA,EAAM,OAAA;AAE7B,IAAA,IAAI,MAAA,CAAO,EAAA,IAAM,OAAA,EAAS,EAAA,IAAM,QAAQ,MAAA,EAAQ;AAC9C,MAAA,MAAM,KAAK,YAAA,CAAa;AAAA,QACtB,IAAI,OAAA,CAAQ,EAAA;AAAA,QACZ,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,MAAA,EAAQ,KAAK,MAAA,CAAO,MAAA;AAAA,QACpB,IAAA,EAAM,QAAQ,IAAA,IAAQ,IAAA;AAAA,QACtB,KAAA,EAAO,QAAQ,KAAA,IAAS;AAAA,OACzB,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA,EAGA,SAAS,KAAA,EAA+D;AACtE,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,kBAAA,EAAoB,KAAK,CAAA;AAAA,EACvD;AAAA;AAAA,EAGA,MAAM,cAAA,GAA8F;AAClG,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,WAAA,EAAY;AAEtC,IAAA,OAAO,MAAA,GAAS,EAAE,EAAA,EAAI,MAAA,CAAO,EAAA,EAAI,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,KAAA,EAAO,MAAA,CAAO,KAAA,EAAM,GAAI,IAAA;AAAA,EAC9E;AAAA;AAAA,EAGA,MAAM,OAAA,GAAyB;AAC7B,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,UAAA,CAAW,WAAW,CAAA;AAAA,EAC3C;AAAA;AAAA,EAIA,iBAAA,GAAiE;AAC/D,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,4BAA4B,CAAA;AAAA,EACzD;AAAA,EAEA,eAAA,CAAgB,IAAY,KAAA,EAA8E;AACxG,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAA,EAAO,CAAA,2BAAA,EAA8B,IAAI,EAAE,CAAC,CAAA,CAAA,EAAI,MAAA,EAAW,KAAK,CAAA;AAAA,EACtF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAkB,KAAA,EAAoG;AACpH,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,4BAAA,EAA8B;AAAA,MACxD,WAAW,QAAA,EAAS;AAAA,MACpB,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA,EAEA,WAAA,CAAY,gBAAwB,KAAA,EAAkE;AACpG,IAAA,OAAO,KAAK,OAAA,CAAQ,MAAA,EAAQ,8BAA8B,GAAA,CAAI,cAAc,CAAC,CAAA,SAAA,CAAA,EAAa;AAAA,MACxF,WAAW,QAAA,EAAS;AAAA,MACpB,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,WAAA,CAAY,cAAA,EAAwB,SAAA,EAAmB,IAAA,EAAuD;AAC5G,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,OAAA;AAAA,MACA,8BAA8B,GAAA,CAAI,cAAc,CAAC,CAAA,UAAA,EAAa,GAAA,CAAI,SAAS,CAAC,CAAA,CAAA;AAAA,MAC5E,EAAE,IAAA;AAAK,KACT;AAAA,EACF;AAAA,EAEA,aAAA,CAAc,gBAAwB,SAAA,EAA+C;AACnF,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,QAAA;AAAA,MACA,8BAA8B,GAAA,CAAI,cAAc,CAAC,CAAA,UAAA,EAAa,GAAA,CAAI,SAAS,CAAC,CAAA;AAAA,KAC9E;AAAA,EACF;AAAA;AAAA,EAGA,cAAA,CAAe,cAAA,EAAwB,SAAA,EAAmB,KAAA,EAAwD;AAChH,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,MAAA;AAAA,MACA,8BAA8B,GAAA,CAAI,cAAc,CAAC,CAAA,UAAA,EAAa,GAAA,CAAI,SAAS,CAAC,CAAA,UAAA,CAAA;AAAA,MAC5E,EAAE,KAAA;AAAM,KACV;AAAA,EACF;AAAA,EAEA,SAAA,CAAU,gBAAwB,QAAA,EAA+C;AAC/E,IAAA,OAAO,KAAK,OAAA,CAAQ,MAAA,EAAQ,8BAA8B,GAAA,CAAI,cAAc,CAAC,CAAA,OAAA,CAAA,EAAW;AAAA,MACtF,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH;AAAA,EAEA,QAAA,CAAS,gBAAwB,aAAA,EAAoD;AACnF,IAAA,OAAO,KAAK,OAAA,CAAQ,MAAA,EAAQ,8BAA8B,GAAA,CAAI,cAAc,CAAC,CAAA,KAAA,CAAA,EAAS;AAAA,MACpF,eAAA,EAAiB;AAAA,KAClB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAA,CAAiB,cAAA,EAAwB,IAAA,EAAe,QAAA,EAA+D;AACrH,IAAA,MAAM,IAAA,GAAO,IAAI,QAAA,EAAS;AAC1B,IAAA,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ,IAAA,EAAc,QAAQ,CAAA;AAE1C,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACV,MAAA;AAAA,MACA,CAAA,2BAAA,EAA8B,GAAA,CAAI,cAAc,CAAC,CAAA,YAAA,CAAA;AAAA,MACjD;AAAA,KACF;AAAA,EACF;AAAA,EAEA,kBAAkB,cAAA,EAA2E;AAC3F,IAAA,OAAO,KAAK,OAAA,CAAQ,MAAA,EAAQ,8BAA8B,GAAA,CAAI,cAAc,CAAC,CAAA,MAAA,CAAQ,CAAA;AAAA,EACvF;AAAA,EAEA,gBAAA,CAAiB,cAAA,EAAwB,MAAA,EAAgB,OAAA,EAA8C;AACrG,IAAA,OAAO,KAAK,OAAA,CAAQ,MAAA,EAAQ,8BAA8B,GAAA,CAAI,cAAc,CAAC,CAAA,KAAA,CAAA,EAAS;AAAA,MACpF,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,eAAe,KAAA,EAAwD;AACrE,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,iBAAA,EAAmB,KAAK,CAAA;AAAA,EACtD;AAAA;AAAA,EAGA,iBAAiB,KAAA,EAA2C;AAC1D,IAAA,OAAO,KAAK,OAAA,CAAQ,QAAA,EAAU,mBAAmB,GAAA,CAAI,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,EAC/D;AAAA;AAAA,EAIA,MAAc,OAAA,CACZ,MAAA,EACA,IAAA,EACA,MACA,KAAA,EACsB;AACtB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,WAAA,EAAY;AACtC,IAAA,MAAM,MAAA,GAAS,OAAO,QAAA,KAAa,WAAA,IAAe,IAAA,YAAgB,QAAA;AAElE,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,MAAA,EAAQ,kBAAA;AAAA,MACR,sBAAA,EAAwB,KAAK,MAAA,CAAO;AAAA,KACtC;AAEA,IAAA,IAAI,MAAA,EAAQ,MAAA,EAAQ,OAAA,CAAQ,sBAAsB,IAAI,MAAA,CAAO,MAAA;AAC7D,IAAA,IAAI,SAAS,MAAA,IAAa,CAAC,MAAA,EAAQ,OAAA,CAAQ,cAAc,CAAA,GAAI,kBAAA;AAC7D,IAAA,IAAI,KAAK,MAAA,CAAO,MAAA,UAAgB,UAAU,CAAA,GAAI,KAAK,MAAA,CAAO,MAAA;AAE1D,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,WAAW,KAAA,EAAM,EAAG,KAAK,OAAO,CAAA;AAE/D,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,OAAA,GAAU,IAAA,GAAO,UAAA,CAAW,KAAK,CAAA,EAAG;AAAA,QAC3E,MAAA;AAAA,QACA,OAAA;AAAA,QACA,IAAA,EAAM,SAAS,KAAA,CAAA,GAAY,KAAA,CAAA,GAAY,SAAU,IAAA,GAAoB,IAAA,CAAK,UAAU,IAAI,CAAA;AAAA,QACxF,QAAQ,UAAA,CAAW;AAAA,OACpB,CAAA;AAED,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,IAAI,IAAA,GAAY,IAAA;AAEhB,MAAA,IAAI;AACF,QAAA,IAAA,GAAO,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA;AAAA,MACnC,CAAA,CAAA,MAAQ;AACN,QAAA,IAAA,GAAO,IAAA;AAAA,MACT;AAEA,MAAA,IAAI,SAAS,EAAA,EAAI;AACf,QAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,MAAA,EAAQ,QAAA,CAAS,QAAQ,IAAA,EAAgB;AAAA,MAC9D;AAEA,MAAA,MAAM,OACH,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,SAC1E,QAAA,CAAS,MAAA,KAAW,MAAM,kBAAA,GAAqB,CAAA,KAAA,EAAQ,SAAS,MAAM,CAAA,CAAA,CAAA;AAIzE,MAAA,IAAI,IAAA,KAAS,iBAAA,IAAqB,QAAA,CAAS,MAAA,KAAW,GAAA,EAAK;AACzD,QAAA,MAAM,KAAK,OAAA,EAAQ;AAAA,MACrB;AAEA,MAAA,IAAI,IAAA,CAAK,OAAO,KAAA,EAAO;AACrB,QAAA,OAAA,CAAQ,KAAK,CAAA,aAAA,EAAgB,IAAI,CAAA,OAAA,EAAU,QAAA,CAAS,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,MAC/D;AAEA,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,IAAA;AAAA,QACA,OAAA,EACG,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,OAAO,IAAA,CAAK,OAAA,KAAY,QAAA,IAAY,IAAA,CAAK,OAAA,IAC9E,CAAA,KAAA,EAAQ,SAAS,MAAM,CAAA,CAAA;AAAA,QACzB;AAAA,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,QAAA,GAAW,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,YAAA;AAE1D,MAAA,IAAI,IAAA,CAAK,OAAO,KAAA,EAAO;AACrB,QAAA,OAAA,CAAQ,IAAA,CAAK,4CAA6B,KAAK,CAAA;AAAA,MACjD;AAEA,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,MAAA,EAAQ,CAAA;AAAA,QACR,IAAA,EAAM,WAAW,SAAA,GAAY,eAAA;AAAA,QAC7B,OAAA,EAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,OACpD;AAAA,IACF,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,MAAc,WAAA,GAA6C;AACzD,IAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,OAAO,IAAA,CAAK,OAAA;AAE7B,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAEd,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,QAAQ,WAAW,CAAA;AAClD,MAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AAEjB,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAG7B,MAAA,IAAI,CAAC,QAAQ,MAAA,IAAU,MAAA,CAAO,WAAW,IAAA,CAAK,MAAA,CAAO,QAAQ,OAAO,IAAA;AAEpE,MAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AAAA,IACjB,CAAA,CAAA,MAAQ;AACN,MAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,IACjB;AAEA,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEA,MAAc,aAAa,OAAA,EAAuC;AAChE,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAEd,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,OAAA,CAAQ,OAAA,CAAQ,aAAa,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA;AAAA,IACjE,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF,CAAA;AAEA,SAAS,IAAI,KAAA,EAAuB;AAClC,EAAA,OAAO,mBAAmB,KAAK,CAAA;AACjC;AAEA,SAAS,WAAW,KAAA,EAAmC;AACrD,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AAEnB,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AAEnC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAgC,CAAA,EAAG;AAC3E,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AAC3C,IAAA,MAAA,CAAO,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAClC;AAEA,EAAA,MAAM,OAAA,GAAU,OAAO,QAAA,EAAS;AAEhC,EAAA,OAAO,OAAA,GAAU,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,GAAK,EAAA;AACnC;;;AC1WA,IAAM,cAAc,CAAC,GAAA,EAAQ,KAAQ,GAAA,EAAQ,GAAA,EAAQ,KAAQ,IAAO,CAAA;AACpE,IAAM,eAAA,GAAkB,GAAA;AAEjB,IAAM,cAAN,MAAkB;AAAA,EAkBvB,WAAA,CACmB,GAAA,EACA,OAAA,GAA8B,EAAC,EAChD;AAFiB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAnBnB,IAAA,IAAA,CAAQ,KAAA,GAAmB;AAAA,MACzB,OAAA,EAAS,KAAA;AAAA,MACT,OAAA,EAAS,IAAA;AAAA,MACT,YAAA,EAAc,IAAA;AAAA,MACd,UAAU,EAAC;AAAA,MACX,MAAA,EAAQ,CAAA;AAAA,MACR,WAAA,EAAa,KAAA;AAAA,MACb,WAAA,EAAa;AAAA,KACf;AAEA,IAAA,IAAA,CAAQ,SAAA,uBAAgB,GAAA,EAAkB;AAC1C,IAAA,IAAA,CAAQ,KAAA,GAA8C,IAAA;AACtD,IAAA,IAAA,CAAQ,IAAA,GAAO,CAAA;AAEf,IAAA,IAAA,CAAQ,OAAA,GAAU,KAAA;AAClB,IAAA,IAAA,CAAQ,OAAA,GAAU,KAAA;AAMhB,IAAA,IAAA,CAAK,MAAA,GAAS,QAAQ,MAAA,IAAU,KAAA;AAAA,EAClC;AAAA;AAAA,EAIA,UAAU,QAAA,EAAoC;AAC5C,IAAA,IAAA,CAAK,SAAA,CAAU,IAAI,QAAQ,CAAA;AAC3B,IAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AAEnB,IAAA,OAAO,MAAM,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA;AAAA,EAC7C;AAAA,EAEA,QAAA,GAAsB;AACpB,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA;AAAA;AAAA,EAKA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AAEf,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,GAAA,CAAI,SAAA,EAAU;AACtC,IAAA,MAAM,GAAA,GAAM,KAAK,IAAA,EAAM,GAAA;AAEvB,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,IAAM,CAAC,KAAK,YAAA,EAAc;AAClC,MAAA,IAAA,CAAK,KAAA,CAAM,EAAE,OAAA,EAAS,KAAA,EAAO,SAAS,KAAA,EAAO,SAAA,EAAW,IAAA,CAAK,IAAA,EAAM,CAAA;AAEnE,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,KAAA,CAAM,EAAE,OAAA,EAAS,IAAA,EAAM,aAAa,GAAA,CAAI,YAAA,IAAgB,MAAM,CAAA;AAKnE,IAAA,IAAI,MAAM,IAAA,CAAK,GAAA,CAAI,cAAA,EAAe,EAAG;AACnC,MAAA,MAAM,KAAK,OAAA,EAAQ;AAAA,IACrB;AAEA,IAAA,IAAA,CAAK,KAAA,CAAM,EAAE,OAAA,EAAS,KAAA,EAAO,CAAA;AAC7B,IAAA,IAAA,CAAK,QAAA,EAAS;AAAA,EAChB;AAAA;AAAA,EAGA,UAAU,MAAA,EAAuB;AAC/B,IAAA,IAAI,IAAA,CAAK,WAAW,MAAA,EAAQ;AAE5B,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,IAAA,GAAO,CAAA;AAEZ,IAAA,IAAI,MAAA,EAAQ,KAAK,IAAA,CAAK,OAAA,EAAQ;AAE9B,IAAA,IAAA,CAAK,QAAA,EAAS;AAAA,EAChB;AAAA,EAEA,IAAA,GAAa;AACX,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAEf,IAAA,IAAI,IAAA,CAAK,KAAA,EAAO,YAAA,CAAa,IAAA,CAAK,KAAK,CAAA;AAEvC,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AAAA,EACf;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,KAAA,EAAiD;AACjE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,GAAA,CAAI,aAAa,KAAK,CAAA;AAEhD,IAAA,IAAI,MAAA,CAAO,EAAA,EAAI,MAAM,IAAA,CAAK,OAAA,EAAQ;AAElC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,IAAA,CAAK,IAAA,EAAc,WAAA,EAAqD;AAC5E,IAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAE1B,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,WAAA,EAAa,MAAA,EAAQ;AACpC,MAAA,OAAO,EAAE,IAAI,KAAA,EAAO,MAAA,EAAQ,GAAG,IAAA,EAAM,YAAA,EAAc,SAAS,iBAAA,EAAa;AAAA,IAC3E;AAEA,IAAA,MAAM,MAAM,QAAA,EAAS;AACrB,IAAA,MAAM,UAAA,GAA6C;AAAA,MACjD,EAAA,EAAI,GAAA;AAAA,MACJ,SAAA,EAAW,GAAA;AAAA,MACX,WAAA,EAAa,SAAA;AAAA,MACb,IAAA,EAAM,OAAA;AAAA,MACN,UAAA,EAAA,iBAAY,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,KACrC;AAEA,IAAA,IAAA,CAAK,KAAA,CAAM,EAAE,QAAA,EAAU,CAAC,GAAG,KAAK,KAAA,CAAM,QAAA,EAAU,UAAU,CAAA,EAAG,CAAA;AAG7D,IAAA,IAAI,CAAE,MAAM,IAAA,CAAK,GAAA,CAAI,gBAAe,EAAI;AACtC,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,GAAA,CAAI,aAAa,IAAA,CAAK,OAAA,CAAQ,OAAA,IAAW,EAAE,CAAA;AAEtE,MAAA,IAAI,CAAC,OAAA,CAAQ,EAAA,SAAW,IAAA,CAAK,UAAA,CAAW,KAAK,OAAO,CAAA;AAAA,IACtD;AAEA,IAAA,MAAM,YAAA,GAAe,KAAK,KAAA,CAAM,YAAA;AAEhC,IAAA,MAAM,MAAA,GAAS,YAAA,GACX,MAAM,IAAA,CAAK,GAAA,CAAI,WAAA,CAAY,YAAA,CAAa,EAAA,EAAI,EAAE,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,GAAA,EAAK,aAAa,CAAA,GAC1F,MAAM,IAAA,CAAK,GAAA,CAAI,iBAAA,CAAkB,EAAE,IAAA,EAAM,OAAA,EAAS,SAAA,EAAW,GAAA,EAAK,WAAA,EAAuC,CAAA;AAE7G,IAAA,IAAI,CAAC,MAAA,CAAO,EAAA,SAAW,IAAA,CAAK,UAAA,CAAW,KAAK,MAAM,CAAA;AAElD,IAAA,MAAM,KAAK,OAAA,EAAQ;AACnB,IAAA,IAAA,CAAK,IAAA,GAAO,CAAA;AACZ,IAAA,IAAA,CAAK,QAAA,EAAS;AAEd,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA,EAGA,OAAO,QAAA,EAAyB;AAC9B,IAAA,MAAM,YAAA,GAAe,KAAK,KAAA,CAAM,YAAA;AAEhC,IAAA,IAAI,CAAC,YAAA,EAAc;AAEnB,IAAA,KAAK,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,YAAA,CAAa,IAAI,QAAQ,CAAA;AAAA,EACnD;AAAA;AAAA,EAGA,MAAM,QAAA,GAA0B;AAC9B,IAAA,MAAM,YAAA,GAAe,KAAK,KAAA,CAAM,YAAA;AAChC,IAAA,MAAM,IAAA,GAAO,KAAK,KAAA,CAAM,QAAA,CAAS,KAAK,KAAA,CAAM,QAAA,CAAS,SAAS,CAAC,CAAA;AAE/D,IAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,IAAA,EAAM;AAE5B,IAAA,MAAM,KAAK,GAAA,CAAI,QAAA,CAAS,YAAA,CAAa,EAAA,EAAI,KAAK,EAAE,CAAA;AAChD,IAAA,IAAA,CAAK,KAAA,CAAM,EAAE,MAAA,EAAQ,CAAA,EAAG,CAAA;AAAA,EAC1B;AAAA,EAEA,MAAM,KAAA,CAAM,MAAA,EAAiB,OAAA,EAAiC;AAC5D,IAAA,MAAM,YAAA,GAAe,KAAK,KAAA,CAAM,YAAA;AAEhC,IAAA,IAAI,CAAC,YAAA,EAAc;AAEnB,IAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,MAAA,MAAM,KAAK,GAAA,CAAI,gBAAA,CAAiB,YAAA,CAAa,EAAA,EAAI,QAAQ,OAAO,CAAA;AAAA,IAClE;AAEA,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,iBAAA,CAAkB,YAAA,CAAa,EAAE,CAAA;AAChD,IAAA,MAAM,KAAK,OAAA,EAAQ;AAAA,EACrB;AAAA;AAAA,EAGA,MAAM,OAAA,GAAyB;AAC7B,IAAA,MAAM,OAAA,GAAU,KAAK,KAAA,CAAM,YAAA;AAE3B,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,GAAA,CAAI,iBAAA,EAAkB;AAC9C,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,EAAM,IAAA,GAAO,CAAC,CAAA;AAEjC,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,IAAA,CAAK,KAAA,CAAM,EAAE,SAAA,EAAW,IAAA,CAAK,KAAK,MAAA,GAAY,IAAA,CAAK,MAAM,CAAA;AAEzD,QAAA;AAAA,MACF;AAEA,MAAA,MAAMA,UAAS,MAAM,IAAA,CAAK,GAAA,CAAI,eAAA,CAAgB,MAAM,EAAE,CAAA;AAEtD,MAAA,IAAA,CAAK,iBAAA,CAAkBA,OAAAA,CAAO,IAAA,EAAM,YAAA,IAAgB,OAAO,IAAI,CAAA;AAE/D,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,KAAK,mBAAA,EAAoB;AACvC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,GAAA,CAAI,eAAA,CAAgB,OAAA,CAAQ,EAAA,EAAI,KAAA,GAAQ,EAAE,KAAA,EAAM,GAAI,MAAS,CAAA;AAEvF,IAAA,IAAI,CAAC,MAAA,CAAO,EAAA,IAAM,CAAC,MAAA,CAAO,MAAM,YAAA,EAAc;AAC5C,MAAA,IAAA,CAAK,KAAA,CAAM,EAAE,SAAA,EAAW,MAAA,CAAO,MAAM,CAAA;AAErC,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,iBAAA,CAAkB,MAAA,CAAO,IAAA,CAAK,YAAA,EAAc,CAAC,KAAK,CAAA;AAAA,EACzD;AAAA;AAAA,EAIQ,iBAAA,CAAkB,cAA4B,OAAA,EAAwB;AAC5E,IAAA,MAAM,QAAA,GAAW,YAAA,CAAa,QAAA,IAAY,EAAC;AAC3C,IAAA,MAAM,SAAS,OAAA,GAAU,QAAA,GAAW,cAAc,IAAA,CAAK,KAAA,CAAM,UAAU,QAAQ,CAAA;AAI/E,IAAA,IAAI,QAAA,CAAS,MAAA,EAAQ,IAAA,CAAK,IAAA,GAAO,CAAA;AAEjC,IAAA,IAAA,CAAK,KAAA,CAAM;AAAA,MACT,YAAA;AAAA,MACA,QAAA,EAAU,MAAA;AAAA,MACV,MAAA,EAAQ,aAAa,YAAA,IAAgB,CAAA;AAAA,MACrC,WAAA,EAAa,CAAC,CAAC,YAAA,CAAa,YAAA;AAAA,MAC5B,WAAA,EAAa,YAAA,CAAa,YAAA,IAAgB,IAAA,CAAK,KAAA,CAAM,WAAA;AAAA,MACrD,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH;AAAA;AAAA,EAGQ,mBAAA,GAA0C;AAChD,IAAA,KAAA,IAAS,CAAA,GAAI,KAAK,KAAA,CAAM,QAAA,CAAS,SAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACxD,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA;AAErC,MAAA,IAAI,OAAA,CAAQ,EAAA,IAAM,CAAC,OAAA,CAAQ,EAAA,CAAG,UAAA,CAAW,IAAI,CAAA,IAAK,OAAA,CAAQ,EAAA,KAAO,OAAA,CAAQ,SAAA,EAAW;AAClF,QAAA,OAAO,OAAA,CAAQ,EAAA;AAAA,MACjB;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,UAAA,CAAW,KAAa,MAAA,EAA8C;AAC5E,IAAA,IAAA,CAAK,KAAA,CAAM;AAAA,MACT,QAAA,EAAU,IAAA,CAAK,KAAA,CAAM,QAAA,CAAS,GAAA;AAAA,QAAI,CAAC,CAAA,KACjC,CAAA,CAAE,SAAA,KAAc,GAAA,GAAM,EAAE,GAAG,CAAA,EAAG,MAAA,EAAQ,IAAA,EAAK,GAAI;AAAA,OACjD;AAAA,MACA,WAAW,MAAA,CAAO;AAAA,KACnB,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,QAAA,GAAiB;AACvB,IAAA,IAAI,IAAA,CAAK,KAAA,EAAO,YAAA,CAAa,IAAA,CAAK,KAAK,CAAA;AACvC,IAAA,IAAI,KAAK,OAAA,EAAS;AAElB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,GACf,eAAA,GACA,WAAA,CAAY,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,WAAA,CAAY,MAAA,GAAS,CAAC,CAAC,CAAA;AAE3D,IAAA,IAAA,CAAK,QAAQ,UAAA,CAAW,MAAM,KAAK,IAAA,CAAK,IAAA,IAAQ,KAAK,CAAA;AAAA,EACvD;AAAA,EAEA,MAAc,IAAA,GAAsB;AAClC,IAAA,IAAI,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,OAAA,EAAS;AAIlC,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAQ,EAAG;AACnB,MAAA,IAAA,CAAK,QAAA,EAAS;AAEd,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAEf,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,OAAA,EAAQ;AAAA,IACrB,CAAA,SAAE;AACA,MAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AAAA,IACjB;AAEA,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,IAAA,EAAA;AAEvB,IAAA,IAAA,CAAK,QAAA,EAAS;AAAA,EAChB;AAAA,EAEQ,OAAA,GAAmB;AACzB,IAAA,IAAI,KAAK,OAAA,CAAQ,SAAA,EAAW,OAAO,IAAA,CAAK,QAAQ,SAAA,EAAU;AAE1D,IAAA,IAAI;AACF,MAAA,IAAI,OAAO,QAAA,KAAa,WAAA,IAAe,QAAA,CAAS,eAAA,EAAiB;AAC/D,QAAA,OAAO,SAAS,eAAA,KAAoB,SAAA;AAAA,MACtC;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEQ,MAAM,OAAA,EAAmC;AAC/C,IAAA,IAAA,CAAK,QAAQ,EAAE,GAAG,IAAA,CAAK,KAAA,EAAO,GAAG,OAAA,EAAQ;AAEzC,IAAA,KAAA,MAAW,QAAA,IAAY,KAAK,SAAA,EAAW;AACrC,MAAA,IAAI;AACF,QAAA,QAAA,CAAS,KAAK,KAAK,CAAA;AAAA,MACrB,SAAS,KAAA,EAAO;AAEd,QAAA,OAAA,CAAQ,IAAA,CAAK,uCAAkC,KAAK,CAAA;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AACF,CAAA;AAGA,SAAS,aAAA,CAAc,UAAqB,QAAA,EAAgC;AAC1E,EAAA,IAAI,CAAC,QAAA,CAAS,MAAA,EAAQ,OAAO,QAAA;AAE7B,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAqB;AAEvC,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,IAAI,OAAO,CAAA;AAAA,EACpD;AAEA,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,EAAA;AACzC,IAAA,KAAA,CAAM,OAAO,GAAG,CAAA;AAChB,IAAA,KAAA,CAAM,GAAA,CAAI,KAAK,OAAO,CAAA;AAAA,EACxB;AAEA,EAAA,OAAO,CAAC,GAAG,KAAA,CAAM,MAAA,EAAQ,EAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,EAAE,UAAA,IAAc,EAAA,EAAI,cAAc,CAAA,CAAE,UAAA,IAAc,EAAE,CAAC,CAAA;AAClG;;;AC5WA,IAAM,UAAA,GAAa,cAAoC,IAAI,CAAA;AAUpD,SAAS,kBAAA,CAAmB,EAAE,QAAA,EAAU,GAAG,QAAO,EAA4B;AACnF,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAM,IAAI,cAAc,MAAM,CAAA,EAAG,CAAC,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,OAAA,EAAS,MAAA,CAAO,MAAM,CAAC,CAAA;AAEtG,EAAA,OAAO,cAAc,UAAA,CAAW,QAAA,EAAU,EAAE,KAAA,EAAO,MAAA,IAAU,QAAQ,CAAA;AACvE;AAGO,SAAS,aAAA,GAA+B;AAC7C,EAAA,MAAM,MAAA,GAAS,WAAW,UAAU,CAAA;AAEpC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,MAAM,uEAA0D,CAAA;AAAA,EAC5E;AAEA,EAAA,OAAO,MAAA;AACT;AAwBO,SAAS,OAAA,CAAQ,OAAA,GAA0B,EAAC,EAAkB;AACnE,EAAA,MAAM,SAAS,aAAA,EAAc;AAC7B,EAAA,MAAM,UAAA,GAAa,OAA2B,IAAI,CAAA;AAElD,EAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AACvB,IAAA,UAAA,CAAW,OAAA,GAAU,IAAI,WAAA,CAAY,MAAA,EAAQ,EAAE,MAAA,EAAQ,OAAA,CAAQ,IAAA,EAAM,OAAA,EAAS,OAAA,CAAQ,OAAA,EAAS,CAAA;AAAA,EACjG;AAEA,EAAA,MAAM,UAAU,UAAA,CAAW,OAAA;AAC3B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,IAAI,QAAA,CAAoB,OAAA,CAAQ,UAAU,CAAA;AAEhE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,SAAA,CAAU,QAAQ,CAAA;AAC9C,IAAA,KAAK,QAAQ,KAAA,EAAM;AAEnB,IAAA,OAAO,MAAM;AACX,MAAA,WAAA,EAAY;AACZ,MAAA,OAAA,CAAQ,IAAA,EAAK;AAAA,IACf,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,OAAA,CAAQ,SAAA,CAAU,CAAC,CAAC,OAAA,CAAQ,IAAI,CAAA;AAAA,EAClC,CAAA,EAAG,CAAC,OAAA,EAAS,OAAA,CAAQ,IAAI,CAAC,CAAA;AAE1B,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,MAAM,CAAC,IAAA,EAAM,gBAAgB,OAAA,CAAQ,IAAA,CAAK,MAAM,WAAW,CAAA;AAAA,IAC3D,MAAA,EAAQ,CAAC,QAAA,KAAa,OAAA,CAAQ,OAAO,QAAQ,CAAA;AAAA,IAC7C,QAAA,EAAU,MAAM,OAAA,CAAQ,QAAA,EAAS;AAAA,IACjC,OAAO,CAAC,MAAA,EAAQ,YAAY,OAAA,CAAQ,KAAA,CAAM,QAAQ,OAAO,CAAA;AAAA,IACzD,WAAA,EAAa,CAAC,KAAA,KAAU,OAAA,CAAQ,YAAY,KAAK,CAAA;AAAA,IACjD,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAA;AAAQ,GACjC;AACF;AAGO,SAAS,cAAA,GAAyB;AACvC,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,QAAQ,EAAE,IAAA,EAAM,OAAO,CAAA;AAE1C,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,YAAY,KAAA,EAA+C;AACzE,EAAA,MAAM,SAAS,aAAA,EAAc;AAC7B,EAAA,MAAM,GAAA,GAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,GAAI,EAAA;AAE5C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,IAAA,KAAK,MAAA,CAAO,SAAS,KAAK,CAAA;AAAA,EAC5B,CAAA,EAAG,CAAC,MAAA,EAAQ,GAAG,CAAC,CAAA;AAClB;AAGO,SAAS,oBAAoB,KAAA,EAAqD;AACvF,EAAA,MAAM,SAAS,aAAA,EAAc;AAE7B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AAEnB,IAAA,KAAK,MAAA,CAAO,eAAe,KAAK,CAAA;AAAA,EAClC,GAAG,CAAC,MAAA,EAAQ,OAAO,KAAA,EAAO,KAAA,EAAO,WAAW,CAAC,CAAA;AAC/C","file":"react.mjs","sourcesContent":["/**\n * Uygulama istemcisi — son kullanıcı tarafı (sohbet + push kaydı).\n *\n * Tek bir sınıf; tarayıcı, React Native, Electron ve test aynı gövdeyi kullanır.\n * Platform farkı iki noktada toplanmıştır ve ikisi de dışarıdan verilir:\n * `storage` (ziyaretçi sırrı nerede durur) ve `fetchImpl`. Çatıya özel sarmalayıcı\n * yazmak yerine bunu seçtik — React, Vue, Angular ve RN uyarlamaları bu sınıfın\n * ÜSTÜNE oturur, kopyası değildir.\n *\n * Kimlik iki parçadır: açık uygulama anahtarı (`X-Signalbird-App-Key`) ve\n * ziyaretçi sırrı (`X-Signalbird-Visitor`). Sır yalnız oturum açılışında döner;\n * kaybolursa yeni oturum açılır ve geçmiş konuşmalar görünmez — bu yüzden\n * saklama katmanı zorunludur, isteğe bağlı değil.\n *\n * Hiçbir metot istisna fırlatmaz: sohbet balonunun hatası müşterinin ödeme\n * sayfasını çökertmemeli. Sonuç her zaman `{ok, status, …}` zarfıdır.\n *\n * Sözleşme: docs/CONTRACT.md § 11\n */\nimport type {\n AppConfig,\n AppStorage,\n BootstrapResult,\n Conversation,\n ConversationQuery,\n IdentifyInput,\n Message,\n RegisterDeviceInput,\n SbResult,\n SendMessageInput,\n SessionInput,\n StartConversationInput,\n Visitor,\n} from './types';\n\nconst DEFAULT_BASE_URL = 'https://signalbird.io/api';\nconst STORAGE_KEY = 'sb_visitor';\n\ninterface StoredVisitor {\n id: string;\n secret: string;\n appKey: string;\n name?: string | null;\n email?: string | null;\n}\n\n/** Depo verilmezse: tarayıcıda localStorage, başka yerde bellek. */\nfunction defaultStorage(): AppStorage {\n try {\n if (typeof localStorage !== 'undefined') {\n return {\n getItem: (k) => localStorage.getItem(k),\n setItem: (k, v) => localStorage.setItem(k, v),\n removeItem: (k) => localStorage.removeItem(k),\n };\n }\n } catch {\n // Gizli sekme / kısıtlı iframe — belleğe düş.\n }\n\n const memory = new Map<string, string>();\n\n return {\n getItem: (k) => memory.get(k) ?? null,\n setItem: (k, v) => void memory.set(k, v),\n removeItem: (k) => void memory.delete(k),\n };\n}\n\n/** RFC 4122 uyumlu olmak zorunda değil; tek işi yerel kopyayı eşlemek. */\nexport function clientId(): string {\n try {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n } catch {\n /* yok say */\n }\n\n return `c_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;\n}\n\nexport class SignalbirdApp {\n private readonly baseUrl: string;\n private readonly storage: AppStorage;\n private readonly timeout: number;\n private readonly doFetch: typeof fetch;\n private visitor: StoredVisitor | null = null;\n private loaded = false;\n\n constructor(private readonly config: AppConfig) {\n if (!config?.appKey) {\n throw new Error('Signalbird: appKey zorunlu (sbw_pub_…).');\n }\n\n // Takım anahtarı istemciye gömülürse tüm gönderim yetkisi sızar. Sunucu da\n // reddederdi ama o noktada anahtar çoktan yayınlanmış olurdu.\n if (!config.appKey.startsWith('sbw_pub_')) {\n throw new Error(\n 'Signalbird: uygulama istemcisi açık uygulama anahtarı ister (sbw_pub_…). ' +\n 'Takım anahtarını (sb_…) istemci koduna KOYMAYIN.'\n );\n }\n\n this.baseUrl = (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, '');\n this.storage = config.storage ?? defaultStorage();\n this.timeout = config.timeout ?? 10000;\n this.doFetch = config.fetchImpl ?? ((...args) => fetch(...args));\n }\n\n // ── Kimlik ────────────────────────────────────────────────────────────\n\n /** Uygulama ayarları: sohbet açık mı, renk, çalışma saati, ön-form. */\n bootstrap(): Promise<SbResult<BootstrapResult>> {\n return this.request('POST', '/v1/sdk/bootstrap', { locale: this.config.locale });\n }\n\n /**\n * Ziyaretçi oturumu açar ya da mevcut olanı günceller.\n *\n * Sır saklanır; ikinci çağrı aynı ziyaretçiyi tazeler. Sunucu `VISITOR_INVALID`\n * derse yerel kimlik silinir ve bir sonraki çağrı yeni oturum açar.\n */\n async startSession(input: SessionInput = {}): Promise<SbResult<{ visitor: Visitor }>> {\n const result = await this.request<{ visitor: Visitor }>('POST', '/v1/sdk/chat/session', input);\n\n const visitor = result.data?.visitor;\n\n if (result.ok && visitor?.id && visitor.secret) {\n await this.storeVisitor({\n id: visitor.id,\n secret: visitor.secret,\n appKey: this.config.appKey,\n name: visitor.name ?? null,\n email: visitor.email ?? null,\n });\n }\n\n return result;\n }\n\n /** Oturum açmış kullanıcıyı ziyaretçiye bağlar (kişi kaydı upsert edilir). */\n identify(input: IdentifyInput): Promise<SbResult<{ visitor: Visitor }>> {\n return this.request('POST', '/v1/sdk/identify', input);\n }\n\n /** Saklanan ziyaretçi kimliği — yoksa `null`. */\n async currentVisitor(): Promise<{ id: string; name?: string | null; email?: string | null } | null> {\n const stored = await this.loadVisitor();\n\n return stored ? { id: stored.id, name: stored.name, email: stored.email } : null;\n }\n\n /** Yerel kimliği siler: çıkış yapıldığında çağrılır. Sunucudaki kayıt kalır. */\n async signOut(): Promise<void> {\n this.visitor = null;\n this.loaded = true;\n await this.storage.removeItem(STORAGE_KEY);\n }\n\n // ── Sohbet ────────────────────────────────────────────────────────────\n\n listConversations(): Promise<SbResult<{ data: Conversation[] }>> {\n return this.request('GET', '/v1/sdk/chat/conversations');\n }\n\n getConversation(id: string, query?: ConversationQuery): Promise<SbResult<{ conversation: Conversation }>> {\n return this.request('GET', `/v1/sdk/chat/conversations/${enc(id)}`, undefined, query);\n }\n\n /**\n * İlk mesajla konuşma açar. Kota burada harcanır — konuşma başına sayılır,\n * mesaj başına değil.\n */\n startConversation(input: StartConversationInput): Promise<SbResult<{ conversation: Conversation; message: Message }>> {\n return this.request('POST', '/v1/sdk/chat/conversations', {\n client_id: clientId(),\n ...input,\n });\n }\n\n sendMessage(conversationId: string, input: SendMessageInput): Promise<SbResult<{ message: Message }>> {\n return this.request('POST', `/v1/sdk/chat/conversations/${enc(conversationId)}/messages`, {\n client_id: clientId(),\n ...input,\n });\n }\n\n /** Yalnız kendi mesajı ve gönderimden sonraki 15 dakika içinde. */\n editMessage(conversationId: string, messageId: string, body: string): Promise<SbResult<{ message: Message }>> {\n return this.request(\n 'PATCH',\n `/v1/sdk/chat/conversations/${enc(conversationId)}/messages/${enc(messageId)}`,\n { body }\n );\n }\n\n deleteMessage(conversationId: string, messageId: string): Promise<SbResult<unknown>> {\n return this.request(\n 'DELETE',\n `/v1/sdk/chat/conversations/${enc(conversationId)}/messages/${enc(messageId)}`\n );\n }\n\n /** Aynı emoji ikinci kez gönderilirse tepki kaldırılır. */\n reactToMessage(conversationId: string, messageId: string, emoji: string): Promise<SbResult<{ message: Message }>> {\n return this.request(\n 'POST',\n `/v1/sdk/chat/conversations/${enc(conversationId)}/messages/${enc(messageId)}/reactions`,\n { emoji }\n );\n }\n\n setTyping(conversationId: string, isTyping: boolean): Promise<SbResult<unknown>> {\n return this.request('POST', `/v1/sdk/chat/conversations/${enc(conversationId)}/typing`, {\n is_typing: isTyping,\n });\n }\n\n markRead(conversationId: string, lastMessageId?: string): Promise<SbResult<unknown>> {\n return this.request('POST', `/v1/sdk/chat/conversations/${enc(conversationId)}/read`, {\n last_message_id: lastMessageId,\n });\n }\n\n /**\n * Ek dosya yükler; dönen tanımlayıcı `sendMessage`'a `attachments` içinde\n * verilir. İki adım olmasının sebebi: dosya yüklenirken mesaj metni hâlâ\n * yazılıyor olabilir ve yarım kalan yükleme mesaj kaydı yaratmamalı.\n */\n uploadAttachment(conversationId: string, file: unknown, fileName?: string): Promise<SbResult<{ attachment: unknown }>> {\n const form = new FormData();\n form.append('file', file as Blob, fileName);\n\n return this.request(\n 'POST',\n `/v1/sdk/chat/conversations/${enc(conversationId)}/attachments`,\n form\n );\n }\n\n closeConversation(conversationId: string): Promise<SbResult<{ conversation: Conversation }>> {\n return this.request('POST', `/v1/sdk/chat/conversations/${enc(conversationId)}/close`);\n }\n\n rateConversation(conversationId: string, rating: number, comment?: string): Promise<SbResult<unknown>> {\n return this.request('POST', `/v1/sdk/chat/conversations/${enc(conversationId)}/rate`, {\n rating,\n comment,\n });\n }\n\n // ── Push ──────────────────────────────────────────────────────────────\n\n /**\n * Cihaz token'ını kaydeder. Token'ı almak (FCM/APNs/Web Push izni) ev\n * sahibinin işidir; SDK yalnız iletir — izin diyaloğunu kimin, ne zaman\n * göstereceği ürün kararıdır, kütüphane kararı değil.\n */\n registerDevice(input: RegisterDeviceInput): Promise<SbResult<unknown>> {\n return this.request('POST', '/v1/sdk/devices', input);\n }\n\n /** Çıkışta çağrılır: kayıt silinmez, kapatılır (geçmiş korunur). */\n unregisterDevice(token: string): Promise<SbResult<unknown>> {\n return this.request('DELETE', `/v1/sdk/devices/${enc(token)}`);\n }\n\n // ── HTTP ──────────────────────────────────────────────────────────────\n\n private async request<T>(\n method: 'GET' | 'POST' | 'PATCH' | 'DELETE',\n path: string,\n body?: unknown,\n query?: object\n ): Promise<SbResult<T>> {\n const stored = await this.loadVisitor();\n const isForm = typeof FormData !== 'undefined' && body instanceof FormData;\n\n const headers: Record<string, string> = {\n Accept: 'application/json',\n 'X-Signalbird-App-Key': this.config.appKey,\n };\n\n if (stored?.secret) headers['X-Signalbird-Visitor'] = stored.secret;\n if (body !== undefined && !isForm) headers['Content-Type'] = 'application/json';\n if (this.config.locale) headers['X-Locale'] = this.config.locale;\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const response = await this.doFetch(this.baseUrl + path + buildQuery(query), {\n method,\n headers,\n body: body === undefined ? undefined : isForm ? (body as BodyInit) : JSON.stringify(body),\n signal: controller.signal,\n });\n\n const text = await response.text();\n let data: any = null;\n\n try {\n data = text ? JSON.parse(text) : null;\n } catch {\n data = text;\n }\n\n if (response.ok) {\n return { ok: true, status: response.status, data: data as T };\n }\n\n const code: string =\n (data && typeof data === 'object' && typeof data.code === 'string' && data.code) ||\n (response.status === 422 ? 'VALIDATION_ERROR' : `HTTP_${response.status}`);\n\n // Sır geçersizse yerel kimliği at: bir sonraki çağrı yeni oturum açar.\n // Aksi hâlde ziyaretçi sonsuza kadar 401 alırdı ve sohbet sessizce ölürdü.\n if (code === 'VISITOR_INVALID' || response.status === 401) {\n await this.signOut();\n }\n\n if (this.config.debug) {\n console.warn(`[signalbird] ${code} (HTTP ${response.status})`);\n }\n\n return {\n ok: false,\n status: response.status,\n code,\n message:\n (data && typeof data === 'object' && typeof data.message === 'string' && data.message) ||\n `HTTP ${response.status}`,\n data: data as T,\n };\n } catch (error) {\n const timedOut = error instanceof Error && error.name === 'AbortError';\n\n if (this.config.debug) {\n console.warn('[signalbird] ulaşılamadı:', error);\n }\n\n return {\n ok: false,\n status: 0,\n code: timedOut ? 'TIMEOUT' : 'NETWORK_ERROR',\n message: error instanceof Error ? error.message : 'network error',\n };\n } finally {\n clearTimeout(timer);\n }\n }\n\n private async loadVisitor(): Promise<StoredVisitor | null> {\n if (this.loaded) return this.visitor;\n\n this.loaded = true;\n\n try {\n const raw = await this.storage.getItem(STORAGE_KEY);\n if (!raw) return null;\n\n const parsed = JSON.parse(raw) as StoredVisitor;\n\n // Anahtar değiştiyse (uygulama döndürüldü, farklı ortam) kimlik geçersizdir.\n if (!parsed?.secret || parsed.appKey !== this.config.appKey) return null;\n\n this.visitor = parsed;\n } catch {\n this.visitor = null;\n }\n\n return this.visitor;\n }\n\n private async storeVisitor(visitor: StoredVisitor): Promise<void> {\n this.visitor = visitor;\n this.loaded = true;\n\n try {\n await this.storage.setItem(STORAGE_KEY, JSON.stringify(visitor));\n } catch {\n // Depo yazamıyorsa (kota, gizli sekme) oturum bu sekmede yaşar.\n }\n }\n}\n\nfunction enc(value: string): string {\n return encodeURIComponent(value);\n}\n\nfunction buildQuery(query: object | undefined): string {\n if (!query) return '';\n\n const params = new URLSearchParams();\n\n for (const [key, value] of Object.entries(query as Record<string, unknown>)) {\n if (value === undefined || value === null) continue;\n params.append(key, String(value));\n }\n\n const encoded = params.toString();\n\n return encoded ? `?${encoded}` : '';\n}\n","/**\n * Sohbet oturumu — çatısız durum yönetimi.\n *\n * `SignalbirdApp` ham uçları verir; burası bir sohbet ekranının gerçekten\n * ihtiyaç duyduğu şeyi verir: mesaj listesi, okunmamış sayısı, yazıyor durumu,\n * iyimser gönderim ve yoklama merdiveni. React/Vue/Angular/React Native\n * uyarlamaları bu sınıfa abone olur — üçünde de aynı mantığı yeniden yazmak,\n * üç ayrı hata takımı üretmek demekti.\n *\n * Yoklama merdiveni (penyu deseni): panel açıkken 3 s, kapalıyken 20 s ×3 →\n * 60 s ×2 → 180 s. Yeni veri merdiveni sıfırlar; sekme/uygulama arka plandayken\n * tur atlanır. WebSocket yoktur: imleçli yoklama, bağlantı kopmasında kendi\n * kendini toparlar ve mobil ağda pil yakmaz.\n */\nimport { clientId, SignalbirdApp } from './client';\nimport type { Conversation, Message, SbResult, SessionInput, StartConversationInput } from './types';\n\nexport interface ChatState {\n /** Sohbet bu uygulamada açık mı (`bootstrap` cevabı). */\n enabled: boolean;\n loading: boolean;\n conversation: Conversation | null;\n messages: Message[];\n unread: number;\n agentTyping: boolean;\n withinHours: boolean;\n /** Son hatanın kodu — arayüz isterse gösterir, göstermezse yutar. */\n errorCode?: string;\n}\n\nexport type ChatListener = (state: ChatState) => void;\n\nexport interface ChatSessionOptions {\n /** Panel açık mı — yoklama hızını belirler. */\n active?: boolean;\n /** Arka plandayken tur atlanır; varsayılan: `document.visibilityState`. */\n isVisible?: () => boolean;\n /** Açılışta oturum kurulurken kullanılacak ziyaretçi bilgisi. */\n visitor?: SessionInput;\n}\n\n/** Kapalı panelde yoklama aralıkları (ms) — son değer sonsuza kadar tekrarlar. */\nconst IDLE_LADDER = [20_000, 20_000, 20_000, 60_000, 60_000, 180_000];\nconst ACTIVE_INTERVAL = 3_000;\n\nexport class ChatSession {\n private state: ChatState = {\n enabled: false,\n loading: true,\n conversation: null,\n messages: [],\n unread: 0,\n agentTyping: false,\n withinHours: true,\n };\n\n private listeners = new Set<ChatListener>();\n private timer: ReturnType<typeof setTimeout> | null = null;\n private step = 0;\n private active: boolean;\n private stopped = false;\n private polling = false;\n\n constructor(\n private readonly app: SignalbirdApp,\n private readonly options: ChatSessionOptions = {}\n ) {\n this.active = options.active ?? false;\n }\n\n // ── Abonelik ──────────────────────────────────────────────────────────\n\n subscribe(listener: ChatListener): () => void {\n this.listeners.add(listener);\n listener(this.state);\n\n return () => this.listeners.delete(listener);\n }\n\n snapshot(): ChatState {\n return this.state;\n }\n\n // ── Yaşam döngüsü ─────────────────────────────────────────────────────\n\n /** Bootstrap + varsa mevcut konuşmayı yükler, sonra yoklamayı başlatır. */\n async start(): Promise<void> {\n this.stopped = false;\n\n const boot = await this.app.bootstrap();\n const app = boot.data?.app;\n\n if (!boot.ok || !app?.chat_enabled) {\n this.patch({ enabled: false, loading: false, errorCode: boot.code });\n\n return;\n }\n\n this.patch({ enabled: true, withinHours: app.within_hours ?? true });\n\n // Ziyaretçi yoksa oturum AÇILMAZ: ilk mesaja kadar bekleriz. Her sayfa\n // görüntülemesinde ziyaretçi kaydı açmak, hiç konuşmayacak binlerce boş\n // kayıt üretirdi.\n if (await this.app.currentVisitor()) {\n await this.refresh();\n }\n\n this.patch({ loading: false });\n this.schedule();\n }\n\n /** Panel açıldı/kapandı — yoklama hızı buna göre değişir. */\n setActive(active: boolean): void {\n if (this.active === active) return;\n\n this.active = active;\n this.step = 0;\n\n if (active) void this.refresh();\n\n this.schedule();\n }\n\n stop(): void {\n this.stopped = true;\n\n if (this.timer) clearTimeout(this.timer);\n\n this.timer = null;\n }\n\n // ── Eylemler ──────────────────────────────────────────────────────────\n\n /** Ön-form gönderildiğinde ya da uygulama kullanıcıyı tanıdığında. */\n async openSession(input: SessionInput): Promise<SbResult<unknown>> {\n const result = await this.app.startSession(input);\n\n if (result.ok) await this.refresh();\n\n return result;\n }\n\n /**\n * Mesaj gönderir. Konuşma yoksa açar.\n *\n * İyimser: mesaj listeye ANINDA düşer, `client_id` ile eşlenir. Sunucu\n * cevabı gelince yerel kopya onunla değiştirilir; başarısızsa `failed`\n * işaretlenir ve arayüz \"yeniden dene\" gösterebilir.\n */\n async send(body: string, attachments?: unknown[]): Promise<SbResult<unknown>> {\n const trimmed = body.trim();\n\n if (!trimmed && !attachments?.length) {\n return { ok: false, status: 0, code: 'EMPTY_BODY', message: 'Mesaj boş.' };\n }\n\n const cid = clientId();\n const optimistic: Message & { failed?: boolean } = {\n id: cid,\n client_id: cid,\n sender_type: 'visitor',\n body: trimmed,\n created_at: new Date().toISOString(),\n };\n\n this.patch({ messages: [...this.state.messages, optimistic] });\n\n // Ziyaretçi yoksa önce oturum: ilk mesaj kimliği de yaratır.\n if (!(await this.app.currentVisitor())) {\n const session = await this.app.startSession(this.options.visitor ?? {});\n\n if (!session.ok) return this.markFailed(cid, session);\n }\n\n const conversation = this.state.conversation;\n\n const result = conversation\n ? await this.app.sendMessage(conversation.id, { body: trimmed, client_id: cid, attachments })\n : await this.app.startConversation({ body: trimmed, client_id: cid, attachments } as StartConversationInput);\n\n if (!result.ok) return this.markFailed(cid, result);\n\n await this.refresh();\n this.step = 0;\n this.schedule();\n\n return result;\n }\n\n /** İlk tuşta `true`, 2.5 s hareketsizlikte `false` — çağıran zamanlar. */\n typing(isTyping: boolean): void {\n const conversation = this.state.conversation;\n\n if (!conversation) return;\n\n void this.app.setTyping(conversation.id, isTyping);\n }\n\n /** Görülen son mesaja kadar okundu işaretler. */\n async markRead(): Promise<void> {\n const conversation = this.state.conversation;\n const last = this.state.messages[this.state.messages.length - 1];\n\n if (!conversation || !last) return;\n\n await this.app.markRead(conversation.id, last.id);\n this.patch({ unread: 0 });\n }\n\n async close(rating?: number, comment?: string): Promise<void> {\n const conversation = this.state.conversation;\n\n if (!conversation) return;\n\n if (typeof rating === 'number') {\n await this.app.rateConversation(conversation.id, rating, comment);\n }\n\n await this.app.closeConversation(conversation.id);\n await this.refresh();\n }\n\n /** Sunucudaki durumu çeker; imleç varsa yalnız yenileri ister. */\n async refresh(): Promise<void> {\n const current = this.state.conversation;\n\n if (!current) {\n const list = await this.app.listConversations();\n const first = list.data?.data?.[0];\n\n if (!first) {\n this.patch({ errorCode: list.ok ? undefined : list.code });\n\n return;\n }\n\n const detail = await this.app.getConversation(first.id);\n\n this.applyConversation(detail.data?.conversation ?? first, true);\n\n return;\n }\n\n const after = this.lastServerMessageId();\n const detail = await this.app.getConversation(current.id, after ? { after } : undefined);\n\n if (!detail.ok || !detail.data?.conversation) {\n this.patch({ errorCode: detail.code });\n\n return;\n }\n\n this.applyConversation(detail.data.conversation, !after);\n }\n\n // ── İç işler ──────────────────────────────────────────────────────────\n\n private applyConversation(conversation: Conversation, replace: boolean): void {\n const incoming = conversation.messages ?? [];\n const merged = replace ? incoming : mergeMessages(this.state.messages, incoming);\n\n // Yeni veri geldiyse merdiven sıfırlanır: konuşma canlandığında bir sonraki\n // yoklamayı üç dakika beklemek, kullanıcıyı terk edilmiş hissettirir.\n if (incoming.length) this.step = 0;\n\n this.patch({\n conversation,\n messages: merged,\n unread: conversation.unread_count ?? 0,\n agentTyping: !!conversation.agent_typing,\n withinHours: conversation.within_hours ?? this.state.withinHours,\n errorCode: undefined,\n });\n }\n\n /** İyimser kayıtlar sunucu kimliği taşımaz; imleç yalnız gerçek kimliktir. */\n private lastServerMessageId(): string | undefined {\n for (let i = this.state.messages.length - 1; i >= 0; i--) {\n const message = this.state.messages[i];\n\n if (message.id && !message.id.startsWith('c_') && message.id !== message.client_id) {\n return message.id;\n }\n }\n\n return undefined;\n }\n\n private markFailed(cid: string, result: SbResult<unknown>): SbResult<unknown> {\n this.patch({\n messages: this.state.messages.map((m) =>\n m.client_id === cid ? { ...m, failed: true } : m\n ) as Message[],\n errorCode: result.code,\n });\n\n return result;\n }\n\n private schedule(): void {\n if (this.timer) clearTimeout(this.timer);\n if (this.stopped) return;\n\n const delay = this.active\n ? ACTIVE_INTERVAL\n : IDLE_LADDER[Math.min(this.step, IDLE_LADDER.length - 1)];\n\n this.timer = setTimeout(() => void this.tick(), delay);\n }\n\n private async tick(): Promise<void> {\n if (this.stopped || this.polling) return;\n\n // Arka plandaki sekme/uygulama tur atlar: görünmeyen sohbet için ağ\n // trafiği üretmek pil ve kota harcar.\n if (!this.visible()) {\n this.schedule();\n\n return;\n }\n\n this.polling = true;\n\n try {\n await this.refresh();\n } finally {\n this.polling = false;\n }\n\n if (!this.active) this.step++;\n\n this.schedule();\n }\n\n private visible(): boolean {\n if (this.options.isVisible) return this.options.isVisible();\n\n try {\n if (typeof document !== 'undefined' && document.visibilityState) {\n return document.visibilityState === 'visible';\n }\n } catch {\n /* yok say */\n }\n\n return true;\n }\n\n private patch(partial: Partial<ChatState>): void {\n this.state = { ...this.state, ...partial };\n\n for (const listener of this.listeners) {\n try {\n listener(this.state);\n } catch (error) {\n // Bir dinleyicinin hatası diğerlerini ve oturumu düşürmemeli.\n console.warn('[signalbird] dinleyici hatası:', error);\n }\n }\n }\n}\n\n/** Sunucu kaydı, aynı `client_id`'li yerel kopyanın yerine geçer. */\nfunction mergeMessages(existing: Message[], incoming: Message[]): Message[] {\n if (!incoming.length) return existing;\n\n const byKey = new Map<string, Message>();\n\n for (const message of existing) {\n byKey.set(message.client_id ?? message.id, message);\n }\n\n for (const message of incoming) {\n const key = message.client_id ?? message.id;\n byKey.delete(key);\n byKey.set(key, message);\n }\n\n return [...byKey.values()].sort((a, b) => (a.created_at ?? '').localeCompare(b.created_at ?? ''));\n}\n","/**\n * `signalbird/react` — React ve Next.js için kancalar.\n *\n * Widget'ı gömmek yerine KENDİ sohbet arayüzünü yazan müşteri içindir. Durum\n * yönetimi `ChatSession`'dadır; buradaki kancalar yalnız React'in yeniden\n * çizim döngüsüne bağlar. Böylece aynı mantık Vue ve Angular'da da birebir\n * çalışır — üç ayrı sohbet motoru bakmak zorunda kalmayız.\n *\n * React bir `peerDependency`'dir; paket onu kendi getirmez.\n */\nimport { createContext, createElement, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { ChatSession, SignalbirdApp } from '../app';\nimport type { AppConfig, ChatState, IdentifyInput, RegisterDeviceInput, SessionInput } from '../app';\n\nconst AppContext = createContext<SignalbirdApp | null>(null);\n\nexport interface SignalbirdProviderProps extends AppConfig {\n children?: ReactNode;\n}\n\n/**\n * Uygulamanın köküne konur. İstemci bir kez kurulur; `appKey` değişirse\n * (ortam değişimi, çoklu marka) yeniden kurulur.\n */\nexport function SignalbirdProvider({ children, ...config }: SignalbirdProviderProps) {\n const client = useMemo(() => new SignalbirdApp(config), [config.appKey, config.baseUrl, config.locale]);\n\n return createElement(AppContext.Provider, { value: client }, children);\n}\n\n/** Ham istemci — push kaydı, kimlik, özel çağrılar için. */\nexport function useSignalbird(): SignalbirdApp {\n const client = useContext(AppContext);\n\n if (!client) {\n throw new Error('useSignalbird: <SignalbirdProvider> içinde kullanılmalı.');\n }\n\n return client;\n}\n\nexport interface UseChatOptions {\n /** Panel açık mı — yoklama hızını belirler (açık 3 s, kapalı merdiven). */\n open?: boolean;\n /** Oturum kurulurken kullanılacak ziyaretçi bilgisi (ön-form ya da giriş). */\n visitor?: SessionInput;\n}\n\nexport interface UseChatResult extends ChatState {\n send(body: string, attachments?: unknown[]): Promise<unknown>;\n typing(isTyping: boolean): void;\n markRead(): Promise<void>;\n close(rating?: number, comment?: string): Promise<void>;\n openSession(input: SessionInput): Promise<unknown>;\n refresh(): Promise<void>;\n}\n\n/**\n * Sohbet durumu + eylemleri.\n *\n * `open` değiştiğinde oturum yeniden KURULMAZ, yalnız yoklama hızı değişir —\n * paneli her açışta baştan yüklemek, konuşmayı kaybetmiş gibi hissettirirdi.\n */\nexport function useChat(options: UseChatOptions = {}): UseChatResult {\n const client = useSignalbird();\n const sessionRef = useRef<ChatSession | null>(null);\n\n if (!sessionRef.current) {\n sessionRef.current = new ChatSession(client, { active: options.open, visitor: options.visitor });\n }\n\n const session = sessionRef.current;\n const [state, setState] = useState<ChatState>(session.snapshot());\n\n useEffect(() => {\n const unsubscribe = session.subscribe(setState);\n void session.start();\n\n return () => {\n unsubscribe();\n session.stop();\n };\n }, [session]);\n\n useEffect(() => {\n session.setActive(!!options.open);\n }, [session, options.open]);\n\n return {\n ...state,\n send: (body, attachments) => session.send(body, attachments),\n typing: (isTyping) => session.typing(isTyping),\n markRead: () => session.markRead(),\n close: (rating, comment) => session.close(rating, comment),\n openSession: (input) => session.openSession(input),\n refresh: () => session.refresh(),\n };\n}\n\n/** Rozet için okunmamış sayısı — sohbet arayüzü açılmadan da çalışır. */\nexport function useUnreadCount(): number {\n const { unread } = useChat({ open: false });\n\n return unread;\n}\n\n/** Kullanıcı giriş yaptığında çağrılır; ziyaretçiyi kişi kaydına bağlar. */\nexport function useIdentify(input: IdentifyInput | null | undefined): void {\n const client = useSignalbird();\n const key = input ? JSON.stringify(input) : '';\n\n useEffect(() => {\n if (!input) return;\n\n void client.identify(input);\n }, [client, key]);\n}\n\n/** Push token'ı kaydeder; token'ı almak ev sahibinin işidir. */\nexport function usePushRegistration(input: RegisterDeviceInput | null | undefined): void {\n const client = useSignalbird();\n\n useEffect(() => {\n if (!input?.token) return;\n\n void client.registerDevice(input);\n }, [client, input?.token, input?.external_id]);\n}\n"]}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
var Signalbird=(function(exports){'use strict';var C=class{constructor(e,t,i,n){this.baseUrl=e;this.appKey=t;this.secret=i;this.log=n;}get(e,t){return this.request("GET",e+J(t))}post(e,t,i=false){return this.request("POST",e,t,i)}patch(e,t){return this.request("PATCH",e,t)}delete(e){return this.request("DELETE",e)}upload(e,t){let i=new FormData;return i.append("file",t,t.name),this.request("POST",e,i)}async request(e,t,i,n=false){let r={Accept:"application/json","X-Signalbird-App-Key":this.appKey},o=this.secret();o&&(r["X-Signalbird-Visitor"]=o);let l;i instanceof FormData?l=i:i!==void 0&&(r["Content-Type"]="application/json",l=JSON.stringify(i));let d=0,p=null;try{let c=await fetch(this.baseUrl+t,{method:e,headers:r,body:l,keepalive:n});d=c.status;let f=await c.text();try{p=f?JSON.parse(f):null;}catch(x){p=f;}if(c.ok)return {ok:!0,status:d,data:p}}catch(c){return this.log("network",e,t,c),{ok:false,status:0,code:"NETWORK_ERROR",message:String(c)}}let u=p&&p.code||`HTTP_${d}`,h=p&&p.message||`HTTP ${d}`;return this.log("error",e,t,u,h),{ok:false,status:d,code:u,message:h,data:p}}};function J(s){if(!s)return "";let e=new URLSearchParams;for(let i in s){let n=s[i];n!=null&&n!==""&&e.set(i,String(n));}let t=e.toString();return t?`?${t}`:""}var z="sb_visitor",T=class{constructor(e){this.appKey=e;this.visitor=null;this.conversation=null;this.messages=[];this.agent=null;this.agentTyping=false;this.online=false;this.withinHours=true;this.unread=0;this.isOpen=false;this.rated=new Set;this.listeners={};this.visitor=this.readVisitor();}on(e,t){var i;return ((i=this.listeners)[e]||(i[e]=[])).push(t),()=>this.off(e,t)}off(e,t){let i=this.listeners[e];i&&(this.listeners[e]=i.filter(n=>n!==t));}emit(e,t){for(let i of this.listeners[e]||[])try{i(t);}catch(n){}}readVisitor(){try{let e=localStorage.getItem(z);if(!e)return null;let t=JSON.parse(e);return !t||!t.secret||t.appKey!==this.appKey?null:t}catch(e){return null}}setVisitor(e){var i,n,r,o,l,d,p;let t=e.secret||((i=this.visitor)==null?void 0:i.secret);if(t){this.visitor={id:e.id,secret:t,appKey:this.appKey,name:(o=(r=e.name)!=null?r:(n=this.visitor)==null?void 0:n.name)!=null?o:null,email:(p=(d=e.email)!=null?d:(l=this.visitor)==null?void 0:l.email)!=null?p:null};try{localStorage.setItem(z,JSON.stringify(this.visitor));}catch(u){}}}clearVisitor(){this.visitor=null,this.conversation=null,this.messages=[],this.setUnread(0);try{localStorage.removeItem(z);}catch(e){}this.emit("change");}get secret(){var e,t;return (t=(e=this.visitor)==null?void 0:e.secret)!=null?t:null}setConversation(e){var i;let t=(e==null?void 0:e.id)!==((i=this.conversation)==null?void 0:i.id);this.conversation=e,t&&(this.messages=[]),this.emit("change");}mergeMessages(e,t=false){let i=0,n=new Map,r=new Map;for(let l of this.messages)n.set(l.id,l),l.client_id&&r.set(l.client_id,l);let o=t?this.messages.filter(l=>l._pending||l._failed):[...this.messages];for(let l of e){let d=n.get(l.id)||(l.client_id?r.get(l.client_id):void 0);if(d){let p=o.indexOf(d),u={...d,...l,_pending:false,_failed:false,_files:void 0};p>=0?o[p]=u:o.push(u),n.set(l.id,u);}else o.push(l),n.set(l.id,l),l.sender_type==="agent"&&i++;}return o.sort((l,d)=>H(l).localeCompare(H(d))),this.messages=o,this.emit("messages"),i}upsertMessage(e){this.mergeMessages([e]);}removeMessage(e){this.messages=this.messages.filter(t=>t.id!==e),this.emit("messages");}find(e){return e?this.messages.find(t=>t.id===e):void 0}get lastServerMessageId(){for(let e=this.messages.length-1;e>=0;e--){let t=this.messages[e];if(!t._pending&&!t._failed&&!t.id.startsWith("local_"))return t.id}return null}setUnread(e){let t=Math.max(0,e|0);t!==this.unread&&(this.unread=t,this.emit("unread",t));}wasRated(e){return this.rated.has(e)||Q(`sb_rated_${e}`)==="1"}markRated(e){this.rated.add(e);try{localStorage.setItem(`sb_rated_${e}`,"1");}catch(t){}}};function H(s){return s.created_at||""}function Q(s){try{return localStorage.getItem(s)}catch(e){return null}}var I=[2e4,2e4,2e4,6e4,6e4,18e4],N=3e3,M=class{constructor(e){this.tick=e;this.timer=null;this.step=0;this.open=false;this.running=false;this.stopped=true;this.onVisible=this.onVisible.bind(this);}start(){this.stopped=false,document.addEventListener("visibilitychange",this.onVisible),window.addEventListener("online",this.onVisible),this.schedule(0);}stop(){this.stopped=true,this.timer&&clearTimeout(this.timer),this.timer=null,document.removeEventListener("visibilitychange",this.onVisible),window.removeEventListener("online",this.onVisible);}setOpen(e){this.open=e,this.step=0,this.schedule(e?0:N);}poke(e=0){this.step=0,this.schedule(e);}onVisible(){document.hidden||(this.step=0,this.schedule(0));}interval(){return this.open?N:I[Math.min(this.step,I.length-1)]}schedule(e=this.interval()){this.stopped||(this.timer&&clearTimeout(this.timer),this.timer=setTimeout(()=>{this.run();},e));}async run(){if(this.stopped||this.running)return;if(document.hidden||typeof navigator!="undefined"&&navigator.onLine===false){this.schedule();return}this.running=true;let e=false;try{e=await this.tick()===!0;}catch(t){}finally{this.running=false;}e?this.step=0:this.open||(this.step=Math.min(this.step+1,I.length-1)),this.schedule();}};var D=`
|
|
2
|
+
:host{all:initial}
|
|
3
|
+
*,*::before,*::after{box-sizing:border-box}
|
|
4
|
+
.sb{--sb-c:#111827;--sb-fg:#fff;--sb-bg:#fff;--sb-t:#111827;--sb-m:#6b7280;--sb-b:#e5e7eb;--sb-s:#f3f4f6;--sb-r:14px;
|
|
5
|
+
position:fixed;bottom:20px;z-index:2147483000;font:14px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;color:var(--sb-t);
|
|
6
|
+
-webkit-font-smoothing:antialiased;direction:ltr;text-align:left}
|
|
7
|
+
.sb.right{right:20px}.sb.left{left:20px}
|
|
8
|
+
button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}
|
|
9
|
+
button:disabled{cursor:default;opacity:.5}
|
|
10
|
+
input,textarea{font:inherit;color:inherit}
|
|
11
|
+
svg{display:block}
|
|
12
|
+
a{color:inherit}
|
|
13
|
+
|
|
14
|
+
/* Balon */
|
|
15
|
+
.ln{position:relative;display:flex;align-items:center;gap:8px;height:56px;min-width:56px;padding:0 18px 0 16px;border-radius:28px;background:var(--sb-c);color:var(--sb-fg);
|
|
16
|
+
box-shadow:0 6px 24px rgba(0,0,0,.18);transition:transform .15s,box-shadow .15s}
|
|
17
|
+
.ln:hover{transform:translateY(-1px);box-shadow:0 10px 28px rgba(0,0,0,.22)}
|
|
18
|
+
.ln.icon-only{padding:0;justify-content:center;width:56px}
|
|
19
|
+
.ln .lt{font-weight:600;white-space:nowrap}
|
|
20
|
+
.badge{position:absolute;top:-4px;right:-4px;min-width:20px;height:20px;padding:0 6px;border-radius:10px;background:#ef4444;color:#fff;font-size:11px;font-weight:700;
|
|
21
|
+
display:flex;align-items:center;justify-content:center;border:2px solid #fff}
|
|
22
|
+
.sb.open .ln{display:none}
|
|
23
|
+
|
|
24
|
+
/* Panel */
|
|
25
|
+
.pn{position:absolute;bottom:0;width:380px;max-width:calc(100vw - 40px);height:min(640px,calc(100vh - 40px));background:var(--sb-bg);border-radius:var(--sb-r);
|
|
26
|
+
box-shadow:0 12px 48px rgba(0,0,0,.22);display:none;flex-direction:column;overflow:hidden;
|
|
27
|
+
transform-origin:bottom right;animation:sbIn .18s ease-out}
|
|
28
|
+
.sb.left .pn{transform-origin:bottom left;left:0}.sb.right .pn{right:0}
|
|
29
|
+
.sb.open .pn{display:flex}
|
|
30
|
+
@keyframes sbIn{from{opacity:0;transform:translateY(12px) scale(.97)}to{opacity:1;transform:none}}
|
|
31
|
+
@media (max-width:640px){.sb.open{inset:0!important;bottom:0}.pn{position:fixed;inset:0;width:100%;max-width:none;height:100%;border-radius:0}}
|
|
32
|
+
|
|
33
|
+
/* Ba\u015Fl\u0131k */
|
|
34
|
+
.hd{display:flex;align-items:center;gap:12px;padding:14px 12px 14px 16px;background:var(--sb-c);color:var(--sb-fg);flex:none}
|
|
35
|
+
.hd .av{width:38px;height:38px;border-radius:50%;background:rgba(255,255,255,.2);display:flex;align-items:center;justify-content:center;font-weight:700;overflow:hidden;flex:none}
|
|
36
|
+
.hd .av img{width:100%;height:100%;object-fit:cover}
|
|
37
|
+
.hd .hi{flex:1;min-width:0}
|
|
38
|
+
.hd .hn{font-weight:700;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
|
39
|
+
.hd .hs{font-size:12px;opacity:.85;display:flex;align-items:center;gap:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
|
40
|
+
.dot{width:8px;height:8px;border-radius:50%;background:#9ca3af;flex:none}.dot.on{background:#22c55e}
|
|
41
|
+
.hb{width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;opacity:.9}
|
|
42
|
+
.hb:hover{background:rgba(255,255,255,.15);opacity:1}
|
|
43
|
+
|
|
44
|
+
/* Bant */
|
|
45
|
+
.bn{padding:8px 16px;font-size:12px;background:#fef3c7;color:#92400e;flex:none}
|
|
46
|
+
.bn.err{background:#fee2e2;color:#991b1b}
|
|
47
|
+
|
|
48
|
+
/* G\xF6vde */
|
|
49
|
+
.bd{flex:1;min-height:0;display:flex;flex-direction:column;position:relative}
|
|
50
|
+
.ml{flex:1;overflow-y:auto;padding:16px 16px 8px;display:flex;flex-direction:column;gap:2px;overscroll-behavior:contain}
|
|
51
|
+
.ml::-webkit-scrollbar{width:6px}.ml::-webkit-scrollbar-thumb{background:var(--sb-b);border-radius:3px}
|
|
52
|
+
.day{align-self:center;font-size:11px;color:var(--sb-m);background:var(--sb-s);padding:3px 10px;border-radius:10px;margin:10px 0 8px}
|
|
53
|
+
.gr{align-self:flex-start;background:var(--sb-s);padding:10px 14px;border-radius:var(--sb-r);border-bottom-left-radius:4px;max-width:85%;color:var(--sb-t)}
|
|
54
|
+
|
|
55
|
+
/* Mesaj sat\u0131r\u0131 */
|
|
56
|
+
.row{display:flex;flex-direction:column;max-width:82%;position:relative;margin-top:2px}
|
|
57
|
+
.row.v{align-self:flex-end;align-items:flex-end}
|
|
58
|
+
.row.a{align-self:flex-start;align-items:flex-start}
|
|
59
|
+
.row.s{align-self:center;max-width:90%}
|
|
60
|
+
.row.s .bb{background:none;color:var(--sb-m);font-size:12px;text-align:center;padding:4px 8px}
|
|
61
|
+
.row.gap{margin-top:10px}
|
|
62
|
+
.bb{position:relative;padding:8px 12px;border-radius:var(--sb-r);word-wrap:break-word;overflow-wrap:anywhere;white-space:pre-wrap;line-height:1.4}
|
|
63
|
+
.row.a .bb{background:var(--sb-s);border-bottom-left-radius:4px}
|
|
64
|
+
.row.v .bb{background:var(--sb-c);color:var(--sb-fg);border-bottom-right-radius:4px}
|
|
65
|
+
.row.pend .bb{opacity:.65}
|
|
66
|
+
.row.fail .bb{background:#fee2e2;color:#991b1b;cursor:pointer}
|
|
67
|
+
.bb.del{font-style:italic;opacity:.7}
|
|
68
|
+
.q{display:block;border-left:3px solid currentColor;opacity:.75;padding:2px 8px;margin:0 0 6px;font-size:12px;border-radius:3px;background:rgba(0,0,0,.06);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}
|
|
69
|
+
.row.v .q{background:rgba(255,255,255,.18)}
|
|
70
|
+
.mt{display:flex;align-items:center;gap:4px;font-size:11px;color:var(--sb-m);margin-top:3px;padding:0 4px}
|
|
71
|
+
.mt .tk{display:inline-flex}.mt .tk.rd{color:#3b82f6}
|
|
72
|
+
.mt .ed{font-style:italic}
|
|
73
|
+
.imgs{display:flex;flex-wrap:wrap;gap:4px;margin:2px 0}
|
|
74
|
+
.imgs img{max-width:220px;max-height:200px;border-radius:10px;display:block;cursor:pointer;object-fit:cover;background:var(--sb-s)}
|
|
75
|
+
.fr{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:10px;background:rgba(0,0,0,.06);margin:2px 0;text-decoration:none;font-size:13px;max-width:260px}
|
|
76
|
+
.row.v .fr{background:rgba(255,255,255,.16)}
|
|
77
|
+
.fr .fn{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;flex:1}.fr .fs{opacity:.7;font-size:11px;white-space:nowrap}
|
|
78
|
+
.rx{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}
|
|
79
|
+
.rx button{font-size:12px;padding:1px 7px;border-radius:10px;background:var(--sb-s);border:1px solid var(--sb-b);line-height:1.5}
|
|
80
|
+
.rx button.me{border-color:var(--sb-c);background:#fff}
|
|
81
|
+
.row.v .rx{justify-content:flex-end}
|
|
82
|
+
|
|
83
|
+
/* Mesaj eylem \xE7ubu\u011Fu */
|
|
84
|
+
.ac{position:absolute;top:-30px;display:none;align-items:center;gap:2px;background:#fff;border:1px solid var(--sb-b);border-radius:20px;padding:2px 4px;box-shadow:0 4px 12px rgba(0,0,0,.12);z-index:2}
|
|
85
|
+
.row.a .ac{left:0}.row.v .ac{right:0}
|
|
86
|
+
.row:hover .ac,.row.acts .ac{display:flex}
|
|
87
|
+
.ac button{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:15px;color:var(--sb-t)}
|
|
88
|
+
.ac button:hover{background:var(--sb-s)}
|
|
89
|
+
.menu{position:absolute;top:0;display:none;flex-direction:column;background:#fff;border:1px solid var(--sb-b);border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.14);z-index:3;min-width:120px;overflow:hidden}
|
|
90
|
+
.row.a .menu{left:0}.row.v .menu{right:0}
|
|
91
|
+
.menu.show{display:flex}
|
|
92
|
+
.menu button{padding:8px 12px;text-align:left;font-size:13px}.menu button:hover{background:var(--sb-s)}
|
|
93
|
+
.menu button.dg{color:#dc2626}
|
|
94
|
+
|
|
95
|
+
/* Yaz\u0131yor */
|
|
96
|
+
.tp{display:none;align-items:center;gap:4px;padding:6px 16px 4px;color:var(--sb-m);font-size:12px}
|
|
97
|
+
.tp.on{display:flex}
|
|
98
|
+
.tp i{width:6px;height:6px;border-radius:50%;background:var(--sb-m);animation:sbDot 1.2s infinite ease-in-out}
|
|
99
|
+
.tp i:nth-child(2){animation-delay:.2s}.tp i:nth-child(3){animation-delay:.4s}
|
|
100
|
+
@keyframes sbDot{0%,80%,100%{transform:scale(.6);opacity:.4}40%{transform:scale(1);opacity:1}}
|
|
101
|
+
|
|
102
|
+
/* Kompozit\xF6r */
|
|
103
|
+
.cp{border-top:1px solid var(--sb-b);padding:8px 10px 6px;flex:none;background:var(--sb-bg)}
|
|
104
|
+
.rq{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--sb-m);padding:4px 8px 6px;border-left:3px solid var(--sb-c);margin:0 0 6px}
|
|
105
|
+
.rq .rt{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
|
|
106
|
+
.rq button{opacity:.7}
|
|
107
|
+
.chips{display:flex;flex-wrap:wrap;gap:6px;padding:0 0 6px}
|
|
108
|
+
.chip{display:flex;align-items:center;gap:6px;font-size:12px;background:var(--sb-s);border-radius:8px;padding:4px 8px;max-width:100%}
|
|
109
|
+
.chip img{width:28px;height:28px;object-fit:cover;border-radius:4px}
|
|
110
|
+
.chip span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-width:160px}
|
|
111
|
+
.chip button{opacity:.6;line-height:1}
|
|
112
|
+
.cr{display:flex;align-items:flex-end;gap:6px}
|
|
113
|
+
.cr textarea{flex:1;resize:none;border:1px solid var(--sb-b);border-radius:12px;padding:9px 12px;max-height:120px;min-height:38px;outline:none;background:var(--sb-bg);line-height:1.35}
|
|
114
|
+
.cr textarea:focus{border-color:var(--sb-c)}
|
|
115
|
+
.cb{width:38px;height:38px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--sb-m);flex:none}
|
|
116
|
+
.cb:hover{background:var(--sb-s);color:var(--sb-t)}
|
|
117
|
+
.cb.sd{background:var(--sb-c);color:var(--sb-fg)}
|
|
118
|
+
.cb.sd:hover{filter:brightness(1.1)}
|
|
119
|
+
.pw{text-align:center;font-size:10px;color:var(--sb-m);padding:4px 0 2px}
|
|
120
|
+
.pw a{text-decoration:none;opacity:.8}
|
|
121
|
+
.drop{position:absolute;inset:0;background:rgba(255,255,255,.92);display:none;align-items:center;justify-content:center;font-weight:600;color:var(--sb-c);border:2px dashed var(--sb-c);border-radius:8px;margin:8px;z-index:5;pointer-events:none}
|
|
122
|
+
.bd.dragging .drop{display:flex}
|
|
123
|
+
|
|
124
|
+
/* \xD6n-form ve puanlama */
|
|
125
|
+
.fm{flex:1;overflow-y:auto;padding:24px 20px;display:flex;flex-direction:column;gap:12px}
|
|
126
|
+
.fm h3{margin:0;font-size:17px}
|
|
127
|
+
.fm p{margin:0 0 6px;color:var(--sb-m);font-size:13px}
|
|
128
|
+
.fm input,.fm textarea{width:100%;border:1px solid var(--sb-b);border-radius:10px;padding:10px 12px;outline:none}
|
|
129
|
+
.fm input:focus,.fm textarea:focus{border-color:var(--sb-c)}
|
|
130
|
+
.fm textarea{resize:vertical;min-height:70px}
|
|
131
|
+
.btn{background:var(--sb-c);color:var(--sb-fg);border-radius:10px;padding:11px 16px;font-weight:600;text-align:center}
|
|
132
|
+
.btn.gh{background:none;color:var(--sb-m);font-weight:500}
|
|
133
|
+
.stars{display:flex;justify-content:center;gap:6px;margin:8px 0}
|
|
134
|
+
.stars button{color:#d1d5db;padding:4px}
|
|
135
|
+
.stars button.on{color:#f59e0b}
|
|
136
|
+
.stars button.on svg{fill:currentColor}
|
|
137
|
+
.ok{text-align:center;padding:30px 20px;color:var(--sb-t)}
|
|
138
|
+
.notice{margin:8px 16px;padding:8px 12px;font-size:12px;color:var(--sb-m);background:var(--sb-s);border-radius:10px;text-align:center}
|
|
139
|
+
.notice button{color:var(--sb-c);font-weight:600;margin-left:6px}
|
|
140
|
+
`;function a(s,e,...t){let i=document.createElement(s);if(e)for(let n in e){let r=e[n];r==null||r===false||(n==="class"?i.className=String(r):n==="style"?i.setAttribute("style",String(r)):n.startsWith("on")&&typeof r=="function"?i.addEventListener(n.slice(2).toLowerCase(),r):n==="html"?i.innerHTML=String(r):n in i&&n!=="list"&&n!=="form"?i[n]=r:i.setAttribute(n,String(r)));}return X(i,t),i}function X(s,e){for(let t of e)t==null||t===false||s.appendChild(typeof t=="object"?t:document.createTextNode(String(t)));}function b(s){for(;s.firstChild;)s.removeChild(s.firstChild);}function m(s,e=18){let t=document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("width",String(e)),t.setAttribute("height",String(e)),t.setAttribute("fill","none"),t.setAttribute("stroke","currentColor"),t.setAttribute("stroke-width","2"),t.setAttribute("stroke-linecap","round"),t.setAttribute("stroke-linejoin","round"),t.innerHTML=Z[s],t}var Z={chat:'<path d="M21 11.5a8.4 8.4 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.4 8.4 0 0 1-3.8-.9L3 21l1.9-5.7a8.4 8.4 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.4 8.4 0 0 1 3.8-.9h.5a8.5 8.5 0 0 1 8 8v.5z"/>',close:'<path d="M18 6 6 18M6 6l12 12"/>',send:'<path d="m22 2-7 20-4-9-9-4 20-7z"/><path d="M22 2 11 13"/>',clip:'<path d="m21.4 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"/>',file:'<path d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"/><path d="M14 2v6h6"/>',check:'<path d="M20 6 9 17l-5-5"/>',checks:'<path d="M18 6 7 17l-4-4"/><path d="m22 10-7.5 7.5L13 16"/>',reply:'<path d="M9 17H5a2 2 0 0 1-2-2V9"/><path d="m3 9 4-4"/><path d="m3 9 4 4"/><path d="M9 17h6a6 6 0 0 0 0-12h-2"/>',more:'<circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/><circle cx="5" cy="12" r="1"/>',star:'<path d="m12 2 3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/>',chevron:'<path d="m6 9 6 6 6-6"/>',smile:'<circle cx="12" cy="12" r="10"/><path d="M8 14s1.5 2 4 2 4-2 4-2"/><path d="M9 9h.01M15 9h.01"/>',done:'<path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><path d="m22 4-10 10-3-3"/>'};function V(s){return s<1024?`${s} B`:s<1024*1024?`${(s/1024).toFixed(0)} KB`:`${(s/1024/1024).toFixed(1)} MB`}function U(){return typeof crypto!="undefined"&&"randomUUID"in crypto?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,s=>{let e=Math.random()*16|0;return (s==="x"?e:e&3|8).toString(16)})}var K=["\u{1F44D}","\u2764\uFE0F","\u{1F602}","\u{1F62E}","\u{1F622}","\u{1F64F}"],ee=900*1e3;function Y(s,e){let t=s.scrollHeight-s.scrollTop-s.clientHeight<40,i=s.scrollHeight;b(s),e.greeting&&e.messages.length===0&&s.appendChild(a("div",{class:"gr"},e.greeting));let n="",r=null;for(let o of e.messages){let l=ne(o.created_at);l!==n&&(s.appendChild(a("div",{class:"day"},ae(o.created_at,e))),n=l,r=null),s.appendChild(te(o,e,r)),r=o;}(t||i===0)&&(s.scrollTop=s.scrollHeight);}function O(s){s.scrollTop=s.scrollHeight;}function te(s,e,t){let i=s.sender_type==="visitor"?"v":s.sender_type==="system"?"s":"a",n=t&&t.sender_type!==s.sender_type,r=a("div",{class:`row ${i}${n?" gap":""}${s._pending?" pend":""}${s._failed?" fail":""}`,"data-id":s.id}),o=a("div",{class:`bb${s.deleted_at?" del":""}`});if(s.deleted_at)return o.textContent=e.t.deleted,r.appendChild(o),r;if(s.reply_to_id){let h=e.find(s.reply_to_id),c=h?h.sender_type==="visitor"?e.t.you:h.sender_name||e.agentName:"";o.appendChild(a("span",{class:"q"},c?`${c}: `:"",h?_(h,e.t):"\u2026"));}let l=s.attachments||[],d=l.filter(h=>j(h.mime)),p=l.filter(h=>!j(h.mime));if(s._files&&s._files.length){let h=a("div",{class:"imgs"});for(let c of s._files)c.type.startsWith("image/")?h.appendChild(a("img",{src:URL.createObjectURL(c),alt:c.name})):o.appendChild(F({name:c.name,url:"",mime:c.type,size:c.size},e));h.childNodes.length&&o.appendChild(h);}if(d.length){let h=a("div",{class:"imgs"});for(let c of d)h.appendChild(a("img",{src:c.url,alt:c.name,loading:"lazy",onclick:()=>e.actions.openImage(c.url)}));o.appendChild(h);}for(let h of p)o.appendChild(F(h,e));s.body&&o.appendChild(document.createTextNode(s.body)),s._failed&&(o.appendChild(a("div",{style:"font-size:11px;margin-top:4px"},e.t.failed)),o.addEventListener("click",()=>e.actions.retry(s))),r.appendChild(o);let u=s.reactions&&Object.keys(s.reactions).length?s.reactions:null;if(u){let h=a("div",{class:"rx"});for(let c in u){let f=u[c]||[];if(!f.length)continue;let x=f.includes("visitor");h.appendChild(a("button",{class:x?"me":"",type:"button",onclick:()=>e.actions.react(s,c)},`${c} ${f.length}`));}h.childNodes.length&&r.appendChild(h);}if(i!=="s"){let h=a("div",{class:"mt"},re(s.created_at,e.locale));if(s.edited_at&&h.appendChild(a("span",{class:"ed"},`\xB7 ${e.t.edited}`)),i==="v"&&!s._failed){let c=a("span",{class:`tk${s.read_at?" rd":""}`});c.appendChild(s._pending?m("check",12):s.read_at||s.delivered_at?m("checks",13):m("check",12)),s._pending&&(c.style.opacity=".4"),h.appendChild(c);}r.appendChild(h);}return i!=="s"&&!s._pending&&!s._failed&&(r.appendChild(ie(s,e,r)),se(r)),r}function ie(s,e,t){let i=a("div",{class:"ac"});for(let l of K.slice(0,3))i.appendChild(a("button",{type:"button",title:e.t.react,onclick:()=>e.actions.react(s,l)},l));i.appendChild(a("button",{type:"button",title:e.t.reply,onclick:()=>e.actions.reply(s)},m("reply",15)));let n=a("div",{class:"menu"});for(let l of K.slice(3))n.appendChild(a("button",{type:"button",onclick:()=>{n.classList.remove("show"),e.actions.react(s,l);}},`${l} ${e.t.react}`));return s.sender_type==="visitor"&&Date.now()-Date.parse(s.created_at)<ee&&(n.appendChild(a("button",{type:"button",onclick:()=>{n.classList.remove("show"),e.actions.edit(s);}},e.t.edit)),n.appendChild(a("button",{type:"button",class:"dg",onclick:()=>{n.classList.remove("show"),e.actions.remove(s);}},e.t.delete))),i.appendChild(a("button",{type:"button",title:e.t.react,onclick:l=>{l.stopPropagation(),n.classList.toggle("show"),n.style.top=`${t.offsetHeight+4}px`;}},m("more",15))),t.appendChild(n),document.addEventListener("click",()=>n.classList.remove("show"),{once:true,capture:true}),i}function se(s){let e=null,t=()=>{e=setTimeout(()=>{s.classList.add("acts");let n=r=>{s.contains(r.target)||(s.classList.remove("acts"),document.removeEventListener("touchstart",n,true));};document.addEventListener("touchstart",n,true);},450);},i=()=>e&&clearTimeout(e);s.addEventListener("touchstart",t,{passive:true}),s.addEventListener("touchend",i),s.addEventListener("touchmove",i,{passive:true});}function F(s,e){return a("a",{class:"fr",href:s.url||void 0,target:"_blank",rel:"noopener"},m("file",18),a("span",{class:"fn"},s.name||e.t.attachment),a("span",{class:"fs"},V(s.size||0)))}function _(s,e){var i;if(s.deleted_at)return e.deleted;if(s.body)return s.body.length>90?s.body.slice(0,90)+"\u2026":s.body;let t=(i=s.attachments)==null?void 0:i[0];return t?`\u{1F4CE} ${t.name}`:"\u2026"}function j(s){return !!s&&s.startsWith("image/")}function ne(s){let e=new Date(s);return `${e.getFullYear()}-${e.getMonth()}-${e.getDate()}`}function ae(s,e){let t=new Date(s),i=new Date,n=Math.round((q(i)-q(t))/864e5);if(n===0)return e.t.today;if(n===1)return e.t.yesterday;try{return new Intl.DateTimeFormat(e.locale,{day:"numeric",month:"long",year:t.getFullYear()!==i.getFullYear()?"numeric":void 0}).format(t)}catch(r){return t.toLocaleDateString()}}function q(s){return new Date(s.getFullYear(),s.getMonth(),s.getDate()).getTime()}function re(s,e){let t=new Date(s);try{return new Intl.DateTimeFormat(e,{hour:"2-digit",minute:"2-digit"}).format(t)}catch(i){return t.toLocaleTimeString()}}var oe={launcher:"Sohbet",title:"Sohbet",online:"\xC7evrimi\xE7i",offline:"Genelde birka\xE7 dakika i\xE7inde yan\u0131tl\u0131yoruz",greeting:"Merhaba! Size nas\u0131l yard\u0131mc\u0131 olabiliriz?",offlineMessage:"\u015Eu an \xE7evrimd\u0131\u015F\u0131y\u0131z. Mesaj\u0131n\u0131z\u0131 b\u0131rak\u0131n, en k\u0131sa s\xFCrede d\xF6nelim.",prechatTitle:"Ba\u015Flamadan \xF6nce",prechatHint:"Size geri d\xF6nebilmemiz i\xE7in bilgilerinizi b\u0131rak\u0131n.",name:"Ad\u0131n\u0131z",email:"E-posta",start:"Sohbete ba\u015Fla",skip:"Atla",placeholder:"Mesaj\u0131n\u0131z\u0131 yaz\u0131n\u2026",send:"G\xF6nder",attach:"Dosya ekle",typing:"yaz\u0131yor\u2026",today:"Bug\xFCn",yesterday:"D\xFCn",reply:"Yan\u0131tla",react:"Tepki ver",edit:"D\xFCzenle",delete:"Sil",deleted:"Bu mesaj silindi",edited:"d\xFCzenlendi",save:"Kaydet",cancel:"Vazge\xE7",you:"Siz",agent:"Destek",system:"Sistem",endChat:"Sohbeti bitir",newChat:"Yeni sohbet",resolved:"Bu sohbet \xE7\xF6z\xFCld\xFC olarak i\u015Faretlendi.",closed:"Bu sohbet kapat\u0131ld\u0131.",rateTitle:"Bu sohbeti nas\u0131l buldunuz?",rateComment:"Eklemek istedi\u011Finiz bir \u015Fey var m\u0131? (iste\u011Fe ba\u011Fl\u0131)",rateSend:"G\xF6nder",rateThanks:"Te\u015Fekk\xFCrler! Geri bildiriminiz al\u0131nd\u0131.",failed:"G\xF6nderilemedi \u2014 tekrar dene",fileTooLarge:"Dosya \xE7ok b\xFCy\xFCk (en fazla {mb} MB)",fileNotAllowed:"Bu dosya t\xFCr\xFCne izin verilmiyor",unavailable:"Sohbet \u015Fu an kullan\u0131lam\u0131yor. L\xFCtfen daha sonra tekrar deneyin.",close:"Kapat",minimize:"K\xFC\xE7\xFClt",unreadTitle:"({n}) Yeni mesaj",dropHere:"Dosyay\u0131 buraya b\u0131rak\u0131n",replyingTo:"Yan\u0131tlan\u0131yor",attachment:"Ek",poweredBy:"Signalbird ile"},le={launcher:"Chat",title:"Chat",online:"Online",offline:"We usually reply within a few minutes",greeting:"Hi there! How can we help you?",offlineMessage:"We're offline right now. Leave a message and we'll get back to you.",prechatTitle:"Before we start",prechatHint:"Leave your details so we can get back to you.",name:"Your name",email:"Email",start:"Start chat",skip:"Skip",placeholder:"Type your message\u2026",send:"Send",attach:"Attach file",typing:"is typing\u2026",today:"Today",yesterday:"Yesterday",reply:"Reply",react:"React",edit:"Edit",delete:"Delete",deleted:"This message was deleted",edited:"edited",save:"Save",cancel:"Cancel",you:"You",agent:"Support",system:"System",endChat:"End chat",newChat:"New chat",resolved:"This conversation was marked as resolved.",closed:"This conversation was closed.",rateTitle:"How was this conversation?",rateComment:"Anything to add? (optional)",rateSend:"Send",rateThanks:"Thanks! Your feedback was received.",failed:"Not sent \u2014 tap to retry",fileTooLarge:"File is too large (max {mb} MB)",fileNotAllowed:"This file type is not allowed",unavailable:"Chat is unavailable right now. Please try again later.",close:"Close",minimize:"Minimize",unreadTitle:"({n}) New message",dropHere:"Drop the file here",replyingTo:"Replying to",attachment:"Attachment",poweredBy:"Powered by Signalbird"};function P(s,e){let t=n=>n&&n!=="auto"?n.toLowerCase().slice(0,2):null;return (t(e)||t(s)||t(typeof navigator!="undefined"?navigator.language:null)||"en")==="tr"?"tr":"en"}function $(s){return s==="tr"?oe:le}function E(s,e){return s.replace(/\{(\w+)\}/g,(t,i)=>{var n;return String((n=e[i])!=null?n:"")})}var de=/^(image\/|application\/pdf|application\/msword|application\/vnd\.openxmlformats|application\/vnd\.ms-excel|text\/plain|application\/zip|application\/x-zip)/,S=class{constructor(e){this.o=e;this.list=null;this.typingEl=null;this.textarea=null;this.chips=null;this.replyBar=null;this.notice=null;this.files=[];this.replyTo=null;this.editing=null;this.view="none";this.typingTimer=null;this.wasTyping=false;let t=e.t;this.host=a("div",{id:"signalbird-widget"}),this.root=this.host.attachShadow({mode:"open"}),this.root.appendChild(a("style",null,D));let i=e.settings.position==="left"?"left":"right";this.wrap=a("div",{class:`sb ${i}`,style:`--sb-c:${pe(e.settings.color)}`}),this.badge=a("span",{class:"badge",style:"display:none"});let n=e.settings.launcher_text;this.launcher=a("button",{class:`ln${n?"":" icon-only"}`,type:"button","aria-label":n||t.launcher,onclick:()=>e.actions.open()},m("chat",26),n?a("span",{class:"lt"},n):null,this.badge),this.headerAvatar=a("div",{class:"av"},W(e.appName)),this.headerName=a("div",{class:"hn"},e.appName||t.title),this.headerDot=a("span",{class:"dot"}),this.headerStatus=a("div",{class:"hs"},this.headerDot,a("span",null,t.offline)),this.endBtn=a("button",{class:"hb",type:"button",title:t.endChat,style:"display:none",onclick:()=>e.actions.endChat()},m("done",18));let r=a("div",{class:"hd"},this.headerAvatar,a("div",{class:"hi"},this.headerName,this.headerStatus),this.endBtn,a("button",{class:"hb",type:"button",title:t.close,"aria-label":t.close,onclick:()=>e.actions.close()},m("close",20)));this.banner=a("div",{class:"bn",style:"display:none"}),this.body=a("div",{class:"bd"}),this.panel=a("div",{class:"pn",role:"dialog","aria-label":t.title},r,this.banner,this.body),this.wrap.appendChild(this.launcher),this.wrap.appendChild(this.panel),this.root.appendChild(this.wrap);let o=0;this.body.addEventListener("dragenter",l=>{l.preventDefault(),o++,this.body.classList.add("dragging");}),this.body.addEventListener("dragover",l=>l.preventDefault()),this.body.addEventListener("dragleave",()=>{--o<=0&&(o=0,this.body.classList.remove("dragging"));}),this.body.addEventListener("drop",l=>{var d;l.preventDefault(),o=0,this.body.classList.remove("dragging"),this.view==="chat"&&((d=l.dataTransfer)!=null&&d.files)&&this.addFiles(Array.from(l.dataTransfer.files));});}mount(){this.host.isConnected||document.body.appendChild(this.host);}unmount(){this.host.remove();}setOpen(e){this.wrap.classList.toggle("open",e),e&&this.list&&requestAnimationFrame(()=>{var t;this.list&&O(this.list),(t=this.textarea)==null||t.focus();});}setUnread(e){this.badge.textContent=e>99?"99+":String(e),this.badge.style.display=e>0?"flex":"none";}setHeader(e,t){var o;let i=this.o.t,n=(e==null?void 0:e.name)||this.o.appName||i.title;this.headerName.textContent=n,b(this.headerAvatar),e!=null&&e.avatar?this.headerAvatar.appendChild(a("img",{src:e.avatar,alt:""})):this.headerAvatar.textContent=W(n);let r=(o=e==null?void 0:e.online)!=null?o:t;this.headerDot.classList.toggle("on",r),this.headerStatus.lastChild.textContent=r?i.online:i.offline;}setBanner(e,t=false){this.banner.textContent=e||"",this.banner.className=`bn${t?" err":""}`,this.banner.style.display=e?"block":"none";}setEndVisible(e){this.endBtn.style.display=e?"flex":"none";}showPrechat(e){let t=this.o.t,i=this.o.settings.prechat||{name:true,email:true,required:false};this.view="prechat",this.list=null,this.textarea=null,b(this.body);let n=a("input",{type:"text",placeholder:t.name,value:e.name||"",autocomplete:"name"}),r=a("input",{type:"email",placeholder:t.email,value:e.email||"",autocomplete:"email"}),o=()=>{let d=n.value.trim(),p=r.value.trim();if(i.required&&(i.name&&!d||i.email&&!p)){(i.name&&!d?n:r).focus();return}if(p&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(p)){r.focus();return}this.o.actions.submitPrechat(d,p);},l=a("form",{class:"fm",onsubmit:d=>{d.preventDefault(),o();}},a("h3",null,t.prechatTitle),a("p",null,this.o.settings.greeting||t.prechatHint),i.name?n:null,i.email?r:null,a("button",{class:"btn",type:"submit"},t.start),i.required?null:a("button",{class:"btn gh",type:"button",onclick:()=>this.o.actions.skipPrechat()},t.skip));this.body.appendChild(l),setTimeout(()=>(i.name?n:r).focus(),50);}showChat(){if(this.view==="chat"&&this.list)return;let e=this.o.t;this.view="chat",b(this.body),this.list=a("div",{class:"ml"}),this.notice=a("div",{class:"notice",style:"display:none"}),this.typingEl=a("div",{class:"tp"},a("i"),a("i"),a("i"),a("span",{style:"margin-left:4px"},"")),this.replyBar=a("div",{class:"rq",style:"display:none"}),this.chips=a("div",{class:"chips",style:"display:none"}),this.textarea=a("textarea",{rows:1,placeholder:e.placeholder,"aria-label":e.placeholder,onkeydown:n=>{n.key==="Enter"&&!n.shiftKey&&!n.isComposing?(n.preventDefault(),this.submit()):n.key==="Escape"&&(this.editing?this.cancelEdit():this.replyTo&&this.setReply(null));},oninput:()=>{this.autosize(),this.notifyTyping();},onpaste:n=>{var o;let r=Array.from(((o=n.clipboardData)==null?void 0:o.files)||[]);r.length&&(n.preventDefault(),this.addFiles(r));}});let t=a("input",{type:"file",multiple:true,style:"display:none",accept:"image/*,.pdf,.doc,.docx,.xls,.xlsx,.txt,.zip",onchange:()=>{this.addFiles(Array.from(t.files||[])),t.value="";}}),i=a("div",{class:"cp"},this.replyBar,this.chips,a("div",{class:"cr"},a("button",{class:"cb",type:"button",title:e.attach,"aria-label":e.attach,onclick:()=>t.click()},m("clip",19)),this.textarea,a("button",{class:"cb sd",type:"button",title:e.send,"aria-label":e.send,onclick:()=>this.submit()},m("send",17))),t,a("div",{class:"pw"},a("a",{href:"https://signalbird.io",target:"_blank",rel:"noopener"},e.poweredBy)));this.body.appendChild(this.list),this.body.appendChild(this.notice),this.body.appendChild(this.typingEl),this.body.appendChild(i),this.body.appendChild(a("div",{class:"drop"},e.dropHere));}showRating(){let e=this.o.t;this.view="rating",this.list=null,this.textarea=null,b(this.body);let t=0,i=[],n=()=>i.forEach((d,p)=>d.classList.toggle("on",p<t)),r=a("div",{class:"stars"});for(let d=1;d<=5;d++){let p=a("button",{type:"button","aria-label":String(d),onclick:()=>{t=d,n();}},m("star",30));i.push(p),r.appendChild(p);}let o=a("textarea",{placeholder:e.rateComment}),l=a("form",{class:"fm",onsubmit:d=>{d.preventDefault(),this.o.actions.rate(t,o.value.trim());}},a("h3",{style:"text-align:center"},e.rateTitle),r,o,a("button",{class:"btn",type:"submit"},e.rateSend),a("button",{class:"btn gh",type:"button",onclick:()=>this.o.actions.rate(0,"")},e.skip));this.body.appendChild(l);}showThanks(){this.view="none",this.list=null,b(this.body),this.body.appendChild(a("div",{class:"ok"},a("p",null,this.o.t.rateThanks),a("button",{class:"btn",type:"button",style:"margin-top:12px",onclick:()=>this.o.actions.newChat()},this.o.t.newChat)));}get currentView(){return this.view}render(e){this.list&&Y(this.list,{...e,t:this.o.t,locale:this.o.locale,actions:this.o.actions});}setTyping(e,t){this.typingEl&&(this.typingEl.classList.toggle("on",e),this.typingEl.lastChild.textContent=`${t} ${this.o.t.typing}`,e&&this.list&&O(this.list));}setNotice(e,t){if(this.notice){if(b(this.notice),!e){this.notice.style.display="none";return}this.notice.appendChild(document.createTextNode(e)),t&&this.notice.appendChild(a("button",{type:"button",onclick:t.fn},t.label)),this.notice.style.display="block";}}setReply(e){var i;if(this.replyTo=e,!this.replyBar)return;if(b(this.replyBar),!e){this.replyBar.style.display="none";return}let t=e.sender_type==="visitor"?this.o.t.you:e.sender_name||this.o.t.agent;this.replyBar.appendChild(a("span",{class:"rt"},`${this.o.t.replyingTo} ${t}: ${_(e,this.o.t)}`)),this.replyBar.appendChild(a("button",{type:"button",onclick:()=>this.setReply(null)},m("close",14))),this.replyBar.style.display="flex",(i=this.textarea)==null||i.focus();}startEdit(e){this.textarea&&(this.editing=e,this.setReply(null),this.textarea.value=e.body||"",this.autosize(),this.textarea.focus(),this.replyBar&&(b(this.replyBar),this.replyBar.appendChild(a("span",{class:"rt"},`${this.o.t.edit}: ${_(e,this.o.t)}`)),this.replyBar.appendChild(a("button",{type:"button",onclick:()=>this.cancelEdit()},m("close",14))),this.replyBar.style.display="flex"));}cancelEdit(){this.editing=null,this.textarea&&(this.textarea.value="",this.autosize()),this.replyBar&&(b(this.replyBar),this.replyBar.style.display="none");}submit(){if(!this.textarea)return;let e=this.textarea.value.trim();if(this.editing){let n=this.editing;this.cancelEdit(),e&&e!==n.body&&this.o.actions.saveEdit(n,e);return}if(!e&&this.files.length===0)return;let t=this.files,i=this.replyTo;this.files=[],this.renderChips(),this.setReply(null),this.textarea.value="",this.autosize(),this.stopTyping(),this.o.actions.send(e,t,i),this.textarea.focus();}addFiles(e){let t=this.o.maxMb*1024*1024;for(let i of e){if(i.size>t){this.flash(E(this.o.t.fileTooLarge,{mb:this.o.maxMb}));continue}if(i.type&&!de.test(i.type)){this.flash(this.o.t.fileNotAllowed);continue}if(this.files.length>=5)break;this.files.push(i);}this.renderChips();}renderChips(){this.chips&&(b(this.chips),this.chips.style.display=this.files.length?"flex":"none",this.files.forEach((e,t)=>{let i=a("div",{class:"chip"},e.type.startsWith("image/")?a("img",{src:URL.createObjectURL(e),alt:""}):m("file",16),a("span",null,e.name),a("button",{type:"button",onclick:()=>{this.files.splice(t,1),this.renderChips();}},m("close",12)));this.chips.appendChild(i);}));}flash(e){this.setBanner(e,true),setTimeout(()=>this.setBanner(null),3e3);}autosize(){let e=this.textarea;e&&(e.style.height="auto",e.style.height=`${Math.min(e.scrollHeight,120)}px`);}notifyTyping(){this.wasTyping||(this.wasTyping=true,this.o.actions.typing(true)),this.typingTimer&&clearTimeout(this.typingTimer),this.typingTimer=setTimeout(()=>this.stopTyping(),2500);}stopTyping(){this.typingTimer&&clearTimeout(this.typingTimer),this.typingTimer=null,this.wasTyping&&(this.wasTyping=false,this.o.actions.typing(false));}};function W(s){return (s||"?").split(/\s+/).slice(0,2).map(e=>e[0]||"").join("").toUpperCase()}function pe(s){return s&&/^(#[0-9a-f]{3,8}|rgba?\([\d\s.,%]+\)|hsla?\([\d\s.,%]+\))$/i.test(s)?s:"#111827"}var L=class{constructor(){this.original=null;this.timer=null;this.label="";}update(e,t){e>0&&document.hidden?(this.label=t(e),this.begin()):this.end();}begin(){if(this.timer)return;this.original=document.title;let e=false;this.timer=setInterval(()=>{if(!document.hidden)return this.end();e=!e,document.title=e?this.label:this.original||"";},1200);}end(){this.timer&&clearInterval(this.timer),this.timer=null,this.original!==null&&(document.title=this.original,this.original=null);}};var w=null;function B(){try{let s=window.AudioContext||window.webkitAudioContext;if(!s)return;w||(w=new s),w.state==="suspended"&&w.resume();let e=w.currentTime,t=w.createGain();t.gain.setValueAtTime(1e-4,e),t.gain.exponentialRampToValueAtTime(.12,e+.02),t.gain.exponentialRampToValueAtTime(1e-4,e+.35),t.connect(w.destination);let i=w.createOscillator();i.type="sine",i.frequency.setValueAtTime(880,e),i.frequency.setValueAtTime(1175,e+.12),i.connect(t),i.start(e),i.stop(e+.36);}catch(s){}}var he="https://signalbird.io/api",v="/v1/sdk/chat/conversations",R=class{constructor(e){this.opts=e;this.title=new L;this.ui=null;this.settings=null;this.appName="";this.started=false;this.destroyed=false;this.pendingSends=new Map;this.ratingMode=null;this.lastTypingSent=0;this.pollCount=0;this.onVisibility=()=>{this.syncUnread(),!document.hidden&&this.store.isOpen&&this.store.conversation&&this.markRead();};this.baseUrl=(e.baseUrl||he).replace(/\/$/,""),this.store=new T(e.appKey),this.api=new C(this.baseUrl,e.appKey,()=>this.store.secret,(...t)=>this.log(...t)),this.poller=new M(()=>this.tick()),this.locale=P(null,e.locale),this.t=$(this.locale),this.ready=this.start().catch(t=>this.log("start failed",t));}log(...e){this.opts.debug&&console.debug("[signalbird]",...e);}async start(){var d;let e=await this.api.post("/v1/sdk/bootstrap",{page_url:location.href,locale:this.opts.locale});if(!e.ok||!((d=e.data)!=null&&d.app)){this.log("bootstrap failed",e);return}if(this.destroyed)return;let{app:t,online:i,within_hours:n,visitor:r,conversation:o}=e.data;if(!t.chat_enabled){this.log("chat disabled for app");return}this.settings=t.chat||{},this.appName=t.name||"",this.locale=P(this.settings.locale,this.opts.locale),this.t=$(this.locale),this.store.visitor&&!r&&this.store.clearVisitor(),r&&this.store.setVisitor({id:r.id,name:r.name,email:r.email}),this.store.online=!!i,this.store.withinHours=n!==false,o&&this.store.setConversation(o);let l=Number(this.settings.max_attachment_mb||t.max_attachment_mb||10);this.ui=new S({t:this.t,locale:this.locale,settings:this.settings,appName:this.appName,maxMb:l,actions:{open:()=>this.open(),close:()=>this.close(),send:(p,u,h)=>{this.send(p,u,h);},typing:p=>{this.typing(p);},submitPrechat:(p,u)=>{this.submitPrechat(p,u);},skipPrechat:()=>this.enterChat(),rate:(p,u)=>{this.rate(p,u);},endChat:()=>this.endChat(),newChat:()=>this.newChat(),saveEdit:(p,u)=>{this.saveEdit(p,u);},reply:p=>{var u;return (u=this.ui)==null?void 0:u.setReply(p)},react:(p,u)=>{this.react(p,u);},edit:p=>{var u;return (u=this.ui)==null?void 0:u.startEdit(p)},remove:p=>{this.remove(p);},retry:p=>{this.retry(p);},openImage:p=>window.open(p,"_blank","noopener")}}),this.store.on("unread",()=>this.syncUnread()),this.store.on("messages",()=>this.render()),this.store.on("change",()=>this.render()),document.addEventListener("visibilitychange",this.onVisibility),this.ui.mount(),this.ui.setHeader(this.store.agent,this.store.online),this.applyBanner(),this.store.setUnread((r==null?void 0:r.unread)||(o==null?void 0:o.visitor_unread)||0),this.syncUnread(),this.started=true,this.poller.start(),this.opts.user&&this.identify(this.opts.user);}applyBanner(){!this.ui||!this.settings||this.ui.setBanner(this.store.withinHours?null:this.settings.offline_message||this.t.offlineMessage);}syncUnread(){var t;let e=this.store.isOpen&&!document.hidden?0:this.store.unread;(t=this.ui)==null||t.setUnread(this.store.unread),this.title.update(e,i=>E(this.t.unreadTitle,{n:i})),this.store.emit("public:unread",this.store.unread);}open(){!this.ui||this.store.isOpen||(this.store.isOpen=true,this.ui.setOpen(true),this.poller.setOpen(true),this.decideView(),this.store.emit("public:open"),this.store.conversation?this.loadConversation():this.store.setUnread(0),this.syncUnread());}close(){if(!this.ui||!this.store.isOpen)return;let e=this.store.conversation;if(e&&e.status==="resolved"&&!this.store.wasRated(e.id)&&this.ui.currentView==="chat"&&this.store.messages.some(t=>t.sender_type==="agent")){this.ratingMode="resolved",this.ui.setEndVisible(false),this.ui.showRating();return}this.store.isOpen=false,this.ui.setOpen(false),this.poller.setOpen(false),this.typing(false),this.store.emit("public:close"),this.syncUnread();}toggle(){this.store.isOpen?this.close():this.open();}isOpen(){return this.store.isOpen}on(e,t){this.store.on(`public:${e}`,t);}off(e,t){this.store.off(`public:${e}`,t);}async identify(e){if(await this.ready,this.destroyed)return;let[t,...i]=(e.name||"").trim().split(/\s+/),n={external_id:e.external_id,email:e.email,phone:e.phone,first_name:t||void 0,last_name:i.join(" ")||void 0,attributes:e.attributes};e.external_id&&this.check(await this.api.post("/v1/sdk/identify",n)),await this.session({name:e.name,email:e.email,external_id:e.external_id});}async pushRegister(e){return await this.ready,this.api.post("/v1/sdk/devices",{provider:e.platform==="ios"?"apns":"fcm",locale:this.locale,...e})}destroy(){var e;this.destroyed=true,this.poller.stop(),this.title.end(),document.removeEventListener("visibilitychange",this.onVisibility),(e=this.ui)==null||e.unmount(),this.ui=null;}decideView(){if(!this.ui||!this.settings)return;let e=this.settings.prechat;!this.store.visitor&&e&&(e.name||e.email)?this.ui.showPrechat({}):this.enterChat();}enterChat(){var e;this.ui&&(this.ratingMode=null,this.ui.showChat(),this.ui.setEndVisible(((e=this.store.conversation)==null?void 0:e.status)==="open"),this.render());}render(){var t,i;if(!this.ui||this.ui.currentView!=="chat")return;let e=this.store.conversation;this.ui.render({messages:this.store.messages,greeting:((t=this.settings)==null?void 0:t.greeting)||this.t.greeting,agentName:((i=this.store.agent)==null?void 0:i.name)||this.t.agent,find:n=>this.store.find(n)}),this.ui.setEndVisible((e==null?void 0:e.status)==="open"),e&&e.status!=="open"?this.ui.setNotice(e.status==="resolved"?this.t.resolved:this.t.closed,{label:this.t.newChat,fn:()=>this.newChat()}):this.ui.setNotice(null);}async submitPrechat(e,t){var n;await this.session({name:e||void 0,email:t||void 0})?this.enterChat():(n=this.ui)==null||n.setBanner(this.t.unavailable,true);}newChat(){this.ratingMode=null,this.store.setConversation(null),this.enterChat(),this.store.isOpen||this.open();}endChat(){!this.ui||!this.store.conversation||(this.ratingMode="end",this.ui.setEndVisible(false),this.ui.showRating());}async rate(e,t){var r;let i=this.store.conversation,n=this.ratingMode;if(this.ratingMode=null,!(!i||!this.ui)){if(e>0){let o=await this.api.post(`${v}/${i.id}/rate`,{rating:e,comment:t||void 0});this.check(o),this.store.markRated(i.id);}if(n==="end"){let o=await this.api.post(`${v}/${i.id}/close`);this.check(o),((r=this.store.conversation)==null?void 0:r.id)===i.id&&this.store.setConversation({...i,status:"closed"}),this.ui.showThanks();return}e===0&&this.store.markRated(i.id),this.enterChat(),this.close();}}async session(e={}){var i;let t=await this.api.post("/v1/sdk/chat/session",{...e,locale:this.locale,page_url:location.href,user_agent:navigator.userAgent});if(t.ok&&((i=t.data)!=null&&i.visitor)){let n=t.data.visitor;return !n.secret&&!this.store.visitor?(this.log("session returned no secret"),false):(this.store.setVisitor(n),true)}return !t.ok&&t.code==="VISITOR_INVALID"&&this.store.visitor?(this.store.clearVisitor(),this.session(e)):(this.check(t),false)}async loadConversation(){let e=this.store.conversation;if(!e)return;let t=await this.api.get(`${v}/${e.id}`,{limit:50});this.applyPayload(t,true)&&this.store.isOpen&&!document.hidden&&this.store.setUnread(0);}applyPayload(e,t){var n,r,o,l;if(!e.ok)return this.check(e),e.status===404&&this.store.setConversation(null),-1;let i=e.data;if(i.conversation){let d=(n=this.store.conversation)==null?void 0:n.status;this.store.conversation=i.conversation,d!==i.conversation.status&&this.store.emit("change");}return i.agent!==void 0&&(this.store.agent=i.agent||null),this.store.agentTyping=!!i.agent_typing,(r=this.ui)==null||r.setHeader(this.store.agent,this.store.online),(l=this.ui)==null||l.setTyping(this.store.agentTyping,((o=this.store.agent)==null?void 0:o.name)||this.t.agent),this.store.mergeMessages(i.messages||[],t)}async tick(){var d,p,u;if(!this.started||!this.store.visitor)return false;this.pollCount++;let e=this.store.conversation;if(this.store.isOpen&&e){let c=this.pollCount%5===0?void 0:this.store.lastServerMessageId||void 0,f=await this.api.get(`${v}/${e.id}`,c?{after:c}:{limit:50}),x=this.applyPayload(f,!c);return x>0&&(document.hidden?(this.store.setUnread(this.store.unread+x),(d=this.settings)!=null&&d.sound&&B()):this.markRead()),x>0}if(this.store.isOpen&&!e&&this.pollCount%10!==0)return false;let t=await this.api.get(v);if(!t.ok)return this.check(t),false;let i=t.data,n=Array.isArray(i)?i:(i==null?void 0:i.conversations)||(i==null?void 0:i.data)||[],r=n.find(h=>h.status==="open")||n[0]||null,o=n.reduce((h,c)=>h+(c.visitor_unread||0),0),l=o>this.store.unread;return r&&r.id!==((p=this.store.conversation)==null?void 0:p.id)&&(this.store.setConversation(r),this.store.isOpen&&this.loadConversation()),(!this.store.isOpen||document.hidden)&&(this.store.setUnread(o),l&&((u=this.settings)!=null&&u.sound)&&B()),l}async markRead(){let e=this.store.conversation,t=this.store.lastServerMessageId;!e||!t||(this.store.setUnread(0),await this.api.post(`${v}/${e.id}/read`,{last_message_id:t},true));}async send(e,t,i,n=U()){var l;let r={id:`local_${n}`,client_id:n,sender_type:"visitor",type:t.length?t[0].type.startsWith("image/")?"image":"file":"text",body:e||null,attachments:null,reply_to_id:(i==null?void 0:i.id)||null,created_at:new Date().toISOString(),_pending:true,_files:t};this.pendingSends.set(n,{text:e,files:t,replyTo:(i==null?void 0:i.id)||null}),this.store.upsertMessage(r);let o=()=>{let d=this.store.find(r.id);d&&this.store.upsertMessage({...d,_pending:false,_failed:true});};try{if(!this.store.visitor&&!await this.session())return o();let d=this.store.conversation,p=!d||d.status!=="open";if(p&&t.length===0){let f=await this.api.post(v,{body:e,page_url:location.href,client_id:n});if(!f.ok)return this.sendFailed(f,o);this.store.setConversation(f.data.conversation),this.store.mergeMessages(f.data.messages||[]),this.reconcile(r,f.data.messages),this.pendingSends.delete(n),this.poller.poke(3e3);return}if(p){let f=await this.api.post(v,{page_url:location.href});if(!f.ok)return this.sendFailed(f,o);this.store.setConversation(f.data.conversation),this.store.mergeMessages(f.data.messages||[]),d=f.data.conversation;}if(!d)return o();let u=[];for(let f of t){let x=await this.api.upload(`${v}/${d.id}/attachments`,f);if(!x.ok)return this.sendFailed(x,o);u.push(x.data);}let h=await this.api.post(`${v}/${d.id}/messages`,{body:e||void 0,attachments:u.length?u:void 0,reply_to_id:(i==null?void 0:i.id)||void 0,client_id:n});if(!h.ok)return this.sendFailed(h,o);let c=((l=h.data)==null?void 0:l.message)||h.data;this.reconcile(r,[c]),this.pendingSends.delete(n),this.poller.poke(3e3);}catch(d){this.log("send error",d),o();}}reconcile(e,t){let i=(t||[]).find(n=>n.client_id===e.client_id);i?this.store.mergeMessages([{...i,client_id:e.client_id}]):t&&t.length&&(this.store.removeMessage(e.id),this.store.mergeMessages(t));}sendFailed(e,t){var i;this.check(e),(e.code==="CHAT_UNAVAILABLE"||e.status===503)&&((i=this.ui)==null||i.setBanner(this.t.unavailable,true)),t();}async retry(e){let t=e.client_id?this.pendingSends.get(e.client_id):null;this.store.removeMessage(e.id),!(!t||!e.client_id)&&await this.send(t.text,t.files,this.store.find(t.replyTo)||null,e.client_id);}async typing(e){let t=this.store.conversation;if(!t||t.status!=="open"||!this.store.visitor)return;let i=Date.now();e&&i-this.lastTypingSent<4e3||(this.lastTypingSent=e?i:0,await this.api.post(`${v}/${t.id}/typing`,{is_typing:e},true));}async react(e,t){var p,u,h,c;let i=this.store.conversation;if(!i)return;let n={...e.reactions||{}},r=[...n[t]||[]],o=r.indexOf("visitor");o>=0?r.splice(o,1):r.push("visitor"),n[t]=r,this.store.upsertMessage({...e,reactions:n});let l=await this.api.post(`${v}/${i.id}/messages/${e.id}/reactions`,{emoji:t});if(!l.ok){this.check(l),this.store.upsertMessage({...e});return}let d=(c=(u=(p=l.data)==null?void 0:p.message)==null?void 0:u.reactions)!=null?c:(h=l.data)==null?void 0:h.reactions;d&&this.store.upsertMessage({...e,reactions:d});}async saveEdit(e,t){var o;let i=this.store.conversation;if(!i)return;this.store.upsertMessage({...e,body:t,edited_at:new Date().toISOString()});let n=await this.api.patch(`${v}/${i.id}/messages/${e.id}`,{body:t});if(!n.ok){this.check(n),this.store.upsertMessage({...e});return}let r=((o=n.data)==null?void 0:o.message)||n.data;r&&r.id&&this.store.upsertMessage(r);}async remove(e){let t=this.store.conversation;if(!t)return;this.store.upsertMessage({...e,deleted_at:new Date().toISOString()});let i=await this.api.delete(`${v}/${t.id}/messages/${e.id}`);i.ok||(this.check(i),this.store.upsertMessage({...e}));}check(e){e.ok||(e.code==="VISITOR_INVALID"||e.status===401&&this.store.visitor)&&(this.store.clearVisitor(),this.store.isOpen&&this.decideView());}};var He="1.4.0",g=null,A=[],k=null;function y(s,e){try{return s()}catch(t){try{console.warn("[signalbird]",t);}catch(i){}return e}}function G(s){s.catch(()=>{});}function ce(s){y(()=>{if(!s||!s.appKey){console.warn("[signalbird] init: appKey zorunlu");return}if(!(typeof document=="undefined"||typeof window=="undefined")){g&&g.destroy(),g=new R(s);for(let{event:e,fn:t}of A)g.on(e,t);if(k){let e=k;k=null,G(g.identify(e));}}},void 0);}function Ne(s){y(()=>{if(s){if(!g){k={...k||{},...s};return}G(g.identify(s));}},void 0);}var De={open(){y(()=>g==null?void 0:g.open(),void 0);},close(){y(()=>g==null?void 0:g.close(),void 0);},toggle(){y(()=>g==null?void 0:g.toggle(),void 0);},isOpen(){return y(()=>!!(g!=null&&g.isOpen()),false)},on(s,e){y(()=>{typeof e=="function"&&(A.push({event:s,fn:e}),g==null||g.on(s,e));},void 0);},off(s,e){y(()=>{let t=A.findIndex(i=>i.event===s&&i.fn===e);t>=0&&A.splice(t,1),g==null||g.off(s,e);},void 0);}},Ve={register(s){return y(()=>g?g.pushRegister(s).catch(e=>({ok:!1,status:0,code:"NETWORK_ERROR",message:String(e)})):Promise.resolve({ok:!1,status:0,code:"NOT_INITIALIZED",message:"Signalbird.init \xE7a\u011Fr\u0131lmad\u0131"}),Promise.resolve({ok:false,status:0,code:"WIDGET_ERROR",message:"widget error"}))}};function Ue(){y(()=>{g==null||g.destroy(),g=null;},void 0);}y(()=>{if(typeof document=="undefined")return;let s=document.currentScript||document.querySelector('script[data-app-key][src*="signalbird"]'),e=s==null?void 0:s.dataset;if(!e||!e.appKey)return;let t=()=>ce({appKey:e.appKey,baseUrl:e.baseUrl||void 0,locale:e.locale||void 0,debug:e.debug==="true"||e.debug==="1"});document.body?t():document.addEventListener("DOMContentLoaded",t,{once:!0});},void 0);
|
|
141
|
+
exports.chat=De;exports.destroy=Ue;exports.identify=Ne;exports.init=ce;exports.push=Ve;exports.version=He;return exports;})({});
|
package/dist/vue.d.mts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { InjectionKey, Ref, App } from 'vue';
|
|
2
|
+
import { SignalbirdApp, SessionInput, ChatState, IdentifyInput, RegisterDeviceInput, AppConfig } from './app.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* `signalbird/vue` — Vue 3 eklentisi ve composable'ları.
|
|
6
|
+
*
|
|
7
|
+
* React uyarlamasıyla aynı `ChatSession` motorunu kullanır; buradaki tek iş
|
|
8
|
+
* durumu Vue'nun tepkimeli sistemine bağlamaktır.
|
|
9
|
+
*
|
|
10
|
+
* Vue bir `peerDependency`'dir; paket onu kendi getirmez.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
declare const SIGNALBIRD_KEY: InjectionKey<SignalbirdApp>;
|
|
14
|
+
/**
|
|
15
|
+
* `app.use(signalbirdPlugin, { appKey })`
|
|
16
|
+
*
|
|
17
|
+
* Tek istemci tüm bileşenlere `provide` edilir: her bileşenin kendi istemcisini
|
|
18
|
+
* kurması, ziyaretçi sırrının iki kez yüklenmesi ve iki ayrı yoklama döngüsü
|
|
19
|
+
* demekti.
|
|
20
|
+
*/
|
|
21
|
+
declare const signalbirdPlugin: {
|
|
22
|
+
install(app: App, config: AppConfig): void;
|
|
23
|
+
};
|
|
24
|
+
/** Ham istemci — push kaydı, kimlik, özel çağrılar için. */
|
|
25
|
+
declare function useSignalbird(): SignalbirdApp;
|
|
26
|
+
interface UseChatOptions {
|
|
27
|
+
/** Panel açık mı — `ref` verilirse değişimi izlenir. */
|
|
28
|
+
open?: Ref<boolean> | boolean;
|
|
29
|
+
visitor?: SessionInput;
|
|
30
|
+
}
|
|
31
|
+
interface UseChatResult {
|
|
32
|
+
state: Ref<ChatState>;
|
|
33
|
+
send(body: string, attachments?: unknown[]): Promise<unknown>;
|
|
34
|
+
typing(isTyping: boolean): void;
|
|
35
|
+
markRead(): Promise<void>;
|
|
36
|
+
close(rating?: number, comment?: string): Promise<void>;
|
|
37
|
+
openSession(input: SessionInput): Promise<unknown>;
|
|
38
|
+
refresh(): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
declare function useChat(options?: UseChatOptions): UseChatResult;
|
|
41
|
+
/** Kullanıcı giriş yaptığında ziyaretçiyi kişi kaydına bağlar. */
|
|
42
|
+
declare function identify(input: IdentifyInput): Promise<unknown>;
|
|
43
|
+
/** Push token'ı kaydeder; token'ı almak ev sahibinin işidir. */
|
|
44
|
+
declare function registerDevice(input: RegisterDeviceInput): Promise<unknown>;
|
|
45
|
+
|
|
46
|
+
export { SIGNALBIRD_KEY, type UseChatOptions, type UseChatResult, identify, registerDevice, signalbirdPlugin, useChat, useSignalbird };
|
package/dist/vue.d.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { InjectionKey, Ref, App } from 'vue';
|
|
2
|
+
import { SignalbirdApp, SessionInput, ChatState, IdentifyInput, RegisterDeviceInput, AppConfig } from './app.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* `signalbird/vue` — Vue 3 eklentisi ve composable'ları.
|
|
6
|
+
*
|
|
7
|
+
* React uyarlamasıyla aynı `ChatSession` motorunu kullanır; buradaki tek iş
|
|
8
|
+
* durumu Vue'nun tepkimeli sistemine bağlamaktır.
|
|
9
|
+
*
|
|
10
|
+
* Vue bir `peerDependency`'dir; paket onu kendi getirmez.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
declare const SIGNALBIRD_KEY: InjectionKey<SignalbirdApp>;
|
|
14
|
+
/**
|
|
15
|
+
* `app.use(signalbirdPlugin, { appKey })`
|
|
16
|
+
*
|
|
17
|
+
* Tek istemci tüm bileşenlere `provide` edilir: her bileşenin kendi istemcisini
|
|
18
|
+
* kurması, ziyaretçi sırrının iki kez yüklenmesi ve iki ayrı yoklama döngüsü
|
|
19
|
+
* demekti.
|
|
20
|
+
*/
|
|
21
|
+
declare const signalbirdPlugin: {
|
|
22
|
+
install(app: App, config: AppConfig): void;
|
|
23
|
+
};
|
|
24
|
+
/** Ham istemci — push kaydı, kimlik, özel çağrılar için. */
|
|
25
|
+
declare function useSignalbird(): SignalbirdApp;
|
|
26
|
+
interface UseChatOptions {
|
|
27
|
+
/** Panel açık mı — `ref` verilirse değişimi izlenir. */
|
|
28
|
+
open?: Ref<boolean> | boolean;
|
|
29
|
+
visitor?: SessionInput;
|
|
30
|
+
}
|
|
31
|
+
interface UseChatResult {
|
|
32
|
+
state: Ref<ChatState>;
|
|
33
|
+
send(body: string, attachments?: unknown[]): Promise<unknown>;
|
|
34
|
+
typing(isTyping: boolean): void;
|
|
35
|
+
markRead(): Promise<void>;
|
|
36
|
+
close(rating?: number, comment?: string): Promise<void>;
|
|
37
|
+
openSession(input: SessionInput): Promise<unknown>;
|
|
38
|
+
refresh(): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
declare function useChat(options?: UseChatOptions): UseChatResult;
|
|
41
|
+
/** Kullanıcı giriş yaptığında ziyaretçiyi kişi kaydına bağlar. */
|
|
42
|
+
declare function identify(input: IdentifyInput): Promise<unknown>;
|
|
43
|
+
/** Push token'ı kaydeder; token'ı almak ev sahibinin işidir. */
|
|
44
|
+
declare function registerDevice(input: RegisterDeviceInput): Promise<unknown>;
|
|
45
|
+
|
|
46
|
+
export { SIGNALBIRD_KEY, type UseChatOptions, type UseChatResult, identify, registerDevice, signalbirdPlugin, useChat, useSignalbird };
|