import {
  html
} from "./chunk-LWYBRNYT.js";
import "./chunk-75RUHIWW.js";
import "./chunk-K7TU4U2U.js";
import {
  ExternalTokenizer,
  LRParser
} from "./chunk-D54PKZCB.js";
import "./chunk-YLDS2ILT.js";
import {
  LRLanguage,
  LanguageSupport,
  delimitedIndent,
  foldNodeProp,
  indentNodeProp,
  syntaxTree
} from "./chunk-3MFS2372.js";
import {
  styleTags,
  tags
} from "./chunk-C7JRWVVG.js";
import {
  parseMixed
} from "./chunk-FWTOHHI7.js";
import {
  EditorView
} from "./chunk-XE3PYSOW.js";
import {
  EditorSelection
} from "./chunk-VGW6U5S5.js";
import "./chunk-5WWUZCGV.js";

// node_modules/.deno/@codemirror+lang-liquid@6.3.0/node_modules/@codemirror/lang-liquid/dist/index.js
var interpolationStart = 1;
var tagStart = 2;
var endTagStart = 3;
var text = 179;
var endrawTagStart = 4;
var rawText = 180;
var endcommentTagStart = 5;
var commentText = 181;
var InlineComment = 6;
function wordChar(code) {
  return code >= 65 && code <= 90 || code >= 97 && code <= 122;
}
var base = new ExternalTokenizer((input) => {
  let start = input.pos;
  for (; ; ) {
    let { next } = input;
    if (next < 0)
      break;
    if (next == 123) {
      let after = input.peek(1);
      if (after == 123) {
        if (input.pos > start)
          break;
        input.acceptToken(interpolationStart, 2);
        return;
      } else if (after == 37) {
        if (input.pos > start)
          break;
        let scan = 2, size = 2;
        for (; ; ) {
          let next2 = input.peek(scan);
          if (next2 == 32 || next2 == 10) {
            ++scan;
          } else if (next2 == 35) {
            ++scan;
            for (; ; ) {
              let comment2 = input.peek(scan);
              if (comment2 < 0 || comment2 == 10)
                break;
              scan++;
            }
          } else if (next2 == 45 && size == 2) {
            size = ++scan;
          } else {
            let end = next2 == 101 && input.peek(scan + 1) == 110 && input.peek(scan + 2) == 100;
            input.acceptToken(end ? endTagStart : tagStart, size);
            return;
          }
        }
      }
    }
    input.advance();
    if (next == 10)
      break;
  }
  if (input.pos > start)
    input.acceptToken(text);
});
function rawTokenizer(endTag, text2, tagStart2) {
  return new ExternalTokenizer((input) => {
    let start = input.pos;
    for (; ; ) {
      let { next } = input;
      if (next == 123 && input.peek(1) == 37) {
        let scan = 2;
        for (; ; scan++) {
          let ch = input.peek(scan);
          if (ch != 32 && ch != 10)
            break;
        }
        let word = "";
        for (; ; scan++) {
          let next2 = input.peek(scan);
          if (!wordChar(next2))
            break;
          word += String.fromCharCode(next2);
        }
        if (word == endTag) {
          if (input.pos > start)
            break;
          input.acceptToken(tagStart2, 2);
          break;
        }
      } else if (next < 0) {
        break;
      }
      input.advance();
      if (next == 10)
        break;
    }
    if (input.pos > start)
      input.acceptToken(text2);
  });
}
var comment = rawTokenizer("endcomment", commentText, endcommentTagStart);
var raw = rawTokenizer("endraw", rawText, endrawTagStart);
var inlineComment = new ExternalTokenizer((input) => {
  if (input.next != 35)
    return;
  input.advance();
  for (; ; ) {
    if (input.next == 10 || input.next < 0)
      break;
    if ((input.next == 37 || input.next == 125) && input.peek(1) == 125)
      break;
    input.advance();
  }
  input.acceptToken(InlineComment);
});
var spec_identifier = { __proto__: null, contains: 32, or: 36, and: 36, true: 50, false: 50, empty: 52, forloop: 54, tablerowloop: 56, continue: 58, in: 128, with: 194, for: 196, as: 198, if: 234, endif: 238, unless: 244, endunless: 248, elsif: 252, else: 256, case: 262, endcase: 266, when: 270, endfor: 278, tablerow: 284, endtablerow: 288, break: 292, cycle: 298, echo: 302, render: 306, include: 310, assign: 314, capture: 320, endcapture: 324, increment: 328, decrement: 332 };
var spec_TagName = { __proto__: null, if: 84, endif: 88, elsif: 92, else: 96, unless: 102, endunless: 106, case: 112, endcase: 116, when: 120, for: 126, endfor: 136, tablerow: 142, endtablerow: 146, break: 150, continue: 154, cycle: 158, comment: 164, endcomment: 170, raw: 176, endraw: 182, echo: 186, render: 190, include: 202, assign: 206, capture: 212, endcapture: 216, increment: 220, decrement: 224, liquid: 228 };
var parser = LRParser.deserialize({
  version: 14,
  states: "GlQYOPOOOOOP'#Fz'#FzOeOaO'#CdOsQhO'#CfO!bQxO'#DRO#{OPO'#DUO$ZOPO'#D_O$iOPO'#DdO$wOPO'#DkO%VOPO'#DsO%eOSO'#EOO%jOQO'#EUO%oOPO'#EhOOOP'#G_'#G_OOOP'#G['#G[OOOP'#Fy'#FyQYOPOOOOOP-E9x-E9xOOQW'#Cg'#CgO&`Q!jO,59QO&gQ!jO'#G]OsQhO'#CsOOQW'#G]'#G]OOOP,59m,59mO)PQhO,59mOsQhO,59qOsQhO,59uO)ZQhO,59wOsQhO,59zOsQhO,5:POsQhO,5:TO!]QhO,5:WO!]QhO,5:`O)`QhO,5:dO)eQhO,5:fO)jQhO,5:hO)oQhO,5:kO)tQhO,5:qOsQhO,5:vOsQhO,5:xOsQhO,5;OOsQhO,5;QOsQhO,5;TOsQhO,5;XOsQhO,5;ZO+TQhO,5;]O+[OPO'#CdOOOP,59p,59pO#{OPO,59pO+jQxO'#DXOOOP,59y,59yO$ZOPO,59yO+oQxO'#DbOOOP,5:O,5:OO$iOPO,5:OO+tQxO'#DgOOOP,5:V,5:VO$wOPO,5:VO+yQxO'#DqOOOP,5:_,5:_O%VOPO,5:_O,OQxO'#DvOOOS'#GP'#GPO,TOSO'#ERO,]OSO,5:jOOOQ'#GQ'#GQO,bOQO'#EXO,jOQO,5:pOOOP,5;S,5;SO%oOPO,5;SO,oQxO'#EkOOOP-E9w-E9wO,tQ#|O,59SOsQhO,59VOsQhO,59VO,yQhO'#C|OOQW'#F{'#F{O-OQhO1G.lOOOP1G.l1G.lOsQhO,59VOsQhO,59ZO-WQ!jO,59_O-iQ!jO1G/XO-pQhO1G/XOOOP1G/X1G/XO-xQ!jO1G/]O.ZQ!jO1G/aOOOP1G/c1G/cO.lQ!jO1G/fO.}Q!jO1G/kO/qQ!jO1G/oO/xQhO1G/rO/}QhO1G/zOOOP1G0O1G0OOOOP1G0Q1G0QO0SQhO1G0SOOOS1G0V1G0VOOOQ1G0]1G0]O0_Q!jO1G0bO0}Q!jO1G0dO1UQ!jO1G0jO1gQ!jO1G0lO1nQ!jO1G0oO2PQ!jO1G0sO2bQ!jO1G0uO2sQhO'#EsO2zQhO'#ExO3RQhO'#FRO3YQhO'#FYO3aQhO'#F^O3hQhO'#FpOOQW'#G`'#G`OOQW'#GS'#GSO3oQhO1G0wOsQhO'#EtOsQhO'#EyOsQhO'#E}OOQW'#FP'#FPOsQhO'#FSOsQhO'#FWO!]QhO'#FZO!]QhO'#F_OOQW'#Fc'#FcOOQW'#Fe'#FeO3vQhO'#FfOsQhO'#FhOsQhO'#FjOsQhO'#FlOsQhO'#FnOsQhO'#FqOsQhO'#FuOsQhO'#FwOOOP1G0w1G0wOOOP1G/[1G/[O3{QhO,59sOOOP1G/e1G/eO4QQhO,59|OOOP1G/j1G/jO4VQhO,5:ROOOP1G/q1G/qO4[QhO,5:]OOOP1G/y1G/yO4aQhO,5:bOOOS-E9}-E9}OOOP1G0U1G0UO4fQxO'#ESOOOQ-E:O-E:OOOOP1G0[1G0[O4kQxO'#EYOOOP1G0n1G0nO4pQhO,5;VOOQW1G.n1G.nO7XQ!jO1G.qO9oQ!jO1G.qOOQW'#DO'#DOO9yQhO,59hOOQW-E9y-E9yOOOP7+$W7+$WO;sQ!jO1G.qO;zQ!jO1G.uOsQhO1G.yO>aQhO7+$sOOOP7+$s7+$sOOOP7+$w7+$wOOOP7+${7+${OOOP7+%Q7+%QOOOP7+%V7+%VOsQhO'#F|O>iQhO7+%ZOOOP7+%Z7+%ZOsQhO7+%^OsQhO7+%fO>qQhO'#GOO>vQhO7+%nOOOP7+%n7+%nO?OQhO7+%nO?TQhO7+%|OOOP7+%|7+%|O!]QhO'#E`OOQW'#GR'#GRO?]QhO7+&OOsQhO'#E`OOOP7+&O7+&OOOOP7+&U7+&UO?kQhO7+&WOOOP7+&W7+&WOOOP7+&Z7+&ZOOOP7+&_7+&_OOOP7+&a7+&aOOQW,5;_,5;_O2sQhO,5;_OOQW'#Ev'#EvOOQW,5;d,5;dO2zQhO,5;dOOQW'#E{'#E{OOQW,5;m,5;mO3RQhO,5;mOOQW'#FU'#FUOOQW,5;t,5;tO3YQhO,5;tOOQW'#F['#F[OOQW,5;x,5;xO3aQhO,5;xOOQW'#Fa'#FaOOQW,5<[,5<[O3hQhO,5<[OOQW'#Fs'#FsOOQW-E:Q-E:QOOOP7+&c7+&cO?sQ!jO,5;`OA^Q!jO,5;eOBwQ!jO,5;iODtQ!jO,5;nOF_Q!jO,5;rOHQQhO,5;uOHVQhO,5;yOH[QhO,5<QOJRQ!jO,5<SOKtQ!jO,5<UOMdQ!jO,5<WO! aQ!jO,5<YO!#SQ!jO,5<]O!$mQ!jO,5<aO!&jQ!jO,5<cOOOP1G/_1G/_OOOP1G/h1G/hOOOP1G/m1G/mOOOP1G/w1G/wOOOP1G/|1G/|O!(gQhO,5:nO!(lQhO,5:tOOOP1G0q1G0qOsQhO1G/SO!(qQ!jO7+$eOOOP<<H_<<H_O!)SQ!jO,5<hOOQW-E9z-E9zOOOP<<Hu<<HuO!+kQ!jO<<HxO!+rQ!jO<<IQOOQW,5<j,5<jOOQW-E9|-E9|OOOP<<IY<<IYO!+yQhO<<IYOOOP<<Ih<<IhO!,RQhO,5:zOOQW-E:P-E:POOOP<<Ij<<IjO!,WQ!jO,5:zOOOP<<Ir<<IrOOQW1G0y1G0yOOQW1G1O1G1OOOQW1G1X1G1XOOQW1G1`1G1`OOQW1G1d1G1dOOQW1G1v1G1vO!.^QhO1G1^OsQhO1G1aOsQhO1G1eO!0QQhO1G1lO!1tQhO1G1lO!1yQhO1G1nOOQW'#GT'#GTO!3mQhO1G1pO!5dQhO1G1tOOOP1G0Y1G0YOOOP1G0`1G0`O!7WQ!jO7+$nOOQW<<HP<<HPOOQW'#Dp'#DpO!9PQhO'#DoOOQW'#F}'#F}O!:jQhOAN>dOOOPAN>dAN>dO!:rQhOAN>lOOOPAN>lAN>lO!:zQhOAN>tOOOPAN>tAN>tOsQhO1G0fO!]QhO1G0fO!;SQ!jO7+&{O!<cQ!jO7+'PO!=rQhO7+'WOOQW-E:R-E:RO!?fQhO<<HYOsQhO,5:ZOOQW-E9{-E9{OOOPG24OG24OOOOPG24WG24WOOOPG24`G24`O!A`Q!jO7+&QOOQW7+&Q7+&QO!CcQhO<<JgO!DsQhO<<JkO!FTQhO<<JrO!GwQ!jO1G/u",
  stateData: "!Ik~O$}OSUOS~OPROQSO$yPO~O$yPOPWXQWX$xWX~OfeOifOjfOkfOlfOmfOnfOofO%QbO~OvhOwgOziO!OjO!QkO!TlO!YmO!^nO!aoO!ipO!mqO!orO!qsO!ttO!zuO#PvO#RwO#XxO#ZyO#^zO#b{O#d|O#f}O~OPROQSOR!RO$yPO~OPROQSOR!UO$yPO~OPROQSOR!XO$yPO~OPROQSOR![O$yPO~OPROQSOR!_O$yPO~O${!`O~O$z!cO~OPROQSOR!hO$yPO~O]!jO`!qOa!kOb!lOq!mO~OX!pO~P%}Od!rOX%PX]%PX`%PXa%PXb%PXq%PXh%PXw%PXt%PX#T%PX#U%PXm%PX#i%PX#k%PX#n%PX#r%PX#t%PX#w%PX#{%PX$S%PX$W%PX$Z%PX$]%PX$_%PX$a%PX$c%PX$f%PX$j%PX$l%PX#p%PX#y%PX$h%PXe%PX%Q%PX#V%PX$P%PX$U%PX~Oq!mOw!vO~PsOw!yO~Ow#PO~Ow#QO~On#RO~Ow#SO~Ow#TO~Om#oO#U#lO#i#fO#n#gO#r#hO#t#iO#w#jO#{#kO$S#mO$W#nO$Z#pO$]#qO$_#rO$a#sO$c#tO$f#uO$j#vO$l#wO~Ow#xO~P)yO$yPOPWXQWXRWX~O|#zO~O!V#|O~O![$OO~O!f$QO~O!k$SO~O${!`OT!uX~OT$VO~O$z!cOS!{X~OS$YO~O#`$[O~O^$]O~O%Q$`O~OX$cOq!mO~O]!jO`!qOa!kOb!lOh$fO~Ow$hO~P%}Oq!mOw$hO~O]!jO`!qOa!kOb!lOw$iO~O]!jO`!qOa!kOb!lOw$jO~O]!jO`!qOa!kOb!lOw$kO~O]!jO`!qOa!kOb!lOw$lO~O]!jO`!qOa!kOb!lOt$mO~Ow$oO~P/`O!b$pO~O!b$qO~Os$uOt$rOw$tO~Ow$wO~P%}O]!jO`!qOa!kOb!lOt$xO#T${O#U${O~Ow$|O~P0fO]!jO`!qOa!kOb!lOw$}O~Ow%PO~P%}O]!jO`!qOa!kOb!lOw%QO~O]!jO`!qOa!kOb!lOw%RO~O]!jO`!qOa!kOb!lOw%SO~O#k%VO~P)yO#p%YO~P)yO#y%]O~P)yO$P%`O~P)yO$U%cO~P)yO$h%fO~P)yOw%hO~P)yOn%pO~Ow%xO~Ow%yO~Ow%zO~Ow%{O~Ow%|O~O!w%}O~O!}&OO~Ow&PO~O]!jOX_i`_ib_iq_ih_iw_it_i#T_i#U_im_i#i_i#k_i#n_i#r_i#t_i#w_i#{_i$S_i$W_i$Z_i$]_i$__i$a_i$c_i$f_i$j_i$l_i#p_i#y_i$h_ie_i%Q_i#V_i$P_i$U_i~Oa_i~P4uO]!jOa!kOX_iq_ih_iw_it_i#T_i#U_im_i#i_i#k_i#n_i#r_i#t_i#w_i#{_i$S_i$W_i$Z_i$]_i$__i$a_i$c_i$f_i$j_i$l_i#p_i#y_i$h_ie_i%Q_i#V_i$P_i$U_i~O`!qOb!lO~P7`Os&QOXpaqpawpampa#Upa#ipa#npa#rpa#tpa#wpa#{pa$Spa$Wpa$Zpa$]pa$_pa$apa$cpa$fpa$jpa$lpa#kpa#ppa#ypa$Ppa$Upa$hpa~Oa!kO~P4uO]!jO`!qOa!kOb!lOXciqcihciwcitci#Tci#Ucimci#ici#kci#nci#rci#tci#wci#{ci$Sci$Wci$Zci$]ci$_ci$aci$cci$fci$jci$lci#pci#yci$hcieci%Qci#Vci$Pci$Uci~Oq!mOw&SO~Ot$mOw&VO~On&YO~Ot$rOw&[O~On&]O~Oq!mOw&^O~Ot$xOw&aO#T${O#U${O~Oq!mOw&cO~O]!jO`!qOa!kOb!lOm#ha#U#ha#i#ha#k#ha#n#ha#r#ha#t#ha#w#ha#{#ha$S#ha$W#ha$Z#ha$]#ha$_#ha$a#ha$c#ha$f#ha$j#ha$l#ha~O]!jO`!qOa!kOb!lOm#ma#U#ma#i#ma#n#ma#p#ma#r#ma#t#ma#w#ma#{#ma$S#ma$W#ma$Z#ma$]#ma$_#ma$a#ma$c#ma$f#ma$j#ma$l#ma~O]!jO`!qOa!kOb!lOm#qaw#qa#U#qa#i#qa#n#qa#r#qa#t#qa#w#qa#{#qa$S#qa$W#qa$Z#qa$]#qa$_#qa$a#qa$c#qa$f#qa$j#qa$l#qa#k#qa#p#qa#y#qa$P#qa$U#qa$h#qa~O]!jO`!qOa!kOb!lOm#va#U#va#i#va#n#va#r#va#t#va#w#va#y#va#{#va$S#va$W#va$Z#va$]#va$_#va$a#va$c#va$f#va$j#va$l#va~Om#zaw#za#U#za#i#za#n#za#r#za#t#za#w#za#{#za$S#za$W#za$Z#za$]#za$_#za$a#za$c#za$f#za$j#za$l#za#k#za#p#za#y#za$P#za$U#za$h#za~P/`O!b&kO~O!b&lO~Os&nOt$rOm$Yaw$Ya#U$Ya#i$Ya#n$Ya#r$Ya#t$Ya#w$Ya#{$Ya$S$Ya$W$Ya$Z$Ya$]$Ya$_$Ya$a$Ya$c$Ya$f$Ya$j$Ya$l$Ya#k$Ya#p$Ya#y$Ya$P$Ya$U$Ya$h$Ya~Om$[aw$[a#U$[a#i$[a#n$[a#r$[a#t$[a#w$[a#{$[a$S$[a$W$[a$Z$[a$]$[a$_$[a$a$[a$c$[a$f$[a$j$[a$l$[a#k$[a#p$[a#y$[a$P$[a$U$[a$h$[a~P%}Om$^aw$^a#i$^a#n$^a#r$^a#t$^a#w$^a#{$^a$S$^a$W$^a$Z$^a$]$^a$_$^a$a$^a$c$^a$f$^a$j$^a$l$^a#k$^a#p$^a#y$^a$P$^a$U$^a$h$^a~P0fO]!jO`!qOa!kOb!lOm$`aw$`a#U$`a#i$`a#n$`a#r$`a#t$`a#w$`a#{$`a$S$`a$W$`a$Z$`a$]$`a$_$`a$a$`a$c$`a$f$`a$j$`a$l$`a#k$`a#p$`a#y$`a$P$`a$U$`a$h$`a~Om$baw$ba#U$ba#i$ba#n$ba#r$ba#t$ba#w$ba#{$ba$S$ba$W$ba$Z$ba$]$ba$_$ba$a$ba$c$ba$f$ba$j$ba$l$ba#k$ba#p$ba#y$ba$P$ba$U$ba$h$ba~P%}O]!jO`!qOa!kOb!lOm$ea#U$ea#i$ea#n$ea#r$ea#t$ea#w$ea#{$ea$S$ea$W$ea$Z$ea$]$ea$_$ea$a$ea$c$ea$f$ea$h$ea$j$ea$l$ea~O]!jO`!qOa!kOb!lOm$iaw$ia#U$ia#i$ia#n$ia#r$ia#t$ia#w$ia#{$ia$S$ia$W$ia$Z$ia$]$ia$_$ia$a$ia$c$ia$f$ia$j$ia$l$ia#k$ia#p$ia#y$ia$P$ia$U$ia$h$ia~O]!jO`!qOa!kOb!lOm$kaw$ka#U$ka#i$ka#n$ka#r$ka#t$ka#w$ka#{$ka$S$ka$W$ka$Z$ka$]$ka$_$ka$a$ka$c$ka$f$ka$j$ka$l$ka#k$ka#p$ka#y$ka$P$ka$U$ka$h$ka~Ow&sO~Ow&tO~O]!jO`!qOa!kOb!lOe&vO~O]!jO`!qOa!kOb!lOt$paw$pam$pa#U$pa#i$pa#n$pa#r$pa#t$pa#w$pa#{$pa$S$pa$W$pa$Z$pa$]$pa$_$pa$a$pa$c$pa$f$pa$j$pa$l$pa#k$pa#p$pa#y$pa$P$pa$U$pa$h$paX$paq$pa~O]!jO`!qOa!kOb!lO%Q&wO~Ow&{O~P!+YOw&}O~P!+YOt$rOw'PO~Os'QO~O]!jO`!qOa!kOb!lO#V'ROt#Saw#Sa#T#Sa#U#Sam#Sa#i#Sa#n#Sa#r#Sa#t#Sa#w#Sa#{#Sa$S#Sa$W#Sa$Z#Sa$]#Sa$_#Sa$a#Sa$c#Sa$f#Sa$j#Sa$l#Sa#k#Sa#p#Sa#y#Sa$P#Sa$U#Sa$h#Sa~Ot$mOm#ziw#zi#U#zi#i#zi#n#zi#r#zi#t#zi#w#zi#{#zi$S#zi$W#zi$Z#zi$]#zi$_#zi$a#zi$c#zi$f#zi$j#zi$l#zi#k#zi#p#zi#y#zi$P#zi$U#zi$h#zi~Ot$rOm$Yiw$Yi#U$Yi#i$Yi#n$Yi#r$Yi#t$Yi#w$Yi#{$Yi$S$Yi$W$Yi$Z$Yi$]$Yi$_$Yi$a$Yi$c$Yi$f$Yi$j$Yi$l$Yi#k$Yi#p$Yi#y$Yi$P$Yi$U$Yi$h$Yi~On'UO~Oq!mOm$[iw$[i#U$[i#i$[i#n$[i#r$[i#t$[i#w$[i#{$[i$S$[i$W$[i$Z$[i$]$[i$_$[i$a$[i$c$[i$f$[i$j$[i$l$[i#k$[i#p$[i#y$[i$P$[i$U$[i$h$[i~Ot$xO#T${O#U${Om$^iw$^i#i$^i#n$^i#r$^i#t$^i#w$^i#{$^i$S$^i$W$^i$Z$^i$]$^i$_$^i$a$^i$c$^i$f$^i$j$^i$l$^i#k$^i#p$^i#y$^i$P$^i$U$^i$h$^i~Oq!mOm$biw$bi#U$bi#i$bi#n$bi#r$bi#t$bi#w$bi#{$bi$S$bi$W$bi$Z$bi$]$bi$_$bi$a$bi$c$bi$f$bi$j$bi$l$bi#k$bi#p$bi#y$bi$P$bi$U$bi$h$bi~OXpqqpqwpqmpq#Upq#ipq#npq#rpq#tpq#wpq#{pq$Spq$Wpq$Zpq$]pq$_pq$apq$cpq$fpq$jpq$lpq#kpq#ppq#ypq$Ppq$Upq$hpq~P/`Os'XOw!cX%Q!cXm!cX#U!cX#i!cX#n!cX#r!cX#t!cX#w!cX#{!cX$P!cX$S!cX$W!cX$Z!cX$]!cX$_!cX$a!cX$c!cX$f!cX$j!cX$l!cX$U!cX~Ow'ZO%Q&wO~Ow'[O%Q&wO~Ot$rOw']O~Om#}q#U#}q#i#}q#n#}q#r#}q#t#}q#w#}q#{#}q$P#}q$S#}q$W#}q$Z#}q$]#}q$_#}q$a#}q$c#}q$f#}q$j#}q$l#}q~P!+YOm$Rq#U$Rq#i$Rq#n$Rq#r$Rq#t$Rq#w$Rq#{$Rq$S$Rq$U$Rq$W$Rq$Z$Rq$]$Rq$_$Rq$a$Rq$c$Rq$f$Rq$j$Rq$l$Rq~P!+YOt$rOm$Yqw$Yq#U$Yq#i$Yq#n$Yq#r$Yq#t$Yq#w$Yq#{$Yq$S$Yq$W$Yq$Z$Yq$]$Yq$_$Yq$a$Yq$c$Yq$f$Yq$j$Yq$l$Yq#k$Yq#p$Yq#y$Yq$P$Yq$U$Yq$h$Yq~Ot$mOXpyqpywpympy#Upy#ipy#npy#rpy#tpy#wpy#{py$Spy$Wpy$Zpy$]py$_py$apy$cpy$fpy$jpy$lpy#kpy#ppy#ypy$Ppy$Upy$hpy~O]!jO`!qOa!kOb!lOt#Sqw#Sq#T#Sq#U#Sqm#Sq#i#Sq#n#Sq#r#Sq#t#Sq#w#Sq#{#Sq$S#Sq$W#Sq$Z#Sq$]#Sq$_#Sq$a#Sq$c#Sq$f#Sq$j#Sq$l#Sq#k#Sq#p#Sq#y#Sq$P#Sq$U#Sq$h#Sq~O%Q&wOm#}y#U#}y#i#}y#n#}y#r#}y#t#}y#w#}y#{#}y$P#}y$S#}y$W#}y$Z#}y$]#}y$_#}y$a#}y$c#}y$f#}y$j#}y$l#}y~O%Q&wOm$Ry#U$Ry#i$Ry#n$Ry#r$Ry#t$Ry#w$Ry#{$Ry$S$Ry$U$Ry$W$Ry$Z$Ry$]$Ry$_$Ry$a$Ry$c$Ry$f$Ry$j$Ry$l$Ry~Ot$rOm$Yyw$Yy#U$Yy#i$Yy#n$Yy#r$Yy#t$Yy#w$Yy#{$Yy$S$Yy$W$Yy$Z$Yy$]$Yy$_$Yy$a$Yy$c$Yy$f$Yy$j$Yy$l$Yy#k$Yy#p$Yy#y$Yy$P$Yy$U$Yy$h$Yy~O]!jO`!qOa!kOb!lOw!ci%Q!cim!ci#U!ci#i!ci#n!ci#r!ci#t!ci#w!ci#{!ci$P!ci$S!ci$W!ci$Z!ci$]!ci$_!ci$a!ci$c!ci$f!ci$j!ci$l!ci$U!ci~O",
  goto: "7j%TPPPPPPPP%UP%U%f&uPP&uPPP&uPPP&uPPPPPPPP'rP(SPP(VPP(V(gP(wP(VP(VP(V(}P)_P(V)eP)uP(VP(V){PP*]*g*qP(V*wP+XP(VP(VP(VP(V+_P+o+rP(V+uP,V,YP(VP(VP,]PPP(VP(VP(V,eP,uP(VP(VP(VP,{-]P-mP,{-sP.TP,{P,{P,{.ZP.kP,{P,{.q/RP,{/XP/iP,{P,{,{P,{P,{P,{P,{P,{/oP0PP,{P,{P0V0u1]1{2Z2m3P3V3]3c4RPPPPPP4X4iP%U7Ym^OTUVWX[`!Q!T!W!Z!^!g!tdRehijlmnvwxyz{|!k!l!q!r#f#g#h#j#k#q#r#s#t#u#v#w$f$m$p$q${&Q&k&l'Q'XQ!}oQ#OpQ%n#lQ%o#mQ&_$xR'_'R!ufRehijlmnvwxyz{|!k!l!q!r#f#g#h#j#k#q#r#s#t#u#v#w$f$m$p$q${&Q&k&l'Q'Xm!nch!o!t!u#U#X$g$v%O%q%t&o&rR$a!mm]OTUVWX[`!Q!T!W!Z!^!gmTOTUVWX[`!Q!T!W!Z!^!gQ!PTR#y!QmUOTUVWX[`!Q!T!W!Z!^!gQ!SUR#{!TmVOTUVWX[`!Q!T!W!Z!^!gQ!VVR#}!WmWOTUVWX[`!Q!T!W!Z!^!ga&y&W&X&z&|'S'T'`'aa&x&W&X&z&|'S'T'`'aQ!YWR$P!ZmXOTUVWX[`!Q!T!W!Z!^!gQ!]XR$R!^mYOTUVWX[`!Q!T!W!Z!^!gR!bYR$U!bmZOTUVWX[`!Q!T!W!Z!^!gR!eZR$X!eS$y#V$zT&p%r&qm[OTUVWX[`!Q!T!W!Z!^!gQ!f[R$Z!gm#c}#]#^#_#`#a#b#e%U%X%[%_%b%em#]}#]#^#_#`#a#b#e%U%X%[%_%b%eQ%T#]R&d%Um#^}#]#^#_#`#a#b#e%U%X%[%_%b%eQ%W#^R&e%Xm#_}#]#^#_#`#a#b#e%U%X%[%_%b%eQ%Z#_R&f%[m#`}#]#^#_#`#a#b#e%U%X%[%_%b%eQ%^#`R&g%_m#a}#]#^#_#`#a#b#e%U%X%[%_%b%eQ%a#aR&h%bm#b}#]#^#_#`#a#b#e%U%X%[%_%b%eQ%d#bR&i%eQ`OQ!QTQ!TUQ!WVQ!ZWQ!^XQ!g[_!i`!Q!T!W!Z!^!gSQO`SaQ!Oi!OTUVWX[!Q!T!W!Z!^!gQ!ocQ!uh^$b!o!u$g$v%O&o&rQ$g!tQ$v#UQ%O#XQ&o%qR&r%tQ$n!|U&U$n&j'WQ&j%mR'W&uQ&z&WQ&|&XW'Y&z&|'`'aQ'`'SR'a'TQ$s#RW&Z$s&m'O'bQ&m%pQ'O&]R'b'UQ!aYR$T!aQ!dZR$W!dQ$z#VR&`$zQ#e}Q%U#]Q%X#^Q%[#_Q%_#`Q%b#aQ%e#b_%g#e%U%X%[%_%b%eQ&q%rR'V&qm_OTUVWX[`!Q!T!W!Z!^!gQcRQ!seQ!thQ!wiQ!xjQ!zlQ!{mQ!|nQ#UvQ#VwQ#WxQ#XyQ#YzQ#Z{Q#[|Q$^!kQ$_!lQ$d!qQ$e!rQ%i#fQ%j#gQ%k#hQ%l#jQ%m#kQ%q#qQ%r#rQ%s#sQ%t#tQ%u#uQ%v#vQ%w#wQ&R$fQ&T$mQ&W$pQ&X$qQ&b${Q&u&QQ'S&kQ'T&lQ'^'QR'c'Xm#d}#]#^#_#`#a#b#e%U%X%[%_%b%e",
  nodeNames: "⚠ {{ {% {% {% {% InlineComment Template Text }} Interpolation VariableName MemberExpression . PropertyName BinaryExpression contains CompareOp LogicOp AssignmentExpression AssignOp ) ( RangeExpression .. BooleanLiteral empty forloop tablerowloop continue StringLiteral NumberLiteral Filter | FilterName : , Tag TagName %} IfDirective Tag if EndTag endif Tag elsif Tag else UnlessDirective Tag unless EndTag endunless CaseDirective Tag case EndTag endcase Tag when ForDirective Tag for in Parameter ParameterName EndTag endfor TableDirective Tag tablerow EndTag endtablerow Tag break Tag continue Tag cycle Comment Tag comment CommentText EndTag endcomment RawDirective Tag raw RawText EndTag endraw Tag echo Tag render RenderParameter with for as Tag include Tag assign CaptureDirective Tag capture EndTag endcapture Tag increment Tag decrement Tag liquid IfDirective Tag if EndTag endif UnlessDirective Tag unless EndTag endunless Tag elsif Tag else CaseDirective Tag case EndTag endcase Tag when ForDirective Tag EndTag endfor TableDirective Tag tablerow EndTag endtablerow Tag break Tag Tag cycle Tag echo Tag render Tag include Tag assign CaptureDirective Tag capture EndTag endcapture Tag increment Tag decrement",
  maxTerm: 188,
  nodeProps: [
    ["closedBy", 1, "}}", -4, 2, 3, 4, 5, "%}", 22, ")"],
    ["openedBy", 9, "{{", 21, "(", 39, "{%"],
    ["group", -12, 11, 12, 15, 19, 23, 25, 26, 27, 28, 29, 30, 31, "Expression"]
  ],
  skippedNodes: [0, 6],
  repeatNodeCount: 11,
  tokenData: ")T~RkXY!vYZ!v]^!vpq!vqr#Xrs#duv$Uwx$axy$|yz%R{|%W|}&r}!O&w!O!P'T!Q![&a![!]'e!^!_'j!_!`'r!`!a'j!c!}'z#R#S'z#T#o'z#p#q(s#q#r(x%W;'S'z;'S;:j(m<%lO'z~!{S$}~XY!vYZ!v]^!vpq!v~#[P!_!`#_~#dOa~~#gUOY#dZr#drs#ys;'S#d;'S;=`$O<%lO#d~$OOn~~$RP;=`<%l#d~$XP#q#r$[~$aOw~~$dUOY$aZw$awx#yx;'S$a;'S;=`$v<%lO$a~$yP;=`<%l$a~%ROf~~%WOe~P%ZQ!O!P%a!Q![&aP%dP!Q![%gP%lRoP!Q![%g!g!h%u#X#Y%uP%xR{|&R}!O&R!Q![&XP&UP!Q![&XP&^PoP!Q![&XP&fSoP!O!P%a!Q![&a!g!h%u#X#Y%u~&wOt~~&zRuv$U!O!P%a!Q![&a~'YQ]S!O!P'`!Q![%g~'eOh~~'jOs~~'oPa~!_!`#_~'wPd~!_!`#__(TW^WvQ%QT}!O'z!Q!['z!c!}'z#R#S'z#T#o'z%W;'S'z;'S;:j(m<%lO'z_(pP;=`<%l'z~(xOq~~({P#q#r)O~)TOX~",
  tokenizers: [base, raw, comment, inlineComment, 0, 1, 2, 3],
  topRules: { "Template": [0, 7] },
  specialized: [{ term: 186, get: (value) => spec_identifier[value] || -1 }, { term: 38, get: (value) => spec_TagName[value] || -1 }],
  tokenPrec: 0
});
function completions(words, type) {
  return words.split(" ").map((label) => ({ label, type }));
}
var Filters = completions("abs append at_least at_most capitalize ceil compact concat date default divided_by downcase escape escape_once first floor join last lstrip map minus modulo newline_to_br plus prepend remove remove_first replace replace_first reverse round rstrip size slice sort sort_natural split strip strip_html strip_newlines sum times truncate truncatewords uniq upcase url_decode url_encode where", "function");
var Tags = completions("cycle comment endcomment raw endraw echo increment decrement liquid if elsif else endif unless endunless case endcase for endfor tablerow endtablerow break continue assign capture endcapture render include", "keyword");
var Expressions = completions("empty forloop tablerowloop in with as", "keyword");
var forloop = completions("first index index0 last length rindex", "property");
var tablerowloop = completions("col col0 col_first col_last first index index0 last length rindex rindex0 row", "property");
function findContext(context) {
  var _a;
  let { state, pos } = context;
  let node = syntaxTree(state).resolveInner(pos, -1).enterUnfinishedNodesBefore(pos);
  let before = ((_a = node.childBefore(pos)) === null || _a === void 0 ? void 0 : _a.name) || node.name;
  if (node.name == "FilterName")
    return { type: "filter", node };
  if (context.explicit && before == "|")
    return { type: "filter" };
  if (node.name == "TagName")
    return { type: "tag", node };
  if (context.explicit && before == "{%")
    return { type: "tag" };
  if (node.name == "PropertyName" && node.parent.name == "MemberExpression")
    return { type: "property", node, target: node.parent };
  if (node.name == "." && node.parent.name == "MemberExpression")
    return { type: "property", target: node.parent };
  if (node.name == "MemberExpression" && before == ".")
    return { type: "property", target: node };
  if (node.name == "VariableName")
    return { type: "expression", from: node.from };
  let word = context.matchBefore(/[\w\u00c0-\uffff]+$/);
  if (word)
    return { type: "expression", from: word.from };
  if (context.explicit && node.name != "CommentText" && node.name != "StringLiteral" && node.name != "NumberLiteral" && node.name != "InlineComment")
    return { type: "expression" };
  return null;
}
function resolveProperties(state, node, context, properties) {
  let path = [];
  for (; ; ) {
    let obj = node.getChild("Expression");
    if (!obj)
      return [];
    if (obj.name == "forloop") {
      return path.length ? [] : forloop;
    } else if (obj.name == "tablerowloop") {
      return path.length ? [] : tablerowloop;
    } else if (obj.name == "VariableName") {
      path.unshift(state.sliceDoc(obj.from, obj.to));
      break;
    } else if (obj.name == "MemberExpression") {
      let name = obj.getChild("PropertyName");
      if (name)
        path.unshift(state.sliceDoc(name.from, name.to));
      node = obj;
    } else {
      return [];
    }
  }
  return properties ? properties(path, state, context) : [];
}
function liquidCompletionSource(config = {}) {
  let filters = config.filters ? config.filters.concat(Filters) : Filters;
  let tags2 = config.tags ? config.tags.concat(Tags) : Tags;
  let exprs = config.variables ? config.variables.concat(Expressions) : Expressions;
  let { properties } = config;
  return (context) => {
    var _a;
    let cx = findContext(context);
    if (!cx)
      return null;
    let from = (_a = cx.from) !== null && _a !== void 0 ? _a : cx.node ? cx.node.from : context.pos;
    let options;
    if (cx.type == "filter")
      options = filters;
    else if (cx.type == "tag")
      options = tags2;
    else if (cx.type == "expression")
      options = exprs;
    else
      options = resolveProperties(context.state, cx.target, context, properties);
    return options.length ? { options, from, validFor: /^[\w\u00c0-\uffff]*$/ } : null;
  };
}
var closePercentBrace = EditorView.inputHandler.of((view, from, to, text2) => {
  if (text2 != "%" || from != to || view.state.doc.sliceString(from - 1, to + 1) != "{}")
    return false;
  view.dispatch(view.state.changeByRange((range) => ({
    changes: { from: range.from, to: range.to, insert: "%%" },
    range: EditorSelection.cursor(range.from + 1)
  })), {
    scrollIntoView: true,
    userEvent: "input.type"
  });
  return true;
});
function directiveIndent(except) {
  return (context) => {
    let back = except.test(context.textAfter);
    return context.lineIndent(context.node.from) + (back ? 0 : context.unit);
  };
}
var tagLanguage = LRLanguage.define({
  name: "liquid",
  parser: parser.configure({
    props: [
      styleTags({
        "cycle comment endcomment raw endraw echo increment decrement liquid in with as": tags.keyword,
        "empty forloop tablerowloop": tags.atom,
        "if elsif else endif unless endunless case endcase for endfor tablerow endtablerow break continue": tags.controlKeyword,
        "assign capture endcapture": tags.definitionKeyword,
        "contains": tags.operatorKeyword,
        "render include": tags.moduleKeyword,
        VariableName: tags.variableName,
        TagName: tags.tagName,
        FilterName: tags.function(tags.variableName),
        PropertyName: tags.propertyName,
        CompareOp: tags.compareOperator,
        AssignOp: tags.definitionOperator,
        LogicOp: tags.logicOperator,
        NumberLiteral: tags.number,
        StringLiteral: tags.string,
        BooleanLiteral: tags.bool,
        InlineComment: tags.lineComment,
        CommentText: tags.blockComment,
        "{% %} {{ }}": tags.brace,
        "( )": tags.paren,
        ".": tags.derefOperator,
        ", .. : |": tags.punctuation
      }),
      indentNodeProp.add({
        Tag: delimitedIndent({ closing: "%}" }),
        "UnlessDirective ForDirective TablerowDirective CaptureDirective": directiveIndent(/^\s*(\{%-?\s*)?end\w/),
        IfDirective: directiveIndent(/^\s*(\{%-?\s*)?(endif|else|elsif)\b/),
        CaseDirective: directiveIndent(/^\s*(\{%-?\s*)?(endcase|when)\b/)
      }),
      foldNodeProp.add({
        "UnlessDirective ForDirective TablerowDirective CaptureDirective IfDirective CaseDirective RawDirective Comment"(tree) {
          let first = tree.firstChild, last = tree.lastChild;
          if (!first || first.name != "Tag")
            return null;
          return { from: first.to, to: last.name == "EndTag" ? last.from : tree.to };
        }
      })
    ]
  }),
  languageData: {
    commentTokens: { line: "#" },
    indentOnInput: /^\s*{%-?\s*(?:end|elsif|else|when|)$/
  }
});
var baseHTML = html();
function makeLiquid(base2) {
  return tagLanguage.configure({
    wrap: parseMixed((node) => node.type.isTop ? {
      parser: base2.parser,
      overlay: (n) => n.name == "Text" || n.name == "RawText"
    } : null)
  }, "liquid");
}
var liquidLanguage = makeLiquid(baseHTML.language);
function liquid(config = {}) {
  let base2 = config.base || baseHTML;
  let lang = base2.language == baseHTML.language ? liquidLanguage : makeLiquid(base2.language);
  return new LanguageSupport(lang, [
    base2.support,
    lang.data.of({ autocomplete: liquidCompletionSource(config) }),
    base2.language.data.of({ closeBrackets: { brackets: ["{"] } }),
    closePercentBrace
  ]);
}
export {
  closePercentBrace,
  liquid,
  liquidCompletionSource,
  liquidLanguage
};
//# sourceMappingURL=dist-UNFR7NAT.js.map
