@inkandswitch/patchwork-pkg-base 0.0.16 → 0.0.17
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/init.js +1 -0
- package/modules.json +11 -1
- package/package.json +1 -1
- package/packages/account-picker/dist/AccountPicker-7VBUJTTB.js +8860 -0
- package/packages/account-picker/dist/AccountPicker-7VBUJTTB.js.map +7 -0
- package/packages/account-picker/dist/AccountPicker-CN73XGEW.css +371 -0
- package/packages/account-picker/dist/AccountPicker-CN73XGEW.css.map +7 -0
- package/packages/account-picker/dist/chunk-5WRI5ZAA.js +31 -0
- package/packages/account-picker/dist/chunk-5WRI5ZAA.js.map +7 -0
- package/packages/account-picker/dist/tool.css +371 -0
- package/packages/account-picker/dist/tool.css.map +7 -0
- package/packages/account-picker/dist/tool.js +19 -0
- package/packages/account-picker/dist/tool.js.map +7 -0
- package/packages/account-picker/package.json +39 -0
- package/packages/codemirror-base/dist/chunk-KMEIRH3R.js +490 -0
- package/packages/codemirror-base/dist/chunk-KMEIRH3R.js.map +7 -0
- package/packages/codemirror-base/dist/lib/codemirror.js +7 -0
- package/packages/codemirror-base/dist/lib/codemirror.js.map +7 -0
- package/packages/codemirror-base/dist/main.js +17 -0
- package/packages/codemirror-base/dist/main.js.map +7 -0
- package/packages/codemirror-base/dist/tool.js +1799 -0
- package/packages/codemirror-base/dist/tool.js.map +7 -0
- package/packages/codemirror-base/package.json +55 -0
- package/packages/codemirror-markdown/dist/apl-QAIM2KBM.js +142 -0
- package/packages/codemirror-markdown/dist/apl-QAIM2KBM.js.map +7 -0
- package/packages/codemirror-markdown/dist/asciiarmor-G7UKQURA.js +58 -0
- package/packages/codemirror-markdown/dist/asciiarmor-G7UKQURA.js.map +7 -0
- package/packages/codemirror-markdown/dist/asn1-JTUXKWKT.js +144 -0
- package/packages/codemirror-markdown/dist/asn1-JTUXKWKT.js.map +7 -0
- package/packages/codemirror-markdown/dist/asterisk-NM6JCXOL.js +351 -0
- package/packages/codemirror-markdown/dist/asterisk-NM6JCXOL.js.map +7 -0
- package/packages/codemirror-markdown/dist/brainfuck-X7FFM55E.js +55 -0
- package/packages/codemirror-markdown/dist/brainfuck-X7FFM55E.js.map +7 -0
- package/packages/codemirror-markdown/dist/chunk-46Z6CXSY.js +1062 -0
- package/packages/codemirror-markdown/dist/chunk-46Z6CXSY.js.map +7 -0
- package/packages/codemirror-markdown/dist/chunk-6JT2ASRP.js +1111 -0
- package/packages/codemirror-markdown/dist/chunk-6JT2ASRP.js.map +7 -0
- package/packages/codemirror-markdown/dist/chunk-CSJO4DNL.js +1424 -0
- package/packages/codemirror-markdown/dist/chunk-CSJO4DNL.js.map +7 -0
- package/packages/codemirror-markdown/dist/chunk-FLC3A4DL.js +133 -0
- package/packages/codemirror-markdown/dist/chunk-FLC3A4DL.js.map +7 -0
- package/packages/codemirror-markdown/dist/chunk-M3X2FRO3.js +998 -0
- package/packages/codemirror-markdown/dist/chunk-M3X2FRO3.js.map +7 -0
- package/packages/codemirror-markdown/dist/chunk-MAW6NPUW.js +4930 -0
- package/packages/codemirror-markdown/dist/chunk-MAW6NPUW.js.map +7 -0
- package/packages/codemirror-markdown/dist/chunk-MBTMKYFQ.js +1779 -0
- package/packages/codemirror-markdown/dist/chunk-MBTMKYFQ.js.map +7 -0
- package/packages/codemirror-markdown/dist/chunk-NEI7FGV4.js +697 -0
- package/packages/codemirror-markdown/dist/chunk-NEI7FGV4.js.map +7 -0
- package/packages/codemirror-markdown/dist/chunk-PPGERYN5.js +2528 -0
- package/packages/codemirror-markdown/dist/chunk-PPGERYN5.js.map +7 -0
- package/packages/codemirror-markdown/dist/clike-DOBZTBQN.js +808 -0
- package/packages/codemirror-markdown/dist/clike-DOBZTBQN.js.map +7 -0
- package/packages/codemirror-markdown/dist/clojure-PTADSDNF.js +851 -0
- package/packages/codemirror-markdown/dist/clojure-PTADSDNF.js.map +7 -0
- package/packages/codemirror-markdown/dist/cmake-5HAC7YMH.js +73 -0
- package/packages/codemirror-markdown/dist/cmake-5HAC7YMH.js.map +7 -0
- package/packages/codemirror-markdown/dist/cobol-HAM4C42S.js +131 -0
- package/packages/codemirror-markdown/dist/cobol-HAM4C42S.js.map +7 -0
- package/packages/codemirror-markdown/dist/coffeescript-IBRKASSJ.js +310 -0
- package/packages/codemirror-markdown/dist/coffeescript-IBRKASSJ.js.map +7 -0
- package/packages/codemirror-markdown/dist/commonlisp-KMRPB5EW.js +132 -0
- package/packages/codemirror-markdown/dist/commonlisp-KMRPB5EW.js.map +7 -0
- package/packages/codemirror-markdown/dist/crystal-2MDF4EKJ.js +400 -0
- package/packages/codemirror-markdown/dist/crystal-2MDF4EKJ.js.map +7 -0
- package/packages/codemirror-markdown/dist/css-VQQXA3AY.js +1795 -0
- package/packages/codemirror-markdown/dist/css-VQQXA3AY.js.map +7 -0
- package/packages/codemirror-markdown/dist/cypher-ZZEGDGDJ.js +123 -0
- package/packages/codemirror-markdown/dist/cypher-ZZEGDGDJ.js.map +7 -0
- package/packages/codemirror-markdown/dist/d-5S6PJOOT.js +187 -0
- package/packages/codemirror-markdown/dist/d-5S6PJOOT.js.map +7 -0
- package/packages/codemirror-markdown/dist/datatype.js +48 -0
- package/packages/codemirror-markdown/dist/datatype.js.map +7 -0
- package/packages/codemirror-markdown/dist/diff-S77XBOWF.js +27 -0
- package/packages/codemirror-markdown/dist/diff-S77XBOWF.js.map +7 -0
- package/packages/codemirror-markdown/dist/dist-2C6IPJHB.js +98 -0
- package/packages/codemirror-markdown/dist/dist-2C6IPJHB.js.map +7 -0
- package/packages/codemirror-markdown/dist/dist-2H653DKD.js +170 -0
- package/packages/codemirror-markdown/dist/dist-2H653DKD.js.map +7 -0
- package/packages/codemirror-markdown/dist/dist-2O4EI6YQ.js +140 -0
- package/packages/codemirror-markdown/dist/dist-2O4EI6YQ.js.map +7 -0
- package/packages/codemirror-markdown/dist/dist-2UJRV4FH.js +75 -0
- package/packages/codemirror-markdown/dist/dist-2UJRV4FH.js.map +7 -0
- package/packages/codemirror-markdown/dist/dist-52S6W6Z3.js +15 -0
- package/packages/codemirror-markdown/dist/dist-52S6W6Z3.js.map +7 -0
- package/packages/codemirror-markdown/dist/dist-5KN6ODPO.js +340 -0
- package/packages/codemirror-markdown/dist/dist-5KN6ODPO.js.map +7 -0
- package/packages/codemirror-markdown/dist/dist-BOGB4NCA.js +20 -0
- package/packages/codemirror-markdown/dist/dist-BOGB4NCA.js.map +7 -0
- package/packages/codemirror-markdown/dist/dist-DZ4PW5HP.js +318 -0
- package/packages/codemirror-markdown/dist/dist-DZ4PW5HP.js.map +7 -0
- package/packages/codemirror-markdown/dist/dist-FDBKXKIA.js +100 -0
- package/packages/codemirror-markdown/dist/dist-FDBKXKIA.js.map +7 -0
- package/packages/codemirror-markdown/dist/dist-G2KVVLNT.js +381 -0
- package/packages/codemirror-markdown/dist/dist-G2KVVLNT.js.map +7 -0
- package/packages/codemirror-markdown/dist/dist-HHNZE2GE.js +193 -0
- package/packages/codemirror-markdown/dist/dist-HHNZE2GE.js.map +7 -0
- package/packages/codemirror-markdown/dist/dist-HNH74YPL.js +32 -0
- package/packages/codemirror-markdown/dist/dist-HNH74YPL.js.map +7 -0
- package/packages/codemirror-markdown/dist/dist-LBQUKRIG.js +27 -0
- package/packages/codemirror-markdown/dist/dist-LBQUKRIG.js.map +7 -0
- package/packages/codemirror-markdown/dist/dist-MFKCWPLQ.js +416 -0
- package/packages/codemirror-markdown/dist/dist-MFKCWPLQ.js.map +7 -0
- package/packages/codemirror-markdown/dist/dist-NISFJM3T.js +423 -0
- package/packages/codemirror-markdown/dist/dist-NISFJM3T.js.map +7 -0
- package/packages/codemirror-markdown/dist/dist-Q7P6VH6H.js +786 -0
- package/packages/codemirror-markdown/dist/dist-Q7P6VH6H.js.map +7 -0
- package/packages/codemirror-markdown/dist/dist-RWF5A5GN.js +451 -0
- package/packages/codemirror-markdown/dist/dist-RWF5A5GN.js.map +7 -0
- package/packages/codemirror-markdown/dist/dist-UHUU7KLC.js +748 -0
- package/packages/codemirror-markdown/dist/dist-UHUU7KLC.js.map +7 -0
- package/packages/codemirror-markdown/dist/dist-WJMBFK7W.js +360 -0
- package/packages/codemirror-markdown/dist/dist-WJMBFK7W.js.map +7 -0
- package/packages/codemirror-markdown/dist/dist-XJYSXJ7H.js +115 -0
- package/packages/codemirror-markdown/dist/dist-XJYSXJ7H.js.map +7 -0
- package/packages/codemirror-markdown/dist/dist-YY24ZXZD.js +212 -0
- package/packages/codemirror-markdown/dist/dist-YY24ZXZD.js.map +7 -0
- package/packages/codemirror-markdown/dist/dockerfile-JECCOJWP.js +209 -0
- package/packages/codemirror-markdown/dist/dockerfile-JECCOJWP.js.map +7 -0
- package/packages/codemirror-markdown/dist/dtd-MNDWTW4Z.js +116 -0
- package/packages/codemirror-markdown/dist/dtd-MNDWTW4Z.js.map +7 -0
- package/packages/codemirror-markdown/dist/dylan-VQ4IHJDS.js +317 -0
- package/packages/codemirror-markdown/dist/dylan-VQ4IHJDS.js.map +7 -0
- package/packages/codemirror-markdown/dist/ebnf-IDZBFTCG.js +142 -0
- package/packages/codemirror-markdown/dist/ebnf-IDZBFTCG.js.map +7 -0
- package/packages/codemirror-markdown/dist/ecl-X3ROY7E6.js +180 -0
- package/packages/codemirror-markdown/dist/ecl-X3ROY7E6.js.map +7 -0
- package/packages/codemirror-markdown/dist/eiffel-WB3M7Y2E.js +136 -0
- package/packages/codemirror-markdown/dist/eiffel-WB3M7Y2E.js.map +7 -0
- package/packages/codemirror-markdown/dist/elm-VHXR6ZA3.js +178 -0
- package/packages/codemirror-markdown/dist/elm-VHXR6ZA3.js.map +7 -0
- package/packages/codemirror-markdown/dist/erlang-7ZBDDQDV.js +676 -0
- package/packages/codemirror-markdown/dist/erlang-7ZBDDQDV.js.map +7 -0
- package/packages/codemirror-markdown/dist/extensions/embed.js +325 -0
- package/packages/codemirror-markdown/dist/extensions/embed.js.map +7 -0
- package/packages/codemirror-markdown/dist/extensions/links.js +118 -0
- package/packages/codemirror-markdown/dist/extensions/links.js.map +7 -0
- package/packages/codemirror-markdown/dist/extensions/markdown.js +3476 -0
- package/packages/codemirror-markdown/dist/extensions/markdown.js.map +7 -0
- package/packages/codemirror-markdown/dist/factor-IKT2GQE2.js +70 -0
- package/packages/codemirror-markdown/dist/factor-IKT2GQE2.js.map +7 -0
- package/packages/codemirror-markdown/dist/fcl-CNBUVGUC.js +143 -0
- package/packages/codemirror-markdown/dist/fcl-CNBUVGUC.js.map +7 -0
- package/packages/codemirror-markdown/dist/forth-4BTPWSFZ.js +118 -0
- package/packages/codemirror-markdown/dist/forth-4BTPWSFZ.js.map +7 -0
- package/packages/codemirror-markdown/dist/fortran-V6F5DQPK.js +469 -0
- package/packages/codemirror-markdown/dist/fortran-V6F5DQPK.js.map +7 -0
- package/packages/codemirror-markdown/dist/gas-4DLP6BC4.js +296 -0
- package/packages/codemirror-markdown/dist/gas-4DLP6BC4.js.map +7 -0
- package/packages/codemirror-markdown/dist/gherkin-OSGPX6HI.js +117 -0
- package/packages/codemirror-markdown/dist/gherkin-OSGPX6HI.js.map +7 -0
- package/packages/codemirror-markdown/dist/groovy-R2JW63QF.js +225 -0
- package/packages/codemirror-markdown/dist/groovy-R2JW63QF.js.map +7 -0
- package/packages/codemirror-markdown/dist/haskell-GG7T4J6H.js +461 -0
- package/packages/codemirror-markdown/dist/haskell-GG7T4J6H.js.map +7 -0
- package/packages/codemirror-markdown/dist/haxe-ESFUJKSE.js +521 -0
- package/packages/codemirror-markdown/dist/haxe-ESFUJKSE.js.map +7 -0
- package/packages/codemirror-markdown/dist/http-SZLSACOW.js +81 -0
- package/packages/codemirror-markdown/dist/http-SZLSACOW.js.map +7 -0
- package/packages/codemirror-markdown/dist/idl-V7UH35RP.js +987 -0
- package/packages/codemirror-markdown/dist/idl-V7UH35RP.js.map +7 -0
- package/packages/codemirror-markdown/dist/javascript-MGRPKFDN.js +13 -0
- package/packages/codemirror-markdown/dist/javascript-MGRPKFDN.js.map +7 -0
- package/packages/codemirror-markdown/dist/julia-CWCVZVPG.js +409 -0
- package/packages/codemirror-markdown/dist/julia-CWCVZVPG.js.map +7 -0
- package/packages/codemirror-markdown/dist/livescript-IGKT2FL7.js +303 -0
- package/packages/codemirror-markdown/dist/livescript-IGKT2FL7.js.map +7 -0
- package/packages/codemirror-markdown/dist/lua-GHK7GCTS.js +258 -0
- package/packages/codemirror-markdown/dist/lua-GHK7GCTS.js.map +7 -0
- package/packages/codemirror-markdown/dist/main.js +58 -0
- package/packages/codemirror-markdown/dist/main.js.map +7 -0
- package/packages/codemirror-markdown/dist/mathematica-W5LMQI3M.js +112 -0
- package/packages/codemirror-markdown/dist/mathematica-W5LMQI3M.js.map +7 -0
- package/packages/codemirror-markdown/dist/mbox-A7CXJ4HZ.js +119 -0
- package/packages/codemirror-markdown/dist/mbox-A7CXJ4HZ.js.map +7 -0
- package/packages/codemirror-markdown/dist/mirc-WYJEQUBY.js +109 -0
- package/packages/codemirror-markdown/dist/mirc-WYJEQUBY.js.map +7 -0
- package/packages/codemirror-markdown/dist/mllike-C2YS6SJI.js +340 -0
- package/packages/codemirror-markdown/dist/mllike-C2YS6SJI.js.map +7 -0
- package/packages/codemirror-markdown/dist/modelica-BMJSLZS7.js +149 -0
- package/packages/codemirror-markdown/dist/modelica-BMJSLZS7.js.map +7 -0
- package/packages/codemirror-markdown/dist/mscgen-5BORDYHW.js +137 -0
- package/packages/codemirror-markdown/dist/mscgen-5BORDYHW.js.map +7 -0
- package/packages/codemirror-markdown/dist/mumps-BYE6H7ZX.js +95 -0
- package/packages/codemirror-markdown/dist/mumps-BYE6H7ZX.js.map +7 -0
- package/packages/codemirror-markdown/dist/nginx-Y54HR7MQ.js +143 -0
- package/packages/codemirror-markdown/dist/nginx-Y54HR7MQ.js.map +7 -0
- package/packages/codemirror-markdown/dist/nsis-UZLPE2DL.js +67 -0
- package/packages/codemirror-markdown/dist/nsis-UZLPE2DL.js.map +7 -0
- package/packages/codemirror-markdown/dist/ntriples-SAI3J2VH.js +155 -0
- package/packages/codemirror-markdown/dist/ntriples-SAI3J2VH.js.map +7 -0
- package/packages/codemirror-markdown/dist/octave-TLUBYOUX.js +213 -0
- package/packages/codemirror-markdown/dist/octave-TLUBYOUX.js.map +7 -0
- package/packages/codemirror-markdown/dist/oz-F6LNIR6Q.js +233 -0
- package/packages/codemirror-markdown/dist/oz-F6LNIR6Q.js.map +7 -0
- package/packages/codemirror-markdown/dist/pascal-WINE2FE6.js +107 -0
- package/packages/codemirror-markdown/dist/pascal-WINE2FE6.js.map +7 -0
- package/packages/codemirror-markdown/dist/perl-NZG3EIBE.js +1107 -0
- package/packages/codemirror-markdown/dist/perl-NZG3EIBE.js.map +7 -0
- package/packages/codemirror-markdown/dist/pig-U7OFLRCV.js +105 -0
- package/packages/codemirror-markdown/dist/pig-U7OFLRCV.js.map +7 -0
- package/packages/codemirror-markdown/dist/powershell-ZSUS7P6D.js +330 -0
- package/packages/codemirror-markdown/dist/powershell-ZSUS7P6D.js.map +7 -0
- package/packages/codemirror-markdown/dist/properties-IJRU6UJW.js +60 -0
- package/packages/codemirror-markdown/dist/properties-IJRU6UJW.js.map +7 -0
- package/packages/codemirror-markdown/dist/protobuf-2KETQIQ5.js +80 -0
- package/packages/codemirror-markdown/dist/protobuf-2KETQIQ5.js.map +7 -0
- package/packages/codemirror-markdown/dist/pug-IQCJJAZU.js +410 -0
- package/packages/codemirror-markdown/dist/pug-IQCJJAZU.js.map +7 -0
- package/packages/codemirror-markdown/dist/puppet-YIIDDH6A.js +139 -0
- package/packages/codemirror-markdown/dist/puppet-YIIDDH6A.js.map +7 -0
- package/packages/codemirror-markdown/dist/python-A6P3XTMX.js +429 -0
- package/packages/codemirror-markdown/dist/python-A6P3XTMX.js.map +7 -0
- package/packages/codemirror-markdown/dist/q-2KXN5RX7.js +135 -0
- package/packages/codemirror-markdown/dist/q-2KXN5RX7.js.map +7 -0
- package/packages/codemirror-markdown/dist/r-BB4MIIBH.js +174 -0
- package/packages/codemirror-markdown/dist/r-BB4MIIBH.js.map +7 -0
- package/packages/codemirror-markdown/dist/rpm-LMR25AQ3.js +111 -0
- package/packages/codemirror-markdown/dist/rpm-LMR25AQ3.js.map +7 -0
- package/packages/codemirror-markdown/dist/ruby-TSD6FT73.js +333 -0
- package/packages/codemirror-markdown/dist/ruby-TSD6FT73.js.map +7 -0
- package/packages/codemirror-markdown/dist/sas-6X4WWIGV.js +209 -0
- package/packages/codemirror-markdown/dist/sas-6X4WWIGV.js.map +7 -0
- package/packages/codemirror-markdown/dist/scheme-E3I46HBL.js +230 -0
- package/packages/codemirror-markdown/dist/scheme-E3I46HBL.js.map +7 -0
- package/packages/codemirror-markdown/dist/shell-GX3PRI4I.js +224 -0
- package/packages/codemirror-markdown/dist/shell-GX3PRI4I.js.map +7 -0
- package/packages/codemirror-markdown/dist/sieve-V65ZPL4F.js +137 -0
- package/packages/codemirror-markdown/dist/sieve-V65ZPL4F.js.map +7 -0
- package/packages/codemirror-markdown/dist/smalltalk-OVKP2CVW.js +123 -0
- package/packages/codemirror-markdown/dist/smalltalk-OVKP2CVW.js.map +7 -0
- package/packages/codemirror-markdown/dist/solr-C4DLQJCF.js +71 -0
- package/packages/codemirror-markdown/dist/solr-C4DLQJCF.js.map +7 -0
- package/packages/codemirror-markdown/dist/sparql-REKUW7B3.js +251 -0
- package/packages/codemirror-markdown/dist/sparql-REKUW7B3.js.map +7 -0
- package/packages/codemirror-markdown/dist/spreadsheet-S7NN2YTQ.js +89 -0
- package/packages/codemirror-markdown/dist/spreadsheet-S7NN2YTQ.js.map +7 -0
- package/packages/codemirror-markdown/dist/sql-ML2Q43YF.js +358 -0
- package/packages/codemirror-markdown/dist/sql-ML2Q43YF.js.map +7 -0
- package/packages/codemirror-markdown/dist/stex-TCOGKBT4.js +233 -0
- package/packages/codemirror-markdown/dist/stex-TCOGKBT4.js.map +7 -0
- package/packages/codemirror-markdown/dist/stylus-3ONNYZOM.js +591 -0
- package/packages/codemirror-markdown/dist/stylus-3ONNYZOM.js.map +7 -0
- package/packages/codemirror-markdown/dist/swift-CNWGZ22Y.js +293 -0
- package/packages/codemirror-markdown/dist/swift-CNWGZ22Y.js.map +7 -0
- package/packages/codemirror-markdown/dist/tcl-77IMAZYE.js +116 -0
- package/packages/codemirror-markdown/dist/tcl-77IMAZYE.js.map +7 -0
- package/packages/codemirror-markdown/dist/textile-6IWIIKFM.js +416 -0
- package/packages/codemirror-markdown/dist/textile-6IWIIKFM.js.map +7 -0
- package/packages/codemirror-markdown/dist/tiddlywiki-IJSZMUSA.js +231 -0
- package/packages/codemirror-markdown/dist/tiddlywiki-IJSZMUSA.js.map +7 -0
- package/packages/codemirror-markdown/dist/tiki-HG37JJIT.js +276 -0
- package/packages/codemirror-markdown/dist/tiki-HG37JJIT.js.map +7 -0
- package/packages/codemirror-markdown/dist/toml-NINU2IMM.js +78 -0
- package/packages/codemirror-markdown/dist/toml-NINU2IMM.js.map +7 -0
- package/packages/codemirror-markdown/dist/troff-AOQJ4Q4C.js +63 -0
- package/packages/codemirror-markdown/dist/troff-AOQJ4Q4C.js.map +7 -0
- package/packages/codemirror-markdown/dist/ttcn-TLOZ3FX3.js +211 -0
- package/packages/codemirror-markdown/dist/ttcn-TLOZ3FX3.js.map +7 -0
- package/packages/codemirror-markdown/dist/ttcn-cfg-3B6QY7QE.js +141 -0
- package/packages/codemirror-markdown/dist/ttcn-cfg-3B6QY7QE.js.map +7 -0
- package/packages/codemirror-markdown/dist/turtle-3N5KCGXP.js +132 -0
- package/packages/codemirror-markdown/dist/turtle-3N5KCGXP.js.map +7 -0
- package/packages/codemirror-markdown/dist/vb-I7M5DRLP.js +204 -0
- package/packages/codemirror-markdown/dist/vb-I7M5DRLP.js.map +7 -0
- package/packages/codemirror-markdown/dist/vbscript-U2ARSJLD.js +482 -0
- package/packages/codemirror-markdown/dist/vbscript-U2ARSJLD.js.map +7 -0
- package/packages/codemirror-markdown/dist/velocity-R3AYP5XJ.js +151 -0
- package/packages/codemirror-markdown/dist/velocity-R3AYP5XJ.js.map +7 -0
- package/packages/codemirror-markdown/dist/verilog-7VEWVDW6.js +456 -0
- package/packages/codemirror-markdown/dist/verilog-7VEWVDW6.js.map +7 -0
- package/packages/codemirror-markdown/dist/vhdl-JZUPPGBA.js +162 -0
- package/packages/codemirror-markdown/dist/vhdl-JZUPPGBA.js.map +7 -0
- package/packages/codemirror-markdown/dist/webidl-SLQFEELK.js +206 -0
- package/packages/codemirror-markdown/dist/webidl-SLQFEELK.js.map +7 -0
- package/packages/codemirror-markdown/dist/xquery-VXP5KJ6N.js +532 -0
- package/packages/codemirror-markdown/dist/xquery-VXP5KJ6N.js.map +7 -0
- package/packages/codemirror-markdown/dist/yacas-JRBC4BEV.js +132 -0
- package/packages/codemirror-markdown/dist/yacas-JRBC4BEV.js.map +7 -0
- package/packages/codemirror-markdown/dist/z80-AJF6WLUV.js +95 -0
- package/packages/codemirror-markdown/dist/z80-AJF6WLUV.js.map +7 -0
- package/packages/codemirror-markdown/example.js +46 -0
- package/packages/codemirror-markdown/package.json +62 -0
- package/packages/commands/dist/main.js +504 -0
- package/packages/commands/dist/main.js.map +7 -0
- package/packages/commands/package.json +28 -0
- package/packages/contact/dist/ContactAvatar-FP32ZZH2.js +161 -0
- package/packages/contact/dist/ContactAvatar-FP32ZZH2.js.map +7 -0
- package/packages/contact/dist/ContactViewer-ZHEE6INW.js +60 -0
- package/packages/contact/dist/ContactViewer-ZHEE6INW.js.map +7 -0
- package/packages/contact/dist/InlineContactAvatar-VZDPEZV2.js +46 -0
- package/packages/contact/dist/InlineContactAvatar-VZDPEZV2.js.map +7 -0
- package/packages/contact/dist/chunk-MOZI4Y4O.js +54 -0
- package/packages/contact/dist/chunk-MOZI4Y4O.js.map +7 -0
- package/packages/contact/dist/datatype-ABVDVPWS.js +27 -0
- package/packages/contact/dist/datatype-ABVDVPWS.js.map +7 -0
- package/packages/contact/dist/tool.css +81 -0
- package/packages/contact/dist/tool.css.map +7 -0
- package/packages/contact/dist/tool.js +70 -0
- package/packages/contact/dist/tool.js.map +7 -0
- package/packages/contact/package.json +46 -0
- package/packages/folder/dist/datatype-HWGUFBTQ.js +27 -0
- package/packages/folder/dist/datatype-HWGUFBTQ.js.map +7 -0
- package/packages/folder/dist/index.js +27 -0
- package/packages/folder/dist/index.js.map +7 -0
- package/packages/folder/dist/tool-62JZAZRP.js +366 -0
- package/packages/folder/dist/tool-62JZAZRP.js.map +7 -0
- package/packages/folder/package.json +32 -0
- package/packages/sideboard/dist/account-bar-OJQC3J6W.js +2 -0
- package/packages/sideboard/dist/account-bar-OJQC3J6W.js.map +7 -0
- package/packages/sideboard/dist/chunk-32FICX7K.js +26 -0
- package/packages/sideboard/dist/chunk-32FICX7K.js.map +7 -0
- package/packages/sideboard/dist/chunk-3OYP6TVA.js +2 -0
- package/packages/sideboard/dist/chunk-3OYP6TVA.js.map +7 -0
- package/packages/sideboard/dist/chunk-FW4363Y4.js +2 -0
- package/packages/sideboard/dist/chunk-FW4363Y4.js.map +7 -0
- package/packages/sideboard/dist/chunk-QKYKEZU4.js +2 -0
- package/packages/sideboard/dist/chunk-QKYKEZU4.js.map +7 -0
- package/packages/sideboard/dist/document-list-panel-42LSXXCO.js +2 -0
- package/packages/sideboard/dist/document-list-panel-42LSXXCO.js.map +7 -0
- package/packages/sideboard/dist/index.css +2 -0
- package/packages/sideboard/dist/index.css.map +7 -0
- package/packages/sideboard/dist/index.js +2 -0
- package/packages/sideboard/dist/index.js.map +7 -0
- package/packages/sideboard/dist/sideboard/sideboard.js +2 -0
- package/packages/sideboard/dist/sideboard/sideboard.js.map +7 -0
- package/packages/sideboard/package.json +56 -0
- package/packages/theming/dist/active-theme-K27UXDBG.js +26 -0
- package/packages/theming/dist/active-theme-K27UXDBG.js.map +7 -0
- package/packages/theming/dist/chunk-K4OOO2TK.js +281 -0
- package/packages/theming/dist/chunk-K4OOO2TK.js.map +7 -0
- package/packages/theming/dist/chunk-RATW7VZI.js +11 -0
- package/packages/theming/dist/chunk-RATW7VZI.js.map +7 -0
- package/packages/theming/dist/chunk-U7SC4JPE.js +86 -0
- package/packages/theming/dist/chunk-U7SC4JPE.js.map +7 -0
- package/packages/theming/dist/codemirror-theme.js +2415 -0
- package/packages/theming/dist/codemirror-theme.js.map +7 -0
- package/packages/theming/dist/datatype-UUJVIZM7.js +16 -0
- package/packages/theming/dist/datatype-UUJVIZM7.js.map +7 -0
- package/packages/theming/dist/gloom-JYQPEOHI.css +102 -0
- package/packages/theming/dist/lychee-BMLMUNP6.css +114 -0
- package/packages/theming/dist/main.js +112 -0
- package/packages/theming/dist/main.js.map +7 -0
- package/packages/theming/dist/theme-RC7MV6WP.css +691 -0
- package/packages/theming/dist/theme-editor-datatype-CIXRKEFF.js +11 -0
- package/packages/theming/dist/theme-editor-datatype-CIXRKEFF.js.map +7 -0
- package/packages/theming/dist/theme-editor.js +576 -0
- package/packages/theming/dist/theme-editor.js.map +7 -0
- package/packages/theming/dist/theme-titlebar-P2CODQGF.js +21 -0
- package/packages/theming/dist/theme-titlebar-P2CODQGF.js.map +7 -0
- package/packages/theming/dist/theme-tray-5L2KGCGD.js +351 -0
- package/packages/theming/dist/theme-tray-5L2KGCGD.js.map +7 -0
- package/packages/theming/dist/tool.js +405 -0
- package/packages/theming/dist/tool.js.map +7 -0
- package/packages/theming/package.json +48 -0
- package/packages/threepane/dist/IsolatedDocumentArea-LFSDWMIY.js +2 -0
- package/packages/threepane/dist/IsolatedDocumentArea-LFSDWMIY.js.map +7 -0
- package/packages/threepane/dist/PatchworkFrame-JTNZ6365.js +2 -0
- package/packages/threepane/dist/PatchworkFrame-JTNZ6365.js.map +7 -0
- package/packages/threepane/dist/chunk-7YXO2YGV.js +2 -0
- package/packages/threepane/dist/chunk-7YXO2YGV.js.map +7 -0
- package/packages/threepane/dist/chunk-FOMAU6H2.js +972 -0
- package/packages/threepane/dist/chunk-FOMAU6H2.js.map +7 -0
- package/packages/threepane/dist/chunk-FW4363Y4.js +2 -0
- package/packages/threepane/dist/chunk-FW4363Y4.js.map +7 -0
- package/packages/threepane/dist/datatypes-FKBTWAO7.js +2 -0
- package/packages/threepane/dist/datatypes-FKBTWAO7.js.map +7 -0
- package/packages/threepane/dist/index.js +2 -0
- package/packages/threepane/dist/index.js.map +7 -0
- package/packages/threepane/package.json +42 -0
- package/packages/tldraw4/dist/chunk-IKZWERSR.js +38 -0
- package/packages/tldraw4/dist/chunk-IKZWERSR.js.map +7 -0
- package/packages/tldraw4/dist/chunk-VF5CY24G.js +140894 -0
- package/packages/tldraw4/dist/chunk-VF5CY24G.js.map +7 -0
- package/packages/tldraw4/dist/datatype.js +46 -0
- package/packages/tldraw4/dist/datatype.js.map +7 -0
- package/packages/tldraw4/dist/main.css +3202 -0
- package/packages/tldraw4/dist/main.css.map +7 -0
- package/packages/tldraw4/dist/main.js +42 -0
- package/packages/tldraw4/dist/main.js.map +7 -0
- package/packages/tldraw4/dist/tool.js +8767 -0
- package/packages/tldraw4/dist/tool.js.map +7 -0
- package/packages/tldraw4/package.json +62 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/@codemirror+legacy-modes@6.5.3/node_modules/@codemirror/legacy-modes/mode/erlang.js"],
|
|
4
|
+
"sourcesContent": ["/////////////////////////////////////////////////////////////////////////////\n// constants\n\nvar typeWords = [\n \"-type\", \"-spec\", \"-export_type\", \"-opaque\"];\n\nvar keywordWords = [\n \"after\",\"begin\",\"catch\",\"case\",\"cond\",\"end\",\"fun\",\"if\",\n \"let\",\"of\",\"query\",\"receive\",\"try\",\"when\"];\n\nvar separatorRE = /[\\->,;]/;\nvar separatorWords = [\n \"->\",\";\",\",\"];\n\nvar operatorAtomWords = [\n \"and\",\"andalso\",\"band\",\"bnot\",\"bor\",\"bsl\",\"bsr\",\"bxor\",\n \"div\",\"not\",\"or\",\"orelse\",\"rem\",\"xor\"];\n\nvar operatorSymbolRE = /[\\+\\-\\*\\/<>=\\|:!]/;\nvar operatorSymbolWords = [\n \"=\",\"+\",\"-\",\"*\",\"/\",\">\",\">=\",\"<\",\"=<\",\"=:=\",\"==\",\"=/=\",\"/=\",\"||\",\"<-\",\"!\"];\n\nvar openParenRE = /[<\\(\\[\\{]/;\nvar openParenWords = [\n \"<<\",\"(\",\"[\",\"{\"];\n\nvar closeParenRE = /[>\\)\\]\\}]/;\nvar closeParenWords = [\n \"}\",\"]\",\")\",\">>\"];\n\nvar guardWords = [\n \"is_atom\",\"is_binary\",\"is_bitstring\",\"is_boolean\",\"is_float\",\n \"is_function\",\"is_integer\",\"is_list\",\"is_number\",\"is_pid\",\n \"is_port\",\"is_record\",\"is_reference\",\"is_tuple\",\n \"atom\",\"binary\",\"bitstring\",\"boolean\",\"function\",\"integer\",\"list\",\n \"number\",\"pid\",\"port\",\"record\",\"reference\",\"tuple\"];\n\nvar bifWords = [\n \"abs\",\"adler32\",\"adler32_combine\",\"alive\",\"apply\",\"atom_to_binary\",\n \"atom_to_list\",\"binary_to_atom\",\"binary_to_existing_atom\",\n \"binary_to_list\",\"binary_to_term\",\"bit_size\",\"bitstring_to_list\",\n \"byte_size\",\"check_process_code\",\"contact_binary\",\"crc32\",\n \"crc32_combine\",\"date\",\"decode_packet\",\"delete_module\",\n \"disconnect_node\",\"element\",\"erase\",\"exit\",\"float\",\"float_to_list\",\n \"garbage_collect\",\"get\",\"get_keys\",\"group_leader\",\"halt\",\"hd\",\n \"integer_to_list\",\"internal_bif\",\"iolist_size\",\"iolist_to_binary\",\n \"is_alive\",\"is_atom\",\"is_binary\",\"is_bitstring\",\"is_boolean\",\n \"is_float\",\"is_function\",\"is_integer\",\"is_list\",\"is_number\",\"is_pid\",\n \"is_port\",\"is_process_alive\",\"is_record\",\"is_reference\",\"is_tuple\",\n \"length\",\"link\",\"list_to_atom\",\"list_to_binary\",\"list_to_bitstring\",\n \"list_to_existing_atom\",\"list_to_float\",\"list_to_integer\",\n \"list_to_pid\",\"list_to_tuple\",\"load_module\",\"make_ref\",\"module_loaded\",\n \"monitor_node\",\"node\",\"node_link\",\"node_unlink\",\"nodes\",\"notalive\",\n \"now\",\"open_port\",\"pid_to_list\",\"port_close\",\"port_command\",\n \"port_connect\",\"port_control\",\"pre_loaded\",\"process_flag\",\n \"process_info\",\"processes\",\"purge_module\",\"put\",\"register\",\n \"registered\",\"round\",\"self\",\"setelement\",\"size\",\"spawn\",\"spawn_link\",\n \"spawn_monitor\",\"spawn_opt\",\"split_binary\",\"statistics\",\n \"term_to_binary\",\"time\",\"throw\",\"tl\",\"trunc\",\"tuple_size\",\n \"tuple_to_list\",\"unlink\",\"unregister\",\"whereis\"];\n\n// upper case: [A-Z] [\u00D8-\u00DE] [\u00C0-\u00D6]\n// lower case: [a-z] [\u00DF-\u00F6] [\u00F8-\u00FF]\nvar anumRE = /[\\w@\u00D8-\u00DE\u00C0-\u00D6\u00DF-\u00F6\u00F8-\u00FF]/;\nvar escapesRE =\n /[0-7]{1,3}|[bdefnrstv\\\\\"']|\\^[a-zA-Z]|x[0-9a-zA-Z]{2}|x{[0-9a-zA-Z]+}/;\n\n/////////////////////////////////////////////////////////////////////////////\n// tokenizer\n\nfunction tokenizer(stream,state) {\n // in multi-line string\n if (state.in_string) {\n state.in_string = (!doubleQuote(stream));\n return rval(state,stream,\"string\");\n }\n\n // in multi-line atom\n if (state.in_atom) {\n state.in_atom = (!singleQuote(stream));\n return rval(state,stream,\"atom\");\n }\n\n // whitespace\n if (stream.eatSpace()) {\n return rval(state,stream,\"whitespace\");\n }\n\n // attributes and type specs\n if (!peekToken(state) &&\n stream.match(/-\\s*[a-z\u00DF-\u00F6\u00F8-\u00FF][\\w\u00D8-\u00DE\u00C0-\u00D6\u00DF-\u00F6\u00F8-\u00FF]*/)) {\n if (is_member(stream.current(),typeWords)) {\n return rval(state,stream,\"type\");\n }else{\n return rval(state,stream,\"attribute\");\n }\n }\n\n var ch = stream.next();\n\n // comment\n if (ch == '%') {\n stream.skipToEnd();\n return rval(state,stream,\"comment\");\n }\n\n // colon\n if (ch == \":\") {\n return rval(state,stream,\"colon\");\n }\n\n // macro\n if (ch == '?') {\n stream.eatSpace();\n stream.eatWhile(anumRE);\n return rval(state,stream,\"macro\");\n }\n\n // record\n if (ch == \"#\") {\n stream.eatSpace();\n stream.eatWhile(anumRE);\n return rval(state,stream,\"record\");\n }\n\n // dollar escape\n if (ch == \"$\") {\n if (stream.next() == \"\\\\\" && !stream.match(escapesRE)) {\n return rval(state,stream,\"error\");\n }\n return rval(state,stream,\"number\");\n }\n\n // dot\n if (ch == \".\") {\n return rval(state,stream,\"dot\");\n }\n\n // quoted atom\n if (ch == '\\'') {\n if (!(state.in_atom = (!singleQuote(stream)))) {\n if (stream.match(/\\s*\\/\\s*[0-9]/,false)) {\n stream.match(/\\s*\\/\\s*[0-9]/,true);\n return rval(state,stream,\"fun\"); // 'f'/0 style fun\n }\n if (stream.match(/\\s*\\(/,false) || stream.match(/\\s*:/,false)) {\n return rval(state,stream,\"function\");\n }\n }\n return rval(state,stream,\"atom\");\n }\n\n // string\n if (ch == '\"') {\n state.in_string = (!doubleQuote(stream));\n return rval(state,stream,\"string\");\n }\n\n // variable\n if (/[A-Z_\u00D8-\u00DE\u00C0-\u00D6]/.test(ch)) {\n stream.eatWhile(anumRE);\n return rval(state,stream,\"variable\");\n }\n\n // atom/keyword/BIF/function\n if (/[a-z_\u00DF-\u00F6\u00F8-\u00FF]/.test(ch)) {\n stream.eatWhile(anumRE);\n\n if (stream.match(/\\s*\\/\\s*[0-9]/,false)) {\n stream.match(/\\s*\\/\\s*[0-9]/,true);\n return rval(state,stream,\"fun\"); // f/0 style fun\n }\n\n var w = stream.current();\n\n if (is_member(w,keywordWords)) {\n return rval(state,stream,\"keyword\");\n }else if (is_member(w,operatorAtomWords)) {\n return rval(state,stream,\"operator\");\n }else if (stream.match(/\\s*\\(/,false)) {\n // 'put' and 'erlang:put' are bifs, 'foo:put' is not\n if (is_member(w,bifWords) &&\n ((peekToken(state).token != \":\") ||\n (peekToken(state,2).token == \"erlang\"))) {\n return rval(state,stream,\"builtin\");\n }else if (is_member(w,guardWords)) {\n return rval(state,stream,\"guard\");\n }else{\n return rval(state,stream,\"function\");\n }\n }else if (lookahead(stream) == \":\") {\n if (w == \"erlang\") {\n return rval(state,stream,\"builtin\");\n } else {\n return rval(state,stream,\"function\");\n }\n }else if (is_member(w,[\"true\",\"false\"])) {\n return rval(state,stream,\"boolean\");\n }else{\n return rval(state,stream,\"atom\");\n }\n }\n\n // number\n var digitRE = /[0-9]/;\n var radixRE = /[0-9a-zA-Z]/; // 36#zZ style int\n if (digitRE.test(ch)) {\n stream.eatWhile(digitRE);\n if (stream.eat('#')) { // 36#aZ style integer\n if (!stream.eatWhile(radixRE)) {\n stream.backUp(1); //\"36#\" - syntax error\n }\n } else if (stream.eat('.')) { // float\n if (!stream.eatWhile(digitRE)) {\n stream.backUp(1); // \"3.\" - probably end of function\n } else {\n if (stream.eat(/[eE]/)) { // float with exponent\n if (stream.eat(/[-+]/)) {\n if (!stream.eatWhile(digitRE)) {\n stream.backUp(2); // \"2e-\" - syntax error\n }\n } else {\n if (!stream.eatWhile(digitRE)) {\n stream.backUp(1); // \"2e\" - syntax error\n }\n }\n }\n }\n }\n return rval(state,stream,\"number\"); // normal integer\n }\n\n // open parens\n if (nongreedy(stream,openParenRE,openParenWords)) {\n return rval(state,stream,\"open_paren\");\n }\n\n // close parens\n if (nongreedy(stream,closeParenRE,closeParenWords)) {\n return rval(state,stream,\"close_paren\");\n }\n\n // separators\n if (greedy(stream,separatorRE,separatorWords)) {\n return rval(state,stream,\"separator\");\n }\n\n // operators\n if (greedy(stream,operatorSymbolRE,operatorSymbolWords)) {\n return rval(state,stream,\"operator\");\n }\n\n return rval(state,stream,null);\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// utilities\nfunction nongreedy(stream,re,words) {\n if (stream.current().length == 1 && re.test(stream.current())) {\n stream.backUp(1);\n while (re.test(stream.peek())) {\n stream.next();\n if (is_member(stream.current(),words)) {\n return true;\n }\n }\n stream.backUp(stream.current().length-1);\n }\n return false;\n}\n\nfunction greedy(stream,re,words) {\n if (stream.current().length == 1 && re.test(stream.current())) {\n while (re.test(stream.peek())) {\n stream.next();\n }\n while (0 < stream.current().length) {\n if (is_member(stream.current(),words)) {\n return true;\n }else{\n stream.backUp(1);\n }\n }\n stream.next();\n }\n return false;\n}\n\nfunction doubleQuote(stream) {\n return quote(stream, '\"', '\\\\');\n}\n\nfunction singleQuote(stream) {\n return quote(stream,'\\'','\\\\');\n}\n\nfunction quote(stream,quoteChar,escapeChar) {\n while (!stream.eol()) {\n var ch = stream.next();\n if (ch == quoteChar) {\n return true;\n }else if (ch == escapeChar) {\n stream.next();\n }\n }\n return false;\n}\n\nfunction lookahead(stream) {\n var m = stream.match(/^\\s*([^\\s%])/, false)\n return m ? m[1] : \"\";\n}\n\nfunction is_member(element,list) {\n return (-1 < list.indexOf(element));\n}\n\nfunction rval(state,stream,type) {\n\n // parse stack\n pushToken(state,realToken(type,stream));\n\n // map erlang token type to CodeMirror style class\n // erlang -> CodeMirror tag\n switch (type) {\n case \"atom\": return \"atom\";\n case \"attribute\": return \"attribute\";\n case \"boolean\": return \"atom\";\n case \"builtin\": return \"builtin\";\n case \"close_paren\": return null;\n case \"colon\": return null;\n case \"comment\": return \"comment\";\n case \"dot\": return null;\n case \"error\": return \"error\";\n case \"fun\": return \"meta\";\n case \"function\": return \"tag\";\n case \"guard\": return \"property\";\n case \"keyword\": return \"keyword\";\n case \"macro\": return \"macroName\";\n case \"number\": return \"number\";\n case \"open_paren\": return null;\n case \"operator\": return \"operator\";\n case \"record\": return \"bracket\";\n case \"separator\": return null;\n case \"string\": return \"string\";\n case \"type\": return \"def\";\n case \"variable\": return \"variable\";\n default: return null;\n }\n}\n\nfunction aToken(tok,col,ind,typ) {\n return {token: tok,\n column: col,\n indent: ind,\n type: typ};\n}\n\nfunction realToken(type,stream) {\n return aToken(stream.current(),\n stream.column(),\n stream.indentation(),\n type);\n}\n\nfunction fakeToken(type) {\n return aToken(type,0,0,type);\n}\n\nfunction peekToken(state,depth) {\n var len = state.tokenStack.length;\n var dep = (depth ? depth : 1);\n\n if (len < dep) {\n return false;\n }else{\n return state.tokenStack[len-dep];\n }\n}\n\nfunction pushToken(state,token) {\n\n if (!(token.type == \"comment\" || token.type == \"whitespace\")) {\n state.tokenStack = maybe_drop_pre(state.tokenStack,token);\n state.tokenStack = maybe_drop_post(state.tokenStack);\n }\n}\n\nfunction maybe_drop_pre(s,token) {\n var last = s.length-1;\n\n if (0 < last && s[last].type === \"record\" && token.type === \"dot\") {\n s.pop();\n }else if (0 < last && s[last].type === \"group\") {\n s.pop();\n s.push(token);\n }else{\n s.push(token);\n }\n return s;\n}\n\nfunction maybe_drop_post(s) {\n if (!s.length) return s\n var last = s.length-1;\n\n if (s[last].type === \"dot\") {\n return [];\n }\n if (last > 1 && s[last].type === \"fun\" && s[last-1].token === \"fun\") {\n return s.slice(0,last-1);\n }\n switch (s[last].token) {\n case \"}\": return d(s,{g:[\"{\"]});\n case \"]\": return d(s,{i:[\"[\"]});\n case \")\": return d(s,{i:[\"(\"]});\n case \">>\": return d(s,{i:[\"<<\"]});\n case \"end\": return d(s,{i:[\"begin\",\"case\",\"fun\",\"if\",\"receive\",\"try\"]});\n case \",\": return d(s,{e:[\"begin\",\"try\",\"when\",\"->\",\n \",\",\"(\",\"[\",\"{\",\"<<\"]});\n case \"->\": return d(s,{r:[\"when\"],\n m:[\"try\",\"if\",\"case\",\"receive\"]});\n case \";\": return d(s,{E:[\"case\",\"fun\",\"if\",\"receive\",\"try\",\"when\"]});\n case \"catch\":return d(s,{e:[\"try\"]});\n case \"of\": return d(s,{e:[\"case\"]});\n case \"after\":return d(s,{e:[\"receive\",\"try\"]});\n default: return s;\n }\n}\n\nfunction d(stack,tt) {\n // stack is a stack of Token objects.\n // tt is an object; {type:tokens}\n // type is a char, tokens is a list of token strings.\n // The function returns (possibly truncated) stack.\n // It will descend the stack, looking for a Token such that Token.token\n // is a member of tokens. If it does not find that, it will normally (but\n // see \"E\" below) return stack. If it does find a match, it will remove\n // all the Tokens between the top and the matched Token.\n // If type is \"m\", that is all it does.\n // If type is \"i\", it will also remove the matched Token and the top Token.\n // If type is \"g\", like \"i\", but add a fake \"group\" token at the top.\n // If type is \"r\", it will remove the matched Token, but not the top Token.\n // If type is \"e\", it will keep the matched Token but not the top Token.\n // If type is \"E\", it behaves as for type \"e\", except if there is no match,\n // in which case it will return an empty stack.\n\n for (var type in tt) {\n var len = stack.length-1;\n var tokens = tt[type];\n for (var i = len-1; -1 < i ; i--) {\n if (is_member(stack[i].token,tokens)) {\n var ss = stack.slice(0,i);\n switch (type) {\n case \"m\": return ss.concat(stack[i]).concat(stack[len]);\n case \"r\": return ss.concat(stack[len]);\n case \"i\": return ss;\n case \"g\": return ss.concat(fakeToken(\"group\"));\n case \"E\": return ss.concat(stack[i]);\n case \"e\": return ss.concat(stack[i]);\n }\n }\n }\n }\n return (type == \"E\" ? [] : stack);\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// indenter\n\nfunction indenter(state, textAfter, cx) {\n var t;\n var wordAfter = wordafter(textAfter);\n var currT = peekToken(state,1);\n var prevT = peekToken(state,2);\n\n if (state.in_string || state.in_atom) {\n return null;\n }else if (!prevT) {\n return 0;\n }else if (currT.token == \"when\") {\n return currT.column + cx.unit;\n }else if (wordAfter === \"when\" && prevT.type === \"function\") {\n return prevT.indent+cx.unit;\n }else if (wordAfter === \"(\" && currT.token === \"fun\") {\n return currT.column+3;\n }else if (wordAfter === \"catch\" && (t = getToken(state,[\"try\"]))) {\n return t.column;\n }else if (is_member(wordAfter,[\"end\",\"after\",\"of\"])) {\n t = getToken(state,[\"begin\",\"case\",\"fun\",\"if\",\"receive\",\"try\"]);\n return t ? t.column : null;\n }else if (is_member(wordAfter,closeParenWords)) {\n t = getToken(state,openParenWords);\n return t ? t.column : null;\n }else if (is_member(currT.token,[\",\",\"|\",\"||\"]) ||\n is_member(wordAfter,[\",\",\"|\",\"||\"])) {\n t = postcommaToken(state);\n return t ? t.column+t.token.length : cx.unit;\n }else if (currT.token == \"->\") {\n if (is_member(prevT.token, [\"receive\",\"case\",\"if\",\"try\"])) {\n return prevT.column+cx.unit+cx.unit;\n }else{\n return prevT.column+cx.unit;\n }\n }else if (is_member(currT.token,openParenWords)) {\n return currT.column+currT.token.length;\n }else{\n t = defaultToken(state);\n return truthy(t) ? t.column+cx.unit : 0;\n }\n}\n\nfunction wordafter(str) {\n var m = str.match(/,|[a-z]+|\\}|\\]|\\)|>>|\\|+|\\(/);\n\n return truthy(m) && (m.index === 0) ? m[0] : \"\";\n}\n\nfunction postcommaToken(state) {\n var objs = state.tokenStack.slice(0,-1);\n var i = getTokenIndex(objs,\"type\",[\"open_paren\"]);\n\n return truthy(objs[i]) ? objs[i] : false;\n}\n\nfunction defaultToken(state) {\n var objs = state.tokenStack;\n var stop = getTokenIndex(objs,\"type\",[\"open_paren\",\"separator\",\"keyword\"]);\n var oper = getTokenIndex(objs,\"type\",[\"operator\"]);\n\n if (truthy(stop) && truthy(oper) && stop < oper) {\n return objs[stop+1];\n } else if (truthy(stop)) {\n return objs[stop];\n } else {\n return false;\n }\n}\n\nfunction getToken(state,tokens) {\n var objs = state.tokenStack;\n var i = getTokenIndex(objs,\"token\",tokens);\n\n return truthy(objs[i]) ? objs[i] : false;\n}\n\nfunction getTokenIndex(objs,propname,propvals) {\n\n for (var i = objs.length-1; -1 < i ; i--) {\n if (is_member(objs[i][propname],propvals)) {\n return i;\n }\n }\n return false;\n}\n\nfunction truthy(x) {\n return (x !== false) && (x != null);\n}\n\n/////////////////////////////////////////////////////////////////////////////\n// this object defines the mode\n\nexport const erlang = {\n name: \"erlang\",\n startState() {\n return {tokenStack: [],\n in_string: false,\n in_atom: false};\n },\n\n token: tokenizer,\n\n indent: indenter,\n\n languageData: {\n commentTokens: {line: \"%\"}\n }\n};\n\n"],
|
|
5
|
+
"mappings": ";AAGA,IAAI,YAAY;AAAA,EACd;AAAA,EAAS;AAAA,EAAS;AAAA,EAAgB;AAAS;AAE7C,IAAI,eAAe;AAAA,EACjB;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAM;AAAA,EAClD;AAAA,EAAM;AAAA,EAAK;AAAA,EAAQ;AAAA,EAAU;AAAA,EAAM;AAAM;AAE3C,IAAI,cAAiB;AACrB,IAAI,iBAAiB;AAAA,EACnB;AAAA,EAAK;AAAA,EAAI;AAAG;AAEd,IAAI,oBAAoB;AAAA,EACtB;AAAA,EAAM;AAAA,EAAU;AAAA,EAAO;AAAA,EAAO;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAChD;AAAA,EAAM;AAAA,EAAM;AAAA,EAAK;AAAA,EAAS;AAAA,EAAM;AAAK;AAEvC,IAAI,mBAAsB;AAC1B,IAAI,sBAAsB;AAAA,EACxB;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAM;AAAA,EAAK;AAAA,EAAM;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAG;AAE3E,IAAI,cAAiB;AACrB,IAAI,iBAAiB;AAAA,EACnB;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAG;AAElB,IAAI,eAAkB;AACtB,IAAI,kBAAkB;AAAA,EACpB;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAI;AAElB,IAAI,aAAa;AAAA,EACf;AAAA,EAAU;AAAA,EAAY;AAAA,EAAe;AAAA,EAAa;AAAA,EAClD;AAAA,EAAc;AAAA,EAAa;AAAA,EAAU;AAAA,EAAY;AAAA,EACjD;AAAA,EAAU;AAAA,EAAY;AAAA,EAAe;AAAA,EACrC;AAAA,EAAO;AAAA,EAAS;AAAA,EAAY;AAAA,EAAU;AAAA,EAAW;AAAA,EAAU;AAAA,EAC3D;AAAA,EAAS;AAAA,EAAM;AAAA,EAAO;AAAA,EAAS;AAAA,EAAY;AAAO;AAEpD,IAAI,WAAW;AAAA,EACb;AAAA,EAAM;AAAA,EAAU;AAAA,EAAkB;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAClD;AAAA,EAAe;AAAA,EAAiB;AAAA,EAChC;AAAA,EAAiB;AAAA,EAAiB;AAAA,EAAW;AAAA,EAC7C;AAAA,EAAY;AAAA,EAAqB;AAAA,EAAiB;AAAA,EAClD;AAAA,EAAgB;AAAA,EAAO;AAAA,EAAgB;AAAA,EACvC;AAAA,EAAkB;AAAA,EAAU;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAQ;AAAA,EACnD;AAAA,EAAkB;AAAA,EAAM;AAAA,EAAW;AAAA,EAAe;AAAA,EAAO;AAAA,EACzD;AAAA,EAAkB;AAAA,EAAe;AAAA,EAAc;AAAA,EAC/C;AAAA,EAAW;AAAA,EAAU;AAAA,EAAY;AAAA,EAAe;AAAA,EAChD;AAAA,EAAW;AAAA,EAAc;AAAA,EAAa;AAAA,EAAU;AAAA,EAAY;AAAA,EAC5D;AAAA,EAAU;AAAA,EAAmB;AAAA,EAAY;AAAA,EAAe;AAAA,EACxD;AAAA,EAAS;AAAA,EAAO;AAAA,EAAe;AAAA,EAAiB;AAAA,EAChD;AAAA,EAAwB;AAAA,EAAgB;AAAA,EACxC;AAAA,EAAc;AAAA,EAAgB;AAAA,EAAc;AAAA,EAAW;AAAA,EACvD;AAAA,EAAe;AAAA,EAAO;AAAA,EAAY;AAAA,EAAc;AAAA,EAAQ;AAAA,EACxD;AAAA,EAAM;AAAA,EAAY;AAAA,EAAc;AAAA,EAAa;AAAA,EAC7C;AAAA,EAAe;AAAA,EAAe;AAAA,EAAa;AAAA,EAC3C;AAAA,EAAe;AAAA,EAAY;AAAA,EAAe;AAAA,EAAM;AAAA,EAChD;AAAA,EAAa;AAAA,EAAQ;AAAA,EAAO;AAAA,EAAa;AAAA,EAAO;AAAA,EAAQ;AAAA,EACxD;AAAA,EAAgB;AAAA,EAAY;AAAA,EAAe;AAAA,EAC3C;AAAA,EAAiB;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAK;AAAA,EAAQ;AAAA,EAC7C;AAAA,EAAgB;AAAA,EAAS;AAAA,EAAa;AAAS;AAIjD,IAAI,SAAe;AACnB,IAAI,YACA;AAKJ,SAAS,UAAU,QAAO,OAAO;AAE/B,MAAI,MAAM,WAAW;AACnB,UAAM,YAAa,CAAC,YAAY,MAAM;AACtC,WAAO,KAAK,OAAM,QAAO,QAAQ;AAAA,EACnC;AAGA,MAAI,MAAM,SAAS;AACjB,UAAM,UAAW,CAAC,YAAY,MAAM;AACpC,WAAO,KAAK,OAAM,QAAO,MAAM;AAAA,EACjC;AAGA,MAAI,OAAO,SAAS,GAAG;AACrB,WAAO,KAAK,OAAM,QAAO,YAAY;AAAA,EACvC;AAGA,MAAI,CAAC,UAAU,KAAK,KAChB,OAAO,MAAM,kCAAkC,GAAG;AACpD,QAAI,UAAU,OAAO,QAAQ,GAAE,SAAS,GAAG;AACzC,aAAO,KAAK,OAAM,QAAO,MAAM;AAAA,IACjC,OAAK;AACH,aAAO,KAAK,OAAM,QAAO,WAAW;AAAA,IACtC;AAAA,EACF;AAEA,MAAI,KAAK,OAAO,KAAK;AAGrB,MAAI,MAAM,KAAK;AACb,WAAO,UAAU;AACjB,WAAO,KAAK,OAAM,QAAO,SAAS;AAAA,EACpC;AAGA,MAAI,MAAM,KAAK;AACb,WAAO,KAAK,OAAM,QAAO,OAAO;AAAA,EAClC;AAGA,MAAI,MAAM,KAAK;AACb,WAAO,SAAS;AAChB,WAAO,SAAS,MAAM;AACtB,WAAO,KAAK,OAAM,QAAO,OAAO;AAAA,EAClC;AAGA,MAAI,MAAM,KAAK;AACb,WAAO,SAAS;AAChB,WAAO,SAAS,MAAM;AACtB,WAAO,KAAK,OAAM,QAAO,QAAQ;AAAA,EACnC;AAGA,MAAI,MAAM,KAAK;AACb,QAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,OAAO,MAAM,SAAS,GAAG;AACrD,aAAO,KAAK,OAAM,QAAO,OAAO;AAAA,IAClC;AACA,WAAO,KAAK,OAAM,QAAO,QAAQ;AAAA,EACnC;AAGA,MAAI,MAAM,KAAK;AACb,WAAO,KAAK,OAAM,QAAO,KAAK;AAAA,EAChC;AAGA,MAAI,MAAM,KAAM;AACd,QAAI,EAAE,MAAM,UAAW,CAAC,YAAY,MAAM,IAAK;AAC7C,UAAI,OAAO,MAAM,iBAAgB,KAAK,GAAG;AACvC,eAAO,MAAM,iBAAgB,IAAI;AACjC,eAAO,KAAK,OAAM,QAAO,KAAK;AAAA,MAChC;AACA,UAAI,OAAO,MAAM,SAAQ,KAAK,KAAK,OAAO,MAAM,QAAO,KAAK,GAAG;AAC7D,eAAO,KAAK,OAAM,QAAO,UAAU;AAAA,MACrC;AAAA,IACF;AACA,WAAO,KAAK,OAAM,QAAO,MAAM;AAAA,EACjC;AAGA,MAAI,MAAM,KAAK;AACb,UAAM,YAAa,CAAC,YAAY,MAAM;AACtC,WAAO,KAAK,OAAM,QAAO,QAAQ;AAAA,EACnC;AAGA,MAAI,eAAe,KAAK,EAAE,GAAG;AAC3B,WAAO,SAAS,MAAM;AACtB,WAAO,KAAK,OAAM,QAAO,UAAU;AAAA,EACrC;AAGA,MAAI,eAAe,KAAK,EAAE,GAAG;AAC3B,WAAO,SAAS,MAAM;AAEtB,QAAI,OAAO,MAAM,iBAAgB,KAAK,GAAG;AACvC,aAAO,MAAM,iBAAgB,IAAI;AACjC,aAAO,KAAK,OAAM,QAAO,KAAK;AAAA,IAChC;AAEA,QAAI,IAAI,OAAO,QAAQ;AAEvB,QAAI,UAAU,GAAE,YAAY,GAAG;AAC7B,aAAO,KAAK,OAAM,QAAO,SAAS;AAAA,IACpC,WAAU,UAAU,GAAE,iBAAiB,GAAG;AACxC,aAAO,KAAK,OAAM,QAAO,UAAU;AAAA,IACrC,WAAU,OAAO,MAAM,SAAQ,KAAK,GAAG;AAErC,UAAI,UAAU,GAAE,QAAQ,MAClB,UAAU,KAAK,EAAE,SAAS,OAC1B,UAAU,OAAM,CAAC,EAAE,SAAS,WAAY;AAC5C,eAAO,KAAK,OAAM,QAAO,SAAS;AAAA,MACpC,WAAU,UAAU,GAAE,UAAU,GAAG;AACjC,eAAO,KAAK,OAAM,QAAO,OAAO;AAAA,MAClC,OAAK;AACH,eAAO,KAAK,OAAM,QAAO,UAAU;AAAA,MACrC;AAAA,IACF,WAAU,UAAU,MAAM,KAAK,KAAK;AAClC,UAAI,KAAK,UAAU;AACjB,eAAO,KAAK,OAAM,QAAO,SAAS;AAAA,MACpC,OAAO;AACL,eAAO,KAAK,OAAM,QAAO,UAAU;AAAA,MACrC;AAAA,IACF,WAAU,UAAU,GAAE,CAAC,QAAO,OAAO,CAAC,GAAG;AACvC,aAAO,KAAK,OAAM,QAAO,SAAS;AAAA,IACpC,OAAK;AACH,aAAO,KAAK,OAAM,QAAO,MAAM;AAAA,IACjC;AAAA,EACF;AAGA,MAAI,UAAe;AACnB,MAAI,UAAe;AACnB,MAAI,QAAQ,KAAK,EAAE,GAAG;AACpB,WAAO,SAAS,OAAO;AACvB,QAAI,OAAO,IAAI,GAAG,GAAG;AACnB,UAAI,CAAC,OAAO,SAAS,OAAO,GAAG;AAC7B,eAAO,OAAO,CAAC;AAAA,MACjB;AAAA,IACF,WAAW,OAAO,IAAI,GAAG,GAAG;AAC1B,UAAI,CAAC,OAAO,SAAS,OAAO,GAAG;AAC7B,eAAO,OAAO,CAAC;AAAA,MACjB,OAAO;AACL,YAAI,OAAO,IAAI,MAAM,GAAG;AACtB,cAAI,OAAO,IAAI,MAAM,GAAG;AACtB,gBAAI,CAAC,OAAO,SAAS,OAAO,GAAG;AAC7B,qBAAO,OAAO,CAAC;AAAA,YACjB;AAAA,UACF,OAAO;AACL,gBAAI,CAAC,OAAO,SAAS,OAAO,GAAG;AAC7B,qBAAO,OAAO,CAAC;AAAA,YACjB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK,OAAM,QAAO,QAAQ;AAAA,EACnC;AAGA,MAAI,UAAU,QAAO,aAAY,cAAc,GAAG;AAChD,WAAO,KAAK,OAAM,QAAO,YAAY;AAAA,EACvC;AAGA,MAAI,UAAU,QAAO,cAAa,eAAe,GAAG;AAClD,WAAO,KAAK,OAAM,QAAO,aAAa;AAAA,EACxC;AAGA,MAAI,OAAO,QAAO,aAAY,cAAc,GAAG;AAC7C,WAAO,KAAK,OAAM,QAAO,WAAW;AAAA,EACtC;AAGA,MAAI,OAAO,QAAO,kBAAiB,mBAAmB,GAAG;AACvD,WAAO,KAAK,OAAM,QAAO,UAAU;AAAA,EACrC;AAEA,SAAO,KAAK,OAAM,QAAO,IAAI;AAC/B;AAIA,SAAS,UAAU,QAAO,IAAG,OAAO;AAClC,MAAI,OAAO,QAAQ,EAAE,UAAU,KAAK,GAAG,KAAK,OAAO,QAAQ,CAAC,GAAG;AAC7D,WAAO,OAAO,CAAC;AACf,WAAO,GAAG,KAAK,OAAO,KAAK,CAAC,GAAG;AAC7B,aAAO,KAAK;AACZ,UAAI,UAAU,OAAO,QAAQ,GAAE,KAAK,GAAG;AACrC,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO,OAAO,OAAO,QAAQ,EAAE,SAAO,CAAC;AAAA,EACzC;AACA,SAAO;AACT;AAEA,SAAS,OAAO,QAAO,IAAG,OAAO;AAC/B,MAAI,OAAO,QAAQ,EAAE,UAAU,KAAK,GAAG,KAAK,OAAO,QAAQ,CAAC,GAAG;AAC7D,WAAO,GAAG,KAAK,OAAO,KAAK,CAAC,GAAG;AAC7B,aAAO,KAAK;AAAA,IACd;AACA,WAAO,IAAI,OAAO,QAAQ,EAAE,QAAQ;AAClC,UAAI,UAAU,OAAO,QAAQ,GAAE,KAAK,GAAG;AACrC,eAAO;AAAA,MACT,OAAK;AACH,eAAO,OAAO,CAAC;AAAA,MACjB;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AACA,SAAO;AACT;AAEA,SAAS,YAAY,QAAQ;AAC3B,SAAO,MAAM,QAAQ,KAAK,IAAI;AAChC;AAEA,SAAS,YAAY,QAAQ;AAC3B,SAAO,MAAM,QAAO,KAAK,IAAI;AAC/B;AAEA,SAAS,MAAM,QAAO,WAAU,YAAY;AAC1C,SAAO,CAAC,OAAO,IAAI,GAAG;AACpB,QAAI,KAAK,OAAO,KAAK;AACrB,QAAI,MAAM,WAAW;AACnB,aAAO;AAAA,IACT,WAAU,MAAM,YAAY;AAC1B,aAAO,KAAK;AAAA,IACd;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,UAAU,QAAQ;AACzB,MAAI,IAAI,OAAO,MAAM,gBAAgB,KAAK;AAC1C,SAAO,IAAI,EAAE,CAAC,IAAI;AACpB;AAEA,SAAS,UAAU,SAAQ,MAAM;AAC/B,SAAQ,KAAK,KAAK,QAAQ,OAAO;AACnC;AAEA,SAAS,KAAK,OAAM,QAAO,MAAM;AAG/B,YAAU,OAAM,UAAU,MAAK,MAAM,CAAC;AAItC,UAAQ,MAAM;AAAA,IACd,KAAK;AAAe,aAAO;AAAA,IAC3B,KAAK;AAAe,aAAO;AAAA,IAC3B,KAAK;AAAe,aAAO;AAAA,IAC3B,KAAK;AAAe,aAAO;AAAA,IAC3B,KAAK;AAAe,aAAO;AAAA,IAC3B,KAAK;AAAe,aAAO;AAAA,IAC3B,KAAK;AAAe,aAAO;AAAA,IAC3B,KAAK;AAAe,aAAO;AAAA,IAC3B,KAAK;AAAe,aAAO;AAAA,IAC3B,KAAK;AAAe,aAAO;AAAA,IAC3B,KAAK;AAAe,aAAO;AAAA,IAC3B,KAAK;AAAe,aAAO;AAAA,IAC3B,KAAK;AAAe,aAAO;AAAA,IAC3B,KAAK;AAAe,aAAO;AAAA,IAC3B,KAAK;AAAe,aAAO;AAAA,IAC3B,KAAK;AAAe,aAAO;AAAA,IAC3B,KAAK;AAAe,aAAO;AAAA,IAC3B,KAAK;AAAe,aAAO;AAAA,IAC3B,KAAK;AAAe,aAAO;AAAA,IAC3B,KAAK;AAAe,aAAO;AAAA,IAC3B,KAAK;AAAe,aAAO;AAAA,IAC3B,KAAK;AAAe,aAAO;AAAA,IAC3B;AAAoB,aAAO;AAAA,EAC3B;AACF;AAEA,SAAS,OAAO,KAAI,KAAI,KAAI,KAAK;AAC/B,SAAO;AAAA,IAAC,OAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAQ;AAAA,EAAG;AACrB;AAEA,SAAS,UAAU,MAAK,QAAQ;AAC9B,SAAO;AAAA,IAAO,OAAO,QAAQ;AAAA,IACf,OAAO,OAAO;AAAA,IACd,OAAO,YAAY;AAAA,IACnB;AAAA,EAAI;AACpB;AAEA,SAAS,UAAU,MAAM;AACvB,SAAO,OAAO,MAAK,GAAE,GAAE,IAAI;AAC7B;AAEA,SAAS,UAAU,OAAM,OAAO;AAC9B,MAAI,MAAM,MAAM,WAAW;AAC3B,MAAI,MAAO,QAAQ,QAAQ;AAE3B,MAAI,MAAM,KAAK;AACb,WAAO;AAAA,EACT,OAAK;AACH,WAAO,MAAM,WAAW,MAAI,GAAG;AAAA,EACjC;AACF;AAEA,SAAS,UAAU,OAAM,OAAO;AAE9B,MAAI,EAAE,MAAM,QAAQ,aAAa,MAAM,QAAQ,eAAe;AAC5D,UAAM,aAAa,eAAe,MAAM,YAAW,KAAK;AACxD,UAAM,aAAa,gBAAgB,MAAM,UAAU;AAAA,EACrD;AACF;AAEA,SAAS,eAAe,GAAE,OAAO;AAC/B,MAAI,OAAO,EAAE,SAAO;AAEpB,MAAI,IAAI,QAAQ,EAAE,IAAI,EAAE,SAAS,YAAY,MAAM,SAAS,OAAO;AACjE,MAAE,IAAI;AAAA,EACR,WAAU,IAAI,QAAQ,EAAE,IAAI,EAAE,SAAS,SAAS;AAC9C,MAAE,IAAI;AACN,MAAE,KAAK,KAAK;AAAA,EACd,OAAK;AACH,MAAE,KAAK,KAAK;AAAA,EACd;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,GAAG;AAC1B,MAAI,CAAC,EAAE,OAAQ,QAAO;AACtB,MAAI,OAAO,EAAE,SAAO;AAEpB,MAAI,EAAE,IAAI,EAAE,SAAS,OAAO;AAC1B,WAAO,CAAC;AAAA,EACV;AACA,MAAI,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,SAAS,EAAE,OAAK,CAAC,EAAE,UAAU,OAAO;AACnE,WAAO,EAAE,MAAM,GAAE,OAAK,CAAC;AAAA,EACzB;AACA,UAAQ,EAAE,IAAI,EAAE,OAAO;AAAA,IACvB,KAAK;AAAQ,aAAO,EAAE,GAAE,EAAC,GAAE,CAAC,GAAG,EAAC,CAAC;AAAA,IACjC,KAAK;AAAQ,aAAO,EAAE,GAAE,EAAC,GAAE,CAAC,GAAG,EAAC,CAAC;AAAA,IACjC,KAAK;AAAQ,aAAO,EAAE,GAAE,EAAC,GAAE,CAAC,GAAG,EAAC,CAAC;AAAA,IACjC,KAAK;AAAQ,aAAO,EAAE,GAAE,EAAC,GAAE,CAAC,IAAI,EAAC,CAAC;AAAA,IAClC,KAAK;AAAQ,aAAO,EAAE,GAAE,EAAC,GAAE,CAAC,SAAQ,QAAO,OAAM,MAAK,WAAU,KAAK,EAAC,CAAC;AAAA,IACvE,KAAK;AAAQ,aAAO,EAAE,GAAE,EAAC,GAAE;AAAA,QAAC;AAAA,QAAQ;AAAA,QAAM;AAAA,QAAO;AAAA,QACrB;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,QAAI;AAAA,MAAI,EAAC,CAAC;AAAA,IAClD,KAAK;AAAQ,aAAO,EAAE,GAAE;AAAA,QAAC,GAAE,CAAC,MAAM;AAAA,QACT,GAAE,CAAC,OAAM,MAAK,QAAO,SAAS;AAAA,MAAC,CAAC;AAAA,IACzD,KAAK;AAAQ,aAAO,EAAE,GAAE,EAAC,GAAE,CAAC,QAAO,OAAM,MAAK,WAAU,OAAM,MAAM,EAAC,CAAC;AAAA,IACtE,KAAK;AAAQ,aAAO,EAAE,GAAE,EAAC,GAAE,CAAC,KAAK,EAAC,CAAC;AAAA,IACnC,KAAK;AAAQ,aAAO,EAAE,GAAE,EAAC,GAAE,CAAC,MAAM,EAAC,CAAC;AAAA,IACpC,KAAK;AAAQ,aAAO,EAAE,GAAE,EAAC,GAAE,CAAC,WAAU,KAAK,EAAC,CAAC;AAAA,IAC7C;AAAa,aAAO;AAAA,EACpB;AACF;AAEA,SAAS,EAAE,OAAM,IAAI;AAiBnB,WAAS,QAAQ,IAAI;AACnB,QAAI,MAAM,MAAM,SAAO;AACvB,QAAI,SAAS,GAAG,IAAI;AACpB,aAAS,IAAI,MAAI,GAAG,KAAK,GAAI,KAAK;AAChC,UAAI,UAAU,MAAM,CAAC,EAAE,OAAM,MAAM,GAAG;AACpC,YAAI,KAAK,MAAM,MAAM,GAAE,CAAC;AACxB,gBAAQ,MAAM;AAAA,UACd,KAAK;AAAK,mBAAO,GAAG,OAAO,MAAM,CAAC,CAAC,EAAE,OAAO,MAAM,GAAG,CAAC;AAAA,UACtD,KAAK;AAAK,mBAAO,GAAG,OAAO,MAAM,GAAG,CAAC;AAAA,UACrC,KAAK;AAAK,mBAAO;AAAA,UACjB,KAAK;AAAK,mBAAO,GAAG,OAAO,UAAU,OAAO,CAAC;AAAA,UAC7C,KAAK;AAAK,mBAAO,GAAG,OAAO,MAAM,CAAC,CAAC;AAAA,UACnC,KAAK;AAAK,mBAAO,GAAG,OAAO,MAAM,CAAC,CAAC;AAAA,QACnC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAQ,QAAQ,MAAM,CAAC,IAAI;AAC7B;AAKA,SAAS,SAAS,OAAO,WAAW,IAAI;AACtC,MAAI;AACJ,MAAI,YAAY,UAAU,SAAS;AACnC,MAAI,QAAQ,UAAU,OAAM,CAAC;AAC7B,MAAI,QAAQ,UAAU,OAAM,CAAC;AAE7B,MAAI,MAAM,aAAa,MAAM,SAAS;AACpC,WAAO;AAAA,EACT,WAAU,CAAC,OAAO;AAChB,WAAO;AAAA,EACT,WAAU,MAAM,SAAS,QAAQ;AAC/B,WAAO,MAAM,SAAS,GAAG;AAAA,EAC3B,WAAU,cAAc,UAAU,MAAM,SAAS,YAAY;AAC3D,WAAO,MAAM,SAAO,GAAG;AAAA,EACzB,WAAU,cAAc,OAAO,MAAM,UAAU,OAAO;AACpD,WAAQ,MAAM,SAAO;AAAA,EACvB,WAAU,cAAc,YAAY,IAAI,SAAS,OAAM,CAAC,KAAK,CAAC,IAAI;AAChE,WAAO,EAAE;AAAA,EACX,WAAU,UAAU,WAAU,CAAC,OAAM,SAAQ,IAAI,CAAC,GAAG;AACnD,QAAI,SAAS,OAAM,CAAC,SAAQ,QAAO,OAAM,MAAK,WAAU,KAAK,CAAC;AAC9D,WAAO,IAAI,EAAE,SAAS;AAAA,EACxB,WAAU,UAAU,WAAU,eAAe,GAAG;AAC9C,QAAI,SAAS,OAAM,cAAc;AACjC,WAAO,IAAI,EAAE,SAAS;AAAA,EACxB,WAAU,UAAU,MAAM,OAAM,CAAC,KAAI,KAAI,IAAI,CAAC,KACpC,UAAU,WAAU,CAAC,KAAI,KAAI,IAAI,CAAC,GAAG;AAC7C,QAAI,eAAe,KAAK;AACxB,WAAO,IAAI,EAAE,SAAO,EAAE,MAAM,SAAS,GAAG;AAAA,EAC1C,WAAU,MAAM,SAAS,MAAM;AAC7B,QAAI,UAAU,MAAM,OAAO,CAAC,WAAU,QAAO,MAAK,KAAK,CAAC,GAAG;AACzD,aAAO,MAAM,SAAO,GAAG,OAAK,GAAG;AAAA,IACjC,OAAK;AACH,aAAO,MAAM,SAAO,GAAG;AAAA,IACzB;AAAA,EACF,WAAU,UAAU,MAAM,OAAM,cAAc,GAAG;AAC/C,WAAO,MAAM,SAAO,MAAM,MAAM;AAAA,EAClC,OAAK;AACH,QAAI,aAAa,KAAK;AACtB,WAAO,OAAO,CAAC,IAAI,EAAE,SAAO,GAAG,OAAO;AAAA,EACxC;AACF;AAEA,SAAS,UAAU,KAAK;AACtB,MAAI,IAAI,IAAI,MAAM,6BAA6B;AAE/C,SAAO,OAAO,CAAC,KAAM,EAAE,UAAU,IAAK,EAAE,CAAC,IAAI;AAC/C;AAEA,SAAS,eAAe,OAAO;AAC7B,MAAI,OAAO,MAAM,WAAW,MAAM,GAAE,EAAE;AACtC,MAAI,IAAI,cAAc,MAAK,QAAO,CAAC,YAAY,CAAC;AAEhD,SAAO,OAAO,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI;AACrC;AAEA,SAAS,aAAa,OAAO;AAC3B,MAAI,OAAO,MAAM;AACjB,MAAI,OAAO,cAAc,MAAK,QAAO,CAAC,cAAa,aAAY,SAAS,CAAC;AACzE,MAAI,OAAO,cAAc,MAAK,QAAO,CAAC,UAAU,CAAC;AAEjD,MAAI,OAAO,IAAI,KAAK,OAAO,IAAI,KAAK,OAAO,MAAM;AAC/C,WAAO,KAAK,OAAK,CAAC;AAAA,EACpB,WAAW,OAAO,IAAI,GAAG;AACvB,WAAO,KAAK,IAAI;AAAA,EAClB,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAEA,SAAS,SAAS,OAAM,QAAQ;AAC9B,MAAI,OAAO,MAAM;AACjB,MAAI,IAAI,cAAc,MAAK,SAAQ,MAAM;AAEzC,SAAO,OAAO,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI;AACrC;AAEA,SAAS,cAAc,MAAK,UAAS,UAAU;AAE7C,WAAS,IAAI,KAAK,SAAO,GAAG,KAAK,GAAI,KAAK;AACxC,QAAI,UAAU,KAAK,CAAC,EAAE,QAAQ,GAAE,QAAQ,GAAG;AACzC,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,OAAO,GAAG;AACjB,SAAQ,MAAM,SAAW,KAAK;AAChC;AAKO,IAAM,SAAS;AAAA,EACpB,MAAM;AAAA,EACN,aAAa;AACX,WAAO;AAAA,MAAC,YAAY,CAAC;AAAA,MACb,WAAY;AAAA,MACZ,SAAY;AAAA,IAAK;AAAA,EAC3B;AAAA,EAEA,OAAO;AAAA,EAEP,QAAQ;AAAA,EAER,cAAc;AAAA,IACZ,eAAe,EAAC,MAAM,IAAG;AAAA,EAC3B;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
// src/extensions/embed.ts
|
|
2
|
+
import {
|
|
3
|
+
EditorView as EditorView2,
|
|
4
|
+
Decoration,
|
|
5
|
+
WidgetType,
|
|
6
|
+
ViewPlugin
|
|
7
|
+
} from "@codemirror/view";
|
|
8
|
+
import {
|
|
9
|
+
isValidDocumentId,
|
|
10
|
+
parseAutomergeUrl
|
|
11
|
+
} from "@automerge/automerge-repo";
|
|
12
|
+
|
|
13
|
+
// src/themes/embed.ts
|
|
14
|
+
import { EditorView } from "@codemirror/view";
|
|
15
|
+
var embedTheme = EditorView.baseTheme({
|
|
16
|
+
".cm-embed": {
|
|
17
|
+
display: "block",
|
|
18
|
+
border: "1px solid",
|
|
19
|
+
borderRadius: "4px",
|
|
20
|
+
overflow: "hidden"
|
|
21
|
+
},
|
|
22
|
+
"&light .cm-embed": {
|
|
23
|
+
borderColor: "#ddd"
|
|
24
|
+
},
|
|
25
|
+
"&dark .cm-embed": {
|
|
26
|
+
borderColor: "#333"
|
|
27
|
+
},
|
|
28
|
+
".cm-embed-label": {
|
|
29
|
+
fontFamily: "monospace",
|
|
30
|
+
padding: "4px 8px",
|
|
31
|
+
borderBottom: "1px solid",
|
|
32
|
+
whiteSpace: "nowrap",
|
|
33
|
+
overflow: "hidden",
|
|
34
|
+
textOverflow: "ellipsis",
|
|
35
|
+
cursor: "text",
|
|
36
|
+
display: "flex",
|
|
37
|
+
alignItems: "center",
|
|
38
|
+
gap: "8px"
|
|
39
|
+
},
|
|
40
|
+
".cm-embed-label-text": {
|
|
41
|
+
flex: "1",
|
|
42
|
+
minWidth: "0",
|
|
43
|
+
overflow: "hidden",
|
|
44
|
+
textOverflow: "ellipsis",
|
|
45
|
+
opacity: 0.7,
|
|
46
|
+
"&:hover": {
|
|
47
|
+
opacity: 1
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
".cm-embed-open-link": {
|
|
51
|
+
display: "inline-flex",
|
|
52
|
+
alignItems: "center",
|
|
53
|
+
justifyContent: "center",
|
|
54
|
+
width: "16px",
|
|
55
|
+
height: "16px",
|
|
56
|
+
cursor: "pointer",
|
|
57
|
+
flexShrink: "0",
|
|
58
|
+
border: "none",
|
|
59
|
+
background: "none",
|
|
60
|
+
padding: "0",
|
|
61
|
+
color: "inherit",
|
|
62
|
+
opacity: 0.7,
|
|
63
|
+
"&:hover": {
|
|
64
|
+
opacity: 1
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"&light .cm-embed-label": {
|
|
68
|
+
borderBottomColor: "#ddd"
|
|
69
|
+
},
|
|
70
|
+
"&dark .cm-embed-label": {
|
|
71
|
+
borderBottomColor: "#333"
|
|
72
|
+
},
|
|
73
|
+
".cm-embed patchwork-view": {
|
|
74
|
+
display: "block",
|
|
75
|
+
height: "500px",
|
|
76
|
+
width: "100%"
|
|
77
|
+
},
|
|
78
|
+
".cm-embed patchwork-view > *": {
|
|
79
|
+
height: "100%",
|
|
80
|
+
width: "100%"
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
// src/extensions/icons.ts
|
|
85
|
+
var openLinkIcon = `<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
86
|
+
<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path>
|
|
87
|
+
<polyline points="15 3 21 3 21 9"></polyline>
|
|
88
|
+
<line x1="10" y1="14" x2="21" y2="3"></line>
|
|
89
|
+
</svg>`;
|
|
90
|
+
|
|
91
|
+
// src/extensions/embed.ts
|
|
92
|
+
var EmbedWidget = class extends WidgetType {
|
|
93
|
+
docId;
|
|
94
|
+
// `null` means "no explicit tool": <patchwork-view> falls back to the
|
|
95
|
+
// default tool registered for the document's datatype.
|
|
96
|
+
toolId;
|
|
97
|
+
embedText;
|
|
98
|
+
constructor(docId, toolId, embedText) {
|
|
99
|
+
super();
|
|
100
|
+
this.docId = docId;
|
|
101
|
+
this.toolId = toolId;
|
|
102
|
+
this.embedText = embedText;
|
|
103
|
+
}
|
|
104
|
+
eq(other) {
|
|
105
|
+
return other.docId === this.docId && other.toolId === this.toolId;
|
|
106
|
+
}
|
|
107
|
+
toDOM() {
|
|
108
|
+
const container = document.createElement("div");
|
|
109
|
+
container.className = "cm-embed";
|
|
110
|
+
const label = document.createElement("div");
|
|
111
|
+
label.className = "cm-embed-label";
|
|
112
|
+
const labelText = document.createElement("span");
|
|
113
|
+
labelText.className = "cm-embed-label-text";
|
|
114
|
+
labelText.textContent = this.embedText;
|
|
115
|
+
labelText.title = "Click to edit";
|
|
116
|
+
const openLink = document.createElement("button");
|
|
117
|
+
openLink.className = "cm-embed-open-link";
|
|
118
|
+
openLink.title = "Open document";
|
|
119
|
+
openLink.innerHTML = openLinkIcon;
|
|
120
|
+
openLink.onclick = (e) => {
|
|
121
|
+
e.preventDefault();
|
|
122
|
+
e.stopPropagation();
|
|
123
|
+
const params = new URLSearchParams();
|
|
124
|
+
params.set("doc", this.docId);
|
|
125
|
+
if (this.toolId) params.set("tool", this.toolId);
|
|
126
|
+
window.location.hash = params.toString();
|
|
127
|
+
};
|
|
128
|
+
label.appendChild(labelText);
|
|
129
|
+
label.appendChild(openLink);
|
|
130
|
+
const view = document.createElement("patchwork-view");
|
|
131
|
+
view.setAttribute("doc-url", `automerge:${this.docId}`);
|
|
132
|
+
if (this.toolId) view.setAttribute("tool-id", this.toolId);
|
|
133
|
+
view.style.display = "block";
|
|
134
|
+
view.style.height = "500px";
|
|
135
|
+
view.style.width = "100%";
|
|
136
|
+
container.appendChild(label);
|
|
137
|
+
container.appendChild(view);
|
|
138
|
+
return container;
|
|
139
|
+
}
|
|
140
|
+
ignoreEvent(e) {
|
|
141
|
+
if (e.type === "mousedown" && e.target instanceof Element) {
|
|
142
|
+
if (e.target.classList.contains("cm-embed-label-text")) {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
if (e.target.classList.contains("cm-embed-open-link") || e.target.closest(".cm-embed-open-link")) {
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
var EMBED_PATTERN = /\[patchwork:([^/\]]+)(?:\/([^\]]+))?\]/g;
|
|
153
|
+
function getEmbedLinks(view) {
|
|
154
|
+
const widgets = [];
|
|
155
|
+
const { state } = view;
|
|
156
|
+
const selection = state.selection.main;
|
|
157
|
+
for (const { from, to } of view.visibleRanges) {
|
|
158
|
+
const text = state.doc.sliceString(from, to);
|
|
159
|
+
EMBED_PATTERN.lastIndex = 0;
|
|
160
|
+
let m;
|
|
161
|
+
while ((m = EMBED_PATTERN.exec(text)) !== null) {
|
|
162
|
+
const matchFrom = from + m.index;
|
|
163
|
+
const matchTo = matchFrom + m[0].length;
|
|
164
|
+
const [matchText, docId, toolId] = m;
|
|
165
|
+
const cursorInLink = selection.from >= matchFrom && selection.from <= matchTo;
|
|
166
|
+
const selectionSpansLink = selection.from < matchFrom && selection.to > matchTo;
|
|
167
|
+
if (cursorInLink || selectionSpansLink) continue;
|
|
168
|
+
if (!isValidDocumentId(docId)) continue;
|
|
169
|
+
const embed = Decoration.replace({
|
|
170
|
+
widget: new EmbedWidget(docId, toolId ?? null, matchText)
|
|
171
|
+
});
|
|
172
|
+
widgets.push(embed.range(matchFrom, matchTo));
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return Decoration.set(widgets, true);
|
|
176
|
+
}
|
|
177
|
+
var PATCHWORK_DND = "text/x-patchwork-dnd";
|
|
178
|
+
var PATCHWORK_URLS = "text/x-patchwork-urls";
|
|
179
|
+
function urlToDocId(raw) {
|
|
180
|
+
const trimmed = raw.trim();
|
|
181
|
+
if (!trimmed) return null;
|
|
182
|
+
const am = trimmed.match(/automerge:([a-zA-Z0-9]+)/);
|
|
183
|
+
if (am && isValidDocumentId(am[1])) return am[1];
|
|
184
|
+
const web = trimmed.match(/[#&?]doc=([a-zA-Z0-9]+)/);
|
|
185
|
+
if (web && isValidDocumentId(web[1])) return web[1];
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
function extractDocRefs(dt) {
|
|
189
|
+
const refs = [];
|
|
190
|
+
const seen = /* @__PURE__ */ new Set();
|
|
191
|
+
const push = (docId, toolId) => {
|
|
192
|
+
if (!docId || seen.has(docId)) return;
|
|
193
|
+
seen.add(docId);
|
|
194
|
+
refs.push({ docId, toolId });
|
|
195
|
+
};
|
|
196
|
+
const dnd = dt.getData(PATCHWORK_DND);
|
|
197
|
+
if (dnd) {
|
|
198
|
+
try {
|
|
199
|
+
const parsed = JSON.parse(dnd);
|
|
200
|
+
for (const item of parsed?.items ?? []) {
|
|
201
|
+
if (item?.url) push(urlToDocId(item.url), item.toolId ?? null);
|
|
202
|
+
}
|
|
203
|
+
} catch {
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
if (refs.length > 0) return refs;
|
|
207
|
+
const urls = dt.getData(PATCHWORK_URLS);
|
|
208
|
+
if (urls) {
|
|
209
|
+
try {
|
|
210
|
+
const parsed = JSON.parse(urls);
|
|
211
|
+
if (Array.isArray(parsed)) {
|
|
212
|
+
for (const u of parsed) push(urlToDocId(String(u)), null);
|
|
213
|
+
}
|
|
214
|
+
} catch {
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (refs.length > 0) return refs;
|
|
218
|
+
const text = dt.getData("text/uri-list") || dt.getData("text/plain");
|
|
219
|
+
if (text) {
|
|
220
|
+
for (const line of text.split(/\r?\n/)) {
|
|
221
|
+
if (line.startsWith("#")) continue;
|
|
222
|
+
push(urlToDocId(line), null);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return refs;
|
|
226
|
+
}
|
|
227
|
+
function embedSyntax({ docId, toolId }) {
|
|
228
|
+
return toolId ? `[patchwork:${docId}/${toolId}]` : `[patchwork:${docId}]`;
|
|
229
|
+
}
|
|
230
|
+
async function fileDropRefs(files) {
|
|
231
|
+
const repo = window.repo;
|
|
232
|
+
if (!repo) {
|
|
233
|
+
console.warn(
|
|
234
|
+
"[codemirror-embed] window.repo unavailable; ignoring dropped files"
|
|
235
|
+
);
|
|
236
|
+
return [];
|
|
237
|
+
}
|
|
238
|
+
const refs = [];
|
|
239
|
+
for (const file of Array.from(files)) {
|
|
240
|
+
try {
|
|
241
|
+
const mimeType = file.type || "application/octet-stream";
|
|
242
|
+
const isText = mimeType.startsWith("text/") || mimeType === "application/json";
|
|
243
|
+
const content = isText ? await file.text() : new Uint8Array(await file.arrayBuffer());
|
|
244
|
+
const parts = file.name.split(".");
|
|
245
|
+
const extension = parts.length > 1 ? parts.pop() : "";
|
|
246
|
+
const handle = repo.create();
|
|
247
|
+
handle.change((d) => {
|
|
248
|
+
d["@patchwork"] = { type: "file" };
|
|
249
|
+
d.content = content;
|
|
250
|
+
d.mimeType = mimeType;
|
|
251
|
+
d.extension = extension;
|
|
252
|
+
d.name = file.name;
|
|
253
|
+
});
|
|
254
|
+
const { documentId } = parseAutomergeUrl(handle.url);
|
|
255
|
+
if (isValidDocumentId(documentId)) {
|
|
256
|
+
refs.push({ docId: documentId, toolId: null });
|
|
257
|
+
}
|
|
258
|
+
} catch (err) {
|
|
259
|
+
console.warn(
|
|
260
|
+
"[codemirror-embed] failed to import dropped file",
|
|
261
|
+
file.name,
|
|
262
|
+
err
|
|
263
|
+
);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return refs;
|
|
267
|
+
}
|
|
268
|
+
function insertRefs(view, pos, refs) {
|
|
269
|
+
if (refs.length === 0) return;
|
|
270
|
+
const text = refs.map(embedSyntax).join("\n\n");
|
|
271
|
+
view.dispatch({
|
|
272
|
+
changes: { from: pos, insert: text },
|
|
273
|
+
selection: { anchor: pos + text.length }
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
function embedDropHandlers() {
|
|
277
|
+
const wantsDragover = (dt) => !!dt && (dt.types.includes("Files") || dt.types.includes(PATCHWORK_DND) || dt.types.includes(PATCHWORK_URLS));
|
|
278
|
+
return EditorView2.domEventHandlers({
|
|
279
|
+
dragover(event) {
|
|
280
|
+
if (!wantsDragover(event.dataTransfer)) return false;
|
|
281
|
+
event.preventDefault();
|
|
282
|
+
if (event.dataTransfer) event.dataTransfer.dropEffect = "copy";
|
|
283
|
+
return true;
|
|
284
|
+
},
|
|
285
|
+
drop(event, view) {
|
|
286
|
+
const dt = event.dataTransfer;
|
|
287
|
+
if (!dt) return false;
|
|
288
|
+
const pos = view.posAtCoords({ x: event.clientX, y: event.clientY });
|
|
289
|
+
if (pos == null) return false;
|
|
290
|
+
if (dt.files && dt.files.length > 0) {
|
|
291
|
+
event.preventDefault();
|
|
292
|
+
void fileDropRefs(dt.files).then((refs2) => insertRefs(view, pos, refs2));
|
|
293
|
+
return true;
|
|
294
|
+
}
|
|
295
|
+
const refs = extractDocRefs(dt);
|
|
296
|
+
if (refs.length === 0) return false;
|
|
297
|
+
event.preventDefault();
|
|
298
|
+
insertRefs(view, pos, refs);
|
|
299
|
+
return true;
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
var embedPlugin = ViewPlugin.fromClass(
|
|
304
|
+
class {
|
|
305
|
+
decorations;
|
|
306
|
+
constructor(view) {
|
|
307
|
+
this.decorations = getEmbedLinks(view);
|
|
308
|
+
}
|
|
309
|
+
update(update) {
|
|
310
|
+
if (update.docChanged || update.selectionSet || update.viewportChanged) {
|
|
311
|
+
this.decorations = getEmbedLinks(update.view);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
decorations: (v) => v.decorations
|
|
317
|
+
}
|
|
318
|
+
);
|
|
319
|
+
function markdownEmbed() {
|
|
320
|
+
return [embedPlugin, embedTheme, embedDropHandlers()];
|
|
321
|
+
}
|
|
322
|
+
export {
|
|
323
|
+
markdownEmbed
|
|
324
|
+
};
|
|
325
|
+
//# sourceMappingURL=embed.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/extensions/embed.ts", "../../src/themes/embed.ts", "../../src/extensions/icons.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n EditorView,\n Decoration,\n WidgetType,\n ViewPlugin,\n ViewUpdate,\n type DecorationSet,\n} from \"@codemirror/view\";\nimport { Range } from \"@codemirror/state\";\nimport {\n type AutomergeUrl,\n type DocumentId,\n isValidDocumentId,\n parseAutomergeUrl,\n} from \"@automerge/automerge-repo\";\nimport { embedTheme } from \"../themes/embed.ts\";\nimport { openLinkIcon } from \"./icons.ts\";\n\n/**\n * Widget to render an embedded <patchwork-view> element in a CodeMirror editor.\n */\nclass EmbedWidget extends WidgetType {\n readonly docId: DocumentId;\n // `null` means \"no explicit tool\": <patchwork-view> falls back to the\n // default tool registered for the document's datatype.\n readonly toolId: string | null;\n readonly embedText: string;\n\n constructor(docId: DocumentId, toolId: string | null, embedText: string) {\n super();\n this.docId = docId;\n this.toolId = toolId;\n this.embedText = embedText;\n }\n\n eq(other: EmbedWidget) {\n return other.docId === this.docId && other.toolId === this.toolId;\n }\n\n toDOM() {\n const container = document.createElement(\"div\");\n container.className = \"cm-embed\";\n\n const label = document.createElement(\"div\");\n label.className = \"cm-embed-label\";\n\n const labelText = document.createElement(\"span\");\n labelText.className = \"cm-embed-label-text\";\n labelText.textContent = this.embedText;\n labelText.title = \"Click to edit\";\n\n const openLink = document.createElement(\"button\");\n openLink.className = \"cm-embed-open-link\";\n openLink.title = \"Open document\";\n openLink.innerHTML = openLinkIcon;\n\n openLink.onclick = (e) => {\n e.preventDefault();\n e.stopPropagation();\n const params = new URLSearchParams();\n params.set(\"doc\", this.docId);\n // Tool-less embeds open with the datatype's default tool.\n if (this.toolId) params.set(\"tool\", this.toolId);\n window.location.hash = params.toString();\n };\n\n label.appendChild(labelText);\n label.appendChild(openLink);\n\n const view = document.createElement(\"patchwork-view\");\n // Name the doc without heads. Resolution (OverlayRepo + the drafts\n // `repo:handle-descriptor` answer) pins it to the active checkpoint when one\n // is checked out, so the embed freezes with the document it lives in;\n // otherwise it renders live.\n view.setAttribute(\"doc-url\", `automerge:${this.docId}`);\n if (this.toolId) view.setAttribute(\"tool-id\", this.toolId);\n // The <patchwork-view> needs an explicit, non-zero height set inline:\n // without it the element collapses to 0px and the embedded tool never\n // renders. (The stylesheet rule isn't reliably applied here, so we set it\n // directly on the element.)\n view.style.display = \"block\";\n view.style.height = \"500px\";\n view.style.width = \"100%\";\n\n container.appendChild(label);\n container.appendChild(view);\n\n return container;\n }\n\n ignoreEvent(e: Event) {\n if (e.type === \"mousedown\" && e.target instanceof Element) {\n // Allow clicks on the label text to pass through for editing\n if (e.target.classList.contains(\"cm-embed-label-text\")) {\n return false; // Let the editor handle it\n }\n // Block clicks on the open link button (let button handle it)\n if (\n e.target.classList.contains(\"cm-embed-open-link\") ||\n e.target.closest(\".cm-embed-open-link\")\n ) {\n return true; // Block from editor\n }\n }\n // Block other events from reaching the editor (let patchwork-view handle them)\n return true;\n }\n}\n\n// Embed marker syntax: [patchwork:docId] or [patchwork:docId/toolId]. The tool\n// id is optional; when absent the embed falls back to the datatype's default\n// tool. The doc id / tool id cannot contain `/` or `]`.\n//\n// We scan the document text directly rather than walking the markdown syntax\n// tree on purpose: `@codemirror/language` is not a shared singleton across\n// patchwork's separately-bundled CodeMirror extensions, so `syntaxTree(state)`\n// here reads a different `Language` facet than the markdown tool populates and\n// always comes back empty. Plain-text scanning keeps this extension\n// self-contained and free of any `@codemirror/language` dependency.\nconst EMBED_PATTERN = /\\[patchwork:([^/\\]]+)(?:\\/([^\\]]+))?\\]/g;\n\nfunction getEmbedLinks(view: EditorView) {\n const widgets: Range<Decoration>[] = [];\n const { state } = view;\n const selection = state.selection.main;\n\n // Scan only the visible ranges. Markers never span a line break, and\n // CodeMirror's visible ranges are line-aligned, so a marker is either fully\n // inside a range or fully outside it.\n for (const { from, to } of view.visibleRanges) {\n const text = state.doc.sliceString(from, to);\n EMBED_PATTERN.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = EMBED_PATTERN.exec(text)) !== null) {\n const matchFrom = from + m.index;\n const matchTo = matchFrom + m[0].length;\n const [matchText, docId, toolId] = m;\n\n // Show raw text (no widget) while the cursor is on the marker or a\n // selection spans it, so it can be edited.\n const cursorInLink =\n selection.from >= matchFrom && selection.from <= matchTo;\n const selectionSpansLink =\n selection.from < matchFrom && selection.to > matchTo;\n if (cursorInLink || selectionSpansLink) continue;\n\n if (!isValidDocumentId(docId)) continue;\n\n const embed = Decoration.replace({\n widget: new EmbedWidget(docId as DocumentId, toolId ?? null, matchText),\n });\n widgets.push(embed.range(matchFrom, matchTo));\n }\n }\n\n // `true` lets CodeMirror sort the ranges defensively (matches are already in\n // document order, but this is cheap insurance).\n return Decoration.set(widgets, true);\n}\n\n// MIME types we accept document drags from. Mirrors the sideboard's convention\n// (duplicated on purpose \u2014 see the DnD notes; a shared package is a later step).\nconst PATCHWORK_DND = \"text/x-patchwork-dnd\";\nconst PATCHWORK_URLS = \"text/x-patchwork-urls\";\n\ntype DocRef = { docId: DocumentId; toolId: string | null };\n\n/** Turn an automerge url or a patchwork web link into a DocumentId, or null. */\nfunction urlToDocId(raw: string): DocumentId | null {\n const trimmed = raw.trim();\n if (!trimmed) return null;\n // Plain automerge url (optionally carrying heads/query/subpath).\n const am = trimmed.match(/automerge:([a-zA-Z0-9]+)/);\n if (am && isValidDocumentId(am[1])) return am[1] as DocumentId;\n // Patchwork web link: #doc=<documentId> (also &doc= / ?doc=).\n const web = trimmed.match(/[#&?]doc=([a-zA-Z0-9]+)/);\n if (web && isValidDocumentId(web[1])) return web[1] as DocumentId;\n return null;\n}\n\n/**\n * Read dragged documents out of a drop event, in order of format preference.\n * Only an *explicit* `toolId` on a structured item pins the tool; otherwise we\n * embed tool-less and let the view fall back to the datatype's default tool.\n * (The previous code mis-read `item.type` \u2014 a datatype \u2014 as a tool id, so any\n * source whose datatype != tool id produced a broken embed, and sources that\n * set only urls were dropped entirely.)\n */\nfunction extractDocRefs(dt: DataTransfer): DocRef[] {\n const refs: DocRef[] = [];\n const seen = new Set<string>();\n const push = (docId: DocumentId | null, toolId: string | null) => {\n if (!docId || seen.has(docId)) return;\n seen.add(docId);\n refs.push({ docId, toolId });\n };\n\n const dnd = dt.getData(PATCHWORK_DND);\n if (dnd) {\n try {\n const parsed = JSON.parse(dnd) as {\n items?: Array<{ url?: string; toolId?: string }>;\n };\n for (const item of parsed?.items ?? []) {\n if (item?.url) push(urlToDocId(item.url), item.toolId ?? null);\n }\n } catch {\n // fall through to the other formats\n }\n }\n if (refs.length > 0) return refs;\n\n const urls = dt.getData(PATCHWORK_URLS);\n if (urls) {\n try {\n const parsed: unknown = JSON.parse(urls);\n if (Array.isArray(parsed)) {\n for (const u of parsed) push(urlToDocId(String(u)), null);\n }\n } catch {\n // fall through\n }\n }\n if (refs.length > 0) return refs;\n\n const text = dt.getData(\"text/uri-list\") || dt.getData(\"text/plain\");\n if (text) {\n for (const line of text.split(/\\r?\\n/)) {\n if (line.startsWith(\"#\")) continue; // uri-list comments\n push(urlToDocId(line), null);\n }\n }\n return refs;\n}\n\nfunction embedSyntax({ docId, toolId }: DocRef): string {\n return toolId ? `[patchwork:${docId}/${toolId}]` : `[patchwork:${docId}]`;\n}\n\n/**\n * Import each OS file dropped from the desktop as a Patchwork `file` document,\n * returning tool-less refs to embed. Uses the realm-local `window.repo` (the\n * documented global) \u2014 fine for creating brand-new docs, which aren't subject\n * to draft remapping.\n */\nasync function fileDropRefs(files: FileList): Promise<DocRef[]> {\n const repo = (window as unknown as { repo?: any }).repo;\n if (!repo) {\n console.warn(\n \"[codemirror-embed] window.repo unavailable; ignoring dropped files\"\n );\n return [];\n }\n const refs: DocRef[] = [];\n for (const file of Array.from(files)) {\n try {\n const mimeType = file.type || \"application/octet-stream\";\n const isText =\n mimeType.startsWith(\"text/\") || mimeType === \"application/json\";\n const content = isText\n ? await file.text()\n : new Uint8Array(await file.arrayBuffer());\n const parts = file.name.split(\".\");\n const extension = parts.length > 1 ? parts.pop()! : \"\";\n const handle = repo.create();\n handle.change((d: any) => {\n d[\"@patchwork\"] = { type: \"file\" };\n d.content = content;\n d.mimeType = mimeType;\n d.extension = extension;\n d.name = file.name;\n });\n const { documentId } = parseAutomergeUrl(handle.url as AutomergeUrl);\n if (isValidDocumentId(documentId)) {\n refs.push({ docId: documentId as DocumentId, toolId: null });\n }\n } catch (err) {\n console.warn(\n \"[codemirror-embed] failed to import dropped file\",\n file.name,\n err\n );\n }\n }\n return refs;\n}\n\nfunction insertRefs(view: EditorView, pos: number, refs: DocRef[]): void {\n if (refs.length === 0) return;\n const text = refs.map(embedSyntax).join(\"\\n\\n\");\n view.dispatch({\n changes: { from: pos, insert: text },\n selection: { anchor: pos + text.length },\n });\n}\n\n/**\n * Drop handler that accepts:\n * - documents dragged from the sidebar / canvases / other tools\n * (`text/x-patchwork-dnd`, `text/x-patchwork-urls`, `text/uri-list`, and\n * `text/plain` patchwork links), and\n * - files dragged in from the operating system (imported as `file` docs).\n * Inserts `[patchwork:docId]` (or `[patchwork:docId/toolId]`) at the drop point.\n */\nfunction embedDropHandlers() {\n // Only claim the *dragover* for unambiguous patchwork/OS drags \u2014 plain\n // text/uri-list can be an ordinary in-editor text drag, which we must not\n // swallow. (`Files` covers OS drags, whose `dt.files` is empty until drop.)\n const wantsDragover = (dt: DataTransfer | null): boolean =>\n !!dt &&\n (dt.types.includes(\"Files\") ||\n dt.types.includes(PATCHWORK_DND) ||\n dt.types.includes(PATCHWORK_URLS));\n\n return EditorView.domEventHandlers({\n dragover(event) {\n if (!wantsDragover(event.dataTransfer)) return false;\n event.preventDefault();\n if (event.dataTransfer) event.dataTransfer.dropEffect = \"copy\";\n return true;\n },\n drop(event, view) {\n const dt = event.dataTransfer;\n if (!dt) return false;\n const pos = view.posAtCoords({ x: event.clientX, y: event.clientY });\n if (pos == null) return false;\n\n // OS files import asynchronously; insert once the docs exist.\n if (dt.files && dt.files.length > 0) {\n event.preventDefault();\n void fileDropRefs(dt.files).then((refs) => insertRefs(view, pos, refs));\n return true;\n }\n\n // Otherwise only handle the drop if it actually resolves to patchwork\n // docs (dnd/urls always do; uri-list/plain only for patchwork links).\n // If not, let CodeMirror handle it as a normal text drop.\n const refs = extractDocRefs(dt);\n if (refs.length === 0) return false;\n event.preventDefault();\n insertRefs(view, pos, refs);\n return true;\n },\n });\n}\n\nconst embedPlugin = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = getEmbedLinks(view);\n }\n\n update(update: ViewUpdate) {\n // Recompute when the document changes, the selection moves, or the\n // viewport scrolls (so newly-visible markers get decorated).\n if (update.docChanged || update.selectionSet || update.viewportChanged) {\n this.decorations = getEmbedLinks(update.view);\n }\n }\n },\n {\n decorations: (v) => v.decorations,\n }\n);\n\nexport function markdownEmbed() {\n return [embedPlugin, embedTheme, embedDropHandlers()];\n}\n", "import { EditorView } from \"@codemirror/view\";\n\nexport const embedTheme = EditorView.baseTheme({\n \".cm-embed\": {\n display: \"block\",\n border: \"1px solid\",\n borderRadius: \"4px\",\n overflow: \"hidden\",\n },\n \"&light .cm-embed\": {\n borderColor: \"#ddd\",\n },\n \"&dark .cm-embed\": {\n borderColor: \"#333\",\n },\n \".cm-embed-label\": {\n fontFamily: \"monospace\",\n padding: \"4px 8px\",\n borderBottom: \"1px solid\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n cursor: \"text\",\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n },\n \".cm-embed-label-text\": {\n flex: \"1\",\n minWidth: \"0\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n opacity: 0.7,\n \"&:hover\": {\n opacity: 1,\n },\n },\n \".cm-embed-open-link\": {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"16px\",\n height: \"16px\",\n cursor: \"pointer\",\n flexShrink: \"0\",\n border: \"none\",\n background: \"none\",\n padding: \"0\",\n color: \"inherit\",\n opacity: 0.7,\n \"&:hover\": {\n opacity: 1,\n },\n },\n \"&light .cm-embed-label\": {\n borderBottomColor: \"#ddd\",\n },\n \"&dark .cm-embed-label\": {\n borderBottomColor: \"#333\",\n },\n \".cm-embed patchwork-view\": {\n display: \"block\",\n height: \"500px\",\n width: \"100%\",\n },\n \".cm-embed patchwork-view > *\": {\n height: \"100%\",\n width: \"100%\",\n },\n});\n", "export const openLinkIcon = `<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"></path>\n <polyline points=\"15 3 21 3 21 9\"></polyline>\n <line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"></line>\n</svg>`;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["EditorView", "EditorView", "refs"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import {
|
|
2
|
+
syntaxTree
|
|
3
|
+
} from "../chunk-MAW6NPUW.js";
|
|
4
|
+
|
|
5
|
+
// src/extensions/links.ts
|
|
6
|
+
import {
|
|
7
|
+
Decoration,
|
|
8
|
+
WidgetType,
|
|
9
|
+
ViewPlugin
|
|
10
|
+
} from "@codemirror/view";
|
|
11
|
+
import { isValidAutomergeUrl } from "@automerge/automerge-repo";
|
|
12
|
+
|
|
13
|
+
// src/themes/links.ts
|
|
14
|
+
import { EditorView } from "@codemirror/view";
|
|
15
|
+
var linkTheme = EditorView.baseTheme({
|
|
16
|
+
".cm-link": {
|
|
17
|
+
textDecoration: "underline",
|
|
18
|
+
cursor: "pointer",
|
|
19
|
+
fontFamily: '"Merriweather Sans", sans-serif',
|
|
20
|
+
color: "var(--syntax-link, #0066cc)",
|
|
21
|
+
"&:hover": {
|
|
22
|
+
color: "inherit"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
// src/extensions/links.ts
|
|
28
|
+
var LinkWidget = class extends WidgetType {
|
|
29
|
+
url;
|
|
30
|
+
text;
|
|
31
|
+
constructor(url, text) {
|
|
32
|
+
super();
|
|
33
|
+
this.url = url;
|
|
34
|
+
this.text = text;
|
|
35
|
+
}
|
|
36
|
+
eq(other) {
|
|
37
|
+
return other.url === this.url && other.text === this.text;
|
|
38
|
+
}
|
|
39
|
+
toDOM() {
|
|
40
|
+
const link = document.createElement("a");
|
|
41
|
+
link.href = this.url;
|
|
42
|
+
link.textContent = this.text;
|
|
43
|
+
link.className = "cm-link";
|
|
44
|
+
link.title = this.url;
|
|
45
|
+
link.onclick = (e) => {
|
|
46
|
+
e.preventDefault();
|
|
47
|
+
if (isValidAutomergeUrl(this.url)) {
|
|
48
|
+
link.dispatchEvent(
|
|
49
|
+
new CustomEvent("patchwork:open-document", {
|
|
50
|
+
detail: { url: this.url },
|
|
51
|
+
bubbles: true,
|
|
52
|
+
composed: true
|
|
53
|
+
})
|
|
54
|
+
);
|
|
55
|
+
} else {
|
|
56
|
+
window.open(this.url, "_blank noopener noreferrer");
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
return link;
|
|
60
|
+
}
|
|
61
|
+
ignoreEvent(e) {
|
|
62
|
+
return e.type !== "click";
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
function getLinks(view) {
|
|
66
|
+
const widgets = [];
|
|
67
|
+
const { state } = view;
|
|
68
|
+
const selection = state.selection.main;
|
|
69
|
+
for (let { from, to } of view.visibleRanges) {
|
|
70
|
+
syntaxTree(state).iterate({
|
|
71
|
+
from,
|
|
72
|
+
to,
|
|
73
|
+
enter: (node) => {
|
|
74
|
+
if (node.name === "Link") {
|
|
75
|
+
const linkFrom = node.from;
|
|
76
|
+
const linkTo = node.to;
|
|
77
|
+
const cursorInLink = selection.from >= linkFrom && selection.from <= linkTo;
|
|
78
|
+
const selectionSpansLink = selection.from < linkFrom && selection.to > linkTo;
|
|
79
|
+
if (!cursorInLink && !selectionSpansLink) {
|
|
80
|
+
const linkText = state.doc.sliceString(linkFrom, linkTo);
|
|
81
|
+
const match = linkText.match(/\[([^\]]+)\]\(([^)]+)\)/);
|
|
82
|
+
if (match) {
|
|
83
|
+
const [, text, url] = match;
|
|
84
|
+
const deco = Decoration.replace({
|
|
85
|
+
widget: new LinkWidget(url, text)
|
|
86
|
+
});
|
|
87
|
+
widgets.push(deco.range(linkFrom, linkTo));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
return Decoration.set(widgets);
|
|
95
|
+
}
|
|
96
|
+
var linkPlugin = ViewPlugin.fromClass(
|
|
97
|
+
class {
|
|
98
|
+
decorations;
|
|
99
|
+
constructor(view) {
|
|
100
|
+
this.decorations = getLinks(view);
|
|
101
|
+
}
|
|
102
|
+
update(update) {
|
|
103
|
+
if (update.docChanged || update.selectionSet || update.viewportChanged || syntaxTree(update.startState) !== syntaxTree(update.state)) {
|
|
104
|
+
this.decorations = getLinks(update.view);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
decorations: (v) => v.decorations
|
|
110
|
+
}
|
|
111
|
+
);
|
|
112
|
+
function markdownLinks() {
|
|
113
|
+
return [linkPlugin, linkTheme];
|
|
114
|
+
}
|
|
115
|
+
export {
|
|
116
|
+
markdownLinks
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=links.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/extensions/links.ts", "../../src/themes/links.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n EditorView,\n Decoration,\n WidgetType,\n ViewPlugin,\n ViewUpdate,\n type DecorationSet,\n} from \"@codemirror/view\";\nimport { Range } from \"@codemirror/state\";\nimport { syntaxTree } from \"@codemirror/language\";\nimport { isValidAutomergeUrl } from \"@automerge/automerge-repo\";\nimport { linkTheme } from \"../themes/links.ts\";\n\n/**\n * Widget to render a clickable link in the editor\n */\nclass LinkWidget extends WidgetType {\n readonly url: string;\n readonly text: string;\n\n constructor(url: string, text: string) {\n super();\n this.url = url;\n this.text = text;\n }\n\n eq(other: LinkWidget) {\n return other.url === this.url && other.text === this.text;\n }\n\n toDOM() {\n const link = document.createElement(\"a\");\n link.href = this.url;\n link.textContent = this.text;\n link.className = \"cm-link\";\n link.title = this.url;\n\n link.onclick = (e) => {\n e.preventDefault();\n if (isValidAutomergeUrl(this.url)) {\n // Open the document inside Patchwork rather than as a browser URL\n // (automerge: isn't navigable). bubbles/composed so the event escapes\n // the editor and any shadow root up to whoever drives selection.\n link.dispatchEvent(\n new CustomEvent(\"patchwork:open-document\", {\n detail: { url: this.url },\n bubbles: true,\n composed: true,\n }),\n );\n } else {\n window.open(this.url, \"_blank noopener noreferrer\");\n }\n };\n\n return link;\n }\n\n ignoreEvent(e: Event) {\n // Let click events through to our widget\n return e.type !== \"click\";\n }\n}\n\nfunction getLinks(view: EditorView) {\n const widgets: Range<Decoration>[] = [];\n const { state } = view;\n const selection = state.selection.main;\n\n for (let { from, to } of view.visibleRanges) {\n syntaxTree(state).iterate({\n from,\n to,\n enter: (node) => {\n // Match markdown link syntax\n if (node.name === \"Link\") {\n const linkFrom = node.from;\n const linkTo = node.to;\n\n // Check if cursor is inside this link\n const cursorInLink =\n selection.from >= linkFrom && selection.from <= linkTo;\n // Check if the link is inside the selection\n const selectionSpansLink =\n selection.from < linkFrom && selection.to > linkTo;\n\n // Replace if cursor is outside the link and there's no selection across the link\n if (!cursorInLink && !selectionSpansLink) {\n const linkText = state.doc.sliceString(linkFrom, linkTo);\n const match = linkText.match(/\\[([^\\]]+)\\]\\(([^)]+)\\)/);\n\n if (match) {\n const [, text, url] = match;\n\n // Replace the entire [text](url) with just the link widget\n const deco = Decoration.replace({\n widget: new LinkWidget(url, text),\n });\n\n widgets.push(deco.range(linkFrom, linkTo));\n }\n }\n }\n },\n });\n }\n\n return Decoration.set(widgets);\n}\n\nconst linkPlugin = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = getLinks(view);\n }\n\n update(update: ViewUpdate) {\n // Recompute when doc changes, selection moves, or viewport changes\n if (\n update.docChanged ||\n update.selectionSet ||\n update.viewportChanged ||\n syntaxTree(update.startState) !== syntaxTree(update.state)\n ) {\n this.decorations = getLinks(update.view);\n }\n }\n },\n {\n decorations: (v) => v.decorations,\n }\n);\n\nexport function markdownLinks() {\n return [linkPlugin, linkTheme];\n}\n", "import { EditorView } from \"@codemirror/view\";\n\nexport const linkTheme = EditorView.baseTheme({\n \".cm-link\": {\n textDecoration: \"underline\",\n cursor: \"pointer\",\n fontFamily: '\"Merriweather Sans\", sans-serif',\n color: \"var(--syntax-link, #0066cc)\",\n \"&:hover\": {\n color: \"inherit\",\n },\n },\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|