@waniwani/sdk 0.1.20-beta.2 → 0.1.20-beta.21
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 +103 -52
- package/dist/abap-KGVIZMDC.js +3 -0
- package/dist/abap-KGVIZMDC.js.map +1 -0
- package/dist/actionscript-3-2UHK5QYP.js +3 -0
- package/dist/actionscript-3-2UHK5QYP.js.map +1 -0
- package/dist/ada-JKTWR5BV.js +3 -0
- package/dist/ada-JKTWR5BV.js.map +1 -0
- package/dist/andromeeda-HAPOYWX3.js +3 -0
- package/dist/andromeeda-HAPOYWX3.js.map +1 -0
- package/dist/angular-html-EOIKHM3D.js +3 -0
- package/dist/angular-html-EOIKHM3D.js.map +1 -0
- package/dist/angular-ts-A7ZNTSV6.js +3 -0
- package/dist/angular-ts-A7ZNTSV6.js.map +1 -0
- package/dist/apache-MPGFGQFB.js +3 -0
- package/dist/apache-MPGFGQFB.js.map +1 -0
- package/dist/apex-BOAZL66Z.js +3 -0
- package/dist/apex-BOAZL66Z.js.map +1 -0
- package/dist/apl-QBN4KIYA.js +3 -0
- package/dist/apl-QBN4KIYA.js.map +1 -0
- package/dist/applescript-C4CJ3STL.js +3 -0
- package/dist/applescript-C4CJ3STL.js.map +1 -0
- package/dist/ara-FSFFBRSD.js +3 -0
- package/dist/ara-FSFFBRSD.js.map +1 -0
- package/dist/asciidoc-QQK2LANG.js +3 -0
- package/dist/asciidoc-QQK2LANG.js.map +1 -0
- package/dist/asm-X43A2VYW.js +3 -0
- package/dist/asm-X43A2VYW.js.map +1 -0
- package/dist/astro-OQUOYMBE.js +3 -0
- package/dist/astro-OQUOYMBE.js.map +1 -0
- package/dist/aurora-x-R6WAWEBC.js +3 -0
- package/dist/aurora-x-R6WAWEBC.js.map +1 -0
- package/dist/awk-4Z3PRTF7.js +3 -0
- package/dist/awk-4Z3PRTF7.js.map +1 -0
- package/dist/ayu-dark-KMD4YO7F.js +3 -0
- package/dist/ayu-dark-KMD4YO7F.js.map +1 -0
- package/dist/ayu-light-2ATPDILG.js +3 -0
- package/dist/ayu-light-2ATPDILG.js.map +1 -0
- package/dist/ayu-mirage-LJ7PG5AM.js +3 -0
- package/dist/ayu-mirage-LJ7PG5AM.js.map +1 -0
- package/dist/ballerina-JCXSJ2QD.js +3 -0
- package/dist/ballerina-JCXSJ2QD.js.map +1 -0
- package/dist/bat-XFWR7RMZ.js +3 -0
- package/dist/bat-XFWR7RMZ.js.map +1 -0
- package/dist/beancount-7BBDB4BH.js +3 -0
- package/dist/beancount-7BBDB4BH.js.map +1 -0
- package/dist/berry-PQ2BEJIZ.js +3 -0
- package/dist/berry-PQ2BEJIZ.js.map +1 -0
- package/dist/bibtex-J2PAB23I.js +3 -0
- package/dist/bibtex-J2PAB23I.js.map +1 -0
- package/dist/bicep-TNKT6R3W.js +3 -0
- package/dist/bicep-TNKT6R3W.js.map +1 -0
- package/dist/blade-QBDEYXMB.js +3 -0
- package/dist/blade-QBDEYXMB.js.map +1 -0
- package/dist/bsl-PQW6E45S.js +3 -0
- package/dist/bsl-PQW6E45S.js.map +1 -0
- package/dist/c-PZBJFNXE.js +3 -0
- package/dist/c-PZBJFNXE.js.map +1 -0
- package/dist/c3-GP7XYHE6.js +3 -0
- package/dist/c3-GP7XYHE6.js.map +1 -0
- package/dist/cadence-NABGDHKY.js +3 -0
- package/dist/cadence-NABGDHKY.js.map +1 -0
- package/dist/cairo-WQSC2GLN.js +3 -0
- package/dist/cairo-WQSC2GLN.js.map +1 -0
- package/dist/catppuccin-frappe-Z4Y2POK6.js +3 -0
- package/dist/catppuccin-frappe-Z4Y2POK6.js.map +1 -0
- package/dist/catppuccin-latte-4TQUIKX4.js +3 -0
- package/dist/catppuccin-latte-4TQUIKX4.js.map +1 -0
- package/dist/catppuccin-macchiato-B7YYPERT.js +3 -0
- package/dist/catppuccin-macchiato-B7YYPERT.js.map +1 -0
- package/dist/catppuccin-mocha-KX33VXKA.js +3 -0
- package/dist/catppuccin-mocha-KX33VXKA.js.map +1 -0
- package/dist/chat/index.d.ts +15 -5
- package/dist/chat/index.js +49 -1
- package/dist/chat/index.js.map +1 -1
- package/dist/chat/next-js/index.d.ts +95 -40
- package/dist/chat/next-js/index.js +1 -1
- package/dist/chat/next-js/index.js.map +1 -1
- package/dist/chat/server/index.d.ts +5 -0
- package/dist/chat/styles.css +1 -1
- package/dist/chunk-2RR26LLP.js +3 -0
- package/dist/chunk-2RR26LLP.js.map +1 -0
- package/dist/chunk-3MXGGSWX.js +3 -0
- package/dist/chunk-3MXGGSWX.js.map +1 -0
- package/dist/chunk-4LBJUPWV.js +3 -0
- package/dist/chunk-4LBJUPWV.js.map +1 -0
- package/dist/chunk-4VTSQZWF.js +3 -0
- package/dist/chunk-4VTSQZWF.js.map +1 -0
- package/dist/chunk-7JLJRE2N.js +3 -0
- package/dist/chunk-7JLJRE2N.js.map +1 -0
- package/dist/chunk-7PHUBJVC.js +3 -0
- package/dist/chunk-7PHUBJVC.js.map +1 -0
- package/dist/chunk-AGWJ4LUC.js +3 -0
- package/dist/chunk-AGWJ4LUC.js.map +1 -0
- package/dist/chunk-ASVQBXNX.js +3 -0
- package/dist/chunk-ASVQBXNX.js.map +1 -0
- package/dist/chunk-ATLIFHJQ.js +3 -0
- package/dist/chunk-ATLIFHJQ.js.map +1 -0
- package/dist/chunk-BWAU264B.js +3 -0
- package/dist/chunk-BWAU264B.js.map +1 -0
- package/dist/chunk-C2XW4T23.js +3 -0
- package/dist/chunk-C2XW4T23.js.map +1 -0
- package/dist/chunk-C3DWQQH3.js +3 -0
- package/dist/chunk-C3DWQQH3.js.map +1 -0
- package/dist/chunk-CIEDXAJY.js +3 -0
- package/dist/chunk-CIEDXAJY.js.map +1 -0
- package/dist/chunk-CNY3RWNZ.js +3 -0
- package/dist/chunk-CNY3RWNZ.js.map +1 -0
- package/dist/chunk-ED2SBPIQ.js +3 -0
- package/dist/chunk-ED2SBPIQ.js.map +1 -0
- package/dist/chunk-F3QSOBPN.js +3 -0
- package/dist/chunk-F3QSOBPN.js.map +1 -0
- package/dist/chunk-FHRHXPXN.js +3 -0
- package/dist/chunk-FHRHXPXN.js.map +1 -0
- package/dist/chunk-FWHINPYE.js +3 -0
- package/dist/chunk-FWHINPYE.js.map +1 -0
- package/dist/chunk-HMEGK7JX.js +3 -0
- package/dist/chunk-HMEGK7JX.js.map +1 -0
- package/dist/chunk-HU77EH3T.js +3 -0
- package/dist/chunk-HU77EH3T.js.map +1 -0
- package/dist/chunk-HVAT4SNH.js +116 -0
- package/dist/chunk-HVAT4SNH.js.map +1 -0
- package/dist/chunk-IXROC4D6.js +3 -0
- package/dist/chunk-IXROC4D6.js.map +1 -0
- package/dist/chunk-JVRIR5KA.js +3 -0
- package/dist/chunk-JVRIR5KA.js.map +1 -0
- package/dist/chunk-JXSURY23.js +3 -0
- package/dist/chunk-JXSURY23.js.map +1 -0
- package/dist/chunk-JZBW5KEX.js +3 -0
- package/dist/chunk-JZBW5KEX.js.map +1 -0
- package/dist/chunk-M4CKEROZ.js +3 -0
- package/dist/chunk-M4CKEROZ.js.map +1 -0
- package/dist/chunk-NWMKWKIF.js +3 -0
- package/dist/chunk-NWMKWKIF.js.map +1 -0
- package/dist/chunk-OZU5OBWU.js +3 -0
- package/dist/chunk-OZU5OBWU.js.map +1 -0
- package/dist/chunk-Q7Y54EZU.js +3 -0
- package/dist/chunk-Q7Y54EZU.js.map +1 -0
- package/dist/chunk-QLNWMFSL.js +3 -0
- package/dist/chunk-QLNWMFSL.js.map +1 -0
- package/dist/chunk-R5U25TSM.js +3 -0
- package/dist/chunk-R5U25TSM.js.map +1 -0
- package/dist/chunk-RH56J7QY.js +3 -0
- package/dist/chunk-RH56J7QY.js.map +1 -0
- package/dist/chunk-RLHBVYHM.js +3 -0
- package/dist/chunk-RLHBVYHM.js.map +1 -0
- package/dist/chunk-RYVXTIMY.js +3 -0
- package/dist/chunk-RYVXTIMY.js.map +1 -0
- package/dist/chunk-U4R5XKLD.js +3 -0
- package/dist/chunk-U4R5XKLD.js.map +1 -0
- package/dist/chunk-V3ZDECK5.js +3 -0
- package/dist/chunk-V3ZDECK5.js.map +1 -0
- package/dist/chunk-VBWVDIIW.js +3 -0
- package/dist/chunk-VBWVDIIW.js.map +1 -0
- package/dist/chunk-VME4UB43.js +3 -0
- package/dist/chunk-VME4UB43.js.map +1 -0
- package/dist/chunk-VNX5AK2O.js +3 -0
- package/dist/chunk-VNX5AK2O.js.map +1 -0
- package/dist/chunk-WKR2RWJ6.js +3 -0
- package/dist/chunk-WKR2RWJ6.js.map +1 -0
- package/dist/chunk-XD5VGPVP.js +3 -0
- package/dist/chunk-XD5VGPVP.js.map +1 -0
- package/dist/chunk-Z3IKGRKN.js +3 -0
- package/dist/chunk-Z3IKGRKN.js.map +1 -0
- package/dist/chunk-Z7QCZ4DQ.js +3 -0
- package/dist/chunk-Z7QCZ4DQ.js.map +1 -0
- package/dist/chunk-ZHMHS6LG.js +3 -0
- package/dist/chunk-ZHMHS6LG.js.map +1 -0
- package/dist/chunk-ZU32Z5HV.js +3 -0
- package/dist/chunk-ZU32Z5HV.js.map +1 -0
- package/dist/clarity-NXNSINKX.js +3 -0
- package/dist/clarity-NXNSINKX.js.map +1 -0
- package/dist/clojure-Y57BKRMA.js +3 -0
- package/dist/clojure-Y57BKRMA.js.map +1 -0
- package/dist/cmake-LVMEA3JZ.js +3 -0
- package/dist/cmake-LVMEA3JZ.js.map +1 -0
- package/dist/cobol-6DNJTKH3.js +3 -0
- package/dist/cobol-6DNJTKH3.js.map +1 -0
- package/dist/code-block-37QAKDTI-M2QCKVTI.js +4 -0
- package/dist/code-block-37QAKDTI-M2QCKVTI.js.map +1 -0
- package/dist/codeowners-JYHOTXQS.js +3 -0
- package/dist/codeowners-JYHOTXQS.js.map +1 -0
- package/dist/codeql-IWWSYR3L.js +3 -0
- package/dist/codeql-IWWSYR3L.js.map +1 -0
- package/dist/coffee-NNDQ5QXC.js +3 -0
- package/dist/coffee-NNDQ5QXC.js.map +1 -0
- package/dist/common-lisp-JKXCDYH3.js +3 -0
- package/dist/common-lisp-JKXCDYH3.js.map +1 -0
- package/dist/coq-BEHPNP64.js +3 -0
- package/dist/coq-BEHPNP64.js.map +1 -0
- package/dist/cpp-IALOHSZA.js +3 -0
- package/dist/cpp-IALOHSZA.js.map +1 -0
- package/dist/crystal-ZDP3FIUI.js +3 -0
- package/dist/crystal-ZDP3FIUI.js.map +1 -0
- package/dist/csharp-ODFBXRGA.js +3 -0
- package/dist/csharp-ODFBXRGA.js.map +1 -0
- package/dist/css-CJGL5AVH.js +3 -0
- package/dist/css-CJGL5AVH.js.map +1 -0
- package/dist/csv-LIK4TU3Z.js +3 -0
- package/dist/csv-LIK4TU3Z.js.map +1 -0
- package/dist/cue-UAAEAKHI.js +3 -0
- package/dist/cue-UAAEAKHI.js.map +1 -0
- package/dist/cypher-SZPVUQZJ.js +3 -0
- package/dist/cypher-SZPVUQZJ.js.map +1 -0
- package/dist/d-VSCA3XHG.js +3 -0
- package/dist/d-VSCA3XHG.js.map +1 -0
- package/dist/dark-plus-LNHXUR7U.js +3 -0
- package/dist/dark-plus-LNHXUR7U.js.map +1 -0
- package/dist/dart-A4PE6FIS.js +3 -0
- package/dist/dart-A4PE6FIS.js.map +1 -0
- package/dist/dax-TILIKSFB.js +3 -0
- package/dist/dax-TILIKSFB.js.map +1 -0
- package/dist/desktop-75KK3D55.js +3 -0
- package/dist/desktop-75KK3D55.js.map +1 -0
- package/dist/diff-HOT6P45M.js +3 -0
- package/dist/diff-HOT6P45M.js.map +1 -0
- package/dist/docker-FF35TY6T.js +3 -0
- package/dist/docker-FF35TY6T.js.map +1 -0
- package/dist/dotenv-FVPPHJI3.js +3 -0
- package/dist/dotenv-FVPPHJI3.js.map +1 -0
- package/dist/dracula-T2CMBBQ5.js +3 -0
- package/dist/dracula-T2CMBBQ5.js.map +1 -0
- package/dist/dracula-soft-SMFRNKX2.js +3 -0
- package/dist/dracula-soft-SMFRNKX2.js.map +1 -0
- package/dist/dream-maker-SYE3ZPSJ.js +3 -0
- package/dist/dream-maker-SYE3ZPSJ.js.map +1 -0
- package/dist/edge-CCLQ2CKA.js +3 -0
- package/dist/edge-CCLQ2CKA.js.map +1 -0
- package/dist/elixir-F6DQGRKA.js +3 -0
- package/dist/elixir-F6DQGRKA.js.map +1 -0
- package/dist/elm-5QRQXDZ6.js +3 -0
- package/dist/elm-5QRQXDZ6.js.map +1 -0
- package/dist/emacs-lisp-NJ4S4OHV.js +3 -0
- package/dist/emacs-lisp-NJ4S4OHV.js.map +1 -0
- package/dist/erb-HGSLHT5Y.js +3 -0
- package/dist/erb-HGSLHT5Y.js.map +1 -0
- package/dist/erlang-APEONNZ6.js +3 -0
- package/dist/erlang-APEONNZ6.js.map +1 -0
- package/dist/everforest-dark-DBZHIUAO.js +3 -0
- package/dist/everforest-dark-DBZHIUAO.js.map +1 -0
- package/dist/everforest-light-TDAGYJUK.js +3 -0
- package/dist/everforest-light-TDAGYJUK.js.map +1 -0
- package/dist/fennel-7OCMFVPS.js +3 -0
- package/dist/fennel-7OCMFVPS.js.map +1 -0
- package/dist/fish-BC46ME2N.js +3 -0
- package/dist/fish-BC46ME2N.js.map +1 -0
- package/dist/fluent-MXZS6EX3.js +3 -0
- package/dist/fluent-MXZS6EX3.js.map +1 -0
- package/dist/fortran-fixed-form-35BC2KX6.js +3 -0
- package/dist/fortran-fixed-form-35BC2KX6.js.map +1 -0
- package/dist/fortran-free-form-AXRAI2HH.js +3 -0
- package/dist/fortran-free-form-AXRAI2HH.js.map +1 -0
- package/dist/fsharp-JKNSQXHD.js +3 -0
- package/dist/fsharp-JKNSQXHD.js.map +1 -0
- package/dist/gdresource-ZMKZGPZV.js +3 -0
- package/dist/gdresource-ZMKZGPZV.js.map +1 -0
- package/dist/gdscript-HNCVXEYB.js +3 -0
- package/dist/gdscript-HNCVXEYB.js.map +1 -0
- package/dist/gdshader-XAJ4QRYP.js +3 -0
- package/dist/gdshader-XAJ4QRYP.js.map +1 -0
- package/dist/genie-HEFVQZAP.js +3 -0
- package/dist/genie-HEFVQZAP.js.map +1 -0
- package/dist/gherkin-OFBRDPXX.js +3 -0
- package/dist/gherkin-OFBRDPXX.js.map +1 -0
- package/dist/git-commit-ZE2M3Q5H.js +3 -0
- package/dist/git-commit-ZE2M3Q5H.js.map +1 -0
- package/dist/git-rebase-3N3INGLU.js +3 -0
- package/dist/git-rebase-3N3INGLU.js.map +1 -0
- package/dist/github-dark-3E25TTAN.js +3 -0
- package/dist/github-dark-3E25TTAN.js.map +1 -0
- package/dist/github-dark-default-KCBFVSS5.js +3 -0
- package/dist/github-dark-default-KCBFVSS5.js.map +1 -0
- package/dist/github-dark-dimmed-WRCBXEVS.js +3 -0
- package/dist/github-dark-dimmed-WRCBXEVS.js.map +1 -0
- package/dist/github-dark-high-contrast-ET7SAHAV.js +3 -0
- package/dist/github-dark-high-contrast-ET7SAHAV.js.map +1 -0
- package/dist/github-light-6FNTZH5H.js +3 -0
- package/dist/github-light-6FNTZH5H.js.map +1 -0
- package/dist/github-light-default-GGTAKNM7.js +3 -0
- package/dist/github-light-default-GGTAKNM7.js.map +1 -0
- package/dist/github-light-high-contrast-LHYKPR5E.js +3 -0
- package/dist/github-light-high-contrast-LHYKPR5E.js.map +1 -0
- package/dist/gleam-NFFQFQLP.js +3 -0
- package/dist/gleam-NFFQFQLP.js.map +1 -0
- package/dist/glimmer-js-RSUW6JYN.js +3 -0
- package/dist/glimmer-js-RSUW6JYN.js.map +1 -0
- package/dist/glimmer-ts-EZGWLX5T.js +3 -0
- package/dist/glimmer-ts-EZGWLX5T.js.map +1 -0
- package/dist/glsl-VJLRYEVJ.js +3 -0
- package/dist/glsl-VJLRYEVJ.js.map +1 -0
- package/dist/gn-UH2XQWLG.js +3 -0
- package/dist/gn-UH2XQWLG.js.map +1 -0
- package/dist/gnuplot-K6IV6NNR.js +3 -0
- package/dist/gnuplot-K6IV6NNR.js.map +1 -0
- package/dist/go-BDV7RR5G.js +3 -0
- package/dist/go-BDV7RR5G.js.map +1 -0
- package/dist/graphql-YEJQLMOO.js +3 -0
- package/dist/graphql-YEJQLMOO.js.map +1 -0
- package/dist/groovy-SX7K3XGL.js +3 -0
- package/dist/groovy-SX7K3XGL.js.map +1 -0
- package/dist/gruvbox-dark-hard-IQWZCHF7.js +3 -0
- package/dist/gruvbox-dark-hard-IQWZCHF7.js.map +1 -0
- package/dist/gruvbox-dark-medium-ARPWF4FS.js +3 -0
- package/dist/gruvbox-dark-medium-ARPWF4FS.js.map +1 -0
- package/dist/gruvbox-dark-soft-ODS6FPID.js +3 -0
- package/dist/gruvbox-dark-soft-ODS6FPID.js.map +1 -0
- package/dist/gruvbox-light-hard-KFA5YFDW.js +3 -0
- package/dist/gruvbox-light-hard-KFA5YFDW.js.map +1 -0
- package/dist/gruvbox-light-medium-MMET4L3Y.js +3 -0
- package/dist/gruvbox-light-medium-MMET4L3Y.js.map +1 -0
- package/dist/gruvbox-light-soft-DBZDERMK.js +3 -0
- package/dist/gruvbox-light-soft-DBZDERMK.js.map +1 -0
- package/dist/hack-3TGPQNR2.js +3 -0
- package/dist/hack-3TGPQNR2.js.map +1 -0
- package/dist/haml-335RVEQR.js +3 -0
- package/dist/haml-335RVEQR.js.map +1 -0
- package/dist/handlebars-73IS6B2J.js +3 -0
- package/dist/handlebars-73IS6B2J.js.map +1 -0
- package/dist/haskell-P5PTJARU.js +3 -0
- package/dist/haskell-P5PTJARU.js.map +1 -0
- package/dist/haxe-RCPSSA3N.js +3 -0
- package/dist/haxe-RCPSSA3N.js.map +1 -0
- package/dist/hcl-AKKZAVC2.js +3 -0
- package/dist/hcl-AKKZAVC2.js.map +1 -0
- package/dist/hjson-REXV6F6N.js +3 -0
- package/dist/hjson-REXV6F6N.js.map +1 -0
- package/dist/hlsl-AJ7VWOVL.js +3 -0
- package/dist/hlsl-AJ7VWOVL.js.map +1 -0
- package/dist/horizon-FSOMPXNP.js +3 -0
- package/dist/horizon-FSOMPXNP.js.map +1 -0
- package/dist/houston-FAQBCORN.js +3 -0
- package/dist/houston-FAQBCORN.js.map +1 -0
- package/dist/html-654LNGWF.js +3 -0
- package/dist/html-654LNGWF.js.map +1 -0
- package/dist/html-derivative-CMQ7BFDQ.js +3 -0
- package/dist/html-derivative-CMQ7BFDQ.js.map +1 -0
- package/dist/http-NEPTRAQZ.js +3 -0
- package/dist/http-NEPTRAQZ.js.map +1 -0
- package/dist/hurl-V6ZX2Q3F.js +3 -0
- package/dist/hurl-V6ZX2Q3F.js.map +1 -0
- package/dist/hxml-5BXJCAAU.js +3 -0
- package/dist/hxml-5BXJCAAU.js.map +1 -0
- package/dist/hy-SB4TMFE7.js +3 -0
- package/dist/hy-SB4TMFE7.js.map +1 -0
- package/dist/imba-Y64MHYWP.js +3 -0
- package/dist/imba-Y64MHYWP.js.map +1 -0
- package/dist/index.d.ts +134 -41
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/ini-J2OP4CNW.js +3 -0
- package/dist/ini-J2OP4CNW.js.map +1 -0
- package/dist/java-MJKJ5GPP.js +3 -0
- package/dist/java-MJKJ5GPP.js.map +1 -0
- package/dist/javascript-IYAGHPR6.js +3 -0
- package/dist/javascript-IYAGHPR6.js.map +1 -0
- package/dist/jinja-WPD26JJ6.js +3 -0
- package/dist/jinja-WPD26JJ6.js.map +1 -0
- package/dist/jison-UYDZQBN5.js +3 -0
- package/dist/jison-UYDZQBN5.js.map +1 -0
- package/dist/json-5V4JESJO.js +3 -0
- package/dist/json-5V4JESJO.js.map +1 -0
- package/dist/json5-7SHUZD3R.js +3 -0
- package/dist/json5-7SHUZD3R.js.map +1 -0
- package/dist/jsonc-X3Z34FN3.js +3 -0
- package/dist/jsonc-X3Z34FN3.js.map +1 -0
- package/dist/jsonl-6I3D2HM6.js +3 -0
- package/dist/jsonl-6I3D2HM6.js.map +1 -0
- package/dist/jsonnet-PZEQIBYV.js +3 -0
- package/dist/jsonnet-PZEQIBYV.js.map +1 -0
- package/dist/jssm-GJJ25IKR.js +3 -0
- package/dist/jssm-GJJ25IKR.js.map +1 -0
- package/dist/jsx-NI2J427C.js +3 -0
- package/dist/jsx-NI2J427C.js.map +1 -0
- package/dist/julia-QPZ7EOS6.js +3 -0
- package/dist/julia-QPZ7EOS6.js.map +1 -0
- package/dist/kanagawa-dragon-JNDVF5RJ.js +3 -0
- package/dist/kanagawa-dragon-JNDVF5RJ.js.map +1 -0
- package/dist/kanagawa-lotus-S7JK6TQ6.js +3 -0
- package/dist/kanagawa-lotus-S7JK6TQ6.js.map +1 -0
- package/dist/kanagawa-wave-QJJIMVEV.js +3 -0
- package/dist/kanagawa-wave-QJJIMVEV.js.map +1 -0
- package/dist/kdl-IA7HA2TL.js +3 -0
- package/dist/kdl-IA7HA2TL.js.map +1 -0
- package/dist/kotlin-CCRMGYMI.js +3 -0
- package/dist/kotlin-CCRMGYMI.js.map +1 -0
- package/dist/kusto-7DW25GYH.js +3 -0
- package/dist/kusto-7DW25GYH.js.map +1 -0
- package/dist/laserwave-YFP3EJVX.js +3 -0
- package/dist/laserwave-YFP3EJVX.js.map +1 -0
- package/dist/latex-F2CTDTFG.js +3 -0
- package/dist/latex-F2CTDTFG.js.map +1 -0
- package/dist/lean-MGJJWBTR.js +3 -0
- package/dist/lean-MGJJWBTR.js.map +1 -0
- package/dist/less-WFSIMX5G.js +3 -0
- package/dist/less-WFSIMX5G.js.map +1 -0
- package/dist/light-plus-NGDHCPUZ.js +3 -0
- package/dist/light-plus-NGDHCPUZ.js.map +1 -0
- package/dist/liquid-7CFNUD3V.js +3 -0
- package/dist/liquid-7CFNUD3V.js.map +1 -0
- package/dist/llvm-CFQSEDXB.js +3 -0
- package/dist/llvm-CFQSEDXB.js.map +1 -0
- package/dist/log-YQNML6LA.js +3 -0
- package/dist/log-YQNML6LA.js.map +1 -0
- package/dist/logo-2PPKBL2M.js +3 -0
- package/dist/logo-2PPKBL2M.js.map +1 -0
- package/dist/lua-RPAMRKNG.js +3 -0
- package/dist/lua-RPAMRKNG.js.map +1 -0
- package/dist/luau-GR2DOH6N.js +3 -0
- package/dist/luau-GR2DOH6N.js.map +1 -0
- package/dist/make-DQQEEPI4.js +3 -0
- package/dist/make-DQQEEPI4.js.map +1 -0
- package/dist/markdown-OC5ILZSY.js +3 -0
- package/dist/markdown-OC5ILZSY.js.map +1 -0
- package/dist/marko-XSB3CTWQ.js +3 -0
- package/dist/marko-XSB3CTWQ.js.map +1 -0
- package/dist/material-theme-H2BHKUKX.js +3 -0
- package/dist/material-theme-H2BHKUKX.js.map +1 -0
- package/dist/material-theme-darker-VENCGWTB.js +3 -0
- package/dist/material-theme-darker-VENCGWTB.js.map +1 -0
- package/dist/material-theme-lighter-SDMLS22W.js +3 -0
- package/dist/material-theme-lighter-SDMLS22W.js.map +1 -0
- package/dist/material-theme-ocean-UHDBRLVF.js +3 -0
- package/dist/material-theme-ocean-UHDBRLVF.js.map +1 -0
- package/dist/material-theme-palenight-3TB2BEET.js +3 -0
- package/dist/material-theme-palenight-3TB2BEET.js.map +1 -0
- package/dist/matlab-YQY6FS4U.js +3 -0
- package/dist/matlab-YQY6FS4U.js.map +1 -0
- package/dist/mcp/index.d.ts +397 -39
- package/dist/mcp/index.js +3 -3
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/react.d.ts +84 -25
- package/dist/mcp/react.js +7 -7
- package/dist/mcp/react.js.map +1 -1
- package/dist/mcp-apps-client-6WEBHSGH.js +3 -0
- package/dist/mcp-apps-client-6WEBHSGH.js.map +1 -0
- package/dist/mdc-TEVTGSC7.js +3 -0
- package/dist/mdc-TEVTGSC7.js.map +1 -0
- package/dist/mdx-ZIH2JLVR.js +3 -0
- package/dist/mdx-ZIH2JLVR.js.map +1 -0
- package/dist/mermaid-4DMBBIKO-NR6M3PLG.js +3 -0
- package/dist/mermaid-4DMBBIKO-NR6M3PLG.js.map +1 -0
- package/dist/mermaid-WPX56SBB.js +3 -0
- package/dist/mermaid-WPX56SBB.js.map +1 -0
- package/dist/min-dark-CQ5WKNT7.js +3 -0
- package/dist/min-dark-CQ5WKNT7.js.map +1 -0
- package/dist/min-light-LZRD4NPR.js +3 -0
- package/dist/min-light-LZRD4NPR.js.map +1 -0
- package/dist/mipsasm-IDXQRZ2B.js +3 -0
- package/dist/mipsasm-IDXQRZ2B.js.map +1 -0
- package/dist/mojo-MH7EQVOK.js +3 -0
- package/dist/mojo-MH7EQVOK.js.map +1 -0
- package/dist/monokai-WHRY6275.js +3 -0
- package/dist/monokai-WHRY6275.js.map +1 -0
- package/dist/moonbit-5JDFTWKE.js +3 -0
- package/dist/moonbit-5JDFTWKE.js.map +1 -0
- package/dist/move-RWSXKYDY.js +3 -0
- package/dist/move-RWSXKYDY.js.map +1 -0
- package/dist/narrat-QJUEXMVV.js +3 -0
- package/dist/narrat-QJUEXMVV.js.map +1 -0
- package/dist/nextflow-2EICNZA3.js +3 -0
- package/dist/nextflow-2EICNZA3.js.map +1 -0
- package/dist/nginx-RIWAEC5Z.js +3 -0
- package/dist/nginx-RIWAEC5Z.js.map +1 -0
- package/dist/night-owl-7PNEW2JB.js +3 -0
- package/dist/night-owl-7PNEW2JB.js.map +1 -0
- package/dist/night-owl-light-GJUYOOJR.js +3 -0
- package/dist/night-owl-light-GJUYOOJR.js.map +1 -0
- package/dist/nim-JPSYX5KC.js +3 -0
- package/dist/nim-JPSYX5KC.js.map +1 -0
- package/dist/nix-XCKQVWCN.js +3 -0
- package/dist/nix-XCKQVWCN.js.map +1 -0
- package/dist/nord-EVGUMUX2.js +3 -0
- package/dist/nord-EVGUMUX2.js.map +1 -0
- package/dist/nushell-QGW7HANA.js +3 -0
- package/dist/nushell-QGW7HANA.js.map +1 -0
- package/dist/objective-c-V7KYXFHL.js +3 -0
- package/dist/objective-c-V7KYXFHL.js.map +1 -0
- package/dist/objective-cpp-NKUEWVGU.js +3 -0
- package/dist/objective-cpp-NKUEWVGU.js.map +1 -0
- package/dist/ocaml-QT2CZJZN.js +3 -0
- package/dist/ocaml-QT2CZJZN.js.map +1 -0
- package/dist/odin-MVMIXBHP.js +3 -0
- package/dist/odin-MVMIXBHP.js.map +1 -0
- package/dist/one-dark-pro-PMTR3SA7.js +3 -0
- package/dist/one-dark-pro-PMTR3SA7.js.map +1 -0
- package/dist/one-light-O7WH4N5X.js +3 -0
- package/dist/one-light-O7WH4N5X.js.map +1 -0
- package/dist/openai-client-HLQSYZJC.js +3 -0
- package/dist/openai-client-HLQSYZJC.js.map +1 -0
- package/dist/openscad-BJDUXUUZ.js +3 -0
- package/dist/openscad-BJDUXUUZ.js.map +1 -0
- package/dist/pascal-HGWEFD6L.js +3 -0
- package/dist/pascal-HGWEFD6L.js.map +1 -0
- package/dist/perl-X4IFZB22.js +3 -0
- package/dist/perl-X4IFZB22.js.map +1 -0
- package/dist/php-3V7EPUAN.js +3 -0
- package/dist/php-3V7EPUAN.js.map +1 -0
- package/dist/pkl-VA5ZK5DW.js +3 -0
- package/dist/pkl-VA5ZK5DW.js.map +1 -0
- package/dist/plastic-FBVUW6NJ.js +3 -0
- package/dist/plastic-FBVUW6NJ.js.map +1 -0
- package/dist/plsql-J7A7YWFH.js +3 -0
- package/dist/plsql-J7A7YWFH.js.map +1 -0
- package/dist/po-5RDI65JX.js +3 -0
- package/dist/po-5RDI65JX.js.map +1 -0
- package/dist/poimandres-WBB7GZAD.js +3 -0
- package/dist/poimandres-WBB7GZAD.js.map +1 -0
- package/dist/polar-VUJL2E7F.js +3 -0
- package/dist/polar-VUJL2E7F.js.map +1 -0
- package/dist/postcss-ESTB5G7N.js +3 -0
- package/dist/postcss-ESTB5G7N.js.map +1 -0
- package/dist/powerquery-ODTEKQCW.js +3 -0
- package/dist/powerquery-ODTEKQCW.js.map +1 -0
- package/dist/powershell-ZOYRAWBJ.js +3 -0
- package/dist/powershell-ZOYRAWBJ.js.map +1 -0
- package/dist/prisma-QHG2W5GE.js +3 -0
- package/dist/prisma-QHG2W5GE.js.map +1 -0
- package/dist/prolog-CSAPG5PH.js +3 -0
- package/dist/prolog-CSAPG5PH.js.map +1 -0
- package/dist/proto-WDNJBTSW.js +3 -0
- package/dist/proto-WDNJBTSW.js.map +1 -0
- package/dist/pug-P7LS6DER.js +3 -0
- package/dist/pug-P7LS6DER.js.map +1 -0
- package/dist/puppet-LHFWHTY3.js +3 -0
- package/dist/puppet-LHFWHTY3.js.map +1 -0
- package/dist/purescript-DUFJP4FY.js +3 -0
- package/dist/purescript-DUFJP4FY.js.map +1 -0
- package/dist/python-5ZNZSNQ2.js +3 -0
- package/dist/python-5ZNZSNQ2.js.map +1 -0
- package/dist/qml-LTAXB6W5.js +3 -0
- package/dist/qml-LTAXB6W5.js.map +1 -0
- package/dist/qmldir-7Z2ODQLM.js +3 -0
- package/dist/qmldir-7Z2ODQLM.js.map +1 -0
- package/dist/qss-FDFD3HQD.js +3 -0
- package/dist/qss-FDFD3HQD.js.map +1 -0
- package/dist/r-6ZOS53WN.js +3 -0
- package/dist/r-6ZOS53WN.js.map +1 -0
- package/dist/racket-7AYZPEUI.js +3 -0
- package/dist/racket-7AYZPEUI.js.map +1 -0
- package/dist/raku-A4F6VHVG.js +3 -0
- package/dist/raku-A4F6VHVG.js.map +1 -0
- package/dist/razor-4QOCK4UD.js +3 -0
- package/dist/razor-4QOCK4UD.js.map +1 -0
- package/dist/red-7KAMONOP.js +3 -0
- package/dist/red-7KAMONOP.js.map +1 -0
- package/dist/reg-FAPHGG66.js +3 -0
- package/dist/reg-FAPHGG66.js.map +1 -0
- package/dist/regexp-5BYLYA2R.js +3 -0
- package/dist/regexp-5BYLYA2R.js.map +1 -0
- package/dist/rel-7DJ7HHU4.js +3 -0
- package/dist/rel-7DJ7HHU4.js.map +1 -0
- package/dist/riscv-YIYJATFG.js +3 -0
- package/dist/riscv-YIYJATFG.js.map +1 -0
- package/dist/ron-HYYMCHTX.js +3 -0
- package/dist/ron-HYYMCHTX.js.map +1 -0
- package/dist/rose-pine-F2G5IHZD.js +3 -0
- package/dist/rose-pine-F2G5IHZD.js.map +1 -0
- package/dist/rose-pine-dawn-ALZ7XGH2.js +3 -0
- package/dist/rose-pine-dawn-ALZ7XGH2.js.map +1 -0
- package/dist/rose-pine-moon-D3K4SWUL.js +3 -0
- package/dist/rose-pine-moon-D3K4SWUL.js.map +1 -0
- package/dist/rosmsg-FDNH6QF7.js +3 -0
- package/dist/rosmsg-FDNH6QF7.js.map +1 -0
- package/dist/rst-WIWCR2KQ.js +3 -0
- package/dist/rst-WIWCR2KQ.js.map +1 -0
- package/dist/ruby-LXZJUMFB.js +3 -0
- package/dist/ruby-LXZJUMFB.js.map +1 -0
- package/dist/rust-V3GMJA2K.js +3 -0
- package/dist/rust-V3GMJA2K.js.map +1 -0
- package/dist/sas-D3G4GB3X.js +3 -0
- package/dist/sas-D3G4GB3X.js.map +1 -0
- package/dist/sass-JTO65AGR.js +3 -0
- package/dist/sass-JTO65AGR.js.map +1 -0
- package/dist/scala-4XQGFSVM.js +3 -0
- package/dist/scala-4XQGFSVM.js.map +1 -0
- package/dist/scheme-CB7AC7IL.js +3 -0
- package/dist/scheme-CB7AC7IL.js.map +1 -0
- package/dist/scss-6SKV4OGI.js +3 -0
- package/dist/scss-6SKV4OGI.js.map +1 -0
- package/dist/sdbl-LKGZFJ46.js +3 -0
- package/dist/sdbl-LKGZFJ46.js.map +1 -0
- package/dist/shaderlab-K536DHEB.js +3 -0
- package/dist/shaderlab-K536DHEB.js.map +1 -0
- package/dist/shellscript-LRNUKUSZ.js +3 -0
- package/dist/shellscript-LRNUKUSZ.js.map +1 -0
- package/dist/shellsession-IBQK7VWQ.js +3 -0
- package/dist/shellsession-IBQK7VWQ.js.map +1 -0
- package/dist/slack-dark-YFPJODWS.js +3 -0
- package/dist/slack-dark-YFPJODWS.js.map +1 -0
- package/dist/slack-ochin-H67AWZOI.js +3 -0
- package/dist/slack-ochin-H67AWZOI.js.map +1 -0
- package/dist/smalltalk-DQOSWAW7.js +3 -0
- package/dist/smalltalk-DQOSWAW7.js.map +1 -0
- package/dist/snazzy-light-OUVS63VK.js +3 -0
- package/dist/snazzy-light-OUVS63VK.js.map +1 -0
- package/dist/solarized-dark-2RCAVEXJ.js +3 -0
- package/dist/solarized-dark-2RCAVEXJ.js.map +1 -0
- package/dist/solarized-light-XFSENHTC.js +3 -0
- package/dist/solarized-light-XFSENHTC.js.map +1 -0
- package/dist/solidity-V2FMZEG4.js +3 -0
- package/dist/solidity-V2FMZEG4.js.map +1 -0
- package/dist/soy-VW3CKXWF.js +3 -0
- package/dist/soy-VW3CKXWF.js.map +1 -0
- package/dist/sparql-L2VKP7YP.js +3 -0
- package/dist/sparql-L2VKP7YP.js.map +1 -0
- package/dist/splunk-KDKHP7GC.js +3 -0
- package/dist/splunk-KDKHP7GC.js.map +1 -0
- package/dist/sql-UF27CALT.js +3 -0
- package/dist/sql-UF27CALT.js.map +1 -0
- package/dist/ssh-config-JC2DQ6ED.js +3 -0
- package/dist/ssh-config-JC2DQ6ED.js.map +1 -0
- package/dist/stata-7PXCUY24.js +3 -0
- package/dist/stata-7PXCUY24.js.map +1 -0
- package/dist/stylus-2L7N3EZD.js +3 -0
- package/dist/stylus-2L7N3EZD.js.map +1 -0
- package/dist/surrealql-ZY3E6XEL.js +3 -0
- package/dist/surrealql-ZY3E6XEL.js.map +1 -0
- package/dist/svelte-Q45XIK2A.js +3 -0
- package/dist/svelte-Q45XIK2A.js.map +1 -0
- package/dist/swift-XBH5HZSC.js +3 -0
- package/dist/swift-XBH5HZSC.js.map +1 -0
- package/dist/synthwave-84-5XXB3K6S.js +3 -0
- package/dist/synthwave-84-5XXB3K6S.js.map +1 -0
- package/dist/system-verilog-VRAUSZY3.js +3 -0
- package/dist/system-verilog-VRAUSZY3.js.map +1 -0
- package/dist/systemd-JOTSGJD4.js +3 -0
- package/dist/systemd-JOTSGJD4.js.map +1 -0
- package/dist/talonscript-NNZRZKOU.js +3 -0
- package/dist/talonscript-NNZRZKOU.js.map +1 -0
- package/dist/tasl-MBFZ4QNC.js +3 -0
- package/dist/tasl-MBFZ4QNC.js.map +1 -0
- package/dist/tcl-4GEDCBVE.js +3 -0
- package/dist/tcl-4GEDCBVE.js.map +1 -0
- package/dist/templ-3XM7DLQ3.js +3 -0
- package/dist/templ-3XM7DLQ3.js.map +1 -0
- package/dist/terraform-XTHOS4UK.js +3 -0
- package/dist/terraform-XTHOS4UK.js.map +1 -0
- package/dist/tex-UXMN2CV7.js +3 -0
- package/dist/tex-UXMN2CV7.js.map +1 -0
- package/dist/tokyo-night-CHJCCBJH.js +3 -0
- package/dist/tokyo-night-CHJCCBJH.js.map +1 -0
- package/dist/toml-J6K55ZSV.js +3 -0
- package/dist/toml-J6K55ZSV.js.map +1 -0
- package/dist/ts-tags-7WGDLEKX.js +3 -0
- package/dist/ts-tags-7WGDLEKX.js.map +1 -0
- package/dist/tsv-DOUJHQDQ.js +3 -0
- package/dist/tsv-DOUJHQDQ.js.map +1 -0
- package/dist/tsx-G5BMVRHK.js +3 -0
- package/dist/tsx-G5BMVRHK.js.map +1 -0
- package/dist/turtle-JHJ7W6U5.js +3 -0
- package/dist/turtle-JHJ7W6U5.js.map +1 -0
- package/dist/twig-C6YWFFZU.js +3 -0
- package/dist/twig-C6YWFFZU.js.map +1 -0
- package/dist/typescript-LMKEAHFC.js +3 -0
- package/dist/typescript-LMKEAHFC.js.map +1 -0
- package/dist/typespec-5CLTIJYY.js +3 -0
- package/dist/typespec-5CLTIJYY.js.map +1 -0
- package/dist/typst-4W4Z436Z.js +3 -0
- package/dist/typst-4W4Z436Z.js.map +1 -0
- package/dist/v-Y4SBDBN7.js +3 -0
- package/dist/v-Y4SBDBN7.js.map +1 -0
- package/dist/vala-UMKT2MFA.js +3 -0
- package/dist/vala-UMKT2MFA.js.map +1 -0
- package/dist/vb-DQ7A5WJU.js +3 -0
- package/dist/vb-DQ7A5WJU.js.map +1 -0
- package/dist/verilog-N6ZF7GQD.js +3 -0
- package/dist/verilog-N6ZF7GQD.js.map +1 -0
- package/dist/vesper-Y5GIEAN4.js +3 -0
- package/dist/vesper-Y5GIEAN4.js.map +1 -0
- package/dist/vhdl-BNYDT37G.js +3 -0
- package/dist/vhdl-BNYDT37G.js.map +1 -0
- package/dist/viml-37RMDCBC.js +3 -0
- package/dist/viml-37RMDCBC.js.map +1 -0
- package/dist/vitesse-black-7TI33KHX.js +3 -0
- package/dist/vitesse-black-7TI33KHX.js.map +1 -0
- package/dist/vitesse-dark-FOB25MRB.js +3 -0
- package/dist/vitesse-dark-FOB25MRB.js.map +1 -0
- package/dist/vitesse-light-4WCNCTCO.js +3 -0
- package/dist/vitesse-light-4WCNCTCO.js.map +1 -0
- package/dist/vue-O6SLORWU.js +3 -0
- package/dist/vue-O6SLORWU.js.map +1 -0
- package/dist/vue-html-ZLTZN573.js +3 -0
- package/dist/vue-html-ZLTZN573.js.map +1 -0
- package/dist/vue-vine-6JKAZ54I.js +3 -0
- package/dist/vue-vine-6JKAZ54I.js.map +1 -0
- package/dist/vyper-GVXF46KD.js +3 -0
- package/dist/vyper-GVXF46KD.js.map +1 -0
- package/dist/wasm-EOPKAILK.js +3 -0
- package/dist/wasm-EOPKAILK.js.map +1 -0
- package/dist/wasm-NTB4O7GL.js +3 -0
- package/dist/wasm-NTB4O7GL.js.map +1 -0
- package/dist/wenyan-W7WB3BC7.js +3 -0
- package/dist/wenyan-W7WB3BC7.js.map +1 -0
- package/dist/wgsl-7GTDVXHG.js +3 -0
- package/dist/wgsl-7GTDVXHG.js.map +1 -0
- package/dist/wikitext-ASAFPAIL.js +3 -0
- package/dist/wikitext-ASAFPAIL.js.map +1 -0
- package/dist/wit-ZBCR6544.js +3 -0
- package/dist/wit-ZBCR6544.js.map +1 -0
- package/dist/wolfram-SZRZOETJ.js +3 -0
- package/dist/wolfram-SZRZOETJ.js.map +1 -0
- package/dist/xml-EBTJCOTU.js +3 -0
- package/dist/xml-EBTJCOTU.js.map +1 -0
- package/dist/xsl-IBYEXWDX.js +3 -0
- package/dist/xsl-IBYEXWDX.js.map +1 -0
- package/dist/yaml-GMVQNECR.js +3 -0
- package/dist/yaml-GMVQNECR.js.map +1 -0
- package/dist/zenscript-O2TZFP4A.js +3 -0
- package/dist/zenscript-O2TZFP4A.js.map +1 -0
- package/dist/zig-ZLGM7IMN.js +3 -0
- package/dist/zig-ZLGM7IMN.js.map +1 -0
- package/package.json +15 -39
- package/dist/mcp-apps-client-Z62VBB36.js +0 -3
- package/dist/mcp-apps-client-Z62VBB36.js.map +0 -1
- package/dist/openai-client-MVV4KJUO.js +0 -3
- package/dist/openai-client-MVV4KJUO.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { UIMessage } from 'ai';
|
|
2
2
|
|
|
3
|
-
type EventType = "tool.called" | "quote.requested" | "quote.succeeded" | "quote.failed" | "link.clicked" | "purchase.completed";
|
|
3
|
+
type EventType = "session.started" | "tool.called" | "quote.requested" | "quote.succeeded" | "quote.failed" | "link.clicked" | "purchase.completed" | "widget_render" | "widget_click" | "widget_link_click" | "widget_error" | "widget_scroll" | "widget_form_field" | "widget_form_submit";
|
|
4
4
|
interface ToolCalledProperties {
|
|
5
5
|
name?: string;
|
|
6
6
|
type?: "pricing" | "product_info" | "availability" | "support" | "other";
|
|
@@ -16,30 +16,7 @@ interface PurchaseCompletedProperties {
|
|
|
16
16
|
amount?: number;
|
|
17
17
|
currency?: string;
|
|
18
18
|
}
|
|
19
|
-
interface
|
|
20
|
-
/**
|
|
21
|
-
* Event type.
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```typescript
|
|
25
|
-
* wani.track({
|
|
26
|
-
* event: 'tool.called',
|
|
27
|
-
* });
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
event: EventType;
|
|
31
|
-
/**
|
|
32
|
-
* Event properties.
|
|
33
|
-
*
|
|
34
|
-
* @example
|
|
35
|
-
* ```typescript
|
|
36
|
-
* wani.track({
|
|
37
|
-
* event: 'tool.called',
|
|
38
|
-
* properties: { name: 'search' },
|
|
39
|
-
* });
|
|
40
|
-
* ```
|
|
41
|
-
*/
|
|
42
|
-
properties?: Record<string, unknown>;
|
|
19
|
+
interface TrackingContext {
|
|
43
20
|
/**
|
|
44
21
|
* MCP request metadata passed through to the API.
|
|
45
22
|
*
|
|
@@ -48,42 +25,114 @@ interface BaseEvent {
|
|
|
48
25
|
* - `@modelcontextprotocol/sdk`: `request.params._meta`
|
|
49
26
|
*/
|
|
50
27
|
meta?: Record<string, unknown>;
|
|
28
|
+
/** Legacy metadata field supported for backward compatibility. */
|
|
29
|
+
metadata?: Record<string, unknown>;
|
|
30
|
+
/** Optional explicit correlation fields. */
|
|
31
|
+
sessionId?: string;
|
|
32
|
+
traceId?: string;
|
|
33
|
+
requestId?: string;
|
|
34
|
+
correlationId?: string;
|
|
35
|
+
externalUserId?: string;
|
|
36
|
+
/** Optional explicit envelope fields. */
|
|
37
|
+
eventId?: string;
|
|
38
|
+
timestamp?: string | Date;
|
|
39
|
+
source?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Modern tracking shape (preferred).
|
|
43
|
+
*/
|
|
44
|
+
interface BaseTrackEvent extends TrackingContext {
|
|
45
|
+
event: EventType;
|
|
46
|
+
properties?: Record<string, unknown>;
|
|
51
47
|
}
|
|
52
48
|
type TrackEvent = ({
|
|
49
|
+
event: "session.started";
|
|
50
|
+
} & BaseTrackEvent) | ({
|
|
53
51
|
event: "tool.called";
|
|
54
|
-
properties
|
|
55
|
-
} &
|
|
52
|
+
properties?: ToolCalledProperties;
|
|
53
|
+
} & BaseTrackEvent) | ({
|
|
56
54
|
event: "quote.requested";
|
|
57
|
-
} &
|
|
55
|
+
} & BaseTrackEvent) | ({
|
|
58
56
|
event: "quote.succeeded";
|
|
59
|
-
properties
|
|
60
|
-
} &
|
|
57
|
+
properties?: QuoteSucceededProperties;
|
|
58
|
+
} & BaseTrackEvent) | ({
|
|
61
59
|
event: "quote.failed";
|
|
62
|
-
} &
|
|
60
|
+
} & BaseTrackEvent) | ({
|
|
63
61
|
event: "link.clicked";
|
|
64
|
-
properties
|
|
65
|
-
} &
|
|
62
|
+
properties?: LinkClickedProperties;
|
|
63
|
+
} & BaseTrackEvent) | ({
|
|
66
64
|
event: "purchase.completed";
|
|
67
|
-
properties
|
|
68
|
-
} &
|
|
65
|
+
properties?: PurchaseCompletedProperties;
|
|
66
|
+
} & BaseTrackEvent);
|
|
69
67
|
/**
|
|
70
|
-
*
|
|
68
|
+
* Legacy tracking shape supported for existing integrations.
|
|
69
|
+
*/
|
|
70
|
+
interface LegacyTrackEvent extends TrackingContext {
|
|
71
|
+
eventType: EventType;
|
|
72
|
+
properties?: Record<string, unknown>;
|
|
73
|
+
toolName?: string;
|
|
74
|
+
toolType?: ToolCalledProperties["type"];
|
|
75
|
+
quoteAmount?: number;
|
|
76
|
+
quoteCurrency?: string;
|
|
77
|
+
linkUrl?: string;
|
|
78
|
+
purchaseAmount?: number;
|
|
79
|
+
purchaseCurrency?: string;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Public track input accepted by `client.track()`.
|
|
83
|
+
*/
|
|
84
|
+
type TrackInput = TrackEvent | LegacyTrackEvent;
|
|
85
|
+
interface TrackingConfig {
|
|
86
|
+
/** Events API V2 endpoint path. */
|
|
87
|
+
endpointPath?: string;
|
|
88
|
+
/** Periodic flush interval for buffered events. */
|
|
89
|
+
flushIntervalMs?: number;
|
|
90
|
+
/** Max events per HTTP batch send. */
|
|
91
|
+
maxBatchSize?: number;
|
|
92
|
+
/** Max in-memory buffer size before oldest items are dropped. */
|
|
93
|
+
maxBufferSize?: number;
|
|
94
|
+
/** Number of retries for retryable failures. */
|
|
95
|
+
maxRetries?: number;
|
|
96
|
+
/** Retry backoff base delay. */
|
|
97
|
+
retryBaseDelayMs?: number;
|
|
98
|
+
/** Retry backoff max delay. */
|
|
99
|
+
retryMaxDelayMs?: number;
|
|
100
|
+
/** Default shutdown timeout when none is provided. */
|
|
101
|
+
shutdownTimeoutMs?: number;
|
|
102
|
+
}
|
|
103
|
+
interface TrackingShutdownOptions {
|
|
104
|
+
timeoutMs?: number;
|
|
105
|
+
}
|
|
106
|
+
interface TrackingShutdownResult {
|
|
107
|
+
timedOut: boolean;
|
|
108
|
+
pendingEvents: number;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Tracking module methods for WaniWaniClient.
|
|
71
112
|
*/
|
|
72
113
|
interface TrackingClient {
|
|
73
114
|
/**
|
|
74
|
-
* Track an event
|
|
75
|
-
*
|
|
115
|
+
* Track an event using modern or legacy input shape.
|
|
116
|
+
* Returns a deterministic event id immediately after enqueue.
|
|
76
117
|
*/
|
|
77
|
-
track: (event:
|
|
118
|
+
track: (event: TrackInput) => Promise<{
|
|
78
119
|
eventId: string;
|
|
79
120
|
}>;
|
|
121
|
+
/**
|
|
122
|
+
* Flush all currently buffered events.
|
|
123
|
+
*/
|
|
124
|
+
flush: () => Promise<void>;
|
|
125
|
+
/**
|
|
126
|
+
* Flush and stop the transport.
|
|
127
|
+
*/
|
|
128
|
+
shutdown: (options?: TrackingShutdownOptions) => Promise<TrackingShutdownResult>;
|
|
80
129
|
}
|
|
81
130
|
|
|
82
131
|
/**
|
|
83
132
|
* WaniWani SDK Client
|
|
84
133
|
*
|
|
85
134
|
* Extends with each module:
|
|
86
|
-
* - TrackingClient: track(),
|
|
135
|
+
* - TrackingClient: track(), flush(), shutdown()
|
|
87
136
|
*
|
|
88
137
|
* Pass this client to framework adapters:
|
|
89
138
|
* - `toNextJsHandler(wani, { ... })` for Next.js route handlers
|
|
@@ -95,6 +144,7 @@ interface WaniWaniClient extends TrackingClient {
|
|
|
95
144
|
interface InternalConfig {
|
|
96
145
|
baseUrl: string;
|
|
97
146
|
apiKey: string | undefined;
|
|
147
|
+
tracking: Required<TrackingConfig>;
|
|
98
148
|
}
|
|
99
149
|
|
|
100
150
|
interface BeforeRequestContext {
|
|
@@ -140,6 +190,11 @@ interface ChatOptions {
|
|
|
140
190
|
interface NextJsHandlerOptions {
|
|
141
191
|
/** Chat handler configuration */
|
|
142
192
|
chat?: ChatOptions;
|
|
193
|
+
/**
|
|
194
|
+
* Enable verbose debug logging for all handler steps.
|
|
195
|
+
* Logs request details, response codes, resolved URLs, and caught errors.
|
|
196
|
+
*/
|
|
197
|
+
debug?: boolean;
|
|
143
198
|
}
|
|
144
199
|
interface NextJsHandlerResult {
|
|
145
200
|
/** GET handler: routes sub-paths (e.g. /resource for MCP widget content) */
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
function b(l,a){return a?(...s)=>console.log(`[waniwani:${l}]`,...s):()=>{}}var h=class extends Error{constructor(s,p){super(s);this.status=p;this.name="WaniWaniError"}};function T(l){let{apiKey:a,baseUrl:s,systemPrompt:p,maxSteps:r,beforeRequest:d,mcpServerUrl:f,resolveConfig:o,debug:u}=l,t=b("chat",u);return async function(g){t("\u2192 POST",g.url);try{let c=await g.json(),n=c.messages??[],e=c.sessionId,v=p;if(t("body parsed \u2014 messages:",n.length,"sessionId:",e??"(none)"),d){t("running beforeRequest hook");try{let i=await d({messages:n,sessionId:e,request:g});i&&(i.messages&&(n=i.messages),i.systemPrompt!==void 0&&(v=i.systemPrompt),i.sessionId!==void 0&&(e=i.sessionId)),t("beforeRequest hook done \u2014 messages:",n.length,"sessionId:",e??"(none)")}catch(i){console.error("[waniwani:chat] beforeRequest hook error:",i);let S=i instanceof h?i.status:400,A=i instanceof Error?i.message:"Request rejected";return t("\u2190 returning",S,"from hook error"),Response.json({error:A},{status:S})}}let y=f??(await o()).mcpServerUrl;t("mcpServerUrl:",y);let x=`${s}/api/mcp/chat`;t("forwarding to",x);let m=await fetch(x,{method:"POST",headers:{"Content-Type":"application/json",...a?{Authorization:`Bearer ${a}`}:{}},body:JSON.stringify({messages:n,mcpServerUrl:y,sessionId:e,systemPrompt:v,maxSteps:r}),signal:g.signal});if(t("upstream response status:",m.status),!m.ok){let i=await m.text().catch(()=>"");return t("\u2190 returning",m.status,"upstream error:",i),new Response(i,{status:m.status,headers:{"Content-Type":m.headers.get("Content-Type")??"application/json"}})}let P=new Headers({"Content-Type":m.headers.get("Content-Type")??"text/event-stream"}),H=m.headers.get("x-session-id");return H&&P.set("x-session-id",H),t("\u2190 streaming response",m.status,"body null?",m.body===null),new Response(m.body,{status:m.status,headers:P})}catch(c){console.error("[waniwani:chat] handler error:",c);let n=c instanceof Error?c.message:"Unknown error occurred",e=c instanceof h?c.status:500;return t("\u2190 returning",e,"from caught error"),Response.json({error:n},{status:e})}}}function E(l){let{mcpServerUrl:a,resolveConfig:s,debug:p}=l,r=b("resource",p);return async function(f){r("\u2192 GET",f.toString());try{let o=f.searchParams.get("uri");if(r("uri:",o??"(missing)"),!o)return r("\u2190 400 missing uri"),Response.json({error:"Missing uri query parameter"},{status:400});let u=a??(await s()).mcpServerUrl;r("mcpServerUrl:",u);let t,C;try{[{createMCPClient:t},{StreamableHTTPClientTransport:C}]=await Promise.all([import("@ai-sdk/mcp"),import("@modelcontextprotocol/sdk/client/streamableHttp.js")]),r("MCP deps loaded")}catch(c){return console.error("[waniwani:resource] MCP deps import failed:",c),Response.json({error:"MCP resource handler requires @ai-sdk/mcp and @modelcontextprotocol/sdk. Install them to enable resource serving."},{status:501})}r("creating MCP client for",u);let g=await t({transport:new C(new URL(u))});try{r("reading resource:",o);let c=await g.readResource({uri:o});r("resource contents count:",c.contents.length);let n=c.contents[0];if(!n)return r("\u2190 404 resource not found"),Response.json({error:"Resource not found"},{status:404});let e;return"text"in n&&typeof n.text=="string"?e=n.text:"blob"in n&&typeof n.blob=="string"&&(e=atob(n.blob)),e?(r("\u2190 200 HTML length:",e.length),new Response(e,{headers:{"Content-Type":"text/html","Cache-Control":"private, max-age=300"}})):(r("\u2190 404 resource has no content, keys:",Object.keys(n)),Response.json({error:"Resource has no content"},{status:404}))}finally{await g.close(),r("MCP client closed")}}catch(o){console.error("[waniwani:resource] handler error:",o);let u=o instanceof Error?o.message:"Unknown error occurred",t=o instanceof h?o.status:500;return r("\u2190 returning",t,"from caught error"),Response.json({error:u},{status:t})}}}var k=300*1e3;function U(l,a){let s=null,p=null;return async function(){if(s&&Date.now()<s.expiresAt)return s.config;if(p)return p;p=(async()=>{if(!a)throw new h("WANIWANI_API_KEY is required for createChatHandler",401);let d=await fetch(`${l}/api/mcp/environments/config`,{method:"GET",headers:{Authorization:`Bearer ${a}`,"Content-Type":"application/json"}});if(!d.ok){let o=await d.text().catch(()=>"");throw new h(`Failed to resolve MCP environment config: ${d.status} ${o}`,d.status)}let f=await d.json();return s={config:f,expiresAt:Date.now()+k},f})();try{return await p}finally{p=null}}}function j(l={}){let{apiKey:a=process.env.WANIWANI_API_KEY,baseUrl:s="https://app.waniwani.ai",systemPrompt:p,maxSteps:r=5,beforeRequest:d,mcpServerUrl:f,debug:o=!1}=l,u=b("router",o),t=U(s,a),C=T({apiKey:a,baseUrl:s,systemPrompt:p,maxSteps:r,beforeRequest:d,mcpServerUrl:f,resolveConfig:t,debug:o}),g=E({mcpServerUrl:f,resolveConfig:t,debug:o});async function c(n){u("\u2192 GET",n.url);try{let e=new URL(n.url),y=e.pathname.replace(/\/$/,"").split("/").filter(Boolean).at(-1);if(u("pathname:",e.pathname,"subRoute:",y),y==="resource"){u("dispatching to resource handler");let x=await g(e);return u("\u2190 resource handler returned",x.status),x}return u("\u2190 404 no matching sub-route for",y),Response.json({error:"Not found"},{status:404})}catch(e){console.error("[waniwani:router] GET handler error:",e);let v=e instanceof Error?e.message:"Unknown error occurred";return u("\u2190 500 from caught error"),Response.json({error:v},{status:500})}}return{handleChat:C,handleResource:g,routeGet:c}}function re(l,a){let{apiKey:s,baseUrl:p}=l._config,r=j({...a?.chat,apiKey:s,baseUrl:p,debug:a?.debug});return{POST:r.handleChat,GET:r.routeGet}}export{re as toNextJsHandler};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/error.ts","../../../src/chat/server/handle-chat.ts","../../../src/chat/server/handle-resource.ts","../../../src/chat/server/mcp-config-resolver.ts","../../../src/chat/server/api-handler.ts","../../../src/chat/server/next-js/index.ts"],"sourcesContent":["// WaniWani SDK - Errors\n\nexport class WaniWaniError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic status: number,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"WaniWaniError\";\n\t}\n}\n","// Handle Chat - Proxies chat requests to the WaniWani API\n\nimport { WaniWaniError } from \"../../error\";\nimport type { ApiHandlerDeps } from \"./@types\";\n\nexport function createChatRequestHandler(deps: ApiHandlerDeps) {\n\tconst {\n\t\tapiKey,\n\t\tbaseUrl,\n\t\tsystemPrompt,\n\t\tmaxSteps,\n\t\tbeforeRequest,\n\t\tmcpServerUrl: mcpServerUrlOverride,\n\t\tresolveConfig,\n\t} = deps;\n\n\treturn async function handleChat(request: Request): Promise<Response> {\n\t\ttry {\n\t\t\t// 1. Parse request body\n\t\t\tconst body = await request.json();\n\t\t\tlet messages = body.messages ?? [];\n\t\t\tlet sessionId: string | undefined = body.sessionId;\n\t\t\tlet effectiveSystemPrompt = systemPrompt;\n\n\t\t\t// 2. Run beforeRequest hook\n\t\t\tif (beforeRequest) {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await beforeRequest({\n\t\t\t\t\t\tmessages,\n\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\trequest,\n\t\t\t\t\t});\n\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\tif (result.messages) messages = result.messages;\n\t\t\t\t\t\tif (result.systemPrompt !== undefined)\n\t\t\t\t\t\t\teffectiveSystemPrompt = result.systemPrompt;\n\t\t\t\t\t\tif (result.sessionId !== undefined) sessionId = result.sessionId;\n\t\t\t\t\t}\n\t\t\t\t} catch (hookError) {\n\t\t\t\t\tconst status =\n\t\t\t\t\t\thookError instanceof WaniWaniError ? hookError.status : 400;\n\t\t\t\t\tconst message =\n\t\t\t\t\t\thookError instanceof Error ? hookError.message : \"Request rejected\";\n\t\t\t\t\treturn Response.json({ error: message }, { status });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// 3. Resolve MCP server URL\n\t\t\tconst mcpServerUrl =\n\t\t\t\tmcpServerUrlOverride ?? (await resolveConfig()).mcpServerUrl;\n\n\t\t\t// 4. Forward to WaniWani API\n\t\t\tconst response = await fetch(`${baseUrl}/api/mcp/chat`, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t...(apiKey ? { Authorization: `Bearer ${apiKey}` } : {}),\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tmessages,\n\t\t\t\t\tmcpServerUrl,\n\t\t\t\t\tsessionId,\n\t\t\t\t\tsystemPrompt: effectiveSystemPrompt,\n\t\t\t\t\tmaxSteps,\n\t\t\t\t}),\n\t\t\t\tsignal: request.signal,\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst errorBody = await response.text().catch(() => \"\");\n\t\t\t\treturn new Response(errorBody, {\n\t\t\t\t\tstatus: response.status,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Content-Type\":\n\t\t\t\t\t\t\tresponse.headers.get(\"Content-Type\") ?? \"application/json\",\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// 5. Stream the response back\n\t\t\tconst headers = new Headers({\n\t\t\t\t\"Content-Type\":\n\t\t\t\t\tresponse.headers.get(\"Content-Type\") ?? \"text/event-stream\",\n\t\t\t});\n\t\t\tconst upstreamSessionId = response.headers.get(\"x-session-id\");\n\t\t\tif (upstreamSessionId) {\n\t\t\t\theaders.set(\"x-session-id\", upstreamSessionId);\n\t\t\t}\n\n\t\t\treturn new Response(response.body, {\n\t\t\t\tstatus: response.status,\n\t\t\t\theaders,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconst message =\n\t\t\t\terror instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\tconst status = error instanceof WaniWaniError ? error.status : 500;\n\n\t\t\treturn Response.json({ error: message }, { status });\n\t\t}\n\t};\n}\n","// Handle Resource - Serves MCP resource content (HTML widgets)\n\nimport { WaniWaniError } from \"../../error\";\nimport type { ResourceHandlerDeps } from \"./@types\";\n\nexport function createResourceHandler(deps: ResourceHandlerDeps) {\n\tconst { mcpServerUrl: mcpServerUrlOverride, resolveConfig } = deps;\n\n\treturn async function handleResource(url: URL): Promise<Response> {\n\t\ttry {\n\t\t\tconst uri = url.searchParams.get(\"uri\");\n\n\t\t\tif (!uri) {\n\t\t\t\treturn Response.json(\n\t\t\t\t\t{ error: \"Missing uri query parameter\" },\n\t\t\t\t\t{ status: 400 },\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst mcpServerUrl =\n\t\t\t\tmcpServerUrlOverride ?? (await resolveConfig()).mcpServerUrl;\n\n\t\t\t// Dynamic imports — these are optional peer dependencies\n\t\t\tlet createMCPClient: typeof import(\"@ai-sdk/mcp\")[\"createMCPClient\"];\n\t\t\tlet StreamableHTTPClientTransport: typeof import(\"@modelcontextprotocol/sdk/client/streamableHttp.js\")[\"StreamableHTTPClientTransport\"];\n\n\t\t\ttry {\n\t\t\t\t[{ createMCPClient }, { StreamableHTTPClientTransport }] =\n\t\t\t\t\tawait Promise.all([\n\t\t\t\t\t\timport(\"@ai-sdk/mcp\"),\n\t\t\t\t\t\timport(\"@modelcontextprotocol/sdk/client/streamableHttp.js\"),\n\t\t\t\t\t]);\n\t\t\t} catch {\n\t\t\t\treturn Response.json(\n\t\t\t\t\t{\n\t\t\t\t\t\terror:\n\t\t\t\t\t\t\t\"MCP resource handler requires @ai-sdk/mcp and @modelcontextprotocol/sdk. Install them to enable resource serving.\",\n\t\t\t\t\t},\n\t\t\t\t\t{ status: 501 },\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst mcp = await createMCPClient({\n\t\t\t\ttransport: new StreamableHTTPClientTransport(new URL(mcpServerUrl)),\n\t\t\t});\n\n\t\t\ttry {\n\t\t\t\tconst result = await mcp.readResource({ uri });\n\n\t\t\t\tconst content = result.contents[0];\n\t\t\t\tif (!content) {\n\t\t\t\t\treturn Response.json(\n\t\t\t\t\t\t{ error: \"Resource not found\" },\n\t\t\t\t\t\t{ status: 404 },\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tlet html: string | undefined;\n\t\t\t\tif (\"text\" in content && typeof content.text === \"string\") {\n\t\t\t\t\thtml = content.text;\n\t\t\t\t} else if (\"blob\" in content && typeof content.blob === \"string\") {\n\t\t\t\t\thtml = atob(content.blob);\n\t\t\t\t}\n\n\t\t\t\tif (!html) {\n\t\t\t\t\treturn Response.json(\n\t\t\t\t\t\t{ error: \"Resource has no content\" },\n\t\t\t\t\t\t{ status: 404 },\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn new Response(html, {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Content-Type\": \"text/html\",\n\t\t\t\t\t\t\"Cache-Control\": \"private, max-age=300\",\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} finally {\n\t\t\t\tawait mcp.close();\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconst message =\n\t\t\t\terror instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\tconst status = error instanceof WaniWaniError ? error.status : 500;\n\t\t\treturn Response.json({ error: message }, { status });\n\t\t}\n\t};\n}\n","// MCP Config Resolver - Lazy-loads and caches MCP environment config\n\nimport { WaniWaniError } from \"../../error\";\n\ninterface McpEnvironmentConfig {\n\tmcpServerUrl: string;\n}\n\nconst TTL_MS = 5 * 60 * 1000; // 5 minutes\n\nexport function createMcpConfigResolver(\n\tbaseUrl: string,\n\tapiKey: string | undefined,\n) {\n\tlet cached: { config: McpEnvironmentConfig; expiresAt: number } | null = null;\n\tlet inflight: Promise<McpEnvironmentConfig> | null = null;\n\n\treturn async function resolve(): Promise<McpEnvironmentConfig> {\n\t\tif (cached && Date.now() < cached.expiresAt) {\n\t\t\treturn cached.config;\n\t\t}\n\n\t\t// Deduplicate concurrent requests (cold start scenario)\n\t\tif (inflight) {\n\t\t\treturn inflight;\n\t\t}\n\n\t\tinflight = (async () => {\n\t\t\tif (!apiKey) {\n\t\t\t\tthrow new WaniWaniError(\n\t\t\t\t\t\"WANIWANI_API_KEY is required for createChatHandler\",\n\t\t\t\t\t401,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst response = await fetch(`${baseUrl}/api/mcp/environments/config`, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders: {\n\t\t\t\t\tAuthorization: `Bearer ${apiKey}`,\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst body = await response.text().catch(() => \"\");\n\t\t\t\tthrow new WaniWaniError(\n\t\t\t\t\t`Failed to resolve MCP environment config: ${response.status} ${body}`,\n\t\t\t\t\tresponse.status,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst data = (await response.json()) as McpEnvironmentConfig;\n\t\t\tcached = { config: data, expiresAt: Date.now() + TTL_MS };\n\t\t\treturn data;\n\t\t})();\n\n\t\ttry {\n\t\t\treturn await inflight;\n\t\t} finally {\n\t\t\tinflight = null;\n\t\t}\n\t};\n}\n","// API Handler - Composes chat and resource handlers into a unified API handler\n\nimport type { ApiHandler, ApiHandlerOptions } from \"./@types\";\nimport { createChatRequestHandler } from \"./handle-chat\";\nimport { createResourceHandler } from \"./handle-resource\";\nimport { createMcpConfigResolver } from \"./mcp-config-resolver\";\n\n/**\n * Create a framework-agnostic API handler for chat and MCP resources.\n *\n * Returns an object with handler methods that can be wired into\n * any framework (Next.js, Hono, Express, etc.):\n *\n * - `handleChat(request)` → proxies chat messages to WaniWani API\n * - `handleResource(url)` → serves MCP resource content (HTML widgets)\n * - `routeGet(request)` → routes GET sub-paths (e.g. /resource)\n *\n * @example\n * ```typescript\n * import { waniwani } from \"@waniwani/sdk\";\n * import { toNextJsHandler } from \"@waniwani/sdk/next-js\";\n *\n * const wani = waniwani();\n *\n * export const { GET, POST } = toNextJsHandler(wani, {\n * chat: { systemPrompt: \"You are a helpful assistant.\" },\n * });\n * ```\n */\nexport function createApiHandler(options: ApiHandlerOptions = {}): ApiHandler {\n\tconst {\n\t\tapiKey = process.env.WANIWANI_API_KEY,\n\t\tbaseUrl = \"https://app.waniwani.ai\",\n\t\tsystemPrompt,\n\t\tmaxSteps = 5,\n\t\tbeforeRequest,\n\t\tmcpServerUrl,\n\t} = options;\n\n\tconst resolveConfig = createMcpConfigResolver(baseUrl, apiKey);\n\n\tconst handleChat = createChatRequestHandler({\n\t\tapiKey,\n\t\tbaseUrl,\n\t\tsystemPrompt,\n\t\tmaxSteps,\n\t\tbeforeRequest,\n\t\tmcpServerUrl,\n\t\tresolveConfig,\n\t});\n\n\tconst handleResource = createResourceHandler({\n\t\tmcpServerUrl,\n\t\tresolveConfig,\n\t});\n\n\tfunction routeGet(request: Request): Promise<Response> {\n\t\tconst url = new URL(request.url);\n\t\tconst segments = url.pathname.replace(/\\/$/, \"\").split(\"/\").filter(Boolean);\n\t\tconst subRoute = segments.at(-1);\n\n\t\tif (subRoute === \"resource\") {\n\t\t\treturn handleResource(url);\n\t\t}\n\n\t\treturn Promise.resolve(\n\t\t\tResponse.json({ error: \"Not found\" }, { status: 404 }),\n\t\t);\n\t}\n\n\treturn { handleChat, handleResource, routeGet };\n}\n","// WaniWani SDK - Next.js Adapter\n\nimport type { WaniWaniClient } from \"../../../types.js\";\nimport { createApiHandler } from \"../api-handler.js\";\nimport type { NextJsHandlerOptions, NextJsHandlerResult } from \"./@types.js\";\n\nexport type { NextJsHandlerOptions, NextJsHandlerResult } from \"./@types.js\";\n\n/**\n * Create Next.js route handlers from a WaniWani client.\n *\n * Returns `{ GET, POST }` for use with catch-all routes.\n * Mount at `app/api/waniwani/[[...path]]/route.ts`:\n *\n * - `POST /api/waniwani` → chat (proxied to WaniWani API)\n * - `GET /api/waniwani/resource?uri=…` → MCP resource content\n *\n * @example\n * ```typescript\n * // app/api/waniwani/[[...path]]/route.ts\n * import { waniwani } from \"@waniwani/sdk\";\n * import { toNextJsHandler } from \"@waniwani/sdk/next-js\";\n *\n * const wani = waniwani();\n *\n * export const { GET, POST } = toNextJsHandler(wani, {\n * chat: {\n * systemPrompt: \"You are a helpful assistant.\",\n * mcpServerUrl: process.env.MCP_SERVER_URL!,\n * },\n * });\n * ```\n */\nexport function toNextJsHandler(\n\tclient: WaniWaniClient,\n\toptions?: NextJsHandlerOptions,\n): NextJsHandlerResult {\n\tconst { apiKey, baseUrl } = client._config;\n\n\tconst handler = createApiHandler({\n\t\t...options?.chat,\n\t\tapiKey,\n\t\tbaseUrl,\n\t});\n\n\treturn {\n\t\tPOST: handler.handleChat,\n\t\tGET: handler.routeGet,\n\t};\n}\n"],"mappings":"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","names":["WaniWaniError","message","status","createChatRequestHandler","deps","apiKey","baseUrl","systemPrompt","maxSteps","beforeRequest","mcpServerUrlOverride","resolveConfig","request","body","messages","sessionId","effectiveSystemPrompt","result","hookError","status","WaniWaniError","message","mcpServerUrl","response","errorBody","headers","upstreamSessionId","error","createResourceHandler","deps","mcpServerUrlOverride","resolveConfig","url","uri","mcpServerUrl","createMCPClient","StreamableHTTPClientTransport","mcp","content","html","error","message","status","WaniWaniError","TTL_MS","createMcpConfigResolver","baseUrl","apiKey","cached","inflight","WaniWaniError","response","body","data","createApiHandler","options","apiKey","baseUrl","systemPrompt","maxSteps","beforeRequest","mcpServerUrl","resolveConfig","createMcpConfigResolver","handleChat","createChatRequestHandler","handleResource","createResourceHandler","routeGet","request","url","toNextJsHandler","client","options","apiKey","baseUrl","handler","createApiHandler"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/logger.ts","../../../src/error.ts","../../../src/chat/server/handle-chat.ts","../../../src/chat/server/handle-resource.ts","../../../src/chat/server/mcp-config-resolver.ts","../../../src/chat/server/api-handler.ts","../../../src/chat/server/next-js/index.ts"],"sourcesContent":["/**\n * Creates a namespaced logger that writes to console.log when enabled,\n * or is a no-op when disabled.\n *\n * @example\n * const log = createLogger(\"chat\", debug);\n * log(\"→ POST\", request.url); // [waniwani:chat] → POST ...\n */\nexport function createLogger(\n\tnamespace: string,\n\tenabled: boolean,\n): (...args: unknown[]) => void {\n\treturn enabled\n\t\t? (...args: unknown[]) => console.log(`[waniwani:${namespace}]`, ...args)\n\t\t: () => {};\n}\n","// WaniWani SDK - Errors\n\nexport class WaniWaniError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic status: number,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"WaniWaniError\";\n\t}\n}\n","// Handle Chat - Proxies chat requests to the WaniWani API\n\nimport { WaniWaniError } from \"../../error\";\nimport { createLogger } from \"../../utils/logger.js\";\nimport type { ApiHandlerDeps } from \"./@types\";\n\nexport function createChatRequestHandler(deps: ApiHandlerDeps) {\n\tconst {\n\t\tapiKey,\n\t\tbaseUrl,\n\t\tsystemPrompt,\n\t\tmaxSteps,\n\t\tbeforeRequest,\n\t\tmcpServerUrl: mcpServerUrlOverride,\n\t\tresolveConfig,\n\t\tdebug,\n\t} = deps;\n\n\tconst log = createLogger(\"chat\", debug);\n\n\treturn async function handleChat(request: Request): Promise<Response> {\n\t\tlog(\"→ POST\", request.url);\n\t\ttry {\n\t\t\t// 1. Parse request body\n\t\t\tconst body = await request.json();\n\t\t\tlet messages = body.messages ?? [];\n\t\t\tlet sessionId: string | undefined = body.sessionId;\n\t\t\tlet effectiveSystemPrompt = systemPrompt;\n\n\t\t\tlog(\n\t\t\t\t\"body parsed — messages:\",\n\t\t\t\tmessages.length,\n\t\t\t\t\"sessionId:\",\n\t\t\t\tsessionId ?? \"(none)\",\n\t\t\t);\n\n\t\t\t// 2. Run beforeRequest hook\n\t\t\tif (beforeRequest) {\n\t\t\t\tlog(\"running beforeRequest hook\");\n\t\t\t\ttry {\n\t\t\t\t\tconst result = await beforeRequest({\n\t\t\t\t\t\tmessages,\n\t\t\t\t\t\tsessionId,\n\t\t\t\t\t\trequest,\n\t\t\t\t\t});\n\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\tif (result.messages) messages = result.messages;\n\t\t\t\t\t\tif (result.systemPrompt !== undefined)\n\t\t\t\t\t\t\teffectiveSystemPrompt = result.systemPrompt;\n\t\t\t\t\t\tif (result.sessionId !== undefined) sessionId = result.sessionId;\n\t\t\t\t\t}\n\t\t\t\t\tlog(\n\t\t\t\t\t\t\"beforeRequest hook done — messages:\",\n\t\t\t\t\t\tmessages.length,\n\t\t\t\t\t\t\"sessionId:\",\n\t\t\t\t\t\tsessionId ?? \"(none)\",\n\t\t\t\t\t);\n\t\t\t\t} catch (hookError) {\n\t\t\t\t\tconsole.error(\"[waniwani:chat] beforeRequest hook error:\", hookError);\n\t\t\t\t\tconst status =\n\t\t\t\t\t\thookError instanceof WaniWaniError ? hookError.status : 400;\n\t\t\t\t\tconst message =\n\t\t\t\t\t\thookError instanceof Error ? hookError.message : \"Request rejected\";\n\t\t\t\t\tlog(\"← returning\", status, \"from hook error\");\n\t\t\t\t\treturn Response.json({ error: message }, { status });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// 3. Resolve MCP server URL\n\t\t\tconst mcpServerUrl =\n\t\t\t\tmcpServerUrlOverride ?? (await resolveConfig()).mcpServerUrl;\n\t\t\tlog(\"mcpServerUrl:\", mcpServerUrl);\n\n\t\t\t// 4. Forward to WaniWani API\n\t\t\tconst upstreamUrl = `${baseUrl}/api/mcp/chat`;\n\t\t\tlog(\"forwarding to\", upstreamUrl);\n\t\t\tconst response = await fetch(upstreamUrl, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t...(apiKey ? { Authorization: `Bearer ${apiKey}` } : {}),\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tmessages,\n\t\t\t\t\tmcpServerUrl,\n\t\t\t\t\tsessionId,\n\t\t\t\t\tsystemPrompt: effectiveSystemPrompt,\n\t\t\t\t\tmaxSteps,\n\t\t\t\t}),\n\t\t\t\tsignal: request.signal,\n\t\t\t});\n\n\t\t\tlog(\"upstream response status:\", response.status);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst errorBody = await response.text().catch(() => \"\");\n\t\t\t\tlog(\"← returning\", response.status, \"upstream error:\", errorBody);\n\t\t\t\treturn new Response(errorBody, {\n\t\t\t\t\tstatus: response.status,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Content-Type\":\n\t\t\t\t\t\t\tresponse.headers.get(\"Content-Type\") ?? \"application/json\",\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// 5. Stream the response back\n\t\t\tconst headers = new Headers({\n\t\t\t\t\"Content-Type\":\n\t\t\t\t\tresponse.headers.get(\"Content-Type\") ?? \"text/event-stream\",\n\t\t\t});\n\t\t\tconst upstreamSessionId = response.headers.get(\"x-session-id\");\n\t\t\tif (upstreamSessionId) {\n\t\t\t\theaders.set(\"x-session-id\", upstreamSessionId);\n\t\t\t}\n\n\t\t\tlog(\n\t\t\t\t\"← streaming response\",\n\t\t\t\tresponse.status,\n\t\t\t\t\"body null?\",\n\t\t\t\tresponse.body === null,\n\t\t\t);\n\t\t\treturn new Response(response.body, {\n\t\t\t\tstatus: response.status,\n\t\t\t\theaders,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[waniwani:chat] handler error:\", error);\n\t\t\tconst message =\n\t\t\t\terror instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\tconst status = error instanceof WaniWaniError ? error.status : 500;\n\t\t\tlog(\"← returning\", status, \"from caught error\");\n\t\t\treturn Response.json({ error: message }, { status });\n\t\t}\n\t};\n}\n","// Handle Resource - Serves MCP resource content (HTML widgets)\n\nimport { WaniWaniError } from \"../../error\";\nimport { createLogger } from \"../../utils/logger.js\";\nimport type { ResourceHandlerDeps } from \"./@types\";\n\nexport function createResourceHandler(deps: ResourceHandlerDeps) {\n\tconst { mcpServerUrl: mcpServerUrlOverride, resolveConfig, debug } = deps;\n\n\tconst log = createLogger(\"resource\", debug);\n\n\treturn async function handleResource(url: URL): Promise<Response> {\n\t\tlog(\"→ GET\", url.toString());\n\t\ttry {\n\t\t\tconst uri = url.searchParams.get(\"uri\");\n\t\t\tlog(\"uri:\", uri ?? \"(missing)\");\n\n\t\t\tif (!uri) {\n\t\t\t\tlog(\"← 400 missing uri\");\n\t\t\t\treturn Response.json(\n\t\t\t\t\t{ error: \"Missing uri query parameter\" },\n\t\t\t\t\t{ status: 400 },\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst mcpServerUrl =\n\t\t\t\tmcpServerUrlOverride ?? (await resolveConfig()).mcpServerUrl;\n\t\t\tlog(\"mcpServerUrl:\", mcpServerUrl);\n\n\t\t\t// Dynamic imports — these are optional peer dependencies\n\t\t\tlet createMCPClient: typeof import(\"@ai-sdk/mcp\")[\"createMCPClient\"];\n\t\t\tlet StreamableHTTPClientTransport: typeof import(\"@modelcontextprotocol/sdk/client/streamableHttp.js\")[\"StreamableHTTPClientTransport\"];\n\n\t\t\ttry {\n\t\t\t\t[{ createMCPClient }, { StreamableHTTPClientTransport }] =\n\t\t\t\t\tawait Promise.all([\n\t\t\t\t\t\timport(\"@ai-sdk/mcp\"),\n\t\t\t\t\t\timport(\"@modelcontextprotocol/sdk/client/streamableHttp.js\"),\n\t\t\t\t\t]);\n\t\t\t\tlog(\"MCP deps loaded\");\n\t\t\t} catch (importError) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t\"[waniwani:resource] MCP deps import failed:\",\n\t\t\t\t\timportError,\n\t\t\t\t);\n\t\t\t\treturn Response.json(\n\t\t\t\t\t{\n\t\t\t\t\t\terror:\n\t\t\t\t\t\t\t\"MCP resource handler requires @ai-sdk/mcp and @modelcontextprotocol/sdk. Install them to enable resource serving.\",\n\t\t\t\t\t},\n\t\t\t\t\t{ status: 501 },\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tlog(\"creating MCP client for\", mcpServerUrl);\n\t\t\tconst mcp = await createMCPClient({\n\t\t\t\ttransport: new StreamableHTTPClientTransport(new URL(mcpServerUrl)),\n\t\t\t});\n\n\t\t\ttry {\n\t\t\t\tlog(\"reading resource:\", uri);\n\t\t\t\tconst result = await mcp.readResource({ uri });\n\t\t\t\tlog(\"resource contents count:\", result.contents.length);\n\n\t\t\t\tconst content = result.contents[0];\n\t\t\t\tif (!content) {\n\t\t\t\t\tlog(\"← 404 resource not found\");\n\t\t\t\t\treturn Response.json(\n\t\t\t\t\t\t{ error: \"Resource not found\" },\n\t\t\t\t\t\t{ status: 404 },\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tlet html: string | undefined;\n\t\t\t\tif (\"text\" in content && typeof content.text === \"string\") {\n\t\t\t\t\thtml = content.text;\n\t\t\t\t} else if (\"blob\" in content && typeof content.blob === \"string\") {\n\t\t\t\t\thtml = atob(content.blob);\n\t\t\t\t}\n\n\t\t\t\tif (!html) {\n\t\t\t\t\tlog(\"← 404 resource has no content, keys:\", Object.keys(content));\n\t\t\t\t\treturn Response.json(\n\t\t\t\t\t\t{ error: \"Resource has no content\" },\n\t\t\t\t\t\t{ status: 404 },\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tlog(\"← 200 HTML length:\", html.length);\n\t\t\t\treturn new Response(html, {\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"Content-Type\": \"text/html\",\n\t\t\t\t\t\t\"Cache-Control\": \"private, max-age=300\",\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} finally {\n\t\t\t\tawait mcp.close();\n\t\t\t\tlog(\"MCP client closed\");\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[waniwani:resource] handler error:\", error);\n\t\t\tconst message =\n\t\t\t\terror instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\tconst status = error instanceof WaniWaniError ? error.status : 500;\n\t\t\tlog(\"← returning\", status, \"from caught error\");\n\t\t\treturn Response.json({ error: message }, { status });\n\t\t}\n\t};\n}\n","// MCP Config Resolver - Lazy-loads and caches MCP environment config\n\nimport { WaniWaniError } from \"../../error\";\n\ninterface McpEnvironmentConfig {\n\tmcpServerUrl: string;\n}\n\nconst TTL_MS = 5 * 60 * 1000; // 5 minutes\n\nexport function createMcpConfigResolver(\n\tbaseUrl: string,\n\tapiKey: string | undefined,\n) {\n\tlet cached: { config: McpEnvironmentConfig; expiresAt: number } | null = null;\n\tlet inflight: Promise<McpEnvironmentConfig> | null = null;\n\n\treturn async function resolve(): Promise<McpEnvironmentConfig> {\n\t\tif (cached && Date.now() < cached.expiresAt) {\n\t\t\treturn cached.config;\n\t\t}\n\n\t\t// Deduplicate concurrent requests (cold start scenario)\n\t\tif (inflight) {\n\t\t\treturn inflight;\n\t\t}\n\n\t\tinflight = (async () => {\n\t\t\tif (!apiKey) {\n\t\t\t\tthrow new WaniWaniError(\n\t\t\t\t\t\"WANIWANI_API_KEY is required for createChatHandler\",\n\t\t\t\t\t401,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst response = await fetch(`${baseUrl}/api/mcp/environments/config`, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders: {\n\t\t\t\t\tAuthorization: `Bearer ${apiKey}`,\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst body = await response.text().catch(() => \"\");\n\t\t\t\tthrow new WaniWaniError(\n\t\t\t\t\t`Failed to resolve MCP environment config: ${response.status} ${body}`,\n\t\t\t\t\tresponse.status,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst data = (await response.json()) as McpEnvironmentConfig;\n\t\t\tcached = { config: data, expiresAt: Date.now() + TTL_MS };\n\t\t\treturn data;\n\t\t})();\n\n\t\ttry {\n\t\t\treturn await inflight;\n\t\t} finally {\n\t\t\tinflight = null;\n\t\t}\n\t};\n}\n","// API Handler - Composes chat and resource handlers into a unified API handler\n\nimport { createLogger } from \"../../utils/logger.js\";\nimport type { ApiHandler, ApiHandlerOptions } from \"./@types\";\nimport { createChatRequestHandler } from \"./handle-chat\";\nimport { createResourceHandler } from \"./handle-resource\";\nimport { createMcpConfigResolver } from \"./mcp-config-resolver\";\n\n/**\n * Create a framework-agnostic API handler for chat and MCP resources.\n *\n * Returns an object with handler methods that can be wired into\n * any framework (Next.js, Hono, Express, etc.):\n *\n * - `handleChat(request)` → proxies chat messages to WaniWani API\n * - `handleResource(url)` → serves MCP resource content (HTML widgets)\n * - `routeGet(request)` → routes GET sub-paths (e.g. /resource)\n *\n * @example\n * ```typescript\n * import { waniwani } from \"@waniwani/sdk\";\n * import { toNextJsHandler } from \"@waniwani/sdk/next-js\";\n *\n * const wani = waniwani();\n *\n * export const { GET, POST } = toNextJsHandler(wani, {\n * chat: { systemPrompt: \"You are a helpful assistant.\" },\n * });\n * ```\n */\nexport function createApiHandler(options: ApiHandlerOptions = {}): ApiHandler {\n\tconst {\n\t\tapiKey = process.env.WANIWANI_API_KEY,\n\t\tbaseUrl = \"https://app.waniwani.ai\",\n\t\tsystemPrompt,\n\t\tmaxSteps = 5,\n\t\tbeforeRequest,\n\t\tmcpServerUrl,\n\t\tdebug = false,\n\t} = options;\n\n\tconst log = createLogger(\"router\", debug);\n\n\tconst resolveConfig = createMcpConfigResolver(baseUrl, apiKey);\n\n\tconst handleChat = createChatRequestHandler({\n\t\tapiKey,\n\t\tbaseUrl,\n\t\tsystemPrompt,\n\t\tmaxSteps,\n\t\tbeforeRequest,\n\t\tmcpServerUrl,\n\t\tresolveConfig,\n\t\tdebug,\n\t});\n\n\tconst handleResource = createResourceHandler({\n\t\tmcpServerUrl,\n\t\tresolveConfig,\n\t\tdebug,\n\t});\n\n\tasync function routeGet(request: Request): Promise<Response> {\n\t\tlog(\"→ GET\", request.url);\n\t\ttry {\n\t\t\tconst url = new URL(request.url);\n\t\t\tconst segments = url.pathname\n\t\t\t\t.replace(/\\/$/, \"\")\n\t\t\t\t.split(\"/\")\n\t\t\t\t.filter(Boolean);\n\t\t\tconst subRoute = segments.at(-1);\n\t\t\tlog(\"pathname:\", url.pathname, \"subRoute:\", subRoute);\n\n\t\t\tif (subRoute === \"resource\") {\n\t\t\t\tlog(\"dispatching to resource handler\");\n\t\t\t\tconst response = await handleResource(url);\n\t\t\t\tlog(\"← resource handler returned\", response.status);\n\t\t\t\treturn response;\n\t\t\t}\n\n\t\t\tlog(\"← 404 no matching sub-route for\", subRoute);\n\t\t\treturn Response.json({ error: \"Not found\" }, { status: 404 });\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[waniwani:router] GET handler error:\", error);\n\t\t\tconst message =\n\t\t\t\terror instanceof Error ? error.message : \"Unknown error occurred\";\n\t\t\tlog(\"← 500 from caught error\");\n\t\t\treturn Response.json({ error: message }, { status: 500 });\n\t\t}\n\t}\n\n\treturn { handleChat, handleResource, routeGet };\n}\n","// WaniWani SDK - Next.js Adapter\n\nimport type { WaniWaniClient } from \"../../../types.js\";\nimport { createApiHandler } from \"../api-handler.js\";\nimport type { NextJsHandlerOptions, NextJsHandlerResult } from \"./@types.js\";\n\nexport type { NextJsHandlerOptions, NextJsHandlerResult } from \"./@types.js\";\n\n/**\n * Create Next.js route handlers from a WaniWani client.\n *\n * Returns `{ GET, POST }` for use with catch-all routes.\n * Mount at `app/api/waniwani/[[...path]]/route.ts`:\n *\n * - `POST /api/waniwani` → chat (proxied to WaniWani API)\n * - `GET /api/waniwani/resource?uri=…` → MCP resource content\n *\n * @example\n * ```typescript\n * // app/api/waniwani/[[...path]]/route.ts\n * import { waniwani } from \"@waniwani/sdk\";\n * import { toNextJsHandler } from \"@waniwani/sdk/next-js\";\n *\n * const wani = waniwani();\n *\n * export const { GET, POST } = toNextJsHandler(wani, {\n * chat: {\n * systemPrompt: \"You are a helpful assistant.\",\n * mcpServerUrl: process.env.MCP_SERVER_URL!,\n * },\n * });\n * ```\n */\nexport function toNextJsHandler(\n\tclient: WaniWaniClient,\n\toptions?: NextJsHandlerOptions,\n): NextJsHandlerResult {\n\tconst { apiKey, baseUrl } = client._config;\n\n\tconst handler = createApiHandler({\n\t\t...options?.chat,\n\t\tapiKey,\n\t\tbaseUrl,\n\t\tdebug: options?.debug,\n\t});\n\n\treturn {\n\t\tPOST: handler.handleChat,\n\t\tGET: handler.routeGet,\n\t};\n}\n"],"mappings":"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","names":["createLogger","namespace","enabled","args","WaniWaniError","message","status","createChatRequestHandler","deps","apiKey","baseUrl","systemPrompt","maxSteps","beforeRequest","mcpServerUrlOverride","resolveConfig","debug","log","createLogger","request","body","messages","sessionId","effectiveSystemPrompt","result","hookError","status","WaniWaniError","message","mcpServerUrl","upstreamUrl","response","errorBody","headers","upstreamSessionId","error","createResourceHandler","deps","mcpServerUrlOverride","resolveConfig","debug","log","createLogger","url","uri","mcpServerUrl","createMCPClient","StreamableHTTPClientTransport","importError","mcp","result","content","html","error","message","status","WaniWaniError","TTL_MS","createMcpConfigResolver","baseUrl","apiKey","cached","inflight","WaniWaniError","response","body","data","createApiHandler","options","apiKey","baseUrl","systemPrompt","maxSteps","beforeRequest","mcpServerUrl","debug","log","createLogger","resolveConfig","createMcpConfigResolver","handleChat","createChatRequestHandler","handleResource","createResourceHandler","routeGet","request","url","subRoute","response","error","message","toNextJsHandler","client","options","apiKey","baseUrl","handler","createApiHandler"]}
|
|
@@ -53,6 +53,11 @@ interface ApiHandlerOptions {
|
|
|
53
53
|
* Useful for development/testing when pointing to a local MCP server.
|
|
54
54
|
*/
|
|
55
55
|
mcpServerUrl?: string;
|
|
56
|
+
/**
|
|
57
|
+
* Enable verbose debug logging for all handler steps.
|
|
58
|
+
* Logs request details, response codes, resolved URLs, and caught errors.
|
|
59
|
+
*/
|
|
60
|
+
debug?: boolean;
|
|
56
61
|
}
|
|
57
62
|
interface ApiHandler {
|
|
58
63
|
/** Proxies chat messages to the WaniWani API */
|
package/dist/chat/styles.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--ww-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ww-color-blue-400:oklch(70.7% .165 254.624);--ww-spacing:.25rem;--ww-text-xs:.75rem;--ww-text-xs--line-height:calc(1/.75);--ww-text-sm:.875rem;--ww-text-sm--line-height:calc(1.25/.875);--ww-text-base:1rem;--ww-text-base--line-height:calc(1.5/1);--ww-font-weight-medium:500;--ww-font-weight-semibold:600;--ww-tracking-wide:.025em;--ww-radius-md:.375rem;--ww-radius-lg:.5rem;--ww-ease-out:cubic-bezier(0,0,.2,1);--ww-animate-spin:spin 1s linear infinite;--ww-animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--ww-blur-xl:24px;--ww-default-transition-duration:.15s;--ww-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--ww-default-font-family:var(--ww-font-sans,system-ui,-apple-system,"Segoe UI",sans-serif);--ww-default-mono-font-family:var(--ww-font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--ww-default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--ww-default-font-feature-settings,normal);font-variation-settings:var(--ww-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--ww-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--ww-default-mono-font-feature-settings,normal);font-variation-settings:var(--ww-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.ww\:pointer-events-none{pointer-events:none}.ww\:absolute{position:absolute}.ww\:relative{position:relative}.ww\:bottom-4{bottom:calc(var(--ww-spacing)*4)}.ww\:left-\[50\%\]{left:50%}.ww\:mt-0\.5{margin-top:calc(var(--ww-spacing)*.5)}.ww\:mt-2{margin-top:calc(var(--ww-spacing)*2)}.ww\:mb-2{margin-bottom:calc(var(--ww-spacing)*2)}.ww\:mb-4{margin-bottom:calc(var(--ww-spacing)*4)}.ww\:ml-auto{margin-left:auto}.ww\:line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.ww\:contents{display:contents}.ww\:flex{display:flex}.ww\:grid{display:grid}.ww\:hidden{display:none}.ww\:inline-block{display:inline-block}.ww\:inline-flex{display:inline-flex}.ww\:field-sizing-content{field-sizing:content}.ww\:size-2{width:calc(var(--ww-spacing)*2);height:calc(var(--ww-spacing)*2)}.ww\:size-2\.5{width:calc(var(--ww-spacing)*2.5);height:calc(var(--ww-spacing)*2.5)}.ww\:size-3{width:calc(var(--ww-spacing)*3);height:calc(var(--ww-spacing)*3)}.ww\:size-3\.5{width:calc(var(--ww-spacing)*3.5);height:calc(var(--ww-spacing)*3.5)}.ww\:size-4{width:calc(var(--ww-spacing)*4);height:calc(var(--ww-spacing)*4)}.ww\:size-5{width:calc(var(--ww-spacing)*5);height:calc(var(--ww-spacing)*5)}.ww\:size-7{width:calc(var(--ww-spacing)*7);height:calc(var(--ww-spacing)*7)}.ww\:size-8{width:calc(var(--ww-spacing)*8);height:calc(var(--ww-spacing)*8)}.ww\:size-9{width:calc(var(--ww-spacing)*9);height:calc(var(--ww-spacing)*9)}.ww\:size-auto{width:auto;height:auto}.ww\:size-full{width:100%;height:100%}.ww\:h-7{height:calc(var(--ww-spacing)*7)}.ww\:h-8{height:calc(var(--ww-spacing)*8)}.ww\:h-9{height:calc(var(--ww-spacing)*9)}.ww\:h-16{height:calc(var(--ww-spacing)*16)}.ww\:h-auto{height:auto}.ww\:max-h-0{max-height:calc(var(--ww-spacing)*0)}.ww\:max-h-48{max-height:calc(var(--ww-spacing)*48)}.ww\:min-h-0{min-height:calc(var(--ww-spacing)*0)}.ww\:min-h-16{min-height:calc(var(--ww-spacing)*16)}.ww\:w-fit{width:fit-content}.ww\:w-full{width:100%}.ww\:max-w-24{max-width:calc(var(--ww-spacing)*24)}.ww\:max-w-32{max-width:calc(var(--ww-spacing)*32)}.ww\:max-w-\[95\%\]{max-width:95%}.ww\:max-w-full{max-width:100%}.ww\:min-w-0{min-width:calc(var(--ww-spacing)*0)}.ww\:flex-1{flex:1}.ww\:shrink-0{flex-shrink:0}.ww\:grow{flex-grow:1}.ww\:translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.ww\:translate-y-0{--tw-translate-y:calc(var(--ww-spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.ww\:translate-y-2{--tw-translate-y:calc(var(--ww-spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y)}.ww\:rotate-90{rotate:90deg}.ww\:rotate-180{rotate:180deg}.ww\:animate-\[ww-fade-in_0\.2s_ease-out_both\]{animation:.2s ease-out both ww-fade-in}.ww\:animate-pulse{animation:var(--ww-animate-pulse)}.ww\:animate-spin{animation:var(--ww-animate-spin)}.ww\:cursor-pointer{cursor:pointer}.ww\:resize-none{resize:none}.ww\:grid-rows-\[0fr\]{grid-template-rows:0fr}.ww\:grid-rows-\[1fr\]{grid-template-rows:1fr}.ww\:flex-col{flex-direction:column}.ww\:flex-wrap{flex-wrap:wrap}.ww\:items-center{align-items:center}.ww\:items-start{align-items:flex-start}.ww\:justify-between{justify-content:space-between}.ww\:justify-center{justify-content:center}.ww\:justify-end{justify-content:flex-end}.ww\:gap-1{gap:calc(var(--ww-spacing)*1)}.ww\:gap-1\.5{gap:calc(var(--ww-spacing)*1.5)}.ww\:gap-2{gap:calc(var(--ww-spacing)*2)}.ww\:gap-3{gap:calc(var(--ww-spacing)*3)}.ww\:gap-8{gap:calc(var(--ww-spacing)*8)}:where(.ww\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ww-spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ww-spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.ww\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ww-spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ww-spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}.ww\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ww\:overflow-hidden{overflow:hidden}.ww\:overflow-x-auto{overflow-x:auto}.ww\:overflow-y-hidden{overflow-y:hidden}.ww\:rounded{border-radius:var(--ww-radius,16px)}.ww\:rounded-\[var\(--ww-radius\)\]{border-radius:var(--ww-radius)}.ww\:rounded-full{border-radius:3.40282e38px}.ww\:rounded-lg{border-radius:var(--ww-radius-lg)}.ww\:rounded-md{border-radius:var(--ww-radius-md)}.ww\:rounded-none{border-radius:0}.ww\:border{border-style:var(--tw-border-style);border-width:1px}.ww\:border-0{border-style:var(--tw-border-style);border-width:0}.ww\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.ww\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ww\:border-border{border-color:var(--ww-color-border,#e5e7eb)}.ww\:border-muted-foreground\/50{border-color:var(--ww-color-muted-foreground,#6b7280)}@supports (color:color-mix(in lab, red, red)){.ww\:border-muted-foreground\/50{border-color:color-mix(in oklab,var(--ww-color-muted-foreground,#6b7280)50%,transparent)}}.ww\:bg-accent{background-color:var(--ww-color-accent,#f3f4f6)}.ww\:bg-background,.ww\:bg-background\/20{background-color:var(--ww-color-background,#fff)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-background\/20{background-color:color-mix(in oklab,var(--ww-color-background,#fff)20%,transparent)}}.ww\:bg-background\/80{background-color:var(--ww-color-background,#fff)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-background\/80{background-color:color-mix(in oklab,var(--ww-color-background,#fff)80%,transparent)}}.ww\:bg-foreground{background-color:var(--ww-color-foreground,#1f2937)}.ww\:bg-muted{background-color:var(--ww-color-muted,#f1f5f9)}.ww\:bg-muted-foreground\/60{background-color:var(--ww-color-muted-foreground,#6b7280)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-muted-foreground\/60{background-color:color-mix(in oklab,var(--ww-color-muted-foreground,#6b7280)60%,transparent)}}.ww\:bg-muted\/50{background-color:var(--ww-color-muted,#f1f5f9)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-muted\/50{background-color:color-mix(in oklab,var(--ww-color-muted,#f1f5f9)50%,transparent)}}.ww\:bg-primary{background-color:var(--ww-color-primary,#6366f1)}.ww\:bg-status{background-color:var(--ww-color-status,#22c55e)}.ww\:bg-tool-card{background-color:var(--ww-color-tool-card,#f4f4f5)}.ww\:bg-transparent{background-color:#0000}.ww\:object-cover{object-fit:cover}.ww\:p-1{padding:calc(var(--ww-spacing)*1)}.ww\:p-3{padding:calc(var(--ww-spacing)*3)}.ww\:p-4{padding:calc(var(--ww-spacing)*4)}.ww\:px-1\.5{padding-inline:calc(var(--ww-spacing)*1.5)}.ww\:px-2{padding-inline:calc(var(--ww-spacing)*2)}.ww\:px-3{padding-inline:calc(var(--ww-spacing)*3)}.ww\:px-4{padding-inline:calc(var(--ww-spacing)*4)}.ww\:py-0\.5{padding-block:calc(var(--ww-spacing)*.5)}.ww\:py-1{padding-block:calc(var(--ww-spacing)*1)}.ww\:py-1\.5{padding-block:calc(var(--ww-spacing)*1.5)}.ww\:py-2{padding-block:calc(var(--ww-spacing)*2)}.ww\:py-2\.5{padding-block:calc(var(--ww-spacing)*2.5)}.ww\:py-3{padding-block:calc(var(--ww-spacing)*3)}.ww\:pt-2\.5{padding-top:calc(var(--ww-spacing)*2.5)}.ww\:pt-3{padding-top:calc(var(--ww-spacing)*3)}.ww\:pb-1\.5{padding-bottom:calc(var(--ww-spacing)*1.5)}.ww\:pb-3{padding-bottom:calc(var(--ww-spacing)*3)}.ww\:text-left{text-align:left}.ww\:font-\[family-name\:var\(--ww-font\)\]{font-family:var(--ww-font)}.ww\:font-mono{font-family:var(--ww-font-mono)}.ww\:text-base{font-size:var(--ww-text-base);line-height:var(--tw-leading,var(--ww-text-base--line-height))}.ww\:text-sm{font-size:var(--ww-text-sm);line-height:var(--tw-leading,var(--ww-text-sm--line-height))}.ww\:text-xs{font-size:var(--ww-text-xs);line-height:var(--tw-leading,var(--ww-text-xs--line-height))}.ww\:text-\[10px\]{font-size:10px}.ww\:text-\[11px\]{font-size:11px}.ww\:font-medium{--tw-font-weight:var(--ww-font-weight-medium);font-weight:var(--ww-font-weight-medium)}.ww\:font-semibold{--tw-font-weight:var(--ww-font-weight-semibold);font-weight:var(--ww-font-weight-semibold)}.ww\:tracking-wide{--tw-tracking:var(--ww-tracking-wide);letter-spacing:var(--ww-tracking-wide)}.ww\:break-words{overflow-wrap:break-word}.ww\:break-all{word-break:break-all}.ww\:whitespace-pre-wrap{white-space:pre-wrap}.ww\:text-background{color:var(--ww-color-background,#fff)}.ww\:text-foreground,.ww\:text-foreground\/80{color:var(--ww-color-foreground,#1f2937)}@supports (color:color-mix(in lab, red, red)){.ww\:text-foreground\/80{color:color-mix(in oklab,var(--ww-color-foreground,#1f2937)80%,transparent)}}.ww\:text-muted-foreground{color:var(--ww-color-muted-foreground,#6b7280)}.ww\:text-primary{color:var(--ww-color-primary,#6366f1)}.ww\:text-primary-foreground{color:var(--ww-color-primary-foreground,#1f2937)}.ww\:uppercase{text-transform:uppercase}.ww\:opacity-0{opacity:0}.ww\:opacity-100{opacity:1}.ww\:shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ww\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ww\:ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ww\:ring-blue-400\/70{--tw-ring-color:var(--ww-color-blue-400)}@supports (color:color-mix(in lab, red, red)){.ww\:ring-blue-400\/70{--tw-ring-color:color-mix(in oklab,var(--ww-color-blue-400)70%,transparent)}}.ww\:ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ww\:ring-offset-background{--tw-ring-offset-color:var(--ww-color-background,#fff)}.ww\:backdrop-blur-xl{--tw-backdrop-blur:blur(var(--ww-blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.ww\:transition-\[grid-template-rows\,opacity\]{transition-property:grid-template-rows,opacity;transition-timing-function:var(--tw-ease,var(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\:transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\:duration-150{--tw-duration:.15s;transition-duration:.15s}.ww\:duration-200{--tw-duration:.2s;transition-duration:.2s}.ww\:duration-300{--tw-duration:.3s;transition-duration:.3s}.ww\:ease-out{--tw-ease:var(--ww-ease-out);transition-timing-function:var(--ww-ease-out)}.ww\:outline-none{--tw-outline-style:none;outline-style:none}@media (hover:hover){.ww\:group-hover\:opacity-0:is(:where(.ww\:group):hover *){opacity:0}.ww\:group-hover\:opacity-100:is(:where(.ww\:group):hover *){opacity:1}}.ww\:group-\[\.is-assistant\]\:text-foreground:is(:where(.ww\:group).is-assistant *){color:var(--ww-color-foreground,#1f2937)}.ww\:group-\[\.is-user\]\:ml-auto:is(:where(.ww\:group).is-user *){margin-left:auto}.ww\:group-\[\.is-user\]\:rounded-lg:is(:where(.ww\:group).is-user *){border-radius:var(--ww-radius-lg)}.ww\:group-\[\.is-user\]\:bg-user-bubble:is(:where(.ww\:group).is-user *){background-color:var(--ww-color-user-bubble,#f4f4f4)}.ww\:group-\[\.is-user\]\:px-4:is(:where(.ww\:group).is-user *){padding-inline:calc(var(--ww-spacing)*4)}.ww\:group-\[\.is-user\]\:py-3:is(:where(.ww\:group).is-user *){padding-block:calc(var(--ww-spacing)*3)}.ww\:group-\[\.is-user\]\:text-primary-foreground:is(:where(.ww\:group).is-user *){color:var(--ww-color-primary-foreground,#1f2937)}.ww\:placeholder\:text-muted-foreground::placeholder{color:var(--ww-color-muted-foreground,#6b7280)}@media (hover:hover){.ww\:hover\:border-primary\/30:hover{border-color:var(--ww-color-primary,#6366f1)}@supports (color:color-mix(in lab, red, red)){.ww\:hover\:border-primary\/30:hover{border-color:color-mix(in oklab,var(--ww-color-primary,#6366f1)30%,transparent)}}.ww\:hover\:bg-accent:hover{background-color:var(--ww-color-accent,#f3f4f6)}.ww\:hover\:bg-foreground:hover{background-color:var(--ww-color-foreground,#1f2937)}.ww\:hover\:bg-muted:hover{background-color:var(--ww-color-muted,#f1f5f9)}.ww\:hover\:bg-muted-foreground\/10:hover{background-color:var(--ww-color-muted-foreground,#6b7280)}@supports (color:color-mix(in lab, red, red)){.ww\:hover\:bg-muted-foreground\/10:hover{background-color:color-mix(in oklab,var(--ww-color-muted-foreground,#6b7280)10%,transparent)}}.ww\:hover\:bg-primary\/90:hover{background-color:var(--ww-color-primary,#6366f1)}@supports (color:color-mix(in lab, red, red)){.ww\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--ww-color-primary,#6366f1)90%,transparent)}}.ww\:hover\:text-accent-foreground:hover{color:var(--ww-color-accent-foreground,#1f2937)}.ww\:hover\:text-foreground:hover{color:var(--ww-color-foreground,#1f2937)}.ww\:hover\:underline:hover{text-decoration-line:underline}}.ww\:disabled\:pointer-events-none:disabled{pointer-events:none}.ww\:disabled\:opacity-50:disabled{opacity:.5}.ww\:\[\&\>\*\:first-child\]\:mt-0>:first-child{margin-top:calc(var(--ww-spacing)*0)}.ww\:\[\&\>\*\:last-child\]\:mb-0>:last-child{margin-bottom:calc(var(--ww-spacing)*0)}}@keyframes ww-fade-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes ww-fade-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-4px)}}@keyframes ww-pulse{0%,80%,to{opacity:.3;transform:scale(.8)}40%{opacity:1;transform:scale(1)}}[data-waniwani-chat]{--ww-color-background:var(--ww-bg,#fff);--ww-color-foreground:var(--ww-text,#1f2937);--ww-color-primary:var(--ww-primary,#6366f1);--ww-color-primary-foreground:var(--ww-primary-fg,#1f2937);--ww-color-muted-foreground:var(--ww-muted,#6b7280);--ww-color-border:var(--ww-border,#e5e7eb);--ww-color-input:var(--ww-input-bg,#f9fafb);--ww-color-accent:var(--ww-assistant-bubble,#f3f4f6);--ww-color-accent-foreground:var(--ww-text,#1f2937);--ww-color-user-bubble:var(--ww-user-bubble,#f4f4f4);--ww-color-card:var(--ww-bg,#fff);--ww-color-card-foreground:var(--ww-text,#1f2937);--ww-color-card-header:var(--ww-header-bg,#fff);--ww-color-card-header-foreground:var(--ww-header-text,#1f2937);--ww-color-status:var(--ww-status,#22c55e);--ww-color-tool-card:var(--ww-tool-card,#f4f4f5);--ww-radius:var(--ww-radius,16px);--ww-font-sans:var(--ww-font,system-ui,-apple-system,"Segoe UI",sans-serif)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--ww-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ww-color-blue-400:oklch(70.7% .165 254.624);--ww-spacing:.25rem;--ww-container-3xl:48rem;--ww-text-xs:.75rem;--ww-text-xs--line-height:calc(1/.75);--ww-text-sm:.875rem;--ww-text-sm--line-height:calc(1.25/.875);--ww-text-base:1rem;--ww-text-base--line-height:calc(1.5/1);--ww-font-weight-medium:500;--ww-font-weight-semibold:600;--ww-tracking-wide:.025em;--ww-radius-md:.375rem;--ww-radius-lg:.5rem;--ww-radius-2xl:1rem;--ww-ease-out:cubic-bezier(0,0,.2,1);--ww-animate-spin:spin 1s linear infinite;--ww-animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--ww-default-transition-duration:.15s;--ww-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--ww-default-font-family:var(--ww-font-sans,system-ui,-apple-system,"Segoe UI",sans-serif);--ww-default-mono-font-family:var(--ww-font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--ww-default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--ww-default-font-feature-settings,normal);font-variation-settings:var(--ww-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--ww-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--ww-default-mono-font-feature-settings,normal);font-variation-settings:var(--ww-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.ww\:absolute{position:absolute}.ww\:relative{position:relative}.ww\:bottom-4{bottom:calc(var(--ww-spacing)*4)}.ww\:left-\[50\%\]{left:50%}.ww\:mx-auto{margin-inline:auto}.ww\:mt-0\.5{margin-top:calc(var(--ww-spacing)*.5)}.ww\:mt-2{margin-top:calc(var(--ww-spacing)*2)}.ww\:mb-2{margin-bottom:calc(var(--ww-spacing)*2)}.ww\:mb-4{margin-bottom:calc(var(--ww-spacing)*4)}.ww\:ml-auto{margin-left:auto}.ww\:line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.ww\:contents{display:contents}.ww\:flex{display:flex}.ww\:grid{display:grid}.ww\:hidden{display:none}.ww\:inline-block{display:inline-block}.ww\:inline-flex{display:inline-flex}.ww\:field-sizing-content{field-sizing:content}.ww\:size-2{width:calc(var(--ww-spacing)*2);height:calc(var(--ww-spacing)*2)}.ww\:size-3{width:calc(var(--ww-spacing)*3);height:calc(var(--ww-spacing)*3)}.ww\:size-3\.5{width:calc(var(--ww-spacing)*3.5);height:calc(var(--ww-spacing)*3.5)}.ww\:size-4{width:calc(var(--ww-spacing)*4);height:calc(var(--ww-spacing)*4)}.ww\:size-5{width:calc(var(--ww-spacing)*5);height:calc(var(--ww-spacing)*5)}.ww\:size-7{width:calc(var(--ww-spacing)*7);height:calc(var(--ww-spacing)*7)}.ww\:size-8{width:calc(var(--ww-spacing)*8);height:calc(var(--ww-spacing)*8)}.ww\:size-9{width:calc(var(--ww-spacing)*9);height:calc(var(--ww-spacing)*9)}.ww\:size-auto{width:auto;height:auto}.ww\:size-full{width:100%;height:100%}.ww\:h-7{height:calc(var(--ww-spacing)*7)}.ww\:h-8{height:calc(var(--ww-spacing)*8)}.ww\:h-9{height:calc(var(--ww-spacing)*9)}.ww\:h-16{height:calc(var(--ww-spacing)*16)}.ww\:h-auto{height:auto}.ww\:max-h-48{max-height:calc(var(--ww-spacing)*48)}.ww\:min-h-0{min-height:calc(var(--ww-spacing)*0)}.ww\:min-h-16{min-height:calc(var(--ww-spacing)*16)}.ww\:w-fit{width:fit-content}.ww\:w-full{width:100%}.ww\:max-w-3xl{max-width:var(--ww-container-3xl)}.ww\:max-w-24{max-width:calc(var(--ww-spacing)*24)}.ww\:max-w-32{max-width:calc(var(--ww-spacing)*32)}.ww\:max-w-\[80\%\]{max-width:80%}.ww\:max-w-full{max-width:100%}.ww\:min-w-0{min-width:calc(var(--ww-spacing)*0)}.ww\:flex-1{flex:1}.ww\:shrink-0{flex-shrink:0}.ww\:grow{flex-grow:1}.ww\:translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.ww\:rotate-90{rotate:90deg}.ww\:rotate-180{rotate:180deg}.ww\:animate-\[ww-fade-in_0\.2s_ease-out_both\]{animation:.2s ease-out both ww-fade-in}.ww\:animate-pulse{animation:var(--ww-animate-pulse)}.ww\:animate-spin{animation:var(--ww-animate-spin)}.ww\:cursor-pointer{cursor:pointer}.ww\:resize-none{resize:none}.ww\:grid-rows-\[0fr\]{grid-template-rows:0fr}.ww\:grid-rows-\[1fr\]{grid-template-rows:1fr}.ww\:flex-col{flex-direction:column}.ww\:flex-wrap{flex-wrap:wrap}.ww\:items-center{align-items:center}.ww\:items-end{align-items:flex-end}.ww\:items-start{align-items:flex-start}.ww\:justify-between{justify-content:space-between}.ww\:justify-center{justify-content:center}.ww\:gap-1{gap:calc(var(--ww-spacing)*1)}.ww\:gap-1\.5{gap:calc(var(--ww-spacing)*1.5)}.ww\:gap-2{gap:calc(var(--ww-spacing)*2)}.ww\:gap-3{gap:calc(var(--ww-spacing)*3)}.ww\:gap-6{gap:calc(var(--ww-spacing)*6)}:where(.ww\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ww-spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ww-spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.ww\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ww-spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ww-spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}.ww\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ww\:overflow-hidden{overflow:hidden}.ww\:overflow-x-auto{overflow-x:auto}.ww\:overflow-y-hidden{overflow-y:hidden}.ww\:rounded{border-radius:var(--ww-radius,16px)}.ww\:rounded-2xl{border-radius:var(--ww-radius-2xl)}.ww\:rounded-\[var\(--ww-radius\)\]{border-radius:var(--ww-radius)}.ww\:rounded-full{border-radius:3.40282e38px}.ww\:rounded-lg{border-radius:var(--ww-radius-lg)}.ww\:rounded-md{border-radius:var(--ww-radius-md)}.ww\:border{border-style:var(--tw-border-style);border-width:1px}.ww\:border-0{border-style:var(--tw-border-style);border-width:0}.ww\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.ww\:border-border{border-color:var(--ww-color-border,#e5e7eb)}.ww\:border-muted-foreground\/50{border-color:var(--ww-color-muted-foreground,#6b7280)}@supports (color:color-mix(in lab, red, red)){.ww\:border-muted-foreground\/50{border-color:color-mix(in oklab,var(--ww-color-muted-foreground,#6b7280)50%,transparent)}}.ww\:bg-accent{background-color:var(--ww-color-accent,#f3f4f6)}.ww\:bg-background,.ww\:bg-background\/20{background-color:var(--ww-color-background,#fff)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-background\/20{background-color:color-mix(in oklab,var(--ww-color-background,#fff)20%,transparent)}}.ww\:bg-foreground{background-color:var(--ww-color-foreground,#1f2937)}.ww\:bg-input{background-color:var(--ww-color-input,#f9fafb)}.ww\:bg-muted{background-color:var(--ww-color-muted,#f1f5f9)}.ww\:bg-muted-foreground\/60{background-color:var(--ww-color-muted-foreground,#6b7280)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-muted-foreground\/60{background-color:color-mix(in oklab,var(--ww-color-muted-foreground,#6b7280)60%,transparent)}}.ww\:bg-muted\/50{background-color:var(--ww-color-muted,#f1f5f9)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-muted\/50{background-color:color-mix(in oklab,var(--ww-color-muted,#f1f5f9)50%,transparent)}}.ww\:bg-primary{background-color:var(--ww-color-primary,#6366f1)}.ww\:bg-tool-card{background-color:var(--ww-color-tool-card,#f4f4f5)}.ww\:bg-transparent{background-color:#0000}.ww\:object-cover{object-fit:cover}.ww\:p-1{padding:calc(var(--ww-spacing)*1)}.ww\:p-3{padding:calc(var(--ww-spacing)*3)}.ww\:px-0{padding-inline:calc(var(--ww-spacing)*0)}.ww\:px-1\.5{padding-inline:calc(var(--ww-spacing)*1.5)}.ww\:px-2{padding-inline:calc(var(--ww-spacing)*2)}.ww\:px-3{padding-inline:calc(var(--ww-spacing)*3)}.ww\:px-4{padding-inline:calc(var(--ww-spacing)*4)}.ww\:px-6{padding-inline:calc(var(--ww-spacing)*6)}.ww\:py-0\.5{padding-block:calc(var(--ww-spacing)*.5)}.ww\:py-1{padding-block:calc(var(--ww-spacing)*1)}.ww\:py-1\.5{padding-block:calc(var(--ww-spacing)*1.5)}.ww\:py-2{padding-block:calc(var(--ww-spacing)*2)}.ww\:py-2\.5{padding-block:calc(var(--ww-spacing)*2.5)}.ww\:py-3{padding-block:calc(var(--ww-spacing)*3)}.ww\:py-6{padding-block:calc(var(--ww-spacing)*6)}.ww\:pt-2{padding-top:calc(var(--ww-spacing)*2)}.ww\:pt-2\.5{padding-top:calc(var(--ww-spacing)*2.5)}.ww\:pt-3{padding-top:calc(var(--ww-spacing)*3)}.ww\:pr-3{padding-right:calc(var(--ww-spacing)*3)}.ww\:pb-1\.5{padding-bottom:calc(var(--ww-spacing)*1.5)}.ww\:pb-3{padding-bottom:calc(var(--ww-spacing)*3)}.ww\:pb-8{padding-bottom:calc(var(--ww-spacing)*8)}.ww\:pl-4{padding-left:calc(var(--ww-spacing)*4)}.ww\:text-left{text-align:left}.ww\:font-\[family-name\:var\(--ww-font\)\]{font-family:var(--ww-font)}.ww\:font-mono{font-family:var(--ww-font-mono)}.ww\:text-base{font-size:var(--ww-text-base);line-height:var(--tw-leading,var(--ww-text-base--line-height))}.ww\:text-sm{font-size:var(--ww-text-sm);line-height:var(--tw-leading,var(--ww-text-sm--line-height))}.ww\:text-xs{font-size:var(--ww-text-xs);line-height:var(--tw-leading,var(--ww-text-xs--line-height))}.ww\:text-\[10px\]{font-size:10px}.ww\:text-\[11px\]{font-size:11px}.ww\:font-medium{--tw-font-weight:var(--ww-font-weight-medium);font-weight:var(--ww-font-weight-medium)}.ww\:font-semibold{--tw-font-weight:var(--ww-font-weight-semibold);font-weight:var(--ww-font-weight-semibold)}.ww\:tracking-wide{--tw-tracking:var(--ww-tracking-wide);letter-spacing:var(--ww-tracking-wide)}.ww\:break-words{overflow-wrap:break-word}.ww\:break-all{word-break:break-all}.ww\:whitespace-pre-wrap{white-space:pre-wrap}.ww\:text-background{color:var(--ww-color-background,#fff)}.ww\:text-foreground,.ww\:text-foreground\/80{color:var(--ww-color-foreground,#1f2937)}@supports (color:color-mix(in lab, red, red)){.ww\:text-foreground\/80{color:color-mix(in oklab,var(--ww-color-foreground,#1f2937)80%,transparent)}}.ww\:text-muted-foreground{color:var(--ww-color-muted-foreground,#6b7280)}.ww\:text-primary{color:var(--ww-color-primary,#6366f1)}.ww\:text-primary-foreground{color:var(--ww-color-primary-foreground,#1f2937)}.ww\:uppercase{text-transform:uppercase}.ww\:opacity-0{opacity:0}.ww\:opacity-100{opacity:1}.ww\:shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ww\:ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ww\:ring-blue-400\/70{--tw-ring-color:var(--ww-color-blue-400)}@supports (color:color-mix(in lab, red, red)){.ww\:ring-blue-400\/70{--tw-ring-color:color-mix(in oklab,var(--ww-color-blue-400)70%,transparent)}}.ww\:ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ww\:ring-offset-background{--tw-ring-offset-color:var(--ww-color-background,#fff)}.ww\:transition-\[grid-template-rows\,opacity\]{transition-property:grid-template-rows,opacity;transition-timing-function:var(--tw-ease,var(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\:duration-150{--tw-duration:.15s;transition-duration:.15s}.ww\:duration-200{--tw-duration:.2s;transition-duration:.2s}.ww\:duration-300{--tw-duration:.3s;transition-duration:.3s}.ww\:ease-out{--tw-ease:var(--ww-ease-out);transition-timing-function:var(--ww-ease-out)}.ww\:outline-none{--tw-outline-style:none;outline-style:none}@media (hover:hover){.ww\:group-hover\:opacity-0:is(:where(.ww\:group):hover *){opacity:0}.ww\:group-hover\:opacity-100:is(:where(.ww\:group):hover *){opacity:1}}.ww\:group-\[\.is-assistant\]\:text-foreground:is(:where(.ww\:group).is-assistant *){color:var(--ww-color-foreground,#1f2937)}.ww\:group-\[\.is-user\]\:ml-auto:is(:where(.ww\:group).is-user *){margin-left:auto}.ww\:group-\[\.is-user\]\:rounded-lg:is(:where(.ww\:group).is-user *){border-radius:var(--ww-radius-lg)}.ww\:group-\[\.is-user\]\:bg-user-bubble:is(:where(.ww\:group).is-user *){background-color:var(--ww-color-user-bubble,#f4f4f4)}.ww\:group-\[\.is-user\]\:px-4:is(:where(.ww\:group).is-user *){padding-inline:calc(var(--ww-spacing)*4)}.ww\:group-\[\.is-user\]\:py-3:is(:where(.ww\:group).is-user *){padding-block:calc(var(--ww-spacing)*3)}.ww\:group-\[\.is-user\]\:text-primary-foreground:is(:where(.ww\:group).is-user *){color:var(--ww-color-primary-foreground,#1f2937)}.ww\:placeholder\:text-muted-foreground::placeholder{color:var(--ww-color-muted-foreground,#6b7280)}@media (hover:hover){.ww\:hover\:border-primary\/30:hover{border-color:var(--ww-color-primary,#6366f1)}@supports (color:color-mix(in lab, red, red)){.ww\:hover\:border-primary\/30:hover{border-color:color-mix(in oklab,var(--ww-color-primary,#6366f1)30%,transparent)}}.ww\:hover\:bg-accent:hover{background-color:var(--ww-color-accent,#f3f4f6)}.ww\:hover\:bg-foreground:hover{background-color:var(--ww-color-foreground,#1f2937)}.ww\:hover\:bg-muted:hover{background-color:var(--ww-color-muted,#f1f5f9)}.ww\:hover\:bg-muted-foreground\/10:hover{background-color:var(--ww-color-muted-foreground,#6b7280)}@supports (color:color-mix(in lab, red, red)){.ww\:hover\:bg-muted-foreground\/10:hover{background-color:color-mix(in oklab,var(--ww-color-muted-foreground,#6b7280)10%,transparent)}}.ww\:hover\:bg-primary\/90:hover{background-color:var(--ww-color-primary,#6366f1)}@supports (color:color-mix(in lab, red, red)){.ww\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--ww-color-primary,#6366f1)90%,transparent)}}.ww\:hover\:text-accent-foreground:hover{color:var(--ww-color-accent-foreground,#1f2937)}.ww\:hover\:text-foreground:hover{color:var(--ww-color-foreground,#1f2937)}.ww\:hover\:underline:hover{text-decoration-line:underline}}.ww\:disabled\:pointer-events-none:disabled{pointer-events:none}.ww\:disabled\:opacity-50:disabled{opacity:.5}.ww\:\[\&\>\*\:first-child\]\:mt-0>:first-child{margin-top:calc(var(--ww-spacing)*0)}.ww\:\[\&\>\*\:last-child\]\:mb-0>:last-child{margin-bottom:calc(var(--ww-spacing)*0)}}@keyframes ww-fade-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes ww-fade-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-4px)}}@keyframes ww-pulse{0%,80%,to{opacity:.3;transform:scale(.8)}40%{opacity:1;transform:scale(1)}}[data-waniwani-chat] ::-webkit-scrollbar{width:8px}[data-waniwani-chat] ::-webkit-scrollbar-track{background:0 0}[data-waniwani-chat] ::-webkit-scrollbar-thumb{background:var(--ww-color-border);border-radius:9999px}[data-waniwani-chat] ::-webkit-scrollbar-thumb:hover{background:var(--ww-color-muted-foreground)}[data-waniwani-chat] *{scrollbar-width:thin;scrollbar-color:var(--ww-color-border)transparent}[data-waniwani-chat]{--ww-color-background:var(--ww-bg,#fff);--ww-color-foreground:var(--ww-text,#1f2937);--ww-color-primary:var(--ww-primary,#6366f1);--ww-color-primary-foreground:var(--ww-primary-fg,#1f2937);--ww-color-muted-foreground:var(--ww-muted,#6b7280);--ww-color-border:var(--ww-border,#e5e7eb);--ww-color-input:var(--ww-input-bg,#f9fafb);--ww-color-accent:var(--ww-assistant-bubble,#f3f4f6);--ww-color-accent-foreground:var(--ww-text,#1f2937);--ww-color-user-bubble:var(--ww-user-bubble,#f4f4f4);--ww-color-card:var(--ww-bg,#fff);--ww-color-card-foreground:var(--ww-text,#1f2937);--ww-color-card-header:var(--ww-header-bg,#fff);--ww-color-card-header-foreground:var(--ww-header-text,#1f2937);--ww-color-status:var(--ww-status,#22c55e);--ww-color-tool-card:var(--ww-tool-card,#f4f4f5);--ww-radius:var(--ww-radius,16px);--ww-font-sans:var(--ww-font,system-ui,-apple-system,"Segoe UI",sans-serif)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
var e=Object.freeze(JSON.parse(`{"displayName":"Stylus","fileTypes":["styl","stylus","css.styl","css.stylus"],"name":"stylus","patterns":[{"include":"#comment"},{"include":"#at_rule"},{"include":"#language_keywords"},{"include":"#language_constants"},{"include":"#variable_declaration"},{"include":"#function"},{"include":"#selector"},{"include":"#declaration"},{"captures":{"1":{"name":"punctuation.section.property-list.begin.css"},"2":{"name":"punctuation.section.property-list.end.css"}},"match":"(\\\\{)(})","name":"meta.brace.curly.css"},{"match":"[{}]","name":"meta.brace.curly.css"},{"include":"#numeric"},{"include":"#string"},{"include":"#operator"}],"repository":{"at_rule":{"patterns":[{"begin":"\\\\s*((@)(import|require))\\\\b\\\\s*","beginCaptures":{"1":{"name":"keyword.control.at-rule.import.stylus"},"2":{"name":"punctuation.definition.keyword.stylus"}},"end":"\\\\s*((?=;|$|\\\\n))","endCaptures":{"1":{"name":"punctuation.terminator.rule.css"}},"name":"meta.at-rule.import.css","patterns":[{"include":"#string"}]},{"begin":"\\\\s*((@)(extends?))\\\\b\\\\s*","beginCaptures":{"1":{"name":"keyword.control.at-rule.extend.stylus"},"2":{"name":"punctuation.definition.keyword.stylus"}},"end":"\\\\s*((?=;|$|\\\\n))","endCaptures":{"1":{"name":"punctuation.terminator.rule.css"}},"name":"meta.at-rule.extend.css","patterns":[{"include":"#selector"}]},{"captures":{"1":{"name":"keyword.control.at-rule.fontface.stylus"},"2":{"name":"punctuation.definition.keyword.stylus"}},"match":"^\\\\s*((@)font-face)\\\\b","name":"meta.at-rule.fontface.stylus"},{"captures":{"1":{"name":"keyword.control.at-rule.css.stylus"},"2":{"name":"punctuation.definition.keyword.stylus"}},"match":"^\\\\s*((@)css)\\\\b","name":"meta.at-rule.css.stylus"},{"begin":"\\\\s*((@)charset)\\\\b\\\\s*","beginCaptures":{"1":{"name":"keyword.control.at-rule.charset.stylus"},"2":{"name":"punctuation.definition.keyword.stylus"}},"end":"\\\\s*((?=;|$|\\\\n))","name":"meta.at-rule.charset.stylus","patterns":[{"include":"#string"}]},{"begin":"\\\\s*((@)keyframes)\\\\b\\\\s+([-A-Z_a-z][-0-9A-Z_a-z]*)","beginCaptures":{"1":{"name":"keyword.control.at-rule.keyframes.stylus"},"2":{"name":"punctuation.definition.keyword.stylus"},"3":{"name":"entity.name.function.keyframe.stylus"}},"end":"\\\\s*((?=\\\\{|$|\\\\n))","name":"meta.at-rule.keyframes.stylus"},{"begin":"(?=\\\\b((\\\\d+%|from\\\\b|to\\\\b)))","end":"(?=([\\\\n{]))","name":"meta.at-rule.keyframes.stylus","patterns":[{"match":"\\\\b((\\\\d+%|from\\\\b|to\\\\b))","name":"entity.other.attribute-name.stylus"}]},{"captures":{"1":{"name":"keyword.control.at-rule.media.stylus"},"2":{"name":"punctuation.definition.keyword.stylus"}},"match":"^\\\\s*((@)media)\\\\b","name":"meta.at-rule.media.stylus"},{"match":"(?=\\\\w)(?<![-\\\\w])(width|scan|resolution|orientation|monochrome|min-width|min-resolution|min-monochrome|min-height|min-device-width|min-device-height|min-device-aspect-ratio|min-color-index|min-color|min-aspect-ratio|max-width|max-resolution|max-monochrome|max-height|max-device-width|max-device-height|max-device-aspect-ratio|max-color-index|max-color|max-aspect-ratio|height|grid|device-width|device-height|device-aspect-ratio|color-index|color|aspect-ratio)(?<=\\\\w)(?![-\\\\w])","name":"support.type.property-name.media-feature.media.css"},{"match":"(?=\\\\w)(?<![-\\\\w])(tv|tty|screen|projection|print|handheld|embossed|braille|aural|all)(?<=\\\\w)(?![-\\\\w])","name":"support.constant.media-type.media.css"},{"match":"(?=\\\\w)(?<![-\\\\w])(portrait|landscape)(?<=\\\\w)(?![-\\\\w])","name":"support.constant.property-value.media-property.media.css"}]},"char_escape":{"match":"\\\\\\\\(.)","name":"constant.character.escape.stylus"},"color":{"patterns":[{"begin":"\\\\b(rgba??|hsla??)(\\\\()","beginCaptures":{"1":{"name":"support.function.color.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.section.function.css"}},"name":"meta.function.color.css","patterns":[{"match":"\\\\s*(,)\\\\s*","name":"punctuation.separator.parameter.css"},{"include":"#numeric"},{"include":"#property_variable"}]},{"captures":{"1":{"name":"punctuation.definition.constant.css"}},"match":"(#)(\\\\h{3}|\\\\h{6})\\\\b","name":"constant.other.color.rgb-value.css"},{"match":"\\\\b(aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)\\\\b","name":"support.constant.color.w3c-standard-color-name.css"},{"match":"\\\\b(aliceblue|antiquewhite|aquamarine|azure|beige|bisque|blanchedalmond|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|gainsboro|ghostwhite|gold|goldenrod|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|limegreen|linen|magenta|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|oldlace|olivedrab|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|thistle|tomato|turquoise|violet|wheat|whitesmoke|yellowgreen)\\\\b","name":"support.constant.color.w3c-extended-color-name.css"}]},"comment":{"patterns":[{"include":"#comment_block"},{"include":"#comment_line"}]},"comment_block":{"begin":"/\\\\*","beginCaptures":{"0":{"name":"punctuation.definition.comment.begin.css"}},"end":"\\\\*/","endCaptures":{"0":{"name":"punctuation.definition.comment.end.css"}},"name":"comment.block.css"},"comment_line":{"begin":"(^[\\\\t ]+)?(?=//)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.stylus"}},"end":"(?!\\\\G)","patterns":[{"begin":"//","beginCaptures":{"0":{"name":"punctuation.definition.comment.stylus"}},"end":"(?=\\\\n)","name":"comment.line.double-slash.stylus"}]},"declaration":{"begin":"((?<=^)[^\\\\n\\\\S]+)|((?<=;)[^\\\\n\\\\S]*)|((?<=\\\\{)[^\\\\n\\\\S]*)","end":"(?=\\\\n)|(;)|(?=})|(\\\\n)","endCaptures":{"2":{"name":"punctuation.terminator.rule.css"}},"name":"meta.property-list.css","patterns":[{"match":"(?<![-\\\\w])--[-A-Z_a-z[^\\\\x00-\\\\x7F]](?:[-0-9A-Z_a-z[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))*","name":"variable.css"},{"include":"#language_keywords"},{"include":"#language_constants"},{"match":"(?<=^)[^\\\\n\\\\S]+(\\\\n)"},{"captures":{"1":{"name":"support.type.property-name.css"},"2":{"name":"punctuation.separator.key-value.css"},"3":{"name":"variable.section.css"}},"match":"\\\\G\\\\s*(counter-(?:reset|increment))(?:(:)|[^\\\\n\\\\S])[^\\\\n\\\\S]*([-A-Z_a-z][-0-9A-Z_a-z]*)","name":"meta.property.counter.css"},{"begin":"\\\\G\\\\s*(filter)(?:(:)|[^\\\\n\\\\S])[^\\\\n\\\\S]*","beginCaptures":{"1":{"name":"support.type.property-name.css"},"2":{"name":"punctuation.separator.key-value.css"}},"end":"(?=[\\\\n;}]|$)","name":"meta.property.filter.css","patterns":[{"include":"#function"},{"include":"#property_values"}]},{"include":"#property"},{"include":"#interpolation"},{"include":"$self"}]},"font_name":{"match":"\\\\b((?i:arial|century|comic|courier|cursive|fantasy|futura|garamond|georgia|helvetica|impact|lucida|monospace|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif))\\\\b","name":"support.constant.font-name.css"},"function":{"begin":"(?=[-A-Z_a-z][-0-9A-Z_a-z]*\\\\()","end":"(\\\\))","endCaptures":{"1":{"name":"punctuation.section.function.css"}},"patterns":[{"begin":"(format|url|local)(\\\\()","beginCaptures":{"1":{"name":"support.function.misc.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.misc.css","patterns":[{"match":"(?<=\\\\()[^)\\\\s]*(?=\\\\))","name":"string.css"},{"include":"#string"},{"include":"#variable"},{"include":"#operator"},{"match":"\\\\s*"}]},{"captures":{"1":{"name":"support.function.misc.counter.css"},"2":{"name":"punctuation.section.function.css"},"3":{"name":"variable.section.css"}},"match":"(counter)(\\\\()([-A-Z_a-z][-0-9A-Z_a-z]*)(?=\\\\))","name":"meta.function.misc.counter.css"},{"begin":"(counters)(\\\\()","beginCaptures":{"1":{"name":"support.function.misc.counters.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.misc.counters.css","patterns":[{"match":"\\\\G[-A-Z_a-z][-0-9A-Z_a-z]*","name":"variable.section.css"},{"match":"\\\\s*(,)\\\\s*","name":"punctuation.separator.parameter.css"},{"include":"#string"},{"include":"#interpolation"}]},{"begin":"(attr)(\\\\()","beginCaptures":{"1":{"name":"support.function.misc.attr.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.misc.attr.css","patterns":[{"match":"\\\\G[-A-Z_a-z][-0-9A-Z_a-z]*","name":"entity.other.attribute-name.attribute.css"},{"match":"(?<=[-0-9A-Z_a-z])\\\\s*\\\\b(string|color|url|integer|number|length|em|ex|px|rem|vw|vh|vmin|vmax|mm|cm|in|pt|pc|angle|deg|grad|rad|time|s|ms|frequency|Hz|kHz|%)\\\\b","name":"support.type.attr.css"},{"match":"\\\\s*(,)\\\\s*","name":"punctuation.separator.parameter.css"},{"include":"#string"},{"include":"#interpolation"}]},{"begin":"(calc)(\\\\()","beginCaptures":{"1":{"name":"support.function.misc.calc.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.misc.calc.css","patterns":[{"include":"#property_values"}]},{"begin":"(cubic-bezier)(\\\\()","beginCaptures":{"1":{"name":"support.function.timing.cubic-bezier.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.timing.cubic-bezier.css","patterns":[{"match":"\\\\s*(,)\\\\s*","name":"punctuation.separator.parameter.css"},{"include":"#numeric"},{"include":"#interpolation"}]},{"begin":"(steps)(\\\\()","beginCaptures":{"1":{"name":"support.function.timing.steps.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.timing.steps.css","patterns":[{"match":"\\\\s*(,)\\\\s*","name":"punctuation.separator.parameter.css"},{"include":"#numeric"},{"match":"\\\\b(start|end)\\\\b","name":"support.constant.timing.steps.direction.css"},{"include":"#interpolation"}]},{"begin":"((?:linear|radial|repeating-linear|repeating-radial)-gradient)(\\\\()","beginCaptures":{"1":{"name":"support.function.gradient.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.gradient.css","patterns":[{"match":"\\\\s*(,)\\\\s*","name":"punctuation.separator.parameter.css"},{"include":"#numeric"},{"include":"#color"},{"match":"\\\\b(to|bottom|right|left|top|circle|ellipse|center|closest-side|closest-corner|farthest-side|farthest-corner|at)\\\\b","name":"support.constant.gradient.css"},{"include":"#interpolation"}]},{"begin":"(blur|brightness|contrast|grayscale|hue-rotate|invert|opacity|saturate|sepia)(\\\\()","beginCaptures":{"1":{"name":"support.function.filter.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.filter.css","patterns":[{"include":"#numeric"},{"include":"#property_variable"},{"include":"#interpolation"}]},{"begin":"(drop-shadow)(\\\\()","beginCaptures":{"1":{"name":"support.function.filter.drop-shadow.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.filter.drop-shadow.css","patterns":[{"include":"#numeric"},{"include":"#color"},{"include":"#property_variable"},{"include":"#interpolation"}]},{"begin":"(matrix|matrix3d|perspective|rotate|rotate3d|rotate[Xx]|rotate[Yy]|rotate[Zz]|scale|scale3d|scale[Xx]|scale[Yy]|scale[Zz]|skew[Xx]??|skew[Yy]|translate|translate3d|translate[Xx]|translate[Yy]|translate[Zz])(\\\\()","beginCaptures":{"1":{"name":"support.function.transform.css"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.transform.css","patterns":[{"include":"#numeric"},{"include":"#property_variable"},{"include":"#interpolation"}]},{"match":"(url|local|format|counters??|attr|calc)(?=\\\\()","name":"support.function.misc.css"},{"match":"(cubic-bezier|steps)(?=\\\\()","name":"support.function.timing.css"},{"match":"((?:linear|radial|repeating-linear|repeating-radial)-gradient)(?=\\\\()","name":"support.function.gradient.css"},{"match":"(blur|brightness|contrast|drop-shadow|grayscale|hue-rotate|invert|opacity|saturate|sepia)(?=\\\\()","name":"support.function.filter.css"},{"match":"(matrix|matrix3d|perspective|rotate|rotate3d|rotate[Xx]|rotate[Yy]|rotate[Zz]|scale|scale3d|scale[Xx]|scale[Yy]|scale[Zz]|skew[Xx]??|skew[Yy]|translate|translate3d|translate[Xx]|translate[Yy]|translate[Zz])(?=\\\\()","name":"support.function.transform.css"},{"begin":"([-A-Z_a-z][-0-9A-Z_a-z]*)(\\\\()","beginCaptures":{"1":{"name":"entity.name.function.stylus"},"2":{"name":"punctuation.section.function.css"}},"end":"(?=\\\\))","name":"meta.function.stylus","patterns":[{"match":"--[-A-Z_a-z[^\\\\x00-\\\\x7F]](?:[-0-9A-Z_a-z[^\\\\x00-\\\\x7F]]|\\\\\\\\(?:\\\\h{1,6}|.))*","name":"variable.argument.stylus"},{"match":"\\\\s*(,)\\\\s*","name":"punctuation.separator.parameter.css"},{"include":"#interpolation"},{"include":"#property_values"}]},{"match":"\\\\(","name":"punctuation.section.function.css"}]},"interpolation":{"begin":"(\\\\{)[^\\\\n\\\\S]*(?=[^;=]*[^\\\\n\\\\S]*})","beginCaptures":{"1":{"name":"meta.brace.curly"}},"end":"[^\\\\n\\\\S]*(})|\\\\n|$","endCaptures":{"1":{"name":"meta.brace.curly"}},"name":"meta.interpolation.stylus","patterns":[{"include":"#variable"},{"include":"#numeric"},{"include":"#string"},{"include":"#operator"}]},"language_constants":{"match":"\\\\b(true|false|null)\\\\b","name":"constant.language.stylus"},"language_keywords":{"patterns":[{"match":"(\\\\b|\\\\s)(return|else|for|unless|if|else)\\\\b","name":"keyword.control.stylus"},{"match":"(\\\\b|\\\\s)(!important|in|is defined|is a)\\\\b","name":"keyword.other.stylus"},{"match":"\\\\barguments\\\\b","name":"variable.language.stylus"}]},"numeric":{"patterns":[{"captures":{"1":{"name":"keyword.other.unit.css"}},"match":"(?<![-\\\\w])(?:[-+]?[0-9]+(?:\\\\.[0-9]+)?|\\\\.[0-9]+)((?:px|pt|ch|cm|mm|in|r?em|ex|pc|deg|g?rad|dpi|dpcm|dppx|fr|ms|s|turn|vh|vmax|vmin|vw)\\\\b|%)?","name":"constant.numeric.css"}]},"operator":{"patterns":[{"match":"((?:[!+:?~]|(\\\\s-\\\\s)|\\\\*?\\\\*|[%/]|(\\\\.)?\\\\.\\\\.|[<>]|[-%*+/:<-?]?=|!=)|\\\\b(?:in|is(?:nt)?|(?<!:)not|or|and)\\\\b)","name":"keyword.operator.stylus"},{"include":"#char_escape"}]},"property":{"begin":"\\\\G\\\\s*(?:(-webkit-[-A-Za-z]+|-moz-[-A-Za-z]+|-o-[-A-Za-z]+|-ms-[-A-Za-z]+|-khtml-[-A-Za-z]+|zoom|z-index|[xy]|wrap|word-wrap|word-spacing|word-break|word|width|widows|white-space-collapse|white-space|white|weight|volume|voice-volume|voice-stress|voice-rate|voice-pitch-range|voice-pitch|voice-family|voice-duration|voice-balance|voice|visibility|vertical-align|variant|user-select|up|unicode-bidi|unicode-range|unicode|trim|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform|touch-action|top-width|top-style|top-right-radius|top-left-radius|top-color|top|timing-function|text-wrap|text-transform|text-shadow|text-replace|text-rendering|text-overflow|text-outline|text-justify|text-indent|text-height|text-emphasis|text-decoration|text-align-last|text-align|text|target-position|target-new|target-name|target|table-layout|tab-size|style-type|style-position|style-image|style|string-set|stretch|stress|stacking-strategy|stacking-shift|stacking-ruby|stacking|src|speed|speech-rate|speech|speak-punctuation|speak-numeral|speak-header|speak|span|spacing|space-collapse|space|sizing|size-adjust|size|shadow|respond-to|rule-width|rule-style|rule-color|rule|ruby-span|ruby-position|ruby-overhang|ruby-align|ruby|rows|rotation-point|rotation|role|right-width|right-style|right-color|right|richness|rest-before|rest-after|rest|resource|resize|reset|replace|repeat|rendering-intent|rate|radius|quotes|punctuation-trim|punctuation|property|profile|presentation-level|presentation|position|pointer-events|point|play-state|play-during|play-count|pitch-range|pitch|phonemes|pause-before|pause-after|pause|page-policy|page-break-inside|page-break-before|page-break-after|page|padding-top|padding-right|padding-left|padding-bottom|padding|pack|overhang|overflow-y|overflow-x|overflow-style|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|origin|orientation|orient|ordinal-group|order|opacity|offset|numeral|new|nav-up|nav-right|nav-left|nav-index|nav-down|nav|name|move-to|model|mix-blend-mode|min-width|min-height|min|max-width|max-height|max|marquee-style|marquee-speed|marquee-play-count|marquee-direction|marquee|marks|mark-before|mark-after|mark|margin-top|margin-right|margin-left|margin-bottom|margin|mask-image|list-style-type|list-style-position|list-style-image|list-style|list|lines|line-stacking-strategy|line-stacking-shift|line-stacking-ruby|line-stacking|line-height|line-break|level|letter-spacing|length|left-width|left-style|left-color|left|label|justify-content|justify|iteration-count|inline-box-align|initial-value|initial-size|initial-before-align|initial-before-adjust|initial-after-align|initial-after-adjust|index|indent|increment|image-resolution|image-orientation|image|icon|hyphens|hyphenate-resource|hyphenate-lines|hyphenate-character|hyphenate-before|hyphenate-after|hyphenate|height|header|hanging-punctuation|gap|grid|grid-area|grid-auto-columns|grid-auto-flow|grid-auto-rows|grid-column|grid-column-end|grid-column-start|grid-row|grid-row-end|grid-row-start|grid-template|grid-template-areas|grid-template-columns|grid-template-rows|row-gap|gap|font-kerning|font-language-override|font-weight|font-variant-caps|font-variant|font-style|font-synthesis|font-stretch|font-size-adjust|font-size|font-family|font|float-offset|float|flex-wrap|flex-shrink|flex-grow|flex-group|flex-flow|flex-direction|flex-basis|flex|fit-position|fit|fill|filter|family|empty-cells|emphasis|elevation|duration|drop-initial-value|drop-initial-size|drop-initial-before-align|drop-initial-before-adjust|drop-initial-after-align|drop-initial-after-adjust|drop|down|dominant-baseline|display-role|display-model|display|direction|delay|decoration-break|decoration|cursor|cue-before|cue-after|cue|crop|counter-reset|counter-increment|counter|count|content|columns|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|column-break-before|column-break-after|column|color-profile|color|collapse|clip|clear|character|caption-side|break-inside|break-before|break-after|break|box-sizing|box-shadow|box-pack|box-orient|box-ordinal-group|box-lines|box-flex-group|box-flex|box-direction|box-decoration-break|box-align|box|bottom-width|bottom-style|bottom-right-radius|bottom-left-radius|bottom-color|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-length|border-left-width|border-left-style|border-left-color|border-left|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|bookmark-target|bookmark-level|bookmark-label|bookmark|binding|bidi|before|baseline-shift|baseline|balance|background-blend-mode|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-break|background-attachment|background|azimuth|attachment|appearance|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-duration|animation-direction|animation-delay|animation-fill-mode|animation|alignment-baseline|alignment-adjust|alignment|align-self|align-last|align-items|align-content|align|after|adjust|will-change)|(writing-mode|text-anchor|stroke-width|stroke-opacity|stroke-miterlimit|stroke-linejoin|stroke-linecap|stroke-dashoffset|stroke-dasharray|stroke|stop-opacity|stop-color|shape-rendering|marker-start|marker-mid|marker-end|lighting-color|kerning|image-rendering|glyph-orientation-vertical|glyph-orientation-horizontal|flood-opacity|flood-color|fill-rule|fill-opacity|fill|enable-background|color-rendering|color-interpolation-filters|color-interpolation|clip-rule|clip-path)|([-A-Z_a-z][-0-9A-Z_a-z]*))(?!([^\\\\n\\\\S]*&)|([^\\\\n\\\\S]*\\\\{))(?=:|([^\\\\n\\\\S]+\\\\S))","beginCaptures":{"1":{"name":"support.type.property-name.css"},"2":{"name":"support.type.property-name.svg.css"},"3":{"name":"support.function.mixin.stylus"}},"end":"(;)|(?=[\\\\n}]|$)","endCaptures":{"1":{"name":"punctuation.terminator.rule.css"}},"patterns":[{"include":"#property_value"}]},"property_value":{"begin":"\\\\G(?:(:)|(\\\\s))(\\\\s*)(?!&)","beginCaptures":{"1":{"name":"punctuation.separator.key-value.css"},"2":{"name":"punctuation.separator.key-value.css"}},"end":"(?=[\\\\n;}])","endCaptures":{"1":{"name":"punctuation.terminator.rule.css"}},"name":"meta.property-value.css","patterns":[{"include":"#property_values"},{"match":"\\\\N+?"}]},"property_values":{"patterns":[{"include":"#function"},{"include":"#comment"},{"include":"#language_keywords"},{"include":"#language_constants"},{"match":"(?=\\\\w)(?<![-\\\\w])(wrap-reverse|wrap|whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|unicase|underline|ultra-expanded|ultra-condensed|transparent|transform|top|titling-caps|thin|thick|text-top|text-bottom|text|tb-rl|table-row-group|table-row|table-header-group|table-footer-group|table-column-group|table-column|table-cell|table|sw-resize|super|strict|stretch|step-start|step-end|static|square|space-between|space-around|space|solid|soft-light|small-caps|separate|semi-expanded|semi-condensed|se-resize|scroll|screen|saturation|s-resize|running|rtl|row-reverse|row-resize|row|round|right|ridge|reverse|repeat-y|repeat-x|repeat|relative|progressive|progress|pre-wrap|pre-line|pre|pointer|petite-caps|paused|pan-x|pan-left|pan-right|pan-y|pan-up|pan-down|padding-box|overline|overlay|outside|outset|optimizeSpeed|optimizeLegibility|opacity|oblique|nw-resize|nowrap|not-allowed|normal|none|no-repeat|no-drop|newspaper|ne-resize|n-resize|multiply|move|middle|medium|max-height|manipulation|main-size|luminosity|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|local|list-item|linear(?!-)|line-through|line-edge|line|lighter|lighten|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline-block|inline|inherit|infinite|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|hue|horizontal|hidden|help|hard-light|hand|groove|geometricPrecision|forwards|flex-start|flex-end|flex|fixed|extra-expanded|extra-condensed|expanded|exclusion|ellipsis|ease-out|ease-in-out|ease-in|ease|e-resize|double|dotted|distribute-space|distribute-letter|distribute-all-lines|distribute|disc|disabled|difference|default|decimal|dashed|darken|currentColor|crosshair|cover|content-box|contain|condensed|column-reverse|column|color-dodge|color-burn|color|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|border-box|bolder|bold|block|bidi-override|below|baseline|balance|backwards|auto|antialiased|always|alternate-reverse|alternate|all-small-caps|all-scroll|all-petite-caps|all|absolute)(?<=\\\\w)(?![-\\\\w])","name":"support.constant.property-value.css"},{"match":"(?=\\\\w)(?<![-\\\\w])(start|sRGB|square|round|optimizeSpeed|optimizeQuality|nonzero|miter|middle|linearRGB|geometricPrecision |evenodd |end |crispEdges|butt|bevel)(?<=\\\\w)(?![-\\\\w])","name":"support.constant.property-value.svg.css"},{"include":"#font_name"},{"include":"#numeric"},{"include":"#color"},{"include":"#string"},{"match":"!\\\\s*important","name":"keyword.other.important.css"},{"include":"#operator"},{"include":"#stylus_keywords"},{"include":"#property_variable"}]},"property_variable":{"patterns":[{"include":"#variable"},{"match":"(?<!^)(@[-A-Z_a-z][-0-9A-Z_a-z]*)","name":"variable.property.stylus"}]},"selector":{"patterns":[{"match":"(?=\\\\w)(?<![-\\\\w])(a|abbr|acronym|address|area|article|aside|audio|b|base|bdi|bdo|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|data|datalist|dd|del|details|dfn|dialog|div|dl|dt|em|embed|eventsource|fieldset|figure|figcaption|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|main|map|mark|math|menu|menuitem|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|picture|pre|progress|q|rb|rp|rtc??|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|svg|table|tbody|td|template|textarea|tfoot|th|thead|time|title|tr|track|tt|ul??|var|video|wbr)(?<=\\\\w)(?![-\\\\w])","name":"entity.name.tag.css"},{"match":"(?=\\\\w)(?<![-\\\\w])(vkern|view|use|tspan|tref|title|textPath|text|symbol|switch|svg|style|stop|set|script|rect|radialGradient|polyline|polygon|pattern|path|mpath|missing-glyph|metadata|mask|marker|linearGradient|line|image|hkern|glyphRef|glyph|g|foreignObject|font-face-uri|font-face-src|font-face-name|font-face-format|font-face|font|filter|feTurbulence|feTile|feSpotLight|feSpecularLighting|fePointLight|feOffset|feMorphology|feMergeNode|feMerge|feImage|feGaussianBlur|feFuncR|feFuncG|feFuncB|feFuncA|feFlood|feDistantLight|feDisplacementMap|feDiffuseLighting|feConvolveMatrix|feComposite|feComponentTransfer|feColorMatrix|feBlend|ellipse|desc|defs|cursor|color-profile|clipPath|circle|animateTransform|animateMotion|animateColor|animate|altGlyphItem|altGlyphDef|altGlyph|a)(?<=\\\\w)(?![-\\\\w])","name":"entity.name.tag.svg.css"},{"match":"\\\\s*(,)\\\\s*","name":"meta.selector.stylus"},{"match":"\\\\*","name":"meta.selector.stylus"},{"captures":{"2":{"name":"entity.other.attribute-name.parent-selector-suffix.stylus"}},"match":"\\\\s*(&)([-0-9A-Z_a-z]+)\\\\s*","name":"meta.selector.stylus"},{"match":"\\\\s*(&)\\\\s*","name":"meta.selector.stylus"},{"captures":{"1":{"name":"punctuation.definition.entity.css"}},"match":"(\\\\.)[-0-9A-Z_a-z]+","name":"entity.other.attribute-name.class.css"},{"captures":{"1":{"name":"punctuation.definition.entity.css"}},"match":"(#)[A-Za-z][-0-9A-Z_a-z]*","name":"entity.other.attribute-name.id.css"},{"captures":{"1":{"name":"punctuation.definition.entity.css"}},"match":"(:+)(after|before|content|first-letter|first-line|host|(-(moz|webkit|ms)-)?selection)\\\\b","name":"entity.other.attribute-name.pseudo-element.css"},{"captures":{"1":{"name":"punctuation.definition.entity.css"}},"match":"(:)((first|last)-child|(first|last|only)-of-type|empty|root|target|first|left|right)\\\\b","name":"entity.other.attribute-name.pseudo-class.css"},{"captures":{"1":{"name":"punctuation.definition.entity.css"}},"match":"(:)(checked|enabled|default|disabled|indeterminate|invalid|optional|required|valid)\\\\b","name":"entity.other.attribute-name.pseudo-class.ui-state.css"},{"begin":"((:)not)(\\\\()","beginCaptures":{"1":{"name":"entity.other.attribute-name.pseudo-class.css"},"2":{"name":"punctuation.definition.entity.css"},"3":{"name":"punctuation.section.function.css"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.section.function.css"}},"patterns":[{"include":"#selector"}]},{"captures":{"1":{"name":"entity.other.attribute-name.pseudo-class.css"},"2":{"name":"punctuation.definition.entity.css"},"3":{"name":"punctuation.section.function.css"},"4":{"name":"constant.numeric.css"},"5":{"name":"punctuation.section.function.css"}},"match":"((:)nth-(?:(?:last-)?child|(?:last-)?of-type))(\\\\()(-?(?:\\\\d+n?|n)(?:\\\\+\\\\d+)?|even|odd)(\\\\))"},{"captures":{"1":{"name":"entity.other.attribute-name.pseudo-class.css"},"2":{"name":"puncutation.definition.entity.css"},"3":{"name":"punctuation.section.function.css"},"4":{"name":"constant.language.css"},"5":{"name":"punctuation.section.function.css"}},"match":"((:)dir)\\\\s*(?:(\\\\()(ltr|rtl)?(\\\\)))?"},{"captures":{"1":{"name":"entity.other.attribute-name.pseudo-class.css"},"2":{"name":"puncutation.definition.entity.css"},"3":{"name":"punctuation.section.function.css"},"4":{"name":"constant.language.css"},"6":{"name":"punctuation.section.function.css"}},"match":"((:)lang)\\\\s*(?:(\\\\()(\\\\w+(-\\\\w+)?)?(\\\\)))?"},{"captures":{"1":{"name":"punctuation.definition.entity.css"}},"match":"(:)(active|hover|link|visited|focus)\\\\b","name":"entity.other.attribute-name.pseudo-class.css"},{"captures":{"1":{"name":"punctuation.definition.entity.css"}},"match":"(::)(shadow)\\\\b","name":"entity.other.attribute-name.pseudo-class.css"},{"captures":{"1":{"name":"punctuation.definition.entity.css"},"2":{"name":"entity.other.attribute-name.attribute.css"},"3":{"name":"punctuation.separator.operator.css"},"4":{"name":"string.unquoted.attribute-value.css"},"5":{"name":"string.quoted.double.attribute-value.css"},"6":{"name":"punctuation.definition.string.begin.css"},"7":{"name":"punctuation.definition.string.end.css"},"8":{"name":"punctuation.definition.entity.css"}},"match":"(?i)(\\\\[)\\\\s*(-?[\\\\\\\\_a-z[:^ascii:]][-0-9\\\\\\\\_a-z[:^ascii:]]*)(?:\\\\s*([$*^|~]?=)\\\\s*(?:(-?[\\\\\\\\_a-z[:^ascii:]][-0-9\\\\\\\\_a-z[:^ascii:]]*)|((?>([\\"'])(?:[^\\\\\\\\]|\\\\\\\\.)*?(\\\\6)))))?\\\\s*(])","name":"meta.attribute-selector.css"},{"include":"#interpolation"},{"include":"#variable"}]},"string":{"patterns":[{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.css"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.css"}},"name":"string.quoted.double.css","patterns":[{"match":"\\\\\\\\(\\\\h{1,6}|.)","name":"constant.character.escape.css"}]},{"begin":"'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.css"}},"end":"'","endCaptures":{"0":{"name":"punctuation.definition.string.end.css"}},"name":"string.quoted.single.css","patterns":[{"match":"\\\\\\\\(\\\\h{1,6}|.)","name":"constant.character.escape.css"}]}]},"variable":{"match":"(\\\\$[-A-Z_a-z][-0-9A-Z_a-z]*)","name":"variable.stylus"},"variable_declaration":{"begin":"^[^\\\\n\\\\S]*(\\\\$?[-A-Z_a-z][-0-9A-Z_a-z]*)[^\\\\n\\\\S]*([:?]??=)","beginCaptures":{"1":{"name":"variable.stylus"},"2":{"name":"keyword.operator.stylus"}},"end":"(\\\\n)|(;)|(?=})","endCaptures":{"2":{"name":"punctuation.terminator.rule.css"}},"patterns":[{"include":"#property_values"}]}},"scopeName":"source.stylus","aliases":["styl"]}`)),t=[e];export{t as a};
|
|
3
|
+
//# sourceMappingURL=chunk-2RR26LLP.js.map
|